一,、庫(kù)函數(shù)頭文件介紹 庫(kù)函數(shù)按不同的類別聲明在不同的頭文件中,以字母為序分別介紹頭文件: ctype.h:字符類型函數(shù) eeprom.h:EEPROM 訪問(wèn)函數(shù) errno.h:錯(cuò)誤處理函數(shù) ina90.h:與IAR C兼容的頭文件 interrupt.h:中斷處理函數(shù) inttypes.h:定義不同的數(shù)據(jù)類型 io.h:包含寄存器定義和其它頭文件 math.h:數(shù)學(xué)函數(shù) pgmspace.h:與IAR C兼容的頭文件,,內(nèi)含對(duì)Flash存儲(chǔ)器中數(shù)據(jù)讀寫(xiě)函數(shù) progmem.h:與pgmspace.h 頭文件相同 setjmp.h:長(zhǎng)跳轉(zhuǎn)函數(shù) sig-avr.h:與signal.h相同,,舊版頭文件,建議不使用 signal.h:信號(hào)處理函數(shù) stdlib.h:標(biāo)準(zhǔn)庫(kù)函數(shù) stdio.h:標(biāo)準(zhǔn)輸入輸出函數(shù) string.h:字符串操作函數(shù) timer.h:定時(shí)器控制函數(shù) twi.h:針對(duì)ATmega163的I2C函數(shù) wdt.h:看門(mén)狗定時(shí)器控制函數(shù) 注:AVRGCC在使用前應(yīng)包含頭文件,,例如#include <avr/signal.h>,,這里要包含頭文件所在的文件夾avr,用戶自己的頭文件可以先復(fù)制到avr文件夾下,。
二,、字符類型處理函數(shù)庫(kù) int isalnum(int c):如果c為字母或數(shù)字則返回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為數(shù)字則返回1,,否則返回0。 int isgraph(int c):如果c為可打印字符(不包括空格)則返回1,,否則返回0,。 int islower(int c):如果c為小寫(xiě)字母則返回1,否則返回0,。 int isprint(int c):如果c為可打印字符(包括空格)則返回1,,否則返回0。 int ispunct(int c):如果c為標(biāo)點(diǎn)符號(hào)則返回1,,否則返回0,。 int isspace(int c):如果c為空格,、' '、'\f',、'\r',、'\t'、'v'之一則返回1,,否則返回0,。 int isupper(int c):如果c為大寫(xiě)字母則返回1,否則返回0,。 int isxdigit(int c):如果c為16進(jìn)制數(shù)則返回1,,否則返回0。 int toascii(int c):將c轉(zhuǎn)換為7位ASCII字符,,成功返回1,,否則返回0。 int tolower(int c):將c轉(zhuǎn)換為小寫(xiě)字母,,成功返回1,,否則返回0。 int toupper(int c):將c轉(zhuǎn)換為大寫(xiě)字母,,成功返回1,,否則返回0。 三,、AVRGCC內(nèi)置EEPROM訪問(wèn)函數(shù)庫(kù) void eeprom_read_block(void *buf, unsigned int addr, size_t n):從EEPROM的addr地址開(kāi)始,,讀取n個(gè)字節(jié)到buf。 int eeprom_is_ready():宏定義,,EEPROM準(zhǔn)備好(EECR =0)返回非0,,否則返回0。 unsigned char eeprom_read_byte (unsigned int addr):從EEPROM讀取addr地址處的字節(jié)數(shù)據(jù),,在以前的版本中為unsigned char eeprom_rb(unsigned int addr),,新版也兼容舊版本的函數(shù)。 unsigned int eeprom_read_word(unsigned int addr):從EEPROM讀取一個(gè)整數(shù),,低字節(jié)地址addr,,高字節(jié)地址(addr+1) ,在以前的版本中為unsigned int eeprom_rw(unsigned int addr),,新版本也兼容舊版本的函數(shù),。 void eeprom_write_byte (unsigned int addr, unsigned char val):向EEPROM的addr地址處寫(xiě)入字節(jié)數(shù)據(jù)val,在以前的版本中為void eeprom_wb(unsigned int addr, unsigned char val),,新版本也兼容舊版本的函數(shù)。 _EEPUT(addr, val) eeprom_wb(addr, val):與IAR C的兼容函數(shù) _EEGET(var, addr) (var) = eeprom_rb(addr):與IAR C的兼容函數(shù)
四,、AVRGCC定義不同類型的數(shù)據(jù) 在使用前應(yīng)包含頭文件#include <inttypes.h>,,在本頭文件中重新進(jìn)行數(shù)據(jù)類型定義,,將GNU的數(shù)據(jù)類型改為符合ANSI C的規(guī)范。 typedef signed char int8_t:8位有符號(hào)數(shù) typedef unsigned char uint8_t:8位無(wú)符號(hào)數(shù) typedef int int16_t:16位有符號(hào)數(shù) typedef unsigned int uint16_t:16位無(wú)符號(hào)數(shù) typedef long int32_t:32位有符號(hào)數(shù) typedef unsigned long uint32_t:32位無(wú)符號(hào)數(shù) typedef long long int64_t:64位有符號(hào)數(shù) typedef unsigned long long uint64_t:64位無(wú)符號(hào)數(shù) Typedef int16_t intptr_t:指針 Typedef uint16_t uintptr_t:指針 注意:在使用“-mint8”選項(xiàng)時(shí),,編譯器將把int類型定義為8位
五,、AVRGCC數(shù)學(xué)函數(shù)庫(kù) 在使用前應(yīng)包含頭文件#include <math.h>,而且math.h數(shù)學(xué)函數(shù)庫(kù)中定義的函數(shù)需要libm.a庫(kù)文件支持,,因此在在連接時(shí)增加-lm參數(shù),,或者在在makefile的LDFLAGS=后面追加-lm參數(shù)。 M_PI:常數(shù),,為3.141592653589793238462643 M_SQRT2:常數(shù),,為1.4142135623730950488016887 double cos( double x ):返回以弧度形式表示x的余弦值 double fabs( double x ):返回x的絕對(duì)值。 double fmod( double x, double y ):返回x/y的余數(shù) double modf( double x, double *iptr ):把浮點(diǎn)數(shù)分解成整數(shù)部分和小數(shù)部分,,整數(shù)部分存放到pint指向的變量,,小數(shù)部分應(yīng)當(dāng)大于或等于0而小于1,并且作為函數(shù)返回值返回,。 double sin( double x ):返回以弧度形式表示x的正弦值,。 double sqrt( double x ):返回x的平方根 double tan( double x ):返回以弧度形式表示x的正切值。 double floor( double x ):返回不大于x的最大整數(shù),。 double ceil( doublce x ):返回不小于x的最小整數(shù),。 double frexp( double x, int *exp ):把浮點(diǎn)數(shù)x分解成數(shù)字部分y(尾數(shù))和以2為底的指數(shù)n兩個(gè)部分,即x=y*2n,,y的范圍為0.5≤y<1,,y值被函數(shù)返回,而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的自然對(duì)數(shù),。 double log10( double x ):返回以10為底的對(duì)數(shù) double pow( double x, double y ):返回xy值 int isnan(double x):如果x為非負(fù)數(shù)(NAN,,值為0xffffffff),返回1,,否則返回0 int isnaf(double x):如果x的值為正溢出(+INF,,值大于0x7f800000)和負(fù)溢出(-INF,值小于0xff800000)則返回0,,否則返回1 double strtod( const char *s, char **endptr ):將ASCII字符串轉(zhuǎn)換為double數(shù) double square( double x ):返回x的平方根 double inverse( double x ):返回1/x
六,、AVRGCC字符串操作函數(shù)庫(kù) 在使用前應(yīng)包含頭文件#include <string.h> void * memccpy (void *dest,const void *src,int val,size_t len):從scr復(fù)制不超過(guò)len個(gè)字節(jié)到dest,在復(fù)制的過(guò)程中如果存在val,,則停止復(fù)制并返回,,如果不存在val,則復(fù)制len個(gè)字符,。 void * memchr(const void *src,int val,size_t len):在字符串src中搜索len個(gè)字節(jié)長(zhǎng)度以尋找與val相同的字符,,如果成功返回匹配字符的地址指針,,否則返回NULL int memcmp(const void *s1,const void *s2,size_t len):對(duì)字符串s1和s2的前l(fā)en個(gè)字符進(jìn)行比較,如果相同返回0,,如果s1中字符串大于s2中字符串,,則返回大于0的值,如果s1中字符串小于s2中字符串,,則返回小于0的值,。 void * memcpy(void *dest,const void *src,size_t len):拷貝src所指的對(duì)象中拷貝len個(gè)字符至dest所指的對(duì)象中,函數(shù)返回dest的值,。,。 void * memmove(void *dest,const void *src,size_t len):拷貝src中l(wèi)en個(gè)字符至dest,其它與memcpy基本相同,,但拷貝區(qū)可以重迭,,在拷貝過(guò)程中使用了個(gè)長(zhǎng)度為len的臨時(shí)數(shù)組。 void * memset(void *dest,int val,size_t len):在dest中從開(kāi)始位置填充len個(gè)字節(jié)的val,,它返回dest int strcasecmp(const char *s1,const char *s2):比較兩個(gè)字符串,,如果相同返回0,如果s1中字符串大于s2中字符串,,則返回大于0的值,,如果s1中字符串小于s2中字符串,則返回小于0的值,。 char * strcat(char *dest,const char *src):將src所指向的字符串(包括終止字符串的空字符)復(fù)制到dest所指向的數(shù)組的末尾,,并且src所向指向的字符串的初始字符將覆蓋dest末尾的空字符,函數(shù)返回dest的值,。 char *strchr(const char *src,int val):在字符串src中搜索最后出現(xiàn)的val,,并返回它的位置,終止字符串的空字會(huì)也作為串的一部分,,函數(shù)返回指src中第一個(gè)val的位置,,如果沒(méi)有出現(xiàn)與val相同的字符,則返回一個(gè)空指針,。 int strcmp(const char *s1,const char *s2):比較兩個(gè)字符串,,如果相同返回0,如果s1中字符串大于s2中字符串,,則返回大于0的值,,如果s1中字符串小于s2中字符串,則返回小于0的值,。 char * strcpy(char *dest,const char *src):將src所指向的字符串(包括終止字符串的空字符)復(fù)制到dest所指向的數(shù)組的末尾,,函數(shù)返回dest的值。 size_t strlcat(char *dest,const char *src,size_t size):基本和strcat函數(shù)相同,,但只復(fù)制前size個(gè)字符,,如果size大于src所指向字符串的長(zhǎng)度,,則將src復(fù)制到dest后就返回,。 size_t strlcpy(char *dest,const char *src,size_t size):基本和strcpy函數(shù)相同,,但只復(fù)制前size個(gè)字符,如果size大于src所指向字符串的長(zhǎng)度,,則將src復(fù)制到dest后就返回,。 size_t strlen(const char *src):返回字符串src的長(zhǎng)度,不包括結(jié)束NULL字符 char * strlwr(char *string):將src字符串中的大寫(xiě)字母轉(zhuǎn)換成相應(yīng)的小寫(xiě)字母,,其它字符保持不變 int strncasecmp(const char *s1,const char *s2,size_t len):基本和strcasecmp函數(shù)相同 char * strncat(char *dest,const char *src,size_t len):函數(shù)strncat將src所指向的字符串(包括終止字符和空字符)復(fù)制到dest所指向的數(shù)組的末尾,,最多追回len個(gè)字符,空字符及空字符后的字符不予復(fù)制,。src的初始字符覆蓋dest末尾的空字符,。結(jié)果字符串的末尾通常追加一個(gè)空字符,函數(shù)返回dest的值,。 int strncmp(const char *s1,const char *s2,size_t len):函數(shù)比較s1和s2所指向的字符串,,如果相同返回0,如果s1中字符串大于s2中字符串,,則返回大于0的值,,如果s1中字符串小于s2中字符串,則返回小于0的值,。 char *strncpy(char *dest,const char *src,size_t len):基本和strlcpy函數(shù)相同 size_t strnlen(const char *src,size_t len):基本和strlen函數(shù)相同,,如果src小于len,則返回src的長(zhǎng)度(不包含結(jié)束NULL字符),,否則返回len char * strrchr(const char *src,int val):基本和strchr函數(shù)相同,,但返回的是最后一次與val匹配字符的位置 char * strrev(char *string):將字符串string翻轉(zhuǎn),即第一個(gè)字符變成最后一個(gè),,最后一個(gè)變成第一個(gè),。 char * strstr(const char *s1,const char *s2):在字符串s1中搜索字符串s2,并返回找到的第一個(gè)相匹配的針,,否則返回NULL char * strupr(char *string):將src字符串中的小寫(xiě)字母轉(zhuǎn)換成相應(yīng)的大寫(xiě)字母,,其它字符保持不變
七、定時(shí)器控制函數(shù)timer.h
文件包含為:#include <avr/timer.h> timer.h文件定義定時(shí)/計(jì)數(shù)器使用的一個(gè)枚舉類型: enum { STOP = 0, CK = 1, CK8 = 2, CK64 = 3, CK256 = 4, CK1024 = 5, T0_FALLING_EDGE = 6, T0_RISING_EDGE = 7 }; 枚舉類型定義定時(shí)/計(jì)數(shù)器的控制寄存器的時(shí)鐘源(分頻系數(shù)) void timer0_source( unsigned int src):將src賦值給寄存器TCCR0 void timer0_stop();:通過(guò)對(duì)寄存器TCNT0清零來(lái)停止定時(shí)器0 void timer0_start();:通過(guò)對(duì)寄存器TCNT0寫(xiě)入1來(lái)啟動(dòng)定時(shí)器0
|