IAR 下C中嵌入汇编
生活随笔
收集整理的這篇文章主要介紹了
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: ? ……//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一節。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的IAR 下C中嵌入汇编的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF冒险团满级要练多少小号
- 下一篇: 华夏全球基金净值 华夏全球基金最新净值