卢骏 · 2020年06月03日

ARM编译器(三) 其他

一、c中使用asm执行汇编

使用 _asm关键字。
1.png

格式:
2.png

对于clobbered_register_list, 有两个:
3.png

二、c中调用汇编代码函数

使用.globl 和.type来执行该汇编代码函数
4.png

在c中,使用extern进行申明。
5.png

编译,指定c代码和汇编代码
6.png

三、汇编中调用c中函数

在汇编代码中,使用extern 定义要调用的函数。
7.png

然后在需要的地方,使用跳转指令跳转即可。
8.png

c中有该函数的实现
9.png

分别将c代码和汇编代码,编译成.o文件,然后使用armlink链接成一个可执行程序。

要注意,汇编要调用c,需要初始化栈,并且调用还要遵循汇编调用c的规范。

四、指定数据在指定的段

程序中,对于数据指定attribute属性,可以指定该数据在链接的时候,链接到指定的段。

如下,使用如下,使用 __attribute__加上section选线,将变量my_peripher放置在.ARM.__at_0x10000000的段中。
10.png

在链接脚本中,增加.ARM.__at_0x10000000段。如下,将该段放置在ER_PERIPHERAL段中,起始地址是0x10000000。
11.png

编译,指定–map –symbols选项,显示memory map和symbol信息。
12.png

就可以看到,对于该变量,是放置在.ARM.__at_0x10000000段中的。

系列其他篇

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23554
内容数
1003
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息