單片機(jī)C語言常用頭文件_第1頁
單片機(jī)C語言常用頭文件_第2頁
單片機(jī)C語言常用頭文件_第3頁
單片機(jī)C語言常用頭文件_第4頁
單片機(jī)C語言常用頭文件_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、函數(shù)原形的頭文件讀者可參考返回非整型值的函數(shù)assert.h-assert(),聲明宏ctype.h-字符類型函數(shù)float.h-浮點(diǎn)數(shù)原形limits.h-數(shù)據(jù)類型的大小和范圍math.h-浮點(diǎn)運(yùn)算函數(shù)stdarg.h-變量參數(shù)表.stddef.h-標(biāo)準(zhǔn)定義stdio.h-標(biāo)準(zhǔn)輸入輸出IO函數(shù)stdlib.h-包含內(nèi)存分配函數(shù)的標(biāo)準(zhǔn)庫string.h-字符串處理函數(shù)字符類型庫下列函數(shù)按照輸入的ACSII字符集字符分類使用這些函數(shù)之前應(yīng)當(dāng)用#includevctype.h包含intisalnum(intc)如果c是數(shù)字或字母返回非零數(shù)值否則返回零intisalpha(intc)如果c是字母返回

2、非零數(shù)值否則返回零intiscntrl(intc)如果c是控制字符如FF,BELL,LF.等返回非零數(shù)值否則返回零intisdigit(intc)如果c是數(shù)字返回非零數(shù)值否則返回零intisgraph(intc)如果c是一個(gè)可打印字符而非空格返回非零數(shù)值否則返回零intislower(intc)如果c是小寫字母返回非零數(shù)值否則返回零intisprint(intc)如果c是一個(gè)可打印字符返回非零數(shù)值否則返回零intispunct(intc)如果c是一個(gè)可打印字符而不是空格數(shù)字或字母返回非零數(shù)值否則返回零intisspace(intc)如果c是一個(gè)空格字符返回非零數(shù)值包括空格CR,FF,HT,NL

3、,和VT否則返回零intisupper(intc)如果c是大寫字母返回非零數(shù)值否則返回零intisxdigit(intc)如果c是十六進(jìn)制數(shù)字返回非零數(shù)值否則返回零inttolower(intc)如果c是大寫字母則返回c對(duì)應(yīng)的小寫字母其它類型仍然返回cinttoupper(intc)如果c是小寫字母則返回c對(duì)應(yīng)的大寫字母其它類型仍然返回c浮點(diǎn)運(yùn)算庫下列函數(shù)支持浮點(diǎn)數(shù)運(yùn)算使用這些函數(shù)之前必須用#includevmath.h包含floatasin(floatx)以弧度形式返回x的反正弦值floatacos(floatx)以弧度形式返回X的反余弦值floatatan(floatx)以弧度形式返回X的

4、反正切值floatatan2(floatX,floaty)返回y/x的反正切其范圍在-+之間floatceil(floatX)返回對(duì)應(yīng)x的一個(gè)整型數(shù)小數(shù)部分四舍五入floatcos(floatX)返回以弧度形式表示的x的余弦值floatcosh(floatx)返回x的雙曲余弦函數(shù)值floatexp(floatx)返回以e為底的x的幕即exfloatexp10(floatx)返回以10為底的幕即10 xfloatfabs(floatx)返回x的絕對(duì)值floatfloor(floatx)返回不大于X的最大整數(shù)floatfmod(floatx,floaty)返回x/y的余數(shù)floatfrexp(fl

5、oatx,int*pexp)把浮點(diǎn)數(shù)x分解成數(shù)字部分y尾數(shù)和以2為底的指數(shù)n兩個(gè)部分即x=y2ny的范圍為0.5y1y值被函數(shù)返回而n值存放到pexp指向的變量中floatfround(floatx)返回最接近x的整型數(shù)floatldexp(floatx,intexp)返回x2floatlog(floatx)返回x的自然對(duì)數(shù)floatlog10(floatx)返回以10為底的x的對(duì)數(shù)floatmodf(floatx,float*pint)把浮點(diǎn)數(shù)分解成整數(shù)部分和小數(shù)部分整數(shù)部分存放到pint指向的變量小數(shù)部分應(yīng)當(dāng)大于或等于0而小于1并且作為函數(shù)返回值返回floatpow(floatx,floa

6、ty)返回Xy值floatsqrt(floatx)返回x的平方根floatsin(floatx)返回以弧度形式表示的x的正弦值floatsinh(floatx)返回x的雙曲正弦函數(shù)值floattan(floatx)返回以弧度形式表示的X的正切值floattanh(floatx)返回X的雙曲正切函數(shù)值標(biāo)準(zhǔn)輸入輸出庫標(biāo)準(zhǔn)的文件輸入輸出是不能真正植入微控制器MCU的標(biāo)準(zhǔn)stdio.h的許多內(nèi)容不可以使用不過有一些IO函數(shù)是被支持的同樣使用之前應(yīng)用#includevstdio.h預(yù)處理并且需要初始化輸出端口最低層的IO程序是單字符的輸入(getchar)和輸出(putchar)程序如果你針對(duì)不同的裝置

