程序结构如何安排求助

2019-12-13 18:27发布

这是以前写程序碰到过的一个问题,就是我有一个任务A需要能及时响应,这个任务优先级最高。
他50Hz频率来和我通信,但是这50次里可能只有一次是问我,也可能是两次,我需要每次去判断地址是不是我的地址。通信频率是固定的,每次通信间隔20ms。
另一个任务B是计算,这个任务不是那么紧急,算慢一点也没有问题。
我开始让A实现的方法是用中断去实现,B在main函数中去一直计算,这也是我们常用的方法。
但是我发现A用中断实现有点麻烦,于是我想能不能把A放在main函数中一直去执行,只要发现对方是问我了,
我就去响应,但是一旦不是问的我,我就转头去执行任务B,因为我在下一次通信到来前还有20ms(实际不够20ms)的时间去执行B,
我用定时器定个时间,比如说19ms,如果19ms时间到了,我再切换到任务A去,准备响应A。
我在想这种程序结构怎么实现呢?原来我想的是用任务切换的方法,但是实现起来也很麻烦,不仅涉及到汇编,还有内核的状态等等。
不知道有没有高人,有没有什么其他好的方法呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
huangqi412
1楼-- · 2019-12-14 16:23
A很简短就中断   很长就人工切片执行     一般就直接主循环。
zhang0352505
2楼-- · 2019-12-14 21:36
 精彩回答 2  元偷偷看……
大傻师
3楼-- · 2019-12-15 01:08
感觉还是想办法塞到中断里比较合适,大概是什么原因不方便放中断?
shower.xu
4楼-- · 2019-12-15 03:17
B任务碎片化,切成很多时间片,每个时间片开始时查询一次A任务标志,A任务的标志在通讯信号来的中断里置位。
fnems
5楼-- · 2019-12-15 07:18
LZ需要的功能是"延续性运行",continuation。常规解是使用实时(嵌入式)系统RTOS。简单解LZ自己说的中断加main loop。还有个简单解是借助协程 co routine,比如protothread库。
fnems
6楼-- · 2019-12-15 08:36
之前在学校里做肢体机器人控制器,用的cm内核的微处理器,使用protothread加上一点数据结构和简单的有向图算法(主要是处理任务之间由于依赖关系而带来的保障先后顺序需求),动态调度十多个任务都是可以顺利实现的

一周热门 更多>