历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2020年03月02日 | AVR GCC常见库函数和头文件介绍

2020-03-02 来源:eefocus

一、库函数头文件介绍

库函数按不同的类别声明在不同的头文件中,以字母为序分别介绍头文件:

ctype.h:字符类型函数

eeprom.h:EEPROM访问函数

errno.h:错误处理函数

ina90.h:与IAR C兼容的头文件

interrupt.h:中断处理函数

inttypes.h:定义不同的数据类型

io.h:包含寄存器定义和其它头文件

math.h:数学函数

pgmspace.h:与IAR C兼容的头文件,内含对Flash存储器中数据读写函数

progmem.h:与pgmspace.h头文件相同

setjmp.h:长跳转函数

sig-avr.h:与signal.h相同,旧版头文件,建议不使用

signal.h:信号处理函数

stdlib.h:标准库函数

stdio.h:标准输入输出函数

string.h:字符串操作函数

timer.h:定时器控制函数

twi.h:针对ATmega163的I2C函数

wdt.h:看门狗定时器控制函数


注:AVRGCC在使用前应包含头文件,例如#include,这里要包含头文件所在的文件夹avr,用户自己的头文件可以先复制到avr文件夹下。


二、字符类型处理函数库

int isalnum(int c):如果c为字母或数字则返回1,否则返回0。

int isalpha(int c):如果c为字母则返回1,否则返回0。

int isascii(int c):如果c为ASCII码则返回1,否则返回0。

int isblank(int c):如果c为空格字符则返回1,否则返回0,可以是space键或tab键输入的空格字符。

int iscntrl(int c):如果c为控制字符则返回1,否则返回0。

int isdigit(int c):如果c为数字则返回1,否则返回0。

int isgraph(int c):如果c为可打印字符(不包括空格)则返回1,否则返回0。

int islower(int c):如果c为小写字母则返回1,否则返回0。

int isprint(int c):如果c为可打印字符(包括空格)则返回1,否则返回0。

int ispunct(int c):如果c为标点符号则返回1,否则返回0。

int isspace(int c):如果c为空格、'''' ''''、''''f''''、''''r''''、''''t''''、''''v''''之一则返回1,否则返回0。

int isupper(int c):如果c为大写字母则返回1,否则返回0。

int isxdigit(int c):如果c为16进制数则返回1,否则返回0。

int toascii(int c):将c转换为7位ASCII字符,成功返回1,否则返回0。

int tolower(int c):将c转换为小写字母,成功返回1,否则返回0。

int toupper(int c):将c转换为大写字母,成功返回1,否则返回0。


三、AVRGCC内置EEPROM访问函数库

void eeprom_read_block(void *buf, unsigned int addr, size_t n):从EEPROM的addr地址开始,读取n个字节到buf。


int eeprom_is_ready():宏定义,EEPROM准备好(EECR =0)返回非0,否则返回0。

unsigned char eeprom_read_byte (unsigned int addr):从EEPROM读取addr地址处的字节数据,在以前的版本中为unsigned char eeprom_rb(unsigned int addr),新版也兼容旧版本的函数。


unsigned int eeprom_read_word(unsigned int addr):从EEPROM读取一个整数,低字节地址addr,高字节地址(addr+1),在以前的版本中为unsigned int eeprom_rw(unsigned int addr),新版本也兼容旧版本的函数。

void eeprom_write_byte (unsigned int addr, unsigned char val):向EEPROM的addr地址处写入字节数据val,在以前的版本中为void eeprom_wb(unsigned int addr, unsigned char val),新版本也兼容旧版本的函数。

_EEPUT(addr, val) eeprom_wb(addr, val):与IAR C的兼容函数

_EEGET(var, addr) (var) = eeprom_rb(addr):与IAR C的兼容函数


四、AVRGCC定义不同类型的数据

在使用前应包含头文件#include,在本头文件中重新进行数据类型定义,将GNU的数据类型改为符合ANSI C的规范。


typedef signed char int8_t:8位有符号数

typedef unsigned char uint8_t:8位无符号数

typedef int int16_t:16位有符号数

typedef unsigned int uint16_t:16位无符号数

typedef long int32_t:32位有符号数

typedef unsigned long uint32_t:32位无符号数

typedef long long int64_t:64位有符号数

typedef unsigned long long uint64_t:64位无符号数

Typedef int16_t intptr_t:指针

Typedef uint16_t uintptr_t:指针

