OpenEdv-开源电子网

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

STM32F429 UCOSIII

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
发表于 2017-9-19 18:56:48 | 显示全部楼层 |阅读模式
1金钱
将原子哥STM32F429的ucos iii例程中的hal库去掉换成STM32F4xx_STD_Driver的标准库之后,再作修改,自己创建两个任务,编译通过之后,进入了HardFault_Handler();
用Keil进行跟踪发现,运行前面5个任务可以正常运行(中断服务管理任务0,时钟节拍任务1,定时任务2,开始任务3,闪灯任务4,数数任务5,统计任务OS_CFG_PRIO_MAX-2),都可正常运行,但是到了空闲任务,进入void  OSSched (void)中,OSPrioHighRdy为0x3F( OSPrioHighRdy   = OS_PrioGetHighest()),再跑到 OS_TASK_SW_SYNC();(调试的时候设置断点在这个地方,全速运行,发现只有OSPrioHighRdy为0x3F或者单步运行时才会停在这个断点),往下运行此时LR的值正常为0x08000D5F,单步运行到下一步的时候却跑到了HardFault_Handler();
有时候耐心点单步运行时则不会到HardFault_Handler();,而是进入空闲任务不出来。正常的情况是:会切换到优先级为0的中断服务管理任务才正确的,
总体来看:就是所有任务只能运行一次,到最后一个空闲任务要切换到优先级为0的中断服务管理任务时出现了问题。经过仔细的检查系统时钟与SysTick的设置都没问题,也进入了SysTick_Handler()中断函数,自己的创建的任务堆栈大小为128,其他任务的堆栈大小没有更改过。。。
大家有什么见解呢?还是换成标准库之后,有些地方没注意。。。

断点图.PNG

最佳答案

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

如果掉进HardFault_Handler(),一般是堆栈溢出,数组越界等出了问题,现在多了个启动文件的问题。。。之前不带操作系统时用startup_stm32f429_439xx.s是可以的,但带ucosiii系统之后就要用回startup_stm32f429xx.s启动文件 还有如果一直呆在空闲任务不出来的话,就与你的SysTick的设置有关了,又或者SysTick的中断函数没实现
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-19 18:56:49 | 显示全部楼层
如果掉进HardFault_Handler(),一般是堆栈溢出,数组越界等出了问题,现在多了个启动文件的问题。。。之前不带操作系统时用startup_stm32f429_439xx.s是可以的,但带ucosiii系统之后就要用回startup_stm32f429xx.s启动文件
还有如果一直呆在空闲任务不出来的话,就与你的SysTick的设置有关了,又或者SysTick的中断函数没实现
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-19 19:00:47 | 显示全部楼层
断点分别在if (OSTCBHighRdyPtr == OSTCBCurPtr)与OS_TASK_SW_SYNC();那里
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-19 19:08:48 | 显示全部楼层
应说是前面7个任务,这个没什么影响,因为就算没有自己的任务,其他的任务也是正常的运行一遍,就是在最后的空闲任务与中断服务管理任务之间的切换有问题,总的来说就是任务调度不正常
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-19 19:42:41 | 显示全部楼层
顶一下
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-20 00:38:34 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-20 11:31:34 | 显示全部楼层
。。。。。。。。。。害我搞了几天原来是启动文件的问题,我用的是startup_stm32f429_439xx.s,用回startup_stm32f429xx.s之后,完美运行。。。。。。
不过最近还是收益良多。。。弄懂了好多ucosiii的东西
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-9-19
在线时间
4 小时
 楼主| 发表于 2017-9-20 11:46:27 | 显示全部楼层
对比了下两个启动文件,发现Stack_Size的大小设置不同,一个是0x400一个是0x00001800,可能就发生了越界
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 10:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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