参数传递规则
1.参数不超过4个时,可以使用寄存器R0~R3来传递参数,当参数超过4个时,还可以使用数据栈来传递参数。
2.结果为一个32位整数时,可以通过寄存器R0返回
3.结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。
汇编程序、C 程序及C++ 程序相互调用
C 程序调用汇编程序:
o汇编程序的设置要遵循ATPCS规则,保证程序调用时参数的正确传递。o在汇编程序中使用EXPORT伪指令声明本子程序,使其它程序可以调用此子程序。o在C语言程序中使用extern关键字声明外部函数(声明要调用的汇编子程序),即可调用此汇编子程序。o调用汇编的C函数:o示例#include
externvoid strcopy(char *d,const char *s) // 声明外部函数,即要调用的汇编
//子程序intmain(void)
{
constchar *srcstr=“First string-source”;//定义字符串常量
chardstsrt[] =“Second string-destination”;//定义字符串变量
printf(“Beforecopying:\n”);
printf(“’%s’\n‘%s\n,”srcstr,dststr); //显示源字符串和目标字符串的内容
strcopy(dststr,srcstr);//调用汇编子程序,R0=dststr,R1=srcstr
printf(“Aftercopying:\n”)
printf(“’%s’\n‘%s\n,”srcstr,dststr); //显示strcopy复制字符串结果
return(0);
}
o被调用汇编子程序:AREASCopy,CODE,READONLYEXPORT strcopy;声明汇编程序strcopy,以便外部程序引用strcopy;R0为目标字符串的地址;R1为源字符串的地址;LDRB R2,[R1],#1 ;读取字节数据,源地址加1STRB R2,[R0],#1 ;保存读取的1字节数据,目标地址加1CMP r2,#0;判断字符串是否复制完毕BNE strcopy;没有复制完毕,继续循环MOV pc,lr;返回END汇编程序调用C 程序
o汇编程序的设置要遵循ATPCS规则,保证程序调用时参数的正确传递.o在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数.o在调用C程序时,要正确设置入口参数,然后使用BL调用.o汇编调用C程序的C函数:int sum5(int a,lit b, int c,int d,int e)
{
return(a+b+c+d+e);//返回5个变量的和
}
o汇编调用C程序的汇编程序AREAsample, CODE,READONLYIMPORT sum5;声明外部标号sum5,即C函数sum5()
嵌入式C 编程
概述:
C语言的优点是运行速度快、编译效率高、移植性好和可读性强。C语言支持模块化程序设计,支持自顶
向下的结构化程序设计方法。因此在嵌入式程序设计中经
常会用到C语言程序设计。
嵌入式C语言程序设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。也就是说它首先是C语
言程序设计,因此必须符合C语言基本语法,只是它是面向
嵌入式的应用而设计的程序。
oC语言的“预处理伪指令”在嵌入式程序设计中的应用。1 、文件包含伪指令
格式: #include <头文件名;标准头文件#include “头文件名.h”;自定义头文件2 、宏定义伪指令
格式: # define宏标识符宏体
3 、条件宏: 先测试是否定义过某宏标识符,然后决定如何处理。这样做是为了避免重复定义。
格式:
#ifdef宏标识符#undef宏标识符#define宏标识符宏体#else#define宏标识符宏体#endif
4 、条件编译伪指令
格式
#if(条件表达式1)…#elif(条件表达式2)…#elif(条件表达式n)…#else…#endif这样,编译时,编译器仅对#if()…#endif之间满足某一条件表达式的源文件部分进行编译。
使用寄存器变量
当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,
1.参数不超过4
2.结果为一个32
3.结果为一个64
o汇编程序的设置要遵循ATPCS
extern
//子程序int
{
const
char
printf(“Before
printf(“’%s’\n
strcopy(dststr,srcstr);
printf(“After
printf(“’%s’\n
return(0);
}
o被调用汇编子程序:
o汇编程序的设置要遵循ATPCS
{
return(a+b+c+d+e);
}
o汇编调用C
C语言的优点是运行速度快、编译效率高、移植性好和可读性强。C
向下的结构化程序设计方法。因此在嵌入式程序设计中经
常会用到C
嵌入式C
言程序设计,因此必须符合C
嵌入式的应用而设计的程序。
oC
格式:
#ifdef宏标识符#undef宏标识符#define宏标识符宏体
格式
#if(条件表达式1
当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C