avr c中嵌入汇编编程文档说明
This application note describes how to
set up and use the IAR C-compiler for
the AVR controller in prosjects including
both C and assembly code. By mixing C
and assembly designers can combine
the powerful C language instructions
with the effective hardware-near assem-
bly code instructions.
### AVR中嵌入汇编 iar中C与汇编混合编程
#### 概述
本应用笔记阐述了如何在包括C语言和汇编代码的项目中设置并使用IAR C编译器来支持AVR控制器。通过混合使用C语言和汇编语言,设计者可以将强大的C语言指令与接近硬件层的有效汇编代码指令结合起来。
#### 特点
- **变量传递**:介绍如何在C语言和汇编代码函数之间传递变量。
- **调用汇编代码函数**:解释如何从C语言调用汇编代码函数。
- **从汇编代码调用C函数**:说明如何从汇编代码中调用C函数。
- **编写中断函数**:探讨如何使用汇编代码编写中断处理函数。
- **访问全局变量**:讨论如何在汇编代码中访问全局变量。
#### 引言
本应用笔记详细介绍了如何在包含C语言和汇编代码的项目中设置并使用IAR C编译器来支持AVR控制器。混合使用C语言和汇编语言能够结合两者的优点:C语言的结构化、易于维护以及汇编语言对资源使用的全面控制和小型应用中的紧凑快速代码。
#### 表格:C语言与汇编语言的优缺点对比
| | 汇编语言 | C语言 |
|-------------|------------------------------------|-------------------------------------|
| **优点** | - 全面控制资源使用<br>- 在小应用中紧凑且快速的代码 | - 在大型应用中高效代码<br>- 结构化的代码<br>- 易于维护<br>- 可移植性高 |
| **缺点** | - 在大型应用中效率低<br>- 代码难以理解<br>- 难以维护<br>- 不可移植 | - 对资源使用的控制有限<br>- 在小型应用中代码体积大且执行速度慢 |
#### C语言与汇编代码之间的变量传递
当使用IAR C编译器针对AVR时,寄存器文件被分段如图1所示。擦除寄存器在函数调用间不保留,而局部寄存器则在函数调用间保留。Y寄存器(R28:R29)用作指向SRAM的数据栈指针。擦除寄存器用于在函数间传递参数和返回值。
当调用一个函数时,要传递给该函数的参数被放置在寄存器文件的R16-R23寄存器中。当函数返回一个值时,该值会被放置在寄存器文件的R16-R19寄存器中,这取决于参数的大小和返回值的大小。
表2展示了调用函数时参数放置的例子:
- **图1**:寄存器文件中的分段。
- **表2**:示例参数放置:
例如,在调用一个C函数`int get_port(unsigned char temp, int num)`时,1字节的参数`temp`会放在R16寄存器中,而2字节的参数`num`则依次放在R17和R18寄存器中。返回值(假定为2字节整型)会被放置在R16和R17寄存器中。
#### 数据类型与对应大小的参考
对于支持的数据类型及其对应的大小,请参阅IAR AT90S用户指南的数据表示部分。
通过这些详细的介绍,我们可以更好地理解如何有效地利用C语言和汇编语言的优点来构建高效的AVR控制系统。这种方式不仅提高了程序的灵活性,还优化了资源的使用,特别是在实时控制或低功耗应用中尤为重要。
- 1
- 2
前往页