当前位置: 代码迷 >> 单片机 >> ucos 中执行从机modbus任务,希望利用延时实现执行完成后的任务切换,该如何处理
  详细解决方案

ucos 中执行从机modbus任务,希望利用延时实现执行完成后的任务切换,该如何处理

热度:456   发布时间:2016-04-28 14:51:47.0
ucos 中执行从机modbus任务,希望利用延时实现执行完成后的任务切换
请问怎么做(延时函数放置位置,modbus任务优先级设置)?


如果这么写:
for(;;)
{
( void )eMBPoll(  );
//OSTimeDly(1); //让出CPU
}

1.当主机请求到来时,eMBPoll()是靠一遍一遍执行而实现不同状态的进行的(空闲,接受完,执行,发送)。延时放在这里将会延长执行部分的时间。
2.如果modbus任务优先级较低,则等待时间将超过1ms。

所以延时应该放在哪里呢?或者除了延时还有别的方法?
------解决思路----------------------
1. 设置处理函数的任务为最高。
2. 空闲任务扫描最重要的外界输入。
3. 如果需要,可以在运行中改变某个任务的优先级。
4. 商业化不收费的freeRTOS,可以满足常规需求。

------解决思路----------------------
系统设计结构这么改

把MODBUS的优先级提高,采用邮箱驱动

中断收消息,把消息通过邮箱发给MODBUS协议处理任务

其它的数据采集,控制优先级低,常规轮循即可
  相关解决方案