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

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

[复制链接]
glzhang 提问时间:2013-11-12 17:57 /
 在 gcc 分支下的 startup_stm32f10x_cl.s 文件中,有几处代码看不懂,向大家请教一下:
 (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? 这条指令的作用体现在哪里?
 
(2)在向量表的最后一项:
 .word  BootRAM     /* @0x1E0. This is for boot in RAM mode for 
                         STM32F10x Connectivity line Devices. */
在文件中定义的 BootRAM 值为:.equ  BootRAM, 0xF1E0F85F。向量表的最后一项为什么要放这个值,其作用是什么?
 
收藏 评论2 发布时间:2013-11-12 17:57

举报

2个回答
勒布朗 回答时间:2013-11-29 21:19:00

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

貌似是RAM启动的意思
wkuang 回答时间:2013-12-1 22:41:40

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

 (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就是用来干这个的。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版