硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3118|回复: 6
收起左侧

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

[复制链接]

5

主题

10

回帖

25

积分

新手上路

积分
25
发表于 2019-3-16 22:39:30 | 显示全部楼层 |阅读模式
本帖最后由 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. 如果有一个任务 有一件事的前后 不允许被 打断 ,这时如果挂起(或者告诉) 其他任务(别过来打断呢)




回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-3-16 22:50:46 | 显示全部楼层
你的任务框架设计的不给力。
1、看门狗监测各个任务
2、优先考虑设置高优先级,然后任务锁,然后开关中断
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

5

主题

10

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-3-17 09:37:48 | 显示全部楼层
byccc 发表于 2019-3-16 22:50
你的任务框架设计的不给力。
1、看门狗监测各个任务
2、优先考虑设置高优先级,然后任务锁,然后开关中断

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

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

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

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-3-17 10:09:58 来自手机 | 显示全部楼层
1、喂狗要专门开一个任务,其他任务都喂它。 2、 度娘。 3、你自己的程序,你问我,我问谁。
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-3-17 11:15:36 | 显示全部楼层
新建的task的优先级是不是最高的?每个任务必须要调用vTaskDelay,以释放CPU,否则这个task就会一直抢占CPU,无法进行任务切换
回复

使用道具 举报

5

主题

10

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2019-3-17 15:31:36 | 显示全部楼层
爱恋之燕 发表于 2019-3-17 11:15
新建的task的优先级是不是最高的?每个任务必须要调用vTaskDelay,以释放CPU,否则这个task就会一直抢占CPU ...

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


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

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

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-3-17 18:21:52 | 显示全部楼层
mksu 发表于 2019-3-17 15:31
没有,我新建的task 优先级跟其他现有task 是一致的! 甚至我将它降低过,也没有效果!

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

纠结延迟几个n是什么鬼,实时性的应该采用事件触发方式,而不是周期性轮询
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 07:06 , Processed in 0.165758 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表