|
最近调试FreeRTOS程序,发现直接用IAR下载APP后程序运行正常,但是通过IAP升级后却发现程序跑飞(因为是IAP升级,无法调试App程序,所以跳转后具体在哪跑飞不得而知)。通过IAP升级裸机APP却是正常的,所以中断向量,程序地址等配置应该没问题。 注释掉部分IAP代码,只留单纯的跳转语句后再调试,发现加RTOS的App运行正常了,所以问题一定是IAP程序中其他的配置导致App跑飞,经过逐个排查后终于找到了原因,是IAP中配置了Timer3中断,但是RTOS版的App中没有定义Timer3的中断处理函数,而跳转前又没有关闭Timer3,故跳转后程序一定是死在了无法跳转至Timer3中断函数的问题上。经过修改,在跳转前关闭Timer3,调试OK!当然,后来又发现了同样的问题,也是IAR直接下载正常,IAP跳转后不正常,只不过这次是串口没有正常工作,同样老办法,逐个排查IAP程序中是否存在配置问题,最终发现是IAP中初始化SPI时,傻不拉几的使能了SPI的TXDMA(后面又没用到这个DMA),而F072的SPI1 TXDMA和USART1的RXDMA是映射的同一通道。。。。。所以注释掉相关代码后一切正常。 第一次移植FreeRTOS做项目,希望自己以及坛友以后避免犯同样的错误,故留此贴 |
| 感谢分享!涨知识了 |
| 遇到类似的问题,IAR运行正常,断电上电异常,原因调用了标准库中未重写的函数,比如time.h |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版