SAM8系列S3C825A型单片机及其软件设计
[09-12 17:48:05] 来源:http://www.88dzw.com 单片机学习 阅读:8966次
文章摘要:函数返回值可根据其类型放在R15或R15:R14寄存器对中。若返回值是struct或union类型,则返回R15中的值是存放返回结果的堆栈指针起始位置。C语言编译器也是编译中断函数时会自动保护所用到的寄存器(包括R10-R15),状态寄存器FLAGS的保护也是在中断处理过程中自动完成的。中断过程中用到的寄存器都使用PUSH Rn的指令进行保护,而采用POP Rn指令恢复。当用IRET指令自动恢复状态寄存器FLAGS时,可以从中断中返回。3.2 对汇编语言函数的约定对于一个可以被C语言函数调用的汇编程序来说,使用时必须满足以下3点:(1)符合C语言参数传递规则;(2)有PUBLIC函数入口标志;
SAM8系列S3C825A型单片机及其软件设计,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com函数返回值可根据其类型放在R15或R15:R14寄存器对中。若返回值是struct或union类型,则返回R15中的值是存放返回结果的堆栈指针起始位置。
C语言编译器也是编译中断函数时会自动保护所用到的寄存器(包括R10-R15),状态寄存器FLAGS的保护也是在中断处理过程中自动完成的。中断过程中用到的寄存器都使用PUSH Rn的指令进行保护,而采用POP Rn指令恢复。当用IRET指令自动恢复状态寄存器FLAGS时,可以从中断中返回。
3.2 对汇编语言函数的约定
对于一个可以被C语言函数调用的汇编程序来说,使用时必须满足以下3点:
(1)符合C语言参数传递规则;
(2)有PUBLIC函数入口标志;
(3)在C语言函数中用extern声音为外部函数。
参加传递规则和C语言函数一样,所不同的是,要在汇编语言函数编写过程中具体体现出来。
4 应用实例
明确了以上调用规则,混合编程就比较容易了,归纳起来有以下几点:
(1)在C语言源文件中用“extern”关键字导入被汇编语言源文件导出的标号;
(2)在汇编语言源文件用“PUBLIC”关键字把标号导出到C语言源文件;
(3)在汇编语言中用“EXTERN”关键字导入被C语言函数源文件导出的关键字;
(4)用C语言把标号导出给汇编语言,这一步不需要关键字;
(5)把编辑好的C语言和汇编语言源文件导入设计系统,并用各自调用函数的指令调用。
下面以笔者在校音器设计中用到的2个例子来具体说明。
4.1 C语言和汇编语言相互调用
在该例中,用C语言函数main()调用汇编语言函数get_rand()以得到一个随机数,接着,用汇编语言函数get_rand()调用C语言库函数rand()再得到一个整型机随机数,然后用调用C语言函数mult()的方法把这个随机值的高位乘以main()函数传递给自己的实参,同时把乘积值返回给main()参数。
/****C语言源程序****/
#include<ios3c825a.h>/*头文件*/
extern unsigned char get_rand (unsigned char seed);/* 汇编语言原型声明*/
void main(void)/*主函数*/
{
unsigned char seed;
unsigned char value;/*定义变量*/
WTCON=0xa0; /*关闭watch dog*/
Seed=0x05;
Value=get_rand(seed); /*调用汇编语言函数,得到一个随机数*/
While(1); /*程序结束*/
}
/**加法子程序,供汇编语言调用**/
unsigned char add(unsigned char x,unsigned chary)
{
return (x+y);
}
/****C语言源程序结束 ****/
/****汇编语言源程序 ****/
#include <ios3c825a.h> ;头文件
EXTERN rand ;C语言库函数
EXTERN add ;用户自定义C函数
PUBLIC get_rand ;导出函数名给C函数调用
Get_rand:
PUSH R9 ;普通C函数入栈保护
- 上一篇:新一代单片PFC+PWM控制器
《SAM8系列S3C825A型单片机及其软件设计》相关文章
- › SAM8系列单片机及其软件设计
- › SAM8系列S3C825A型单片机及其软件设计
- 在百度中搜索相关文章:SAM8系列S3C825A型单片机及其软件设计
- 在谷歌中搜索相关文章:SAM8系列S3C825A型单片机及其软件设计
- 在soso中搜索相关文章:SAM8系列S3C825A型单片机及其软件设计
- 在搜狗中搜索相关文章:SAM8系列S3C825A型单片机及其软件设计