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

关于cortex-m3汇编和链接脚本的一点问题

[复制链接]
到处学 提问时间:2015-8-17 00:38 /
请教大神们一点关于汇编和链接脚本的问题。
  1.     .section    ".vectors","ax"
  2.        .global     hal_vsr_table
  3. hal_vsr_table_init:
  4.     .long       hal_startup_stack
  5.     .long       hal_reset_vsr
复制代码
上面我最近在看一款操作系统时遇到的一段代码,在一个叫vectors.S的汇编文件的开头。
  1. STARTUP(vectors.o)
  2. ENTRY(reset_vector)
复制代码
上面这两行代码是在链接脚本开头。

  1. hal_startup_stack = 0x20000000 + 1024*64

复制代码
上面这行是链接脚本最后的代码。
然后我再网上找到了关于这三段代码的解析,因为链接脚本用了STARTUP命令,所以vectors.o会被链接到指定地址,在脚本里指定到了0x08000000,然后看vector.S中的代码,说是符号hal_starup_stack代表的数值会被装载到SP寄存器,符号hal_reset_vsr代表的数值装载到PC寄存器,这样,就符合cortex-m3的启动要求了。但是我有三个问题:
1.我上面的理解靠谱么?
2.vectors.S第3行代码有什么作用?
3.hal_startup_stack符号是定义在链接脚本里的,在vectors.S中为啥能用,是个什么原理?
大神帮我看下啊,特别是第3个问题,百思不得解啊,谢谢大家!



收藏 评论5 发布时间:2015-8-17 00:38

举报

5个回答
moyanming2013 回答时间:2015-8-17 11:57:03
重点在于编译器的理解,
2.那个标号可以用来指出地址,直接作为地制值使用,类似于函数指针。
Tension 回答时间:2015-8-17 14:03:56
除了第二个,其余都没没见过,编译过程文件?
到处学 回答时间:2015-8-18 09:55:12
moyanming2013 发表于 2015-8-17 11:57
重点在于编译器的理解,
2.那个标号可以用来指出地址,直接作为地制值使用,类似于函数指针。 ...

嗯,意思是hal_vsr_table_init:这个符号并没有执行相应的操作,只是声明了一个类似指针的东西,那它指向的地址是不是.long hal_startup_stack的地址呢?
moyanming2013 回答时间:2015-8-18 15:33:04
到处学 发表于 2015-8-18 09:55
嗯,意思是hal_vsr_table_init:这个符号并没有执行相应的操作,只是声明了一个类似指针的东西,那它指向 ...

可以这么理解,
可以使用goto直接跳到这个标号处执行程序。
但是你最好系统看下汇编。
到处学 回答时间:2015-8-19 09:23:04
moyanming2013 发表于 2015-8-18 15:33
可以这么理解,
可以使用goto直接跳到这个标号处执行程序。
但是你最好系统看下汇编。

要得,谢谢大神指点

所属标签

相似问题

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