注意:在使用“-mint8”选项时,编译器将把int类型定义为8位


五、AVRGCC数学函数库

在使用前应包含头文件#include,而且math.h数学函数库中定义的函数需要libm.a库文件支持,因此在在连接时增加-lm参数,或者在在makefile的LDFLAGS=后面追加-lm参数。


M_PI:常数,为3.141592653589793238462643

M_SQRT2:常数,为1.4142135623730950488016887

double cos( double x ):返回以弧度形式表示x的余弦值

double fabs( double x ):返回x的绝对值。

double fmod( double x, double y ):返回x/y的余数

double modf( double x, double *iptr ):把浮点数分解成整数部分和小数部分,整数部分存放到pint指向的变量,小数部分应当大于或等于0而小于1,并且作为函数返回值返回。

double sin( double x ):返回以弧度形式表示x的正弦值。

double sqrt( double x ):返回x的平方根

double tan( double x ):返回以弧度形式表示x的正切值。

double floor( double x ):返回不大于x的最大整数。

double ceil( doublce x ):返回不小于x的最小整数。

double frexp( double x, int *exp ):把浮点数x分解成数字部分y(尾数)和以2为底的指数n两个部分,即x=y*2n,y的范围为0.5≤y<1,y值被函数返回,而n值存放在pexp指向的变量中

double ldexp( double x, int exp ):返回x*2exp。

double exp( double x ):返回以e为底x的幂,即ex

double cosh( double x ):以弧度形式返回x的双曲余弦值

double sinh( double x ):以弧度形式返回x的双曲正弦值

double tanh( double x ):以弧度形式返回x的双曲正切值

double acos( double x ):以弧度形式返回x的余弦值

double asin( double x ):以弧度形式返回x的正弦值

double atan( double x ):以弧度形式返回x的余弦值

double atan2( double x, double y ):返回y/x的反正切,其范围在-π~+π之间

double log( double x ):返回x的自然对数。

double log10( double x ):返回以10为底的对数

double pow( double x, double y ):返回xy值

int isnan(double x):如果x为非负数(NAN,值为0xffffffff),返回1,否则返回0

int isnaf(double x):如果x的值为正溢出(+INF,值大于0x7f800000)和负溢出(-INF,值小于0xff800000)则返回0,否则返回1

double strtod( const char *s, char **endptr ):将ASCII字符串转换为double数

double square( double x ):返回x的平方根

double inverse( double x ):返回1/x


六、AVRGCC字符串操作函数库

在使用前应包含头文件#include

void * memccpy (void *dest,const void *src,int val,size_t len):从scr复制不超过len个字节到dest,在复制的过程中如果存在val,则停止复制并返回,如果不存在val,则复制len个字符。


void * memchr(const void *src,int val,size_t len):在字符串src中搜索len个字节长度以寻找与val相同的字符,如果成功返回匹配字符的地址指针,否则返回NULL

int memcmp(const void *s1,const void *s2,size_t len):对字符串s1和s2的前len个字符进行比较,如果相同返回0,如果s1中字符串大于s2中字符串,则返回大于0的值,如果s1中


字符串小于s2中字符串,则返回小于0的值。

void * memcpy(void *dest,const void *src,size_t len):拷贝src所指的对象中拷贝len个字符至dest所指的对象中,函数返回dest的值。。

void * memmove(void *dest,const void *src,size_t len):拷贝src中len个字符至dest,其它与memcpy基本相同,但拷贝区可以重迭,在拷贝过程中使用了个长度为len的临时数组。

void * memset(void *dest,int val,size_t len):在dest中从开始位置填充len个字节的val,它返回dest

int strcasecmp(const char *s1,const char *s2):比较两个字符串,如果相同返回0,如果s1中字符串大于s2中字符串,则返回大于0的值,如果s1中字符串小于s2中字符串,则返回小于0的值。

char * strcat(char *dest,const char *src):将src所指向的字符串(包括终止字符串的空字符)复制到dest所指向的数组的末尾,并且src所向指向的字符串的初始字符将覆盖dest末尾的空字符,函数返回dest的值。

char *strchr(const char *src,int val):在字符串src中搜索最后出现的val,并返回它的位置,终止字符串的空字会也作为串的一部分,函数返回指src中第一个val的位置,如果没有出现与val相同的字符,则返回一个空指针。