7、使用高層的IO函數(shù)例如用printf輸出LCD你需要全部重新定義最底層的函數(shù)為在ATMEL的AVRStudio模擬器終端IO窗口使用標(biāo)準(zhǔn)IO函數(shù)應(yīng)當(dāng)在編譯選項(xiàng)中選中相應(yīng)的單選鈕注意作為缺省單字符輸出函數(shù)putchar是輸出到UART裝置沒有修改無論如何為使輸出能如期望的那樣出現(xiàn)在程序終端窗口中n字符必須被映射為成對(duì)的回車和換行CR/LFintgetchar()使用查尋方式從UART返回一個(gè)字符intprintf(char*fmt,.)按照格式說明符輸出格式化文本frm字符串格式說明符是標(biāo)準(zhǔn)格式的一個(gè)子集%d-輸出有符號(hào)十進(jìn)制整數(shù)%o-輸出無符號(hào)八進(jìn)制整數(shù)%X-輸出無符號(hào)十六進(jìn)制整數(shù)%X-除了大

8、寫字母使用A-F外同%x%u-輸出無符號(hào)十進(jìn)制整數(shù)%s-輸出一個(gè)以C中空字符NULL結(jié)束的字符串%c-以ASCII字符形式輸出只輸出一個(gè)字符%f-以小數(shù)形式輸出浮點(diǎn)數(shù)%S-輸出在FLASH存貯器中的字符串常量printf支持三個(gè)版本取決于你的特別需要和代碼的大小越高的要求代碼越大基本形:只有%c,%d,%X,%u,和%s格式說明符是承認(rèn)的長整形:針對(duì)長整形數(shù)的修改%ld,%lu,%lX被支持,以適用于精度要求較高的領(lǐng)域浮點(diǎn)形:全部格式包括f被支持你使用編譯選項(xiàng)對(duì)話框來選擇版本代碼大小的增加是值得關(guān)注的intputchar(intc)輸出單個(gè)字符這個(gè)庫程序使用了UART以查尋方式輸出單個(gè)字符注意

9、輸出n字符至程序終端窗口intputs(char*s)輸出以NL結(jié)尾的字符串intsprintf(char*buf,char*fmt)按照格式說明符輸出格式化文本frm字符串到一個(gè)緩沖區(qū)格式說明符同printf()constchar*支持功能cprintf和csprintf是將FLASH中的格式字符串分別以prinf和sprinf形式輸出標(biāo)準(zhǔn)庫和內(nèi)存分配函數(shù)標(biāo)準(zhǔn)庫頭文件vstdlib.h定義了宏NULL和RAND_MAX和新定義的類型size_t并且描述了下列函數(shù)注意在你調(diào)用任意內(nèi)存分配程序比如.callocmalloc和realloc)之前必須調(diào)用_NewHeap來初始化堆heapintab

10、s(inti)返回i的絕對(duì)值intatoi(char*s)轉(zhuǎn)換字符串s為整型數(shù)并返回它字符串s起始必須是整型數(shù)形式字符否則返回0doubleatof(constchar*s)轉(zhuǎn)換轉(zhuǎn)換字符串S為雙精度浮點(diǎn)數(shù)并返回它字符串S起始必須是浮點(diǎn)數(shù)形式字符串longatol(char*s)轉(zhuǎn)換字符串S為長整型數(shù)并返回它字符串s起始必須是長整型數(shù)形式字符否則返回0void*calloc(size_tnelem,size_tsize)分配nelem個(gè)數(shù)據(jù)項(xiàng)的內(nèi)存連續(xù)空間每個(gè)數(shù)據(jù)項(xiàng)的大小為size字節(jié)并且初始化為0如果分配成功返回分配內(nèi)存單元的首地址否則返回0voidexit(status)終止程序運(yùn)行典型的是

