stm32加入UCOS系统后无法启动,死在OSStart()中

					## **stm32加入UCOS系统后无法启动,死在OSStart()中**

问题:裸机状态,系统正常运行,添加UCOS系统后,系统大部分时间启动不起来,偶尔启动起来。
Debug状态下,发现程序死在OSStart()->OSStartHighRdy()->OSStartHang中。如下图:
OSStartHang
最后的OSStartHang应该不会运行到此,但是程序每次都死在这。在网上找了很多解决方法,都是说UCOS系统调度有问题,让设置PendSV_Handler和startup_stm32f10x_hd.s中的DCD(详细方法可百度自行查找),系统还是无法启动。
OSStart()启动之前,需要有如下图所示操作:
OSStart启动前配置
这些函数我是在SysTick_Handler()中使用的。main()函数在硬件初始化之后,初始化UCOS系统,配置几个任务函数,最后OSStart(),问题就在此。在OSStart()函数运行前,程序可能还未进过SysTick_Handler(),导致系统调度异常,启动不起来。
解决方法:硬件初始化加延时,保证程序能进入一次SysTick_Handler()。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于将uC/OS移植到STM32微控制器上的步骤,你可以按照以下指导进行操作: 1. 配置件:根据您的具体STM32型号和外设需求,配置引脚、时钟、断等硬件设置。 2. 准备uC/OS库和源代码:从Micrium官方网站(https://www.micrium.com/)下载最新版本的uC/OS,然后解压缩文件。 3. 添加文件到工程:将uC/OS的源代码和头文件添加到您的STM32工程。确保包含ucos_ii.h头文件,以便使用uC/OS的API函数。 4. 配置uC/OS:打开ucos_cfg.h文件,并根据您的需求进行配置。这包括任务数量、堆栈大小、时间片等。确保正确配置硬件抽象层(HAL)以兼容STM32。 5. 初始化uC/OS:在main函数,调用OSInit函数来初始化uC/OS内核。确保正确初始化任务控制块(TCB)和其他必要的数据结构。 6. 创建任务:使用OSTaskCreate函数创建您的任务。为每个任务分配堆栈空间,并指定任务的优先级和入口函数。 7. 启动uC/OS:在main函数,调用OSStart函数来启动uC/OS内核。这将开始任务调度,并使第一个任务开始执行。 8. 编写任务函数:为每个任务编写相应的任务函数。在函数,使用uC/OS的API函数来管理任务和资源。 9. 构建和下载:使用适当的编译器和开发环境,将工程编译为可执行文件,并通过调试器或烧录器将其下载到STM32微控制器。 以上是一个大致的步骤指导,具体细节可能根据您的项目需求和STM32型号而有所不同。请参考uC/OS的官方文档和示例代码,以获取更详细的信息和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值