int strcmp(const char *s1,const char *s2):比较两个字符串,如果相同返回0,如果s1中字符串大于s2中字符串,则返回大于0的值,如果s1中字符串小于s2中字符串,则返回小于0的值。

char * strcpy(char *dest,const char *src):将src所指向的字符串(包括终止字符串的空字符)复制到dest所指向的数组的末尾,函数返回dest的值。

size_t strlcat(char *dest,const char *src,size_t size):基本和strcat函数相同,但只复制前size个字符,如果size大于src所指向字符串的长度,则将src复制到dest后就返回。

size_t strlcpy(char *dest,const char *src,size_t size):基本和strcpy函数相同,但只复制前size个字符,如果size大于src所指向字符串的长度,则将src复制到dest后就返回。

size_t strlen(const char *src):返回字符串src的长度,不包括结束NULL字符

char * strlwr(char *string):将src字符串中的大写字母转换成相应的小写字母,其它字符保持不变

int strncasecmp(const char *s1,const char *s2,size_t len):基本和strcasecmp函数相同

char * strncat(char *dest,const char *src,size_t len):函数strncat将src所指向的字符串(包括终止字符和空字符)复制到dest所指向的数组的末尾,最多追回len个字符,空字符及空字符后的字符不予复制。src的初始字符覆盖dest末尾的空字符。结果字符串的末尾通常追加一个空字符,函数返回dest的值。

int strncmp(const char *s1,const char *s2,size_t len):函数比较s1和s2所指向的字符串,如果相同返回0,如果s1中字符串大于s2中字符串,则返回大于0的值,如果s1中字符串小于s2中字符串,则返回小于0的值。

char *strncpy(char *dest,const char *src,size_t len):基本和strlcpy函数相同

size_t strnlen(const char *src,size_t len):基本和strlen函数相同,如果src小于len,则返回src的长度(不包含结束NULL字符),否则返回len

char * strrchr(const char *src,int val):基本和strchr函数相同,但返回的是最后一次与val匹配字符的位置

char * strrev(char *string):将字符串string翻转,即第一个字符变成最后一个,最后一个变成第一个。

char * strstr(const char *s1,const char *s2):在字符串s1中搜索字符串s2,并返回找到的第一个相匹配的针,否则返回NULL

char * strupr(char *string):将src字符串中的小写字母转换成相应的大写字母,其它字符保持不变


七、定时器控制函数timer.h


文件包含为:#include

timer.h文件定义定时/计数器使用的一个枚举类型:

enum

{

STOP = 0,

CK = 1,

CK8 = 2,

CK64 = 3,

CK256 = 4,

CK1024 = 5,

T0_FALLING_EDGE = 6,

T0_RISING_EDGE = 7

};

枚举类型定义定时/计数器的控制寄存器的时钟源(分频系数)

void timer0_source( unsigned int src):将src赋值给寄存器TCCR0

void timer0_stop();:通过对寄存器TCNT0清零来停止定时器0

void timer0_start();:通过对寄存器TCNT0写入1来启动定时器0


推荐阅读

史海拾趣

CalAmp公司的发展小趣事

在某年第一季度,CalAmp公司发布了其财报数据。根据财报,该季度公司实现营收7089.1万美元,虽然比市场预期的7566万美元略低6.30%,但仍然展现了稳健的增长态势。同时,公司的每股收益为-0.11美元,低于预期的0.04美元,这可能与公司在研发和市场拓展方面的持续投入有关。尽管如此,CalAmp公司在无线通信解决方案应用领域的广泛布局和深厚的客户基础,使得其整体业绩依然保持稳健。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

在某年第一季度,CalAmp公司发布了其财报数据。根据财报,该季度公司实现营收7089.1万美元,虽然比市场预期的7566万美元略低6.30%,但仍然展现了稳健的增长态势。同时,公司的每股收益为-0.11美元,低于预期的0.04美元,这可能与公司在研发和市场拓展方面的持续投入有关。尽管如此,CalAmp公司在无线通信解决方案应用领域的广泛布局和深厚的客户基础,使得其整体业绩依然保持稳健。

台湾双羽公司的发展小趣事

随着半导体技术的兴起,富士通敏锐地捕捉到了这一领域的巨大潜力。公司开始加大在半导体研发方面的投入,致力于开发出具有自主知识产权的半导体产品。经过不懈的努力,富士通在半导体领域取得了多项重大突破,不仅提升了自身的技术实力,也为全球半导体产业的发展做出了积极贡献。如今,富士通已成为全球领先的半导体制造商之一,其产品在各个领域都得到了广泛应用。