11、無限循環(huán)它是擔(dān)任用戶main函數(shù)的返回點(diǎn)voidfree(void*ptr)釋放ptr所指向的內(nèi)存區(qū)void*malloc(size_tsize)分配size字節(jié)的存貯區(qū)如果分配成功則返回內(nèi)存區(qū)地址如內(nèi)存不夠分配則返回0void_NewHeap(void*start,void*end)初始化內(nèi)存分配程序的堆一個(gè)典型的調(diào)用是將符號(hào)_bss_end+l的地址用作start值符號(hào)_bss_end定義為編譯器用來存放全局變量和字符串的數(shù)據(jù)內(nèi)存的結(jié)束加1的目的是堆棧檢查函數(shù)使用_bss_end字節(jié)存貯為標(biāo)志字節(jié)這個(gè)結(jié)束值不能被放入堆棧中externchar_bss_end;_NewHeap(&_bss_

12、end+l,&_bss_end+20l);/初始化200字節(jié)大小的堆intrand(void)返回一個(gè)在0和RAND_MAX之間的隨機(jī)數(shù)void*realloc(void*ptr,size_tsize)重新分配ptr所指向內(nèi)存區(qū)的大小為size字節(jié)size可比原來大或小返回指向該內(nèi)存區(qū)的地址指針voidsrand(unsignedseed)初始化隨后調(diào)用的隨機(jī)數(shù)發(fā)生器的種子數(shù)longstrtol(char*s,char*endptr,intbase)按照base.的格式轉(zhuǎn)換s中起始字符為長整型數(shù)如果endptr不為空*endptr將設(shè)定s中轉(zhuǎn)換結(jié)束的位置unsignedlongstrtoul(

13、char*s,char*endptr,intbase)除了返回類型為無符號(hào)長整型數(shù)外其余同strtol字符串函數(shù)用#includevstring.h預(yù)處理后編譯器支持下列函數(shù)vstring.h定義了NULL類型size_t和下列字符串及字符陣列函數(shù)void*memchr(void*s,intc,size_tn)在字符串s中搜索n個(gè)字節(jié)長度尋找與c相同的字符如果成功返回匹配字符的地址指針否則返回NULLintmemcmp(void*s1,void*s2,size_tn)對(duì)字符串si和s2的前n個(gè)字符進(jìn)行比較如果相同則返回0如果si中字符大于s2中字符則返回1如果s1中字符小于s2中字符則返回-1

14、void*memcpy(void*si,void*s2,size_tn)拷貝s2中n個(gè)字符至si但拷貝區(qū)不可以重迭void*memmove(void*si,void*s2,size_tn)拷貝s2中n個(gè)字符至si返回si其與memcpy基本相同但拷貝區(qū)可以重迭void*memset(void*s,intc,size_tn)在s中填充n個(gè)字節(jié)的c它返回schar*strcat(char*si,char*s2)拷貝s2到si的結(jié)尾返回sichar*strchr(char*s,intc)在si中搜索第一個(gè)出現(xiàn)的c包括結(jié)束NULL字符如果成功返回指向匹配字符的指針如果沒有匹配字符找到返回空指針ints

15、trcmp(char*si,char*s2)比較兩個(gè)字符串如果相同返回0如果sis2則返回i如果si提供再入式函數(shù)的變量參數(shù)處理它定義了不確定的類型va_list和三個(gè)宏va_start(va_listfoo,)初始化變量foova_arg(va_listfoo,)訪問下一個(gè)參數(shù)分派指定的類型注意那個(gè)類型必須是高級(jí)類型如intlong或double小的整型類型如char不能被支持va_end(va_listfoo)結(jié)束變量參數(shù)處理例如printf()可以使用vfprintf()來實(shí)現(xiàn)#includeintprintf(char*fmt,.)va_listap;va_start(ap,fmt);

16、vfprintf(fmt,ap);va_end(ap);堆棧檢查函數(shù)有幾個(gè)庫函數(shù)是用于檢查堆棧是否溢出內(nèi)存圖如下如果硬件堆棧增長到軟件堆棧中那么軟件堆棧的內(nèi)容將會(huì)被改變也就是說局部變量和別的堆棧項(xiàng)目被改變硬件堆棧是用作函數(shù)的返回地址如果你的函數(shù)調(diào)用層次太深偶然會(huì)發(fā)生這種情況同樣地軟件堆棧溢出進(jìn)數(shù)據(jù)區(qū)域?qū)?huì)改變?nèi)肿兞炕蚱渌o態(tài)分配的項(xiàng)目如果你使用動(dòng)態(tài)分配內(nèi)存還會(huì)改變堆項(xiàng)目這種情況在你定義了太多的局部變量或一個(gè)局部集合變量太大也會(huì)偶然發(fā)生高端地址硬件堆棧區(qū)警戒線軟件堆棧區(qū)警戒線數(shù)據(jù)區(qū)低端地址警戒線啟動(dòng)代碼寫了一個(gè)正確的關(guān)于數(shù)據(jù)區(qū)的地址字節(jié)和一個(gè)類似的正確的關(guān)于軟件堆棧的地址字節(jié)作為警戒線注意如果你使用了你自己的啟動(dòng)文件而其又是以6.20版本之前的啟動(dòng)文件為基礎(chǔ)的你將需要額外改造為新的啟動(dòng)文件注意如果你使用動(dòng)態(tài)分配內(nèi)存你必須跳過警戒線字節(jié)_bss_end來分配你的堆參考內(nèi)存分配函數(shù)堆棧檢查你調(diào)用_StackCheck(void)函數(shù)來檢查堆棧溢出如果警戒線字節(jié)仍然保持正確的值那么函數(shù)檢查通過如果堆棧溢出那么警戒線字節(jié)將可能被破壞注意當(dāng)你的程序堆棧溢出的時(shí)候你的程序?qū)⒖赡苓\(yùn)行不正?;蚺既槐罎?dāng)StackCheck檢

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論