Цитата
Покажите код штоле ;-)
Вот выдрал простой кусочек из реального старинного проекта "выходного дня" - всего-лишь блинк, который пришлось вставлять в программку вместо обычного ожидающего
Код
void BlinkLed(unsigned short Blink_Count, unsigned short LED_on_ms, unsigned short LED_off_ms)
дабы добавить к имевшейся задаче ещё парочку параллельно выполняющихся. Всё это фунциклирует

без жесткого риалтайма.
Код
unsigned short clock(void){
unsigned short tms;
__enter_critical();
tms = xtimer_ms;
__exit_critical();
return (tms);
}
unsigned short clock_Elapsed(unsigned short tstart){
return ((unsigned short)( clock() - tstart));
}
static unsigned short BCount;
static unsigned short Bon_ms;
static unsigned short Boff_ms;
static unsigned short Bts_ms;
void xBlinkLed_Start(unsigned short Blink_Count, unsigned short LED_on_ms, unsigned short LED_off_ms){
BCount = Blink_Count;
Bon_ms = LED_on_ms;
Boff_ms = LED_off_ms;
Bts_ms = clock();
LED_OFF();
}
bool xBlinkLed_Done(bool forceoff){
static unsigned char st = 0;
if(forceoff){
BCount = 0;
st = 0;
LED_OFF();
}
if(BCount){
switch(st){
case 0:
if(clock_Elapsed(Bts_ms) < Boff_ms)break;
LED_ON(); Bts_ms = clock();
st = 1;
case 1: if(clock_Elapsed(Bts_ms) < Bon_ms)break;
LED_OFF(); Bts_ms = clock();
BCount -= 1;
st = 0;
break;
default:
st = 0;
break;
}
}
if(BCount == 0){ return true;}
return false;
}
Тут в явном виде хоть и не представлены именно прототриды, но зато неплохо выражены способы применения и видны накладные