硬汉嵌入式论坛

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

[μCOS-III] uCOSIII3.08的动态节拍总进入HardFault的问题

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2021-6-3 15:25:15 | 显示全部楼层 |阅读模式
本帖最后由 kokoromi 于 2021-6-3 16:40 编辑

用了uCOSIII3.08版本,按照模板移植了基于LPTIM定时器的动态系统节拍功能,使用的时候发现当串口通讯比较频繁的时候,系统经常性的进入到HardFault硬件错误异常里,程序就一个任务,检查了任务栈等相关可能出问题的地方,都是正常的,就是找不到问题所在,换回正常的系统节拍(Systick)后,完全没问题,但是只要切换到动态节拍就经常进入硬件错误异常,有人遇到这种情况吗?调好几天了,没解决...

PS1:补充一个,测试的时候把统计任务去掉,就没问题了,但是加上统计任务,动态时钟会有很大概率在串口通讯比较频繁时进入硬件异常,但标准时钟节拍模式没问题。
PS2:在启用动态节拍时,如果TIMER_COUNT_HZ宏设置的比较小,统计任务会失效,而且CPU占用会显示很大,但实际上占用率并不大,感觉已经严重不准确了。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-6-3 16:40:27 | 显示全部楼层
感觉和统计任务有关系,但是没找到具体原因...
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-6-3 17:20:58 | 显示全部楼层
大概率你的底层没有处理好,频繁串口数据还不至于进入硬件异常。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-6-3 19:16:01 | 显示全部楼层
eric2013 发表于 2021-6-3 17:20
大概率你的底层没有处理好,频繁串口数据还不至于进入硬件异常。

统计任务关闭了就没问题了。而且我发现使用动态时钟,统计任务非常不准确,CPU占用率显示很高。
回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2021-6-3 20:10:40 | 显示全部楼层
我也用的ucos3动态时钟 可以看看硬汉的例程  里面有个宏定义
回复

使用道具 举报

19

主题

373

回帖

430

积分

高级会员

积分
430
发表于 2021-6-4 10:34:19 | 显示全部楼层
统计任务是基于Systick的,所以进入动态节拍(此时应该是进入休眠等低功耗状态,Systick切换为动态节拍唤醒模式)时,要挂起统计任务(就是说休眠期间统计任务不统计)。
动态节拍唤醒时(或者外部中断等激活),再激活统计任务,此时Systick正常工作,统计任务进行统计
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2021-6-4 10:43:21 | 显示全部楼层
h_007 发表于 2021-6-4 10:34
统计任务是基于Systick的,所以进入动态节拍(此时应该是进入休眠等低功耗状态,Systick切换为动态节拍唤醒 ...

早期的时候统计任务是基于Systick,现在统计任务不是基于Systick的,是基于DWT时钟周期计数器
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-6-4 14:48:00 | 显示全部楼层
使用动态时钟会导致统计任务统计的CPU占用率不准,TIMER_COUNT_HZ宏设置的越小,CPU占用率越偏大,没找到问题所在...
是不是使用动态时钟就没法使用统计任务了?
回复

使用道具 举报

19

主题

373

回帖

430

积分

高级会员

积分
430
发表于 2021-6-4 14:53:59 | 显示全部楼层
eric2013 发表于 2021-6-4 10:43
早期的时候统计任务是基于Systick,现在统计任务不是基于Systick的,是基于DWT时钟周期计数器

多谢提醒呀
我的意思是:理论上,切换成动态节拍的时候,应该就只剩下空闲任务了(只能通过中断唤醒),此时不应该运行统计任务和其他基于Systick或者DWT的常规任务
不知道我的理解对不对
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2021-6-4 15:41:53 | 显示全部楼层
本帖最后由 kokoromi 于 2021-6-4 16:13 编辑
eric2013 发表于 2021-6-4 10:43
早期的时候统计任务是基于Systick,现在统计任务不是基于Systick的,是基于DWT时钟周期计数器

从哪里看到现在的统计任务是基于DWT的?我看了下3.08的那个统计任务源码,没发现用到了DWT相关内容啊?而且由于我是M0+内核的L0系列,没有DWT,时间戳相关内容都关闭了。=======================================================
我知道了,你说的是每个任务的CPU使用率吧,那个确实是用的时间戳DWT,我这个M0+的没有DWT,所以时间戳关闭了,所有任务的CPU占用率一直为0。
但是整个系统的CPU使用率并没有用DWT呀,貌似用的空闲任务里的一个连续累加的计数变量OSStatTaskCtr,难道是因为动态tick模式下的空闲任务和标准tick模式下的空闲任务不一样导致统计的CPU使用率偏大?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 06:09 , Processed in 0.174309 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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