mksu 发表于 2019-3-16 22:39:30

请问多任务运行时,如何确保任务不锁死CPU~~~

本帖最后由 mksu 于 2019-3-16 22:48 编辑

需求: 以前有一套在MCU 运行的程序,当时没有系统 跑的就是用一个while 进行无限的轮询 一大堆事。
         现在切换到 freertos 中,需要将整个while 中的程序 移植过来。

做法: 在 freertos中 新建了一个 task, 然后将之前while的 程序放在 task 里面(但这时freertos 里面已经是存在其他 多个task的)

现象:
          1.移植进来之后,系统一运行就死机。
          2.屏蔽掉新建的task ,系统就正常运行。
          3.移植进来的代码中,减少做的事,越少系统就越稳定,越多系统就死得越快
          4.当整个task 什么都不做的时候,系统也是可以正常运行的。
          5.即便将新建的task 优先级设置 比其他 task 低, 同样存在死机的现象

最后发现,在新建的task 中添加 一个vTaskDelay(1),系统居然正常运行起来。。。。

分析原因 : 在freertos中如果存在多个任务同时运行,其中有些任务又是实时性很高的,稍微等候可能就会 造成系统死机。

问题 :
          1. 为什么设置低优先级 仍然没有 效果?
          2.多任务时 如何确保单个 任务不锁死CPU 呢?
          3. 如果有一个任务 有一件事的前后 不允许被 打断 ,这时如果挂起(或者告诉) 其他任务(别过来打断呢)




byccc 发表于 2019-3-16 22:50:46

你的任务框架设计的不给力。
1、看门狗监测各个任务
2、优先考虑设置高优先级,然后任务锁,然后开关中断

mksu 发表于 2019-3-17 09:37:48

byccc 发表于 2019-3-16 22:50
你的任务框架设计的不给力。
1、看门狗监测各个任务
2、优先考虑设置高优先级,然后任务锁,然后开关中断

1、看门狗监测各个任务                                             
=====>>>>
检测?? 新建的task 不是 卡住了,是正常运行的~~~看门狗 加在哪?

2、优先考虑设置高优先级,然后任务锁,然后开关中断
======>>>>设置优先级 没有效果,即便新建的task 优先级是低 也会存在问题!
任务锁 是什么??

3. 哪为什么 加了个taskdelay 就可以了呢?

byccc 发表于 2019-3-17 10:09:58

1、喂狗要专门开一个任务,其他任务都喂它。 2、 度娘。 3、你自己的程序,你问我,我问谁。

爱恋之燕 发表于 2019-3-17 11:15:36

新建的task的优先级是不是最高的?每个任务必须要调用vTaskDelay,以释放CPU,否则这个task就会一直抢占CPU,无法进行任务切换

mksu 发表于 2019-3-17 15:31:36

爱恋之燕 发表于 2019-3-17 11:15
新建的task的优先级是不是最高的?每个任务必须要调用vTaskDelay,以释放CPU,否则这个task就会一直抢占CPU ...

没有,我新建的task 优先级跟其他现有task 是一致的! 甚至我将它降低过,也没有效果!


每个任务必须要调用vTaskDelay,以释放CPU====》

如果是这样,请vTaskDelay(n) 中的 n应该使用多少呢?
以什么基准 判断 n是大了还是 小了呢?

byccc 发表于 2019-3-17 18:21:52

mksu 发表于 2019-3-17 15:31
没有,我新建的task 优先级跟其他现有task 是一致的! 甚至我将它降低过,也没有效果!




还是项目经验太少,多做些应用才行。

纠结延迟几个n是什么鬼,实时性的应该采用事件触发方式,而不是周期性轮询
页: [1]
查看完整版本: 请问多任务运行时,如何确保任务不锁死CPU~~~