ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
1440518 Топик полностью
vesago (03.06.2024 11:26, просмотров: 128) ответил vesago на Друзья, собираю проект, в котором кроме всего прочего обмен с хостом через 3g модем. Я как-то не любитель ртос. Не скажу, что совсем не знаком - мало, но опыт применения есть. Сейчас автомат взаимодействия с модемом здоровый какой-то. Физически геморно простыню листать (15 дюймовый ноут :)). Может перевести все под freertos? Упростит ли это или навес из очередей, мьютексов, вопросов с синхронизацией задач сведёт на нет упрощение?
Ребята, спасибо - протопотоки божественная штука. Начал накидывать - по мне приятно работать. Решил все равно автомат зарядить на три состояния - сброс, инициализацию, работу. В каждом состоянии крутится протопоток, который реализует соответствующую функцию. Вот, к примеру, как выглядит сброс 

PT_THREAD(PT_GSM_Reset(struct pt *pt))

{

PT_BEGIN(pt);

while(1) {

//

gsm.online = 0;

//

GSM_Timer_Set((u16_t*)&gsm.wdt_timer, GSM_TIMEOUT_2S);

//

do{

Gsm_RX_Clr();

USART1_Sendstr((void*)&SET_ATE0);

GSM_Timer_Set((u16_t*)&gsm.timer, GSM_TIMEOUT_CMD);

PT_WAIT_UNTIL(pt, ((pt->res = Search_Template(OK)) != NOT_DATA_FIND) ||

GSM_Timer_Expired((u16_t*)&gsm.timer));

}while(GSM_Timer_Not_Expired((u16_t*)&gsm.wdt_timer) && (pt->res == NOT_DATA_FIND));

if((GSM_Timer_Expired((u16_t*)&gsm.wdt_timer) == 0) && (pt->res != NOT_DATA_FIND)) {

GSM_Switch_State(GSM_STATE_INIT);

PT_YIELD(pt);

}

#ifdef GSM_HW_RESET

GSM_Pwrkey_Init();

GSM_Pwrkey_ON();

GSM_Timer_Set((u16_t*)&gsm.timer, GSM_TIMEOUT_2S);

PT_WAIT_UNTIL(pt, GSM_Timer_Expired((u16_t*)&gsm.timer));

GSM_Pwrkey_OFF();

GSM_Timer_Set((u16_t*)&gsm.timer, GSM_TIMEOUT_2S);

PT_WAIT_UNTIL(pt, GSM_Timer_Expired((u16_t*)&gsm.timer));

#else

Gsm_RX_Clr();

USART1_Sendstr((void*)&SET_AT_RESET);

GSM_Timer_Set((u16_t*)&gsm.timer, GSM_TIMEOUT_2S);

PT_WAIT_UNTIL(pt, GSM_Timer_Expired((u16_t*)&gsm.timer));

#endif

}

PT_END(pt);

}