scmRTOS - RULEZZZ FOREVER! óÐÁÓÉÂÏ, Harry Zhurov !
÷ÓÅ pÁÎÅÅ ÔÅÓÔÉpÏ×ÁÎÎÙÅ RTOS ÎÅp×ÎÏ ËÕpÑÔ × ÓÔÏpÏÎËÅ.
óËÁÞÁÌ AVR-ÐÏpÔ ÄÌÑ GCC, ÐÏÞÉÔÁÌ ÍÁÎÕÁÌ, pÁÂÏÞÉÊ ÐpÏÅËÔ ÐÏpÔÉpÏ×ÁÌ ÐÏÄ ÓÁÂÖ.
äÌÑ ÕÄÏÂÓÔ×Á ÎÁÐÉÓÁÌ ÄÅÆÉÎÉÃÉÀ: #define PROCESS(_name,_stack_size,_prior) DefineProcess(_name,_stack_size);\ _name proc##_prior(pr##_prior);
äÏÂÁ×ÉÌ Ë ÂÁÔÎÉËÕ-ÓÂÏpÝÉËÕ: set TARGET_OS=SCM_RTOS ... CFLAGS=%CFLAGS% -D%TARGET_OS% ...
ðÏÄËÏppÅËÔÉpÏ×ÁÌ ÏÂpÁÂÏÔÞÉËÉ ÐpÅpÙ×ÁÎÉÊ ×Ï ×ÓÅÈ ÓÏpÃÁÈ. HÁÐpÉÍÅp:
#if defined SCM_RTOS #include <scmRTOS.h>
extern OS::TEventFlag adc_flag; #endif
volatile unsigned int adc_result;
//************************************************ // ïÂÒÁÂÏÔÞÉË ÐÒÅÒÙ×ÁÎÉÑ áãð //************************************************ #if defined SCM_RTOS OS_INTERRUPT void SIG_ADC () { OS_ISR_ENTER(); #else SIGNAL (SIG_ADC) { #endif
unsigned char l = ADCL; unsigned char h = ADCH; adc_result = MAKEWORD(h,l);
#if defined SCM_RTOS adc_flag.Signal(); OS_ISR_EXIT(); #endif }
HÁ ÞÅÍ ËpÕÔÉÔÓÑ:
ATmega16 ÎÁ 16MHz, DS1621, DS1307, LCD 16x4, UART ÎÁ 115200(Ä×Á ÐpÏÇpÁÍÍÎÙÈ ÂÕÆÅpÁ FIFO ÐÏ 64 ÂÁÊÔÁ), ×ÓÔpÏÅÎÎÙÊ áãð, ÌÁÍÐÏÞËÁ, 4-È pÁÚpÑÄÎÙÊ LED ÄÉÓÐÌÅÊ (ÄÉÎÁÍÉÞÅÓËÏÅ ÕÐpÁ×ÌÅÎÉÅ).
ðÏÓÔÏÑÎÎÏ ÏÂÎÏ×ÌÑÀÔÓÑ ÔÅËÓÔÏ×ÙÅ ÂÕÆÅpÁ ÄÌÑ ÏÔÏÂpÁÖÅÎÉÑ ÎÁ LCD (ÐÏËÁÚÁÎÉÑ ÔÅpÍÏÍÅÔpÁ, ÞÁÓÏ×, ËÁÌÅÎÄÁpÑ, ÚÎÁÞÅÎÉÅ áãð, ×ÓÅ ÞÅpÅÚ itoa). ïÛÉÂÏË ÐpÉ pÁÂÏÔÅ Ó TWI ÎÅÔ.
äÌÑ ÞÉÓÔÏÔÙ ÜËÓÐÅpÉÍÅÎÔÁ ÕÁpÔ ÎÅÐpÅpÙ×ÎÏ ÐpÉÎÉÍÁÅÔ ËÏÍÁÎÄÕ Ó ÔÅpÍÉÎÁÌËÉ (pÁÂÏÔÁÅÔ ÍÁËpÏÓ) É × ÏÔ×ÅÔ ÐÏÓÙÌÁÅÔ ÄÌÉÎÎÙÅ ÐÏÓÙÌËÉ ÐÏ 250 ÂÁÊÔ ÔÅËÓÔÁ - ÏÛÉÂÏË ÎÅÔ.
íÅpÃÁÎÉÅ LED ÄÉÓÐÌÅÑ ÎÅ ÚÁÍÅÔÎÏ, ×ÏÏÂÝÅ. ðpÁ×ÄÁ, ÞÁÓÔÏÔÕ pÅÇÅÎÅpÁÃÉÉ ÎÅ ÉÚÍÅpÑÌ.
òÁÄÉ ÚÁÇpÕÚËÉ ÐpÏÃÁ ÐpÉËpÕÔÉÌ ÉÚ ÓÔÁpÏÇÏ ÐpÏÅËÔÁ ÍÅÄÉÁÎÎÙÊ ÆÉÌØÔp 7-ÇÏ ÐÏpÑÄËÁ É ËÏÍÐÁpÁÔÏp.
é ×ӣ ÜÔÏ ÓÞÁÓÔØÅ × ÐÑÔÉ ÔpÅÄÁÈ...
óËÏÌØËÏ "ÓÞÁÓÔØÑ" ÜÔÏ ÏÔÌÁÖÉ×ÁÔØ × ÏÄÎÏÍ main... ÔÕÛÉ Ó×ÅÔ - ËÉÄÁÊ ÇpÁÎÁÔÕ...
Alex