OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4930|回复: 4

原子官方教材《FreeRTOS源码详解与应用》实验17-4 《FreeRTOS任务通知模拟事件标志组实验》试验疑问

[复制链接]

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-7-14
在线时间
44 小时
发表于 2017-7-24 21:33:56 | 显示全部楼层 |阅读模式
30金钱
本帖最后由 zuozhongkai 于 2017-7-26 09:10 编辑

BUG复现步骤:
1、将《FreeRTOS实验17-4 FreeRTOS任务通知模拟事件标志组实验》(原子官方例程源代码)中按键处理函数中的延时函数换成HAL库自带的延时函数HAL_Delay(),将程序下载到F767开发板中。
2、一切显示正常,不要着急,一会就看到问题了。
3、多次重复按下KEY0键,开发板进入HardFault状态(多次快速连续按下或者偶然按下)
HardFault状态下的Fault Reports截图如下:
QQ截图20170724213118.jpg
说明:1,Fault Reports表明hardfault是有Usage Faults引起。
2、R14(LR)寄存器的值为 0xFFFFFFF1
请原子哥解答一下,感谢

最佳答案

查看完整内容[请看2#楼]

你好,我这里测试,下载F767版本的17-4的例程,按照你说的测试如下: 1、上电以后多次重复的按下KEY0键,没有你说的进入hardfault的问题 2、为了更全面的测试,不止KEY0,开发板上KEY0、KEY1、KEY2和KEY_UP均疯狂多次按下几十次,均没有出现你说的进入hardfault的问题。 3、进一步测试,开发板多次上电、复位重启,多次按下KEY0 KEY1 KEY2 KEY_U按键,测试时间5分钟,均没有你说的hardfault的问题。 理论分析,只有一种情况 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-7-24 21:33:57 | 显示全部楼层
本帖最后由 zuozhongkai 于 2017-7-24 23:06 编辑

你好,我这里测试,下载F767版本的17-4的例程,按照你说的测试如下:
1、上电以后多次重复的按下KEY0键,没有你说的进入hardfault的问题
2、为了更全面的测试,不止KEY0,开发板上KEY0、KEY1、KEY2和KEY_UP均疯狂多次按下几十次,均没有出现你说的进入hardfault的问题。
3、进一步测试,开发板多次上电、复位重启,多次按下KEY0 KEY1 KEY2 KEY_U按键,测试时间5分钟,均没有你说的hardfault的问题。

理论分析,只有一种情况存在这种可能,那就是开发板以上电迅速的按下KEY0按键(在系统还未运行的时候,按下KEY0键进入EXTI3的中断服务函数),可能会进入hardfault,这是因为开发板以上电迅速按下KEY0键就会进入到KEY0对应的外部中断服务函数EXTI3_IRQHandler()中,
但是此时任务EventGroupTask_Handler()还没有创建,所以函数xTaskNotifyFromISR()的第一个参数是无效的,代码执行可能会出现问题,如下图所示:
6L{IBW82[(YY6TKY`V_4ZKR.png
针对这个问题,在视频教程中多次提到了,为了简单,对于信号量,任务等句柄后面是没有做判断的,不过这里算是个bug,至于其它的就没有任何问题,你可以修改这个代码对EventGroupTask_Handler做判断,如下图所示:
2)C04RF_C9EL}3$AU3ZM@1T.png

不过根据你的描述,你的问题不数据上面这种,因为你说的是开始正常,后面连续多次按下KEY0才会出现问题。至于其它情况,我这里测试正如最开始回复你的,完全没有任何问题!

问题?
1、你是否下载F767开发板相对应的例程?
2、用的什么开发板?是否是阿波罗F7开发板?
3、是否原封不动的下载的例程没有做任何的修改?
测试代码见附件。
FreeRTOS实验17-4 FreeRTOS任务通知模拟事件标志组实验.zip (1.4 MB, 下载次数: 177)
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-7-14
在线时间
44 小时
 楼主| 发表于 2017-7-25 17:31:09 | 显示全部楼层
原子哥你好,我重新比较了一下你发的程序与我自己的程序,发现在按键处理函数中我是用了HAL库自带的延时函数HAL_Delay(),然后将此函数调整为delay_ms()后,程序再也没有进入HardFault。感谢原子哥的细心答复。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-7-25 17:51:42 | 显示全部楼层
aimjoe 发表于 2017-7-25 17:31
原子哥你好,我重新比较了一下你发的程序与我自己的程序,发现在按键处理函数中我是用了HAL库自带的延时函 ...

麻烦修改一下帖子题目,要不然别人以为书里面的试验有bug。
开往春天的手扶拖拉机
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-7-14
在线时间
44 小时
 楼主| 发表于 2017-7-25 19:28:23 | 显示全部楼层
zuozhongkai 发表于 2017-7-25 17:51
麻烦修改一下帖子题目,要不然别人以为书里面的试验有bug。

你好,修改以后题目一直变回原来的样子。声明一下原子的程序没有问题。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-23 12:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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