avr单片机c语言库,AVR单片机C语言编译器

《AVR单片机C语言编译器》由会员分享,可在线阅读,更多相关《AVR单片机C语言编译器(12页珍藏版)》请在人人文库网上搜索。

1、AVR单片机C语言编译器Win-AVR是流行的GNU编译器在AVR平台上的移植。安装完毕后会 在桌面上显现一下七个快捷方式,它们的作用如下:Programmers Notepad源文件的编辑软件,可提供应用程序接口AVR In sightGDB Debug的前端工具,用于仿真调试TKI nfoGNU超文本格式的图形扫瞄器,用于扫瞄各种讲明文档Avr-libc Ma nualAVR-GCC编译器的C语言函数库GNU Manu als On li neGNU在线关心手册MFileMakefile编辑软件READMEWinAVR 的 readme文件IDE (In tegrated Developm。

2、e nt En vir onment)集成开发环境ICE ( In Circuit Emulator)在线仿真器JTAG (Joint Test Action Group)联合测试行为组织*hex文件用来向单片机下载的16进制文件*cof文件用来利用AVRstudio进行在线仿真和调试的文件AVR COFF( AVR Studio 3.x)AVR “ Extendec” COFF( AVR Studio 4.07+)*.hex和*.cof这两个文件不能由AVR-GCC本身生成,需要其他辅助工 具来完成这一步,那个工具叫 avr-objcopy。Makefile文件确实是一个描述性质的文件, 告。

3、知make各文件之间的依 靠关系,不需要扩展名。一样在MFile那个程序中生成对应的 makefile文件,然后将它复制到P N源文件的文件夹下,就能够进行 make all的命令来实现对源文件的编译 了。一样而言,makefile文件只需要修改一下几个地点。Main file name(不要带扩展名)和 MCU type以及Default make target,然后点file- s ave as储存到要编译的文件的文件夹下。C 语言小总结C 语言的标识符是区分大小写的,标识符必须以字母或者下划线开头, 下划线开头的标识符一样是编译器定义的。一样而言,如果不是需要使用负整数,尽量使用无符号数。

4、整数来表示, 如此能够减少系统处理符号的工作,从而提升程序的执行效率。凡是耳目运算符,都能够和赋值符一起组成复合赋值符, C 语言中规 定可使用的10中复合赋值运算符:+=;-=;*=;/=;%=;=;&二;八=;|= 逗号运算符是 C 语言的一种专门的运算符,其作用是将两个表达式连 接起来, C 语言对两个表达式分别运算,并将后一个表达式的值作为逗号 表达式的值。运算优先级最低。例如: a=3*6,4*8; 其结果为 a=32;C 语言规定了六种关系运算符: ;=;=;!= 其中前四个的优先级比 较高,后两个的优先级比较低。C 语言规定的位运算共有一下几种:按位与按位或按位异或 (XOR) 。

