硬汉嵌入式论坛

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

[μCOS-III] task queue 任务内消息队列总是满,求原因。

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2023-10-13 10:04:59 | 显示全部楼层 |阅读模式
大家好,在CAN中断的回调中
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan )  使用了 OSTaskQPost 压入数据
然后在任务A中使用 OSTaskQPend 取出

在压力测试时,发现接收了13W多帧后 Task queue 会满,,任务A,挂了不切换了。但其它任务还是正常。
任务A的 task stack 使用是 4.10%
其它任务的 task stack 使用最高是  58.2%

ucosiii版本  Version : V3.08.01

请教解决方法。谢谢
task queue.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-10-13 10:55:49 | 显示全部楼层
开两个大点的缓冲,实现双缓冲玩法,每个缓冲缓冲满了再发消息通信,不要每次都发,频率太高。看看满足需求不。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2023-10-13 11:14:17 | 显示全部楼层
eric2013 发表于 2023-10-13 10:55
开两个大点的缓冲,实现双缓冲玩法,每个缓冲缓冲满了再发消息通信,不要每次都发,频率太高。看看满足需求 ...

设置 task queue 数量大的也试过。
当 task queue entries=1 时,试了在任务A单步去执行OSTaskQPend 后
  task queue entries还是等于1  。 OSTaskQPend能正确取得消息。

这样 task queue entries 累积到最大, 任务A就死了,调度不了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-10-13 11:21:25 | 显示全部楼层
love21cz 发表于 2023-10-13 11:14
设置 task queue 数量大的也试过。
当 task queue entries=1 时,试了在任务A单步去执行OSTaskQPend 后
...

不是加大task queue entries,加大这个没用,是让你自己开两个大缓冲。比如两个都是2K,一个2K满了传递下信号量通知任务处理即可,另一个2K继续接受。这样大大降低你的post次数。


你当前这个玩法来一次就post一次,频率太高了。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2023-10-13 16:04:55 | 显示全部楼层
eric2013 发表于 2023-10-13 11:21
不是加大task queue entries,加大这个没用,是让你自己开两个大缓冲。比如两个都是2K,一个2K满了传递下 ...

这样消息响应不及时

实际测试: 每次发10W帧,就不会有问题, 如果多过10W帧,就会有问题。
按道理这么优秀的RTOS应该不会有这样的问题。

回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2023-10-13 16:07:42 | 显示全部楼层
eric2013 发表于 2023-10-13 11:21
不是加大task queue entries,加大这个没用,是让你自己开两个大缓冲。比如两个都是2K,一个2K满了传递下 ...

不小心按了发贴了。。

接上楼。。

按道理这么优秀的RTOS,应该不会有这样的错误。
真是百思不得其解

上面每次发10W帧,测试了不下10次,问题没有发生。
但一超过10W帧,一次都通不过。具体是10W+多少,就没有深究过。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-10-13 16:17:54 | 显示全部楼层
love21cz 发表于 2023-10-13 16:07
不小心按了发贴了。。

接上楼。。

分享你的工程到百度云,我看下。应该是你的任务处理有问题,处理不及时导致很快就满了。处理个1M速度的经典CAN还是绰绰有余的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 03:49 , Processed in 0.353985 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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