ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
427044 Топик полностью
abivan (24.07.2013 14:38, просмотров: 539) ответил SciFi на Давно холиваров не было. Как насчёт RTOS vs Main Loop? Поделитесь практическим опытом. Сам RTOS не применял, да и не очень хочется.
я не представлюю для себя программирования без ртос. К хорошему быстро привыкаешь. Использую ртос всегда и везде для задачи любой сложности. Кооперативка не требует много ресурсов. вот примерчик на кооперативной оси MsgRqX.PtCmd=PT_DEVICE_DELETE; MsgRqX.p=(ptr)PT_ID_ALL_DEVICE_DELETE; IUARTRq=FALSE; OS_Queue_Send(MSGQ_RQBUFF_P, &MsgRqX); // помещаю сообщение в очередь(очередь FIFO сервис OS ) IUARTRq=TRUE; //генерю прерывание внешнему МК /* далее внешнее МК шлет запрос и другая задача достает из очереди сообщение и отправляет его другому МК*/ OS_Smsg_Send(MSG_Display_P, (OST_SMSG)DISPLAY_RF_DEL);// команда дисплею отобразить нужный режим. OS_Delay(TIME_3S); OS_Smsg_Send(MSG_Display_P, (OST_SMSG)DISPLAY_RF_ENDOFDEL);// команда дисплею отобразить нужный режим. OS_Delay(TIME_3S); OS_Smsg_Send(MSG_Display_P, (OST_SMSG)DISPLAY_RF_OFF); времени для реализации нового режима ушло ровно 5 минут. вот задача заставки еще 5 минут написание бегущая строка на 3-х диодах void TaskSplashScreen(void){ static BYTE i; for(i=0; i<3; i++) { Led3G=1;Led2G=0;Led1G=0; OS_Delay(TIME_50mS); Led3G=0;Led2G=1;Led1G=0; OS_Delay(TIME_50mS); Led3G=0;Led2G=0;Led1G=1; OS_Delay(TIME_50mS); Led3G=0;Led2G=0;Led1G=0; OS_Delay(TIME_250mS); } Led1Y=1;Led2Y=1;Led3Y=1; OS_Delay(TIME_500mS); Led1Y=0;Led2Y=0;Led3Y=0; OS_Delay(TIME_500mS); OS_Task_Replace (TaskDisplay_Prio, TaskDisplay); } после того как она отработала перезагружаю ее другой рабочей задачей Так что нравится суперлуп в добрый путь. И попробуйте тоже самое написать на нем хотяб за полчаса.