Скрипач, пророк (14.09.2015 15:54 - 16:02, просмотров: 500) ответил SciFi на Спорить не стану, ибо не понимаю, что эта хреновина делает. Имена переменных, пардон за резкость, мне мало о чём говорят :-)
Специально для вас, еще более простой вариант (с картинками с комментариями)
#include "OS_base.h"
#include "pt.h"
// По единице на входе номер 'in' переключает состояние на выходе номер 'out'
char Trigger(char in, char out){
static struct pt P[5];
struct pt *pt = P+in;
PT_BEGIN(pt);
PT_WAIT_UNTIL(pt, IOPort & _BV(in)); // _BV(in) - битовая маска бита номер 'in'
if(IOPort & _BV(out)){
_Off(out);
}else{
_On(out);
};
PT_WAIT_WHILE(pt, IOPort & _BV(in));
PT_END(pt);
};
int main(void){
while(1){ sleep_cpu(); wdt_reset(); net_process_data(); os_ai(); os_di();
Trigger(0, 8); Trigger(1, 9); Trigger(2,10);
Trigger(3,11); Trigger(4,12);
} }
... но не любой ценой.