Bootloader能够正常跳转,一个串口的APP也能运行成功,但是PX4飞控作为APP运行就会卡死。

2019-07-20 22:38发布

主控芯片:   STM32F427VI   2MB  FLASH
问题描述:   自己写了一个Bootloader,是从SD卡读取bin文件,再写前16k的FLASH。  加载FATFs文件系统,读写什么的都没有问题。跳转app也OK。  
                     一共有两个测试app  ,第一个为串口app(用到的资源很少,就只有串口什么的),跳转成功,运行也ok。第二个app是PX4飞控(几乎把班上的资源用了70%以上吧),跳转OK,但是运行OK,总是卡死在一个地方。
                 跳转前,时钟什么的都关闭的。尝试过Bootloader什么都不做,直接跳转,依然卡死在同一个地方。
  谢谢各位了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
shibusha
1楼-- · 2019-07-20 22:47
其实还是和中断向量指向有关。
在APP程序中,将用到中断的外设,在初始化时,进行一次恢复至默认操作,再重新配置中断。
浪溢泽沉
2楼-- · 2019-07-21 01:24
shibusha 发表于 2016-4-23 16:45
其实还是和中断向量指向有关。
在APP程序中,将用到中断的外设,在初始化时,进行一次恢复至默认操作,再 ...

嗯,是这样的,APP端我没有办法改变,我只能在Bootloader端做修改,我懂你的意思,就是可能是Bootloader中的中断什么的可能影响了app。但是我尝试过,Bootloader中什么都不做,直接初始化时钟,就跳转至app,仍然卡死在那个地方。
还有就是,我用官方的PX4Bootloader是没有任何问题的。
当然我用的是ST的库,它用的是libopencm3.
shibusha
3楼-- · 2019-07-21 06:35
浪溢泽沉 发表于 2016-4-23 17:19
嗯,是这样的,APP端我没有办法改变,我只能在Bootloader端做修改,我懂你的意思,就是可能是Bootloader ...

1. 看看APP里是否重定义了向量地址。
2. APP中是否改变了像PENDSV这类中断的入口。
浪溢泽沉
4楼-- · 2019-07-21 06:59
shibusha 发表于 2016-4-23 18:20
1. 看看APP里是否重定义了向量地址。
2. APP中是否改变了像PENDSV这类中断的入口。

reply 1: vetor table,在Bootloader跳转前已经重定义过,NVIC_SetVectorTable(App_Base_Address, 0);      

reply 2: 不太明白,因为Bootloader重定义了中断向量表,那么app直接 处理中断就行。这个PENDSV我之前没有接触过,不太懂。  但是我是这么想的,PX4飞控官方的Bootloader能够跳转正常,飞控运行正常。那么应该不是app有问题。   


浪溢泽沉
5楼-- · 2019-07-21 12:51
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 16:54
浪溢泽沉 发表于 2016-4-23 19:42
@正点原子   原子哥,真的求帮忙了。调这个bug都三天了,没有进展,求指导

得仿真找问题了,说不准。

一周热门 更多>