Цитата(zцner @ May 26 2013, 19:10)

посмотрите в сторону Protothreads - там есть неблокирующее ожидание условий.
Скорее всего у меня тож самое, только без макросов в которые завернут С код. Да и ссылками на функции я не оперирую, у меня просто бесконечный цикл, типо так:
Код
main()
{
while(1)
{
MSC1205_Task();
SIM900_Task();
IR_Task();
TimeTask();
PRESS_Task();
}
Еще я создаю централизованную систему обмена сообщениями между отдельными модулями, вот например:
Код
SIM900_Task()
{
char power;
char dtmfStD;
char dtmfCode;
MESSAGE message;
// удаление ранее отправленных сообщений если таковые имелись
DeleteMessage( MESSAGE_SIM900_DTMF );
DeleteMessage( MESSAGE_SIM900_RING );
// ....
// Посылка новых сообщений если произошло событие
if( power && dtmfStD )
{
SendMessage( MESSAGE_SIM900_DTMF, dtmfCode );
}
if( sim900_response_char == 0x32 ) // 2 -ring
{
sim900_response_char = 0x00;
SendMessage( MESSAGE_SIM900_RING, 0 );
}
// прием сообщений от других модулей
message = GetMessage( MESSAGE_SIM900_DISCONNECT );
if( message.message != MESSAGE_NO )
{
dtmfOn = 0;
str32[0] = 0x00;
strcatpgm2ram( str32, ( void *)"ATH" );
SIM900_SendATComand( str32 );
}