西博臣(CYBERSEN)公司的发展小趣事

广州西博臣科技有限公司(简称西博臣)成立于2001年,从创立之初就专注于湿度传感器的研发和生产。公司是国内最早从事高分子湿度传感器研发并进行规模化生产的厂家之一,凭借其独特的技术实力和对行业的深刻理解,逐渐在市场中崭露头角。

Chenmoun Enterprise Ltd公司的发展小趣事

随着公司业务的不断扩张,Chenmoun Enterprise Ltd开始实施全球化战略布局。公司在全球范围内设立了研发中心和生产基地,充分利用各地的资源优势和人才优势,提升产品的竞争力。同时,公司积极开拓国际市场,与多家国际知名企业建立了紧密的合作关系,实现了业务的快速增长。

Apex [Apex Microtechnology]公司的发展小趣事

Apex Microtechnology一直致力于开发在性能、质量和可靠性方面引领行业的产品。通过不断创新和研发,公司成功推出了多款具有竞争力的功率模拟产品,为全球客户提供高效的解决方案。同时,Apex Microtechnology也积极拓展全球市场,与众多知名企业建立了合作关系,进一步提升了其在电子行业的影响力。

问答坊 | AI 解惑

游逛车展心得

2008北京国际汽车展,这个世界级的汽车盛宴上,各种新车型、新能源、新技术、新概念集中亮相,展现在民众面前的必将是一个新的“竞”界。值得一看; 最便宜的路线: 坐地铁到天通苑站下车。出战有专车开往车展。 不过票价100,很难找到卖50 ...…

查看全部问答>

snapgear udp接收不了广播包

用原始套接字可以抓到包,但是UDP就是接收不了,不知道在哪里被拦截了。…

查看全部问答>

调查:有用MIPS32做过wince的吗?最新的Au1300 serials

做个调查,有用MIPS32做过wince的吗? 5.0或6.0 Au1100serials,Au1200 serials,最新的Au1300 serials 请高手讲讲在启动,地址(memory,virtual ,physical)上和ARM的区别吧?…

查看全部问答>

各位大侠,如何读取硬盘和CPU的序列号啊?急啊,拜托了...

各位大侠,如何读取硬盘和CPU的序列号啊? 我想做一个加密,想到读取硬盘盒CPU的序列号,加上自己的算法。…

查看全部问答>

抢楼抽到的LM3S811评估板收到啦~~~开始上图咯~~~~~~~~

昨天晚上8点整收到电话问我门牌号,今天早上看到帖子说评估板已经寄出了,手机一查10点已经到威海了....不得不说顺丰还真是给力啊....下午收到短信说已经到了,下了课直奔门口,嘿嘿,废话不多说了,先上开箱图——     要打开了, ...…

查看全部问答>

教你计算Buck降压储能电感

如何计算请看下面介绍   如图:输入20-24VDC,输出12V1.8A  频率Fs=250KHZ  计算储能电感值 1.电感最大峰值压降VL=Vinmax-Vo=24V-12V=12V 2.压比Vd=Vo/Vinmax=12V/24V=0.5 3.纹波电流^I=Io*0.3=1.8A*0.3=0.54A 4.储能电感值Lmin=VL*V ...…

查看全部问答>

Quartus开发环境出现的specify a legal end time的问题

Quartus开发环境出现的specify a legal end time的问题 当输入波形时要想改变时间的长短时,总是出现specify a legal end time的现象,添加一个main Time Bar也会有这个提示。解决的方法是在Edit菜单下,有一个End Time菜单,在这里可以修改时间 ...…

查看全部问答>

无意中找到的查SMD代码的 --很好的资料

无意中找到的查SMD代码的 --很好的资料 …

查看全部问答>

编译时遇到“program will not fit into lnk_msp430g2553.cmd“

ccs里c语言编写是老遇到这个错误! 点击进入后转到汇编优势这样的的。 这是怎么回事,是溢出了,可是程序没几行啊,…

查看全部问答>

诚聘PLC、FPGA、matlab、C++、C编程兼职技术(月薪1W+)

正规工作室,因业务量大,在职技术无法供应。现诚聘PLC、FPGA、matlab、C++、C编程兼职技术(有做电路板条件,在校研究生亦可)!有意者联系QQ:740718010,期待与你合作!…

查看全部问答>