IAR 下C中嵌入汇编

最近在读《C专家编程》一书时,遇到了C中嵌入汇编的问题,刚好项目中也经常遇到这个问题,决定花时间整理一番,理清在IAR环境下的使用方法。
C中嵌入汇编指令在不同的编译器下有不同的实现方式,在IAR中有两种方式。

一、内嵌汇编
例子1:
  ……//C语言
  asm("NOP");
  ……//C语言。
例子2:
void test(void)
{
__asm("MOV R4, R2\n"    //去掉“__”也可
"MOV R5, R2\n"
"LOOP:nop\n");
}
注意: 多行之间使用换行符 \n 隔开,最后一个括号要有逗号。

二、c中调用汇编程序
使用规则如下:
1、使用PUBLIC入口标签
2、被调用前应该进行函数声明:
extern int foo(void);
或者
 int foo(void);
或者
__ARM  int foo(void);

例子:
在xx.asm中:
PUBLIC  OS_CPU_SR_Save
……
OS_CPU_SR_Save
    MRS     R0, CPSR
    ORR     R1, R0, #OS_CPU_ARM_CONTROL_INT_DIS               
    MSR     CPSR_c, R1
    BX      LR    
在xxx.h中进行声明:
extern void OS_CPU_SR_Save(void);
在xxx.c中调用:
OS_CPU_SR_Save();

详见:EWARM_DevelopmentGuide.pdf 中 Assembler languageinterface一节。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_courage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值