你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 MCU IAP例程跳转到APP代码简要分析

[复制链接]
博根 发布时间:2015-1-5 16:16
问题1:JumpAddress 地址为什么指向 APPLICATION_ADDRESS + 4 ; MSP 主堆栈指针为什么指向 APPLICATION_ADDRESS ;问题2:为什么需要做以下判断
  1. if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000) {
  2. }
复制代码

问题1分析:
从startup_stm32f4xx.s 中的启动代码可以看出:程序开始第一条指令地址为 CSTACK,第二条指令地址为复位指令
  1. EXTERN      iar_program_start EXTERN SystemInit
  2. PUBLIC     vector_table

  3. DATA
  4.     vector_table
  5. <font color="#ff0000">DCD        sfe(CSTACK)        ; APPLICATION_ADDRESS</font>
  6. <font color="#0000ff">DCD        Reset_Handler        ; Reset Handler   ; APPLICATION_ADDRESS + 4</font>

  7. DCD        NMI_Handler        ; NMI Handler
  8. DCD        HardFault_Handler        ; Hard Fault Handler DCD        MemManage_Handler                ; MPU Fault Handler DCD        BusFault_Handler        ; Bus Fault Handler DCD        UsageFault_Handler        ; Usage Fault Handler DCD        0        ; Reserved
  9. DCD        0        ; Reserved
  10. DCD        0        ; Reserved
  11. DCD        0        ; Reserved
  12. DCD        SVC_Handler        ; SVCall Handler
  13. DCD        DebugMon_Handler        ; Debug Monitor Handler
  14. DCD        0        ; Re        served
  15. DCD        PendSV_Handler        ; PendSV Handler
  16. DCD        SysTick_Handler        ; SysTick Handler

复制代码
当程序启动时首先要执行复位程序,因此  JumpAddress  地址指向复位指令地址(即APPLICATION_ADDRESS + 4) ; MSP 对应的是主堆栈指针,指向 CSTACK 地址(即 APPLICATION_ADDRESS).


问题2分析:ApplicationAddress 存放的是程序的主堆栈地址,CSTACK 堆栈地址指向 RAM,而 RAM 的 起始地址是  0x20000000; 因此上面的判断语句执行:判断用户代码的堆栈地址是否落在:0x20000000~0x2001ffff    区间 中,这个区间的大小为  128K.

STM32 MCU IAP例程跳转到APP代码简要分析.pdf (38.67 KB, 下载次数: 22)
收藏 评论0 发布时间:2015-1-5 16:16

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版