STM32F76X IAP程序栈顶地址范围问题

zhugeliang1991 2017-07-08 02:54:52
在做STM32F76X的IAP程序时,检查判断是否下载用户程序的栈顶地址范围是多少,谢谢!
/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
/*APP中把中断向量表放在首地址,而中断向量表里存放
的第一个就是栈顶的地址可见启动文件,判断栈顶地址是否在范围之内*/
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20020000)
/*这里我查到的其他资料都是0X20000000,但是实际调试的时候都是0X20020000*/

{
/* Jump to user application */
/*中断向量表第二项存放复位地址*/
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
/*指向复位地址*/
JumpToApplication = (pFunction) JumpAddress;

/* Initialize user application's Stack Pointer */
/*设置主函数栈指针*/
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
/*执行复位函数后续跳转到main函数见启动文件*/
JumpToApplication();
}


启动文件
Stack_Size EQU 0x8000

AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp


; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size EQU 0x1000

AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
...全文
1382 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugetree_bibi 2020-03-05
  • 打赏
  • 举报
回复
我的也是0X20020000,设置跟网上的一样,我跳转的时候改一下检测就能跳转,一直在找这个问题,我用的是stm32f469II.
2013hglw 2017-11-06
  • 打赏
  • 举报
回复
楼主你好,我最近也在做IAP,烧录应用程序后,0x8003000的内容始终是0x3032303A,RAM我看了是和你一样的配置,会是什么原因呢。。不胜感激
zhugeliang1991 2017-07-26
  • 打赏
  • 举报
回复
引用 1 楼 baidu_38722979 的回复:
应该是与你的硬件有关。如果app正确,这个地址一定指向你的有效ram地址的最低位置,map文件可以查到。所以理论上在有效的ram空间都是合理的。

说得对,还是跟片内ram相关



可参见.sct文件
可参考http://flash-rtd.readthedocs.io/zh_CN/latest/
Acuity. 2017-07-13
  • 打赏
  • 举报
回复
启动文件那两句汇编只是设计堆和栈的大小。
baidu_38722979 2017-07-13
  • 打赏
  • 举报
回复
应该是与你的硬件有关。如果app正确,这个地址一定指向你的有效ram地址的最低位置,map文件可以查到。所以理论上在有效的ram空间都是合理的。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