2 soyman soyman 于 2014.09.21 13:58 提问

STM32 IAP程序进行到最后一步jump2app();;后就进入hardfault死循环,怎么解决?

调用下面的程序后就出错,APP程序写在了FLASH中
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
//(用户代码的第一个字存放的是堆栈的栈顶地址,下面即检查此地址)

if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法(用户代码的第一个字存放的是栈顶地址,即检查此地址)
{ 
    jump2app=(iapfun)*(vu32*)(appxaddr+4);      //用户代码区第二个字为程序开始地址(复位中断向量地址),强制把该地址转化为iapfun类型的函数指针,再赋给函数指针jump2app       
    MSR_MSP(*(vu32*)appxaddr);                  //设置APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
    jump2app();                                 //跳转到APP的复位中断,程序由此开始执行
}

}

1个回答

DengPihui
DengPihui   2014.09.30 08:51

从这段代码上看并没有什么问题,最好再找找有没有其他的原因,如应用程序存放的地址是否正确、应用中中断向量表是否配置正确等。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法
首先是IAP STM32F103C8T6的flash是64k,每次擦除是1k 1、用串口接收APP的bin文件数据,然后写入内部的FLASH //appxaddr是要跳转的地址 设置是0x0800500 //appbuf是串口接收到的app的bin文件数据 //appsize是bin的大小 void iap_write_appbin(u32 appxaddr,u8 *appbuf,u3
bootloader与app区域代码重叠导致进入HardFault_Handler!
原先以为是堆栈溢出,后来发现是APP代码的起始地址竟然在bootloader代码区域之内。这样 可能把bootloader本身给擦写了。 所以写入app之前检查要检查写入的地址范围。 另外还有一点,在写app途中,假设bootloader频繁发生看门狗复位导致频繁写入app,那么片子不就挂了么?所以到底用不用加上看门狗复位呢?这个还要好好考虑。
在串口数据轰炸后,程序HardFault_Handler()了
程序初始化后,用SSCOM32串口调试助手以1ms为间隔向设备发送数据。结果没有隔半分钟,系统就进入了HardFault异常了。我很明确这个异常100%是由于访问了非法地址引起。多半是由于内存溢出或者访问越界所致。但我就很难明白到底是怎么个内存访问非法。HardFault_Han
关于stm32 HardFault_Handler 异常的处理死机
在系统开发的时候,出现了HardFault_Handler硬件异常,也就是死机,尤其是对于调用了os的一系统,程序量大,检测堆栈溢出,以及数组溢出等,找了半天发现什么都没有的情况下,估计想死的心都有了。如果有些程序开始的时候一切没有问题,但是运行几个小时候,会发现死机了,搞个几天下来估计蛋都碎了一地吧。。。 一般来说运行操作系统  是以下几个问题 1.开始的时候给ucos分配的堆栈太小了,随着
解决stm32进入HardFault_Handler的定位办法
1、首先在HardFault_Handler的while(1)处打上断点。 2、等待代码运行到此,这时查看寄存器LR,在左边一个是工程,一个是寄存器。     上面的LR是我正常时copy的,一般在进入hardfault时,会变成下图的值,这时就可以知道该看那个寄存器的值,当时我那里是0xFFFFFFFD,所以是看PSP的地址。 3、找到该看的地址后然后如下图打开内存,
STM32程序跳转后死机现象解决
正在用STM32单片机,移植了官方IAP,使用没问题,但是每次下载程序都要重启,嫌麻烦后来想发个命令直接跳转到IAP,参考官方IAP的跳转程序,将APPLICATION_ADDRESS改为0x08000000 #define APPLICATION_ADDRESS (uint32_t)0x08000000 typedef void (*pFunction)(void); pFunctio
STM32进入HardFault_Handler处理办法
STM32进入HardFault_Handler处理办法方法一 在中断HardFault_Handler中的while()处打上断点,让程序执行到此处停止。 在Registers里面找到R14(LR)的值,我的这里是:0xFFFFFFF9 说明一下: 0xFFFFFFF9对应的是要看MSP寄存器 0xFFFFFFFD对应的是要看PSP寄存器 所以这里需要查找的内存地址是MSP的值:0x200
stm32 iap 程序跳转进入硬件异常 hex合并
工作多年,常常觉得自己遇到的问题及解决办法,时间稍长,就容易遗忘,且没地方查。再者,经常看别人的文章,受益匪浅,自己也有些经验,却从来没有分享出来,深感惭愧。工作忙不是好借口,今日开始开博,不为别的,只为记录、备忘,以及解决其他人可能遇到的相同问题顺利找到解决办法。 问题: stm32f103ret6上做的IAP,仿真调试阶段没有遇到过问题,外场使用就发现不能跳转到app,且不同板子、不同
UCosIII在Cortex-M3核单片机上IAP跳转APP时引起HardFault错误原因分析
项目中使用LPC1857单片机,这是一款NXP出的Cortex-M3内核MCU,我们做了一个bootload代码,用于IAP升级。在bootloader代码中我们使用了官方移植好的ucosIII系统,当检测到APP应用程序格式正确时,执行跳转功能,直接从IAP代码跳到APP代码中运行,但是跳转后在运行APP代码时MCU出现HardFault错误。
STM32 IAP的bootloader编程
不需要拆机就能对产品进行固件升级是很多人想要的效果,不仅方便而且节省精力和成本。那么如何完成这项工作呢?接下来所介绍的Bootloader就可以完成这项工作,通过Bootloader引导程序完成固件的升级。下面来浅析STM32 Bootloader设计。 首先谈谈stm32的ISP和IAP区别和联系。 ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编