完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的主程序是基于UCOS2的操作系统,现在需要在程序里加入bootloader功能,但是遇到了一个问题。
程序在运行ModifeMSP(myaddr)的时候就直接跑飞了,请问是怎么回事? 在地址myaddr处,有自行开发设计的bootloader程序,此程序在非操作系统下运行正常。 谢谢 |
|
相关推荐
5 个讨论
|
|
首先,我的myaddr地址是FLASH的绝对地址,并且在myaddr地址上包含有程序重新运行需要的向量表。
但是在执行程序跳转的时候,且发生了程序跑飞,最终的原因是: CM3系列MCU在执行ModifeMSP(myaddr),然后(*((void (*)(void))myaddr))()后,按理论将,MSP正确,PC指向正确,必将开始新程序执行。当我忽略了一点。按以上步骤完成的程序跳转,芯片所有外设及寄存器并没有被复位,也就是说,如果Bootloader程序中没有全部重新定义外设为无效,那么跳转前程序中使能的外设将可以继续工作,因此,一旦这些外设发生中断之类的情况,将直接导致Bootloader程序发生硬件错误(我所谓的跑飞); 所以,最直接的解决办法是,在跳转之前将程序中开启的所有外设都关掉,特别是中断,一定要逐个进行关闭。 我在问题中提到的ucos跳转失败,而单线程程序测试却正常的问题在于,我虽然关闭了程序中设计的中断,但还是忽略了一点:ucos用到了芯片的systick,这个非芯片片内外设,需要用函数注销。 谢谢 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
344 浏览 1 评论
539 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
783 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
655 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1138 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
73浏览 29评论
236浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
261浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
208浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
67浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 02:31 , Processed in 1.131043 second(s), Total 64, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号