5、取反 左移 右移1八0=11八1=0位翻转:令其和一个相应位为 位置一:令其和一个相应位为1,1,其他位位其他为为0 的常量做异或运算。0 的常量做或运算。 PORTA|=(1sex=M ;student31.sex=M;student32.score=95.5;共同体:共同体的所有成员都占有相同的空间,共同体占用的空间的 大小等于共同体内占用空间最大的变量所占用的空间。共同体类型声明形 式如下:union 共同体名数据类型 成员名 1;数据类型 成员名 2;数据类型 成员名 n;共同体的变量声明形式为: union 共同体名 共同体变量名 共同体变量引用的形式为: 共同体变量 .名成员;注意。

6、共同体的数据是储备在一个储备空间的,因此共同体变量所储备 的值等于最后一次对共同体变量所赋的值。不能对共同体变量名赋值,也不能在定义共同体变量时对其初始化, 对共同体的操作必须指明其成员。不能把共同体变量作为函数的参数和返 回值。例如:union length_unionUnit16_t word;Unit8_t byte2;length;/定义了一个共同体,有两个成员,一个是16 位的无符号整数,另外一个是一个包含两个无符号 8 位整数的数组,二者共用储备空间。在上例中,如果按照length_union.word来操作时,则作为一个16位无 符号整数,如果作为 length_union.by。

7、teO和 length_union.byte1操作,则访 咨询的是该储备空间的低位字节和高位字节。枚举类型如果变量只有几个可能的取值,则能够用枚举类型表示该变量。枚举 类型定义形式为:enum 枚举类型标识符 枚举列表 ; 枚举变量的定义为: enum 枚举类型 枚举变量名; 例如: enum color red,green,blue;C 语言将枚举类型中的枚举元素定义为常量,因此枚举元素是有值的,C语言自动按照值的顺序定义值为 0, 1, 2,,枚举元素的值能够改变 enum colorred=5,green,blue; /red 代表 5,后面的未定值依次加一 例如:enum colorr。

8、ed,green,blue;enum color crt;crt=red;crt=2;crt=(enum color)2;量,强制转换。/错误将枚举元素中的值为2的元素赋值给crt变枚举变量的赋值必须用枚举元素,如果直截了当用整数赋值是不行的, 必须采纳强制转换。用户自定义类型用户能够对已存在的 C 语言类型名重新进行定义,从而方便使用,用 户定义类型一样为: typedef 类型名 标识符使用这些自定义类型是,必须包含 inttypes.h 头文件。例如:#include typedef signed char int8_t/ 八位有符号数(无分号)typedef unsigned char。

9、 uint8_t/ 八位无符号数预处理C 语言的预处理功能要紧有一下三方面:宏定义文件包含条件编译宏定义 宏定义的作用是用指定的标识符代表一个字符串,宏能够参数,也能 够不带参数,不带参数的宏定义的一样形式为: #define 标识符 字符串带参数的宏定义声明形式为: #define 宏名(参数表) 字符串 例如:define S(a,b) a*b/定义了一个带参数的宏int main(void)int i;i=S(5,6);/该语句与 i=5*6 完全一样return 0;文件包含文件包含的作用是将一个文件的内容包括到另一个文件之中,文件包 含的形式为:#include “文件名”#incl。

10、ude 第一种第一在当前文件的所在名目中查找包含的文件,如果找不到再 到系统指定的包含文件的名目去查找,第二种则直截了当在系统指定的包 含名目中去查找,一样为了保险起见,尽量使用双引号形式的in elude指令条件编译 条件编译能够按照用户定义的不同条件,选择使用不同的语句,这在 编写可移植的程序时专门有用。条件编译有以下几种形式:第一种#ifdef 标识符程序段 1#else程序段 2#endif该语句的作用是, 如果在此语句前用 “#define 标识符”定义了标识符, 则只在程序中包含程序段 1,否则只包含程序段 2.第二种#ifndef 标识符程序段 1#else程序段 2#endif。

11、该语句的作用是,如果在此语句前没有用“ #define 标识符”定义了标 识符,则只在程序中包含程序段 1,否则只包含程序段 2第三种#if 表达式程序段 1#else程序段 2#endif 该语句的作用是,如果表达式的值为真,则值在程序中包含程序段1,否则,若表达式的值为 0,则只在程序中包含程序段 2.AVR-LIBC 的中断处理函数 关于不同的编译器有不同的方法处理中断,这是因为 C 语言的目标确 实是与处理器的细节无关,因此每个编译器的作者都不得不使用自己的方 法为编译器添加对中断的支持。在 AVR-LIBC 的环境中,中断向量表差不多预先固定指向具有特定名 字的函数,这些函数用来执行。

12、中断操作。使用这些专门名字的函数可在相 应中断发生时被调用。AVR-LIBC 中,对中断处理函数进行了封装,通过使用两个参数的宏 I NTERRUPT ()和SIGNAL (),程序可正确的处理不同的中断操作。#include “ avr/signal.h”INTERRUPT ( SIG_ADC )/用户代码或者为#include “ avr/signal.h”SIGNAL (SIG_ADC )/用户代码全局中断标志操作函数:#define sei() _asm_ _volatile_(“ sei” :) 使用中断处理函数,必须加入下面的包含语句:#include sei();/设置全局中断标。

13、志位承诺全局中断#define cli() _asm_ _volatile_(“cli ” :) 使用中断处理函数,必须加入下面的包含语句:#include cli();/清晰全局中断标志位来禁止全局中断上面的两个函数实际上只生成一条汇编指令,可不能增加用户程序的 负担。使用算术运算函数avr-libc 提供了算术运算函数,使用数学的数学运算函数请在程序的头 部加入包含语句:#include “ math.h”为了使用数学运算函数,需要链接库libm.a,通常该库是不链接到用户 的程序中的, 为了链接库, 请在自己的 GCC 编译选项的结尾加入 -lm 选项 即用PN打开makefile文件的。

14、第130行,MATH_LIB二 lm专门功能寄存器的操作方式: 在单片机系统中,经常要对寄存器或者外围设备进行操作,这些操作 差不多上通过一组专门功能寄存器的操作实现的。AVR 单片机中,提供了两种方法完成操作。一种是独立的 I/O 地址空 间,通过专门的 I/O 操作指令, 能够利用专门的 I/O 指令操作部分或全部的 I/O 空间。另外一种是 I/O 地址也被映射到单片机的内存空间中,因此也能 够用通常的内存操作指令完成I/O的操纵,I/O地址加上0x20的偏移量确 实是 I/O 映射到内存空间中的地址。 AVR 单片机支持这两种操作,一样使 用后者,而且这些操作差不多封装好,不需要编程者。

15、干预。因此,编程者 能够使用专门函数如outb ()操作I/O。#include outb(PORTA,0x33);或者直截了当向内存中映射的地址写数据 PORTA=0x33;编译器会选择合适的指令生成操作代码访咨询 I/O 端口,与编程人员书 写的代码无关。因此,即使编程者使用内存映射的方式书写 C代码,例如: PORTA|=0x44,编译器也会在优化时自动使用直截了当 I/O地址访咨询的 方式生成汇编代码,同时尽量可能使用位操作方式(如 sbi 指令)。使用内存映射方式操作专门功能寄存器,能够使C程序更方便地移植到其他AVR的C编译器中,同时也能够部分提升程序的可读性。在不优化大的情形下,编译器按照表达式的形式生成内存映像方式的 代码,然而在打开编译器优化的选项后,编译器会按照操作的内容自动使 用更快的 in/out 指令生成代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值