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

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
glzhang

glzhang

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
2 回答

关于 stm32f10x_cl 启动汇编代码的问题

未设置标签
wkuang wkuang 回答时间: 2013-12-1 22:41

 (1)一个是在定义中断向量表项的地方: .section  .isr_vector,"a",%progbits    执行域   .type  g_pfnVectors, %object   .size  g_pfnVectors, .-g_pfnVectors g_pfnVectors:   .word  _estack   .word  Reset_Handler   .word  NMI_Handler   .word  HardFault_Handler  其中的 .size 指令中,句点 '.' 表示的当前地址与 g_pfnVectors 标号代表的地址应该是一个地址吧?如果是这样的话、这条指令岂不是设置 g_pfnVectors 对象的大小为 0? 这条指令的作用体现在哪里? 首先明确下ARM的软件编译出来分为:代码段(存在ROM/Flash)和数据段(存在RAM)。 因此程序下载到芯片Flash中,然后在开工的时候从Flash取出来放到RAM中来运行。程序存放的地址叫做加载域,程序执行的地址叫做执行域。ARM通过分散加载文件(scatter)制定加载域和执行域的地址。   你的工程中有一个分散加载文件 .scf   或者类似的文件。 这个文件与汇编文件对应。  你在加载文件中肯定能看到Reset_Handler等。         (2)在向量表的最后一项:  .word  BootRAM     /* @0x1E0. This is for boot in RAM mode for                           STM32F10x Connectivity line Devices. */ 在文件中定义的 BootRAM 值为:.equ  BootRAM, 0xF1E0F85F。向量表的最后一项为什么要放这个值,其作用是什么?   这个也是与分散加载相关。你讲BOOTRAM指定一个地址,代码运行的时候直接跳转到这个地址。 因此需要在加载文件中将代码加载到这个地址。 所谓的BOOTLoad就是用来干这个的。

赞0
glzhang glzhang


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16