这是以前写程序碰到过的一个问题,就是我有一个任务A需要能及时响应,这个任务优先级最高。
他50Hz频率来和我通信,但是这50次里可能只有一次是问我,也可能是两次,我需要每次去判断地址是不是我的地址。通信频率是固定的,每次通信间隔20ms。
另一个任务B是计算,这个任务不是那么紧急,算慢一点也没有问题。
我开始让A实现的方法是用中断去实现,B在main函数中去一直计算,这也是我们常用的方法。
但是我发现A用中断实现有点麻烦,于是我想能不能把A放在main函数中一直去执行,只要发现对方是问我了,
我就去响应,但是一旦不是问的我,我就转头去执行任务B,因为我在下一次通信到来前还有20ms(实际不够20ms)的时间去执行B,
我用定时器定个时间,比如说19ms,如果19ms时间到了,我再切换到任务A去,准备响应A。
我在想这种程序结构怎么实现呢?原来我想的是用任务切换的方法,但是实现起来也很麻烦,不仅涉及到汇编,还有内核的状态等等。
不知道有没有高人,有没有什么其他好的方法呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
通讯模块一般都是中断接收 然后收到的数据先统一放到缓存(数组)中,固定一段时间来统一解析回应,这样中断压力小也不会丢帧
任务机制可以很简单的用定时器来完成
比如你这个 可以建立一个1ms的定时间器 时间到{time++; handle = 0;//任务执行标志清空}
if(time > 20 )&& (handle == 0 ){ 统一处理协议数据并回复 time =0 ,handle = 1;//任务执行标志置位}
if (handle == 0 ){计算数值 handle = 1; 这能控制1ms只运算一次 一直算占用时序}
一周热门 更多>