




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、PICC 庫函數然后按照以下幾本章將詳細列出PICC編譯器的庫函數。每個函數均從函數名開始,個標題給出詳細解釋。提要:函數的C語言定義以及定義函數的頭文件。描述:對函數及其目的進行敘述性描述。例程:給出一個能說明該函數的應用例子。數據類型:列出函數中使用的一些特殊的數據類型(如結構體等)的C語言定義。這些數據類型的定義包含在提要標題下列出的頭文件中。參閱: 給出相關聯的函數。返回值: 如 果函數有返回值,則在本標題下將給出返回值的類型和性質,同時還包括錯誤返回的信息。1 ABS 函數1. 提 要#include <>int abs (int j)2. 描 述abs( ) 函數返回變
2、量j 的絕對值。3. 例 程#include <>#include <>voidmain (void)int a = -5;printf("The absolute value of %d is %dn", a, abs(a) ;4. 返回值j 的絕對值。2 ACOS函數1. 提 要#include <>double acos (double f)2. 描 述acos( ) 函數是 cos( ) 的反函數。函數參數在-1 , 1 區(qū)間內,返回值是一個用弧度表示的角度,而且該返回值的余弦值等于函數參數。3. 例 程#include <
3、>#include <>/* 以度為單位,打印 -1 , 1 區(qū)間內的反余弦值 */ void main (void) float i , a; for(i =, i <; i += a = acos(i)* ; printf("acos(%f) = %f degreesn" , i , a) ; 4 參 閱sin( ) , cos( ) , tan( ) , asin( ) , atan( ) , atan2( ) 5 返回值返回值是一個用弧度表示的角度,區(qū)間是 0,兀。如果函數參數超出區(qū)間-1 , 1, 則返回值將為 0。3 ASCTIMES 數
4、1. 提 要#include <>char * asctime (struct tm * t)2. 描 述 asctime( ) 函數通過指針t 從上 struct tm 結構體中獲得時間,返回描述當前日期和時間的26個字符串,其格式如下:Sun Sep 16 01:03:52 1973n0值得注意的是, 在字符串的末尾有換行符。 字符串中的每個字長是固定的。 以下例程得到當前時間,通過localtime()函數將其轉換成一個struct tm 指針,最后轉換成 ASCII碼并打印出來。其中, time( ) 函數需要用戶提供(詳情請參閱 time( ) 函數) 。 3. 例 程#
5、include <>#include <> void main (void) time_t clock ; struct tm * tp ; time(&clock) ; tp = localtime(&clock) ; printf("%s" , asctime(tp) ; 4. 參 閱ctime( ) , gmtime( ) , localtime( ), time( )5. 返回值指向字符串的指針。注意:由于編譯器不提供 time( ) 例行程序,故在本例程中它需要由用戶提供。詳情請參照 time( )函數。6. 數據類型str
6、uct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;int tm_mon ;int tm_year ;int tm_wday ;int tm_yday ;int tm_isdst ;4 ASIN 函數1. 提 要#include <>double asin (double f)2. 描 述asin( ) 函數是 sin( ) 的反函數。它的函數參數在-1 , 1 區(qū)間內,返回一個用弧度表示的角度值,而且這個返回值的正弦等于函數參數。3. 例 程#include <>#include <>voidm
7、ain (void)float i , a;for(i =; i <; i += a = asin(i)* ;printf("asin(%f) = %f degreesn", i , a) ;4. 參 閱sin( ) , cos( ) , tan( ) , acos( ) , atan( ) , atan2( )5. 返回值本函數返回一個用弧度表示的角度值,其區(qū)間為卜71/2,兀/2。如果函數參數的值超出區(qū)間 -1 , 1 ,則函數返回值將為 0 。5 ATAN函數1. 提 要#include <>double atan (double x)2. 描 述函
8、數返回參數的反正切值。也就是說,本函數將返回一個在區(qū)間-兀/2,兀/2的角度e,而且有tan(e)=x (x為函數參數)。3. 例 程#include <>#include <>voidmain (void)printf("%fn" , atan) ;4. 參 閱sin( ) , cos( ) , tan( ) , asin( ) , acos( ) , atan2( )5. 返回值返回函數參數的反正切值。6 ATAN2函數1. 提 要#include <>double atan2 (double y , double x)2. 描 述本
9、函數返回 y/x 的反正切值,并由兩個函數參數的符號來決定返回值的象限。3. 例 程#include <>#include <>voidmain (void)printf("%fn" , atan2 , 1) ;4. 參 閱sin( ) , cos( ) , tan( ) , asin( ) , acos( ) , atan( )5. 返回值返回y/x的反正切值(用弧度表示),區(qū)間為-兀,兀。如果y和x均為0,將出現定 義域錯誤,并返回 0 。7 ATOF 函數1. 提 要#include <>double atof (const cha
10、r * s)2. 描 述atof( ) 函數將掃描由函數參數傳遞過來的字符串,并跳過字符串開頭的空格。然后將一個數的 ASCII 表達式轉換成雙精度數。 這個數可以用十進制數、 浮點數或者科學記數 法表示。3. 例 程#include <>#include <>voidmain (void)char buf80;double i ;gets(buf) ;i = atof(buf) ;printf("Read %s: converted to %fn", buf , i) ;4. 參 閱atoi( ), atol( )5. 返回值本函數返回一個雙精度浮
11、點數。如果字符串中沒有發(fā)現任何數字,則返回。8 ATOI 函數1. 提 要#include <>int atoi (const char * s)2. 描 述atoi( ) 函數掃描傳遞過來的字符串,跳過開頭的空格并讀取其符號 ; 然后將一個十 進制數的 ASCII 表達式轉換成整數。 3. 例 程#include <>#include <> voidmain (void)char buf80;int i ;gets(buf) ;i = atoi(buf) ;printf("Read %s: converted to %dn", buf
12、, i) ;4. 參 閱xtoi( ), atof( ), atol( )5. 返回值返回一個有符號的整數。如果在字符串中沒有發(fā)現任何數字,則返回0。9 ATOL函數1 提 要#include <>long atol (const char * s)2 描 述atol( ) 函數掃描傳遞過來的字符串,并跳過字符串開頭的空格;然后將十進制數的ASCII表達式轉換成長整型。3 例 程#include <>#include <>voidmain (void)char buf80;long i ;gets(buf) ;i = atol(buf) ;printf(&q
13、uot;Read %s: converted to %ldn", buf , i) ;4 參 閱atoi( ), atof( )5 返回值返回一個長整型數。如果字符串中沒有發(fā)現任何數字,返回值為 0。10 CEIL 函數1. 提 要#include <>double ceil (double f)2. 描 述本函數對函數參數 f 取整,取整后的返回值為大于或等于f 的最小整數。3. 例程#include <>#include <>voidmain (void)double j ;scanf("%lf" , &j) ;pr
14、intf("The ceiling of %lf is %lfn", j , ceil(j) ;11 COS函數1. 提 要#include <>double cos (double f)2. 描 述本函數將計算函數參數的余弦值。其中,函數參數用弧度表示。余弦值通過多項式級數近似值展開式算得。3. 例 程#include <>#include <>#define Cvoidmain (void)double i ;for(i = 0; i <= ; i += 10)printf("sin(% = %f , cos = %f
15、n" , i , sin(i*C) , cos(i*C) ; 4. 參 閱sin( ) , tan( ) , asin( ) , acos( ) , atan( ) , atan2( )5. 返回值返回一個雙精度數,區(qū)間為 -1 , 1 。12 COSH SINH TAN函數1. 提 要#include <>double cosh (double f)double sinh (double f)double tanh (double f)2. 描 述這些函數都是cos( ) , sin()和tan()的雙曲函數。3. 例 程#include <>#includ
16、e <>voidmain (void)printf("%fn",cosh);printf("%fn",sinh);printf("%fn",tanh);4. 返回值cosh( )函數返回雙曲余弦值, sinh( ) 函數返回雙曲正弦值, tanh( ) 函數返回雙曲 正切值。13 CTIME 函數1. 提 要#include <>char * ctime (time_t * t)2. 描 述ctime( ) 函數將函數參數所指的時間轉換成字符串,其結構與asctime( ) 函數所描述的相同,并且精確到秒。以下
17、例程將打印出當前的時間和日期。3. 例 程#include <>#include <>voidmain (void)time_t clock ;time(&clock) ;printf("%s" , ctime(&clock) ;4. 參 閱gmtime( ) , localtime( ), asctime( ), time( )5. 返回值本函數返回一個指向該字符串的指針。注意:由于編譯器不會提供 time( ) 程序,故它需要由用戶給定。詳情請參閱 time( ) 函數。6. 數據類型typedef long time_t14 D
18、I 、 EI 函數1. 提 要#include <>void ei(void)void di(void)2. 描 述ei()和di()函數分別實現全局中斷使能和中斷屏蔽,其定義在頭文件中。它們將 被擴展為一條內嵌的匯編指令,分別對中斷使能位進行置位和清零。以下例程將說明 ei( ) 函數和 di( ) 函數在訪問一個長整型變量時的應用。由于中斷服務程序將修改該變量,所以如果訪問該變量不按照本例程的結構編程,一旦在訪問變量值的連續(xù)字期間出現中斷,則函數getticks( ) 將返回錯誤的值。3. 例 程#include <>long count ;void interru
19、pt tick(void)count+ ;long getticks(void)long val ; /* 在訪問 count 變量前禁止中斷,保證訪問的連續(xù)性*/di( ) ;val = count ;ei( ) ;return val ;15 DIV 函數1. 提 要#include <>div_t div (int numer , int demon)2. 描 述div( ) 函數實現分子除以分母,得到商和余數。3. 例 程#include <>#include <>voidmain (void)div_t x ;x = div(12345, 66)
20、;printf("quotient = %d , remainder = %dn", , ;4. 返回值返回一個包括商和余數的結構體 div_t 。 .5. 數據類型 t ypedef struct int quot ; int rem ; div_t ;16 EEPROM_REA DEEPROM_WRITE1. 提 要#include <>unsigned char eeprom_read (unsigned char addr) ;void eeprom_write (unsigned char addr , unsigned char value) ;2.
21、 描 述這些函數允許訪問片內 EEPROM口果片內有 EEPROM EEPROM是可直接尋址的寄存器空間,當需要訪問 EEPROM,就需要將一些特定的字節(jié)序列加載到EEPROM制寄存器中。寫EEPROM一個緩慢的過程。故eeprom_write()函數在寫入下一個數據前,會通過 查詢恰當的寄存器來確保前一個數據已經寫入完畢。另外,讀EEPROM以在一個指令周期內完成,所以沒有必要查詢讀操作是否完成。3. 例 程#include <> void main (void) unsigned char data ; unsigned char address ; address = 0x1
22、0 ; data = eeprom_read(address) ; 注意:如果調用eeprom_write()函數后需即刻調用eeprom_read()函數,則必須查詢EEPROM存 器以確保寫入完畢。全局中斷使能位( GIE)在eeprom_write()程序中重新恢復(寫 EEPROM需要關 閉總中斷)。而且,本函數不會清 EEIF標志位。17 EVAL_POLS 數1. 提 要#include <>double eval_poly (double x , const double * d , int n)2. 描 述eval_poly() 函數將求解一個多項式的值。這個多項式
23、的系數分別包含在x和數組d中,例如:y = x*x*d2 + x*d1 + d0該多項式的階數由參數M 專遞過來。3. 例 程#include <>#include <>voidmain (void)double x , y ;double d3 = , , ;x = ;y = eval_poly(x , d, 2) ;printf("The polynomial evaluated at %f is %fn", x , y) ;4. 返回值本函數返回一個雙精度數,該數是自變量x對應的多項式值。18 EXP 函數1. 提 要#include <
24、>double exp (double f)2. 描 述exp( ) 函數返回參數的指數函數值,即ef ( f 為函數參數) 。3. 例 程#include <>#include <>voidmain (void)double f ;for(f =; f <= 5 ; f +=printf("e to % = %fn", f , exp(f) ;4. 參 閱log( ) , log10( ) , pow( )19 FABS函數1. 提 要#include <>double fabs (double f)2. 描 述本函數返回雙
25、精度函數參數的絕對值。3. 例 程#include <>#include <> void main (void) printf("%f %fn", fabs , fabs) ;4. 參 閱 abs( )20 FLOOR0 數1. 提 要#include <>double floor (double f)2. 描 述本函數對函數參數取整,取整后的返回值不大于函數參數 f 。3. 例 程#include <>#include <>voidmain (void) printf("%fn", floor
26、( );printf("%fn", floor( );21 FREXP函數1. 提 要#include <>double frexp (double f , int * p)2. 描 述frexp( ) 函數將一個浮點數分解成規(guī)格化小數和 2 的整數次冪兩部分, 整數冪部分存于指針p所指的int單元中。本函數的返回值x或在區(qū)間(,)內,或為0 ;而且有f=xX2p。如果f為0,則分解出來的兩部分均為0。3. 例 程#include <>#include <>voidmain (void) double f ;int i ;f = frex
27、p , &i) ;printf("二 f * 2A%dn", f, i);4. 參 閱ldexp( )22 GET_CAL_DAT函數1. 提 要#include <>double get_cal_data (const unsigned char * code_ptr)2. 描 述本函數從 PIC 14000標定空間返回一個32位的浮點標定數據。只有利用這個函數才能訪問KREF KBG BHTHERMKTO元(32位浮點參數)。由于FOS®口 TWDT是一個字節(jié)長 度,故可以直接訪問它們。3. 例 程#include <>void
28、main (void)double x ;unsigned char y ;x = get_cal_data(KREF) ; /* 獲得參考斜率( slope reference ratio ) */y =TWDT; /*獲彳導WDT出時間*/4. 返回值返回定標參數值。注意:本函數僅用于PIC 1400023 GMTIME8 數1. 提 要#include <>struct tm * gmtime (time_t * t)2. 描 述本函數把指針 t 所指的時間分解, 并且存于結構體中,精確度為秒。其中, t 所指的時間必須自 1970年 1月 1日 0時0分0秒起。本函數所用的
29、結構體被定義在文件中, 可參照本節(jié)“數據類型”部分。3. 例 程#include <>#include <>voidmain (void)time_t clock ;struct tm * tp ;time(&clock) ;tp = gmtime(&clock) ;printf("It s %d in London n" , tp->tm_year+1900) ; 4. 參 閱ctime( ) , asctime( ) , time( ) , localtime( )5. 返回值返回tm類型的結構體。注意:由于編譯器不會提供
30、time( ) 程序,故它需要由用戶給定。詳情請參閱 time( ) 函數。6. 數據類型t ypedef long time_t ;struct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;int tm_mon ;int tm_year ;int tm_wday ;int tm_yday ;int tm_isdst ;24 ISALNUM, ISALPHA ISDIGIT, ISLOWE曲函數1. 提 要#include <>int isalnum (char c)int isalpha (char c)int isa
31、scii (char c)int iscntrl (char c)int isdigit (char c)int islower (char c)int isprint (char c)int isgraph (char c)int ispunct (char c)int isspace (char c)int isupper (char c)int isxdigit(char c)2. 描 述以上函數都被定義在文件中。它們將測試給定的字符,看該字符是否為已知的幾組字符中的成員。isalnum (c)c在09、az或者AZ范圍內;isalpha (c)c在 AZ或az范圍內;isascii (
32、c)c 為 7 位 ASCII 字符;iscntrl (c)c為控制字符;isdigit (c)c為十進制阿拉伯數字;islower (c)c在az范圍內;isprint (c)c為打印字符;isgraph (c)c為非空格可打印字符;ispunct (c)c不是字母數字混合的;isspace (c)c是空格鍵、TA腌或換行符;isupper (c)c在 AZ范圍內;isxdigit (c)c在09、af或AF范圍內。3例 程#include <>#include <> voidmain (void)char buf80;int i ;gets(buf) ;i = 0
33、;while(isalnum(bufi)i+ ;bufi = 0;printf(" %s is the word n" , buf) ;4參 閱toupper( ), tolower( ), toascii( )25 KBHIT 函數1. 提 要#include <>bit kbhit (void)2. 描 述如果鍵盤上的字符被按下,函數返回 1;否則返回0 。通常,該字符可通過getch( ) 函數讀取。3. 例 程#include <>voidmain (void)int i ;while(!kbhit() cputs("I m wai
34、ting.");for(i = 0; i != 1000; i+)continue ;4. 參 閱getch( ) , getche( )5. 返回值如果有鍵被按下,函數將返回 1 ;否則返回0。此外,返回值為1 位。注意:程序的主體需由用戶實現,其主要框架可以從 sources 目錄下直接獲得。26 LDEXP 函數1. 提 要#include <>double ldexp (double f , int i)2. 描 述f 的指數部分與整數 i 的求ldexp( ) 函數是 frexp( ) 的反函數。它先進行浮點數和運算,然后返回合成結果。3. 例 程#includ
35、e <>#include <>voidmain (void)double f ;f = ldexp , 10) ;printf(" * 2A10 = %fn", f);4. 參 閱frexp( )5. 返回值本函數返回浮點數 f 指數部分加上整數i 后得到的新浮點數。27 LDIV 函數1 . 提 要#include <>ldiv_t ldiv (long number , long denom)2 . 描 述ldiv( ) 函數實現分子除以分母,得到商和余數。商的符號與精確商的符號一致,絕對值是一個小于精確商絕對值的最大整數。Ldiv(
36、 ) 函數與 div( ) 函數類似;不同點在于,前者的函數參數和返回值(結構體ldiv_t )的成員都是長整型數據。3 例 程#include <>#include <>voidmain (void)ldiv_t lt ;lt = ldiv(1234567, 12345) ;printf("Quotient = %ld , remainder = %ldn" , , ;4 參閱div( )5 返回值返回值是結構體 ldiv_t 。6 數據結構typedef struct long quot ; /* 商 */long rem ; /* 余數 */
37、ldiv_t ;28 LOCALTIMEH 數1. 提 要#include <>struct tm * localtime (time_t * t)2. 描 述本函數把指針 t 所指的時間分解并且存于結構體中,精確度為秒。其中, t 所指的時間必須自1970年1月 1 日0時0分0秒起,所用的結構體被定義在文件中。localtime( ) 函數需要考慮全局整型變量time_zone 中的內容, 因為它包含有本地時區(qū)位于格林威治以西的時區(qū)數值。由于在MS-DO新境下無法預先確定這個值,所以,在缺省的條件下,localtime( ) 函數的返回值將與gmtime( ) 的相同。3. 例
38、 程#include <>#include <>char * wday = "Sunday" , "Monday" , "Thursday" , "Friday" ; voidmain (void)time_t clock ;struct tm * tp ;time(&clock) ; tp = localtime(&clock) printf("Today is %sn" 4. 參 閱ctime( ) , asctime( )"Tuesday&
39、quot; , "Wednesday" , , "Saturday";, wdaytp->tm_wday) ;time( )5. 返回值本函數返回tm結構體型數據。注意:由于編譯器不會提供 time( ) 程序,故它需要由用戶給定。詳情請參閱 time( )6. 數據結構t ypedef long time_t ;struct tm int tm_sec ;int tm_min ;int tm_hour ;int tm_mday ;函數。int tm_mon ;int tm_year ; int tm_wday ; int tm_yday ; in
40、t tm_isdst;29 LOG、LOG1函數1. 提 要#include <>double log (double f)double log10 (double f)2. 描 述log( ) 函數返回 f 的自然對數值。 log10( ) 函數返回 f 以10為底的對數值。3. 例 程#include <>#include <>voidmain (void)double f ;for(f =; f <= ; f +=printf("log(% = %fn", f , log(f) ;4. 參 閱exp( ) , pow( )5.
41、 返回值如果函數參數為負,返回值為 0 。30 MEMCHR 數1. 提 要#include <>/* 初級和中級系列單片機*/const void * memchr (const void * block, int val , size_t length)/* 高級系列單片機*/void * memchr (const void * block , int val , size_t length)2. 描 述memchr( )函數與 strchr( ) 函數在功能上類似; 但前者沒有在字符串中尋找null (空)中止字符的功能。 memchr( ) 函數實現在一段規(guī)定了長度的內存
42、區(qū)域中尋找特定的字節(jié)。它的函數參數包括指向被尋內存區(qū)域的指針、被尋字節(jié)的值和被尋內存區(qū)域的長度。函數將返回一個指針,該指針指向被尋內存區(qū)域中被尋字節(jié)首次出現的單元。3. 例 程#include <>#include <>unsigned int ary = 1, 5 , 0x6789 , 0x23 ;voidmain (void)char * cp ;cp = memchr(ary , 0x89 , sizeof ary) ;if(!cp)printf("not foundn") ;elseprintf("Found at offset %
43、un", cp - (char *)ary) ;4. 參 閱strchr( )5. 返回值函數返回指針。該指針指向被尋內存區(qū)域中被尋字節(jié)首次出現的單元;否則返回 NULL。31 MEMCM P 數1. 提 要#include <>int memcmp (const void * s1, const void * s2, size_t n)2. 描 述memcmp()i數的功能是比較兩塊長度為n的內存中變量的大小,類似 strncmp()函數返回一個有符號數。與strncmp()函數不同的是,memcmp()E數沒有空格結束符。ASCII 碼字符順序被用來比較; 但如果內存
44、塊中包含非ASCII 碼字符, 則返回值不確定。 測試是否相等總是可靠的。3. 例 程#include <>#include <> void main (void) int buf10, cow10, i;buf0 = 1;buf2 = 4;cow0 = 1;cow2 = 5;buf1 = 3;cow1 = 3;i = memcmp(buf, cow, 3*sizeof(int);if(i < 0)printf("less thann");else if(i > 0)printf("Greater thann");el
45、seprintf("Equaln");4. 參 閱strncpy() , strncmp() , strchr() , memset() , memchr()5. 返回值當內存塊變量s1 分別小于、等于或大于內存塊 s2 變量時 , 函數返回值分別為 -1 , 0或 1。32 MEMCPY 數1. 提 要#include <>/* 低級或中級系列單片機*/void * memcpy (void * d, const void * s, size_t n)/* 高級系列單片機*/far void * memcpy (far void * d, const void
46、 * s, size_t n)2. 描 述memcpy()函數的功能是,將指針s指向的、內存開始的n個字節(jié)復制到指針d指向的、 內存開始的單元。復制重疊區(qū)的結果不確定。與 strcpy()函數不同的是,memcpy()復制 的是一定數量的字節(jié),而不是復制所有結束符前的數據。3. 例 程#include <>#include <>voidmain (void)char buf80;memset(buf, 0, sizeof buf);memcpy(buf, "a partial string", 10);printf("buf = %sn&q
47、uot;, buf);4. 參 閱strncpy() , strncmp() , strchr() , memset()5. 返回值memcpy()函數返回值為函數的第一個參數。33 MEMMON®數1. 提 要#include <>/* 低級或中級系列單片機*/void * memmove (void * s1, const void * s2, size_t n)/* 高級系列單片機*/far void * memmove (far void * s1, const void * s2, size_t n)2. 描 述memmove()l數與memcpy()函數相似,
48、但memmove()l數能對重疊區(qū)進行準確的復制。也就是說,它可以適當向前或向后,正確地從一個塊復制到另一個塊,并將它覆蓋。3. 參 閱strncpy(), strncmp(), strchr(), memcpy()4. 返回值memmove()l數同樣返回它的第一個參數。34 MEMSE函數1. 提 要#include <>/* 低級和中級系列的單片機*/void * memset (void * s, int c, size_t n)/* 高級系列單片機*/far void * memset (far void * s, int c, size_t n)2. 描 述memset
49、()函數將字節(jié)c存儲到指針s指向的,內存開始的n個內存字節(jié)。3. 例 程#include <>#include <>voidmain (void)char abuf20;strcpy(abuf, "This is a string");memset(abuf, x , 5);printf("buf = %s n", abuf);4. 參 閱strncpy(), strncmp(), strchr(), memcpy(), memchr()35 MODF® 數1. 提 要#include <>double mo
50、df (double value, double * iptr)2. 描 述modf() 函數將參數value 分為整數和小數2部分,每部分都和value 的符號相同。 例如,將被分為整數部分( -3 ) 和小數部分 () 。 其中整數部分以雙精度數據類型存儲在指針 iptr指向的單元中。3. 例 程#include <>#include <>voidmain (void)double i_val, f_val;f_val = modf( , &i_val);4. 返回值函數返回值為value 的帶符號小數部分。36 PERSIST_CHECK, PERSIST
51、_VALIDATB:1. 提 要#include <>int persist_check (int flag)void persist_validate (void)2. 描 述persist_check()函數要用到非可變(non-volatile )的RAM!量,這些變量在定義時 被 加 上 限 定 詞 persistent 。 在 測 試NVRAM( 非 可 變 RAM) 區(qū) 域 時 , 先 調 用persist_validate() 函 數 , 并 用 到 一 個 存 儲 在 隱 藏 變 量 中 的 虛 擬 數 據 , 且 由 persist_validate() 函數計算
52、得到一個測試結果。如果虛擬數據和測試結果都正確,則 返回值為真(非零) 。如果都不正確,則返回零。在這種情況下,函數返回零并且重新檢測NVRAM域(通過調用persist_validate() 函數)。函數被執(zhí)行的條件是標志變量變量不為 0。 persist_validate() 函數應在每次轉換為永久變量之后調用。 它將重新建立虛擬 數據和計算測試結果。 3. 例 程#include <>#include <>persistent long reset_count;voidmain (void) if(!persist_check(1)printf("Res
53、et count invalid - zeroedn");elseprintf("Reset number %ldn", reset_count);reset_count+; /* update count */persist_validate(); /* and checksum */ for(;)continue; /* sleep until next reset */ 4. 返回值如果NVRA鼠域無效,則返回值為假(零);如果NVRAM域有效,則返回值為真(非 零) 。37 POW0 數1. 提 要#include <>double pow (
54、double f, double p)2. 描 述pow()函數表示第一個參數f的p次哥。3. 例 程#include <>#include <> void main (void) double f;for(f = ; f <= ; f +=printf("pow(2, % = %fn", f, pow(2, f); 4. 參 閱log(), log10(), exp()5. 返回值返回值為 f 的 p 次冪。38 PRINTF 函數1. 提 要#include <>unsigned char printf (const char
55、* fmt, .)2. 描 述printf() 函數是一個格式輸出子程序, 其運行的基礎是標準輸出 ( staout ) 。 它有對應的程序形成字符緩沖區(qū)( sprintf() 函數) 。 printf() 函數以格式字符串、 一系列0及其它作為參數。格式字符串都轉換為一定的格式,每一規(guī)格化都用來輸出變量表。轉換格式的形式為 其中%表示格式,ml示選擇的字符寬度,n表示選擇的精度,c 為一個字母表示規(guī)格類型。字符寬度和精度只適于中級和高級系列單片機, 并且精度只對格式 s有效。如果指針變量為十進制常數,例如格式為%*d時,則一個整型數將從表中被取出,提供給指針變量。對低級系列單片機而言,有下列
56、轉換格式:o x X u d 即分別為整型格式八進制、十六進制、十六進制、十進制和十進制。其中d為有符號十進制數,其它為無符號。其精度值為被輸出數的總的位數,也可以 強制在前面加0。例如各產生一 8位十六進制數,其中前 4位為0,后為十六進制數。X輸 出的十六進制數中,字母為 AF, x輸出的十六進制中字母為af。當格式發(fā)生變化時,八進制格式前要加0,十六進制格式的前面要加0x或0X。S 打印一個字符串函數參數值被認為是字符型指針。最多從字符串中取 n 個字符打印,字符寬度為m。C 函數參數被認為一個單字節(jié)字符并可自由打印。任何其它有格式規(guī)定的字符將被輸出。那么將產生一個百分號。對中級和高級系列單片機而言,轉換格式在低級系列單片機的基礎上再加上:l 長整型格式在整型格式前加上關鍵字母 l 即表示長整型變量。f浮點格式一一總的寬度為m小數點后的位數為no如果n沒有寫出,則默認為6。如果精度為0 ,則小數點被省略,除非精度已預先定義。3. 例 程printf("Total = %4d%", 23)輸出為 Total = 23% printf("Size is %lx" , size)這里size為長整型十六進制變量。注意當使用助,精度只對中級和高級系列單片機有效。printf("Name = %.8s&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人借款合同范本【常用版】8篇
- 公路路基工程施工合同
- 2025年江蘇貨運從業(yè)資格證模擬考試下載什么軟件
- 中小企業(yè)合同管理流程控制
- 2025年迪慶貨運從業(yè)資格證模擬考試題目
- 教育培訓范文及案例分享
- 勞務分包合同臨建
- 訂餐配送合同7篇
- 合同協議鋼材采購合同8篇
- 高層精裝二手房買賣合同書7篇
- 2025年上半年潛江市城市建設發(fā)展集團招聘工作人員【52人】易考易錯模擬試題(共500題)試卷后附參考答案
- 旋轉類機電設備故障預測、診斷研究
- 旅游電子商務(第2版) 課件全套 周春林 項目1-8 電子商務概述-旅游電子商務數據挖掘
- 企業(yè)承包經營合同范本
- 中學校長2025春開學典禮講話:以黃旭華之魂、DeepSeek 之智、哪吒之氣逐夢新程
- 【課件】自然環(huán)境課件-2024-2025學年七年級地理下冊人教版
- 2025年01月公安部第三研究所公開招聘人民警察筆試筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025-2030全球鋰電池用隔膜行業(yè)調研及趨勢分析報告
- 2025年南京鐵道職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 《抖音高活躍群體研究報告》
- 2025年高考作文備考訓練之二元思辨作文題目解析及范文:我與“別人”
評論
0/150
提交評論