freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式系統(tǒng)程序設計-資料下載頁

2025-07-18 23:34本頁面
  

【正文】 goodbye everybody. \n)。 return 0。 } E. strerror函數(shù) ? strerror函數(shù)返回一個指向字符串的指針,該字符串描述了和 errnum相對應的錯誤信息,如把errnum傳遞給 strerror,則可得到此信息。 ? 函數(shù)原型: include char* strerror(int errnum)。 F. perror函數(shù) ? perror函數(shù)輸出系統(tǒng)錯誤信息。 ? 函數(shù)原型: include include void perror(const char *s)。 ? 如果系統(tǒng)調(diào)用失敗,一般會設置 errno。 perror()函數(shù)首先打印字符串參數(shù) s,然后添加一個冒號和一個空格,然后是對應于 errno的錯誤信息和一個換行符。 F. perror函數(shù)(續(xù)) ? 以下兩行等價: perror( “something error”)。 printf(“something error: %s”,strerror(errno))。 ? perror與 strerror的比較 ? 前者短小精干,完全能應付一般使用。 ? 后者可以對錯誤信息再編輯,可以應用于需要精心設計的場合 【 例 322】 /* */ include include include include include int main(void) { FILE *fp。 char* p。 errno=0。 fp=fopen(notexist,r)。 if(errno) perror(Open file)。 ~/exp/error/ 【 例 322】 (續(xù)) errno=0。 fp=fopen(notexist,r)。 if(errno) { p=strerror(errno)。 fprintf(stderr, Open file: %s\n, p)。 } return 0。 } ~/exp/error/ 二、系統(tǒng)日志文件 ? Linux的兩個系統(tǒng)守護進程 klogd和syslogd提供了集中的系統(tǒng)日志功能。 ? klogd供內(nèi)核和運行在內(nèi)核空間的程序,特別是設備驅(qū)動程序使用。 ? syslogd控制著來自用戶空間的消息的產(chǎn)生。 日志消息的優(yōu)先級 ?寫入系統(tǒng)日志的消息由它的級別( level)和功能( facility)來控制。 ?級別指出了消息的重要程度和嚴重性 ?功能告訴 syslogd守護進程是哪個程序發(fā)出的消息。 ?一條日志消息優(yōu)先級由級別和功能共同組成 syslog的日志級別: level 級別 嚴重性 LOG_EMERG 系統(tǒng)不可用 LOG_ALERT 要求立刻處理 LOG_CRIT 重大錯誤,比如硬盤故障 LOG_ERR 錯誤條件 LOG_WARNING 警告錯誤 LOG_NOTICE 正常但重要的消息 LOG_INFO 純粹的通報消息 LOG_DEBUG 調(diào)試跟蹤輸出 syslog的功能值: facility 功能 消息源 LOG_AUTHPRIV 私有的安全和授權消息 LOG_CRON 時鐘守護進程( crond和 atd) LOG_DAEMON 其他系統(tǒng)守護進程 LOG_KERN 內(nèi)核消息 LOG_LOCAL[07] 為本地 /站點使用而保留 LOG_LPR 打印機子系統(tǒng) LOG_MAIL 郵件子系統(tǒng) LOG_NEWS 新聞組子系統(tǒng) LOG_SYSLOG syslogd產(chǎn)生的內(nèi)部消息 LOG_USER 一般用戶級消息(默認) LOG_UUCP uucp子系統(tǒng) 發(fā)送消息的原則 ?選取與消息內(nèi)容相適應的級別值。 ?對于用戶級程序, LOG_WARNING已經(jīng)足夠了 ?更高級別的的消息只有在出現(xiàn)嚴重問題是才發(fā)送,系統(tǒng)默認的的級別是 LOG_INFO。 系統(tǒng)日志函數(shù) ?頭文件 函數(shù)。 ? syslog() ? openlog() ? closelog() ? setlogmask() A. syslog()函數(shù) ?用途:產(chǎn)生一條消息。 ?函數(shù)原型: ? priority代表級別,是功能的 “ 或 ” 值 ? farmat是寫入日志的消息,采用類似于printf的格式控制方式。 ? %m表示由 strerror為 errno分配的錯誤消息。 void syslog(int priority, char *farmat, … ) 舉例: 在 /var/log/messages中會產(chǎn)生如下消息: syslog(LOG_NOTICE | LOG_USER, error happened, %m\n )。 Sep 22 13:33:55 lxc : error happened, ***** B. openlog()函數(shù) ?功能: ? 打開一個日志文件, syslog()函數(shù)可以向其中寫入消息,不返回文件描述符(與 open()不一樣) ?格式: ? message是指定加到日志中的字符串 ? option是選項的 “ 或 ” 值,見下頁 ? facility是 “ 功能表 ” 中的某個值。 void openlog(const char*message, int option, int facility) openlog的選項 選項 描述 LOG_PID 在每條消息中包含 PID(進程號) LOG_CONS 如果消息不能寫入日志文件,則發(fā)到控制臺 LOG_NDELAY 立即打開連接(默認是在 syslog第一次被調(diào)用時才打開連接) LOG_PERROR 把消息寫入日志文件的同時也輸入到 stderr 注: openlog是可選的,如果不顯式調(diào)用它,則在第一次調(diào)用syslog時, syslog函數(shù)會自動調(diào)用 openlog。 openlog(just try, LOG_PID, LOG_USER)。 syslog(LOG_NOTICE, the current number is %d\n, iNum )。 代碼在 /var/log/messages文件中產(chǎn)生如下信息: Sep 22 21:20:22 lxc just try[2432]: the current number is 5 openlog舉例 C. closelog()函數(shù) ?用途: ? 關閉由 openlog打開的文件描述符。 ?函數(shù)原型: ? void closelog(void)。 D. setlogmask()函數(shù) ? 用途:為所有的日志消息設置默認的級別。 syslog拒絕任何沒有在掩碼中設置的優(yōu)先級的消息。 ? 函數(shù)原型: int setlogmask(int priority)。 參數(shù) priority可以是單個的優(yōu)先級,也可以是一個優(yōu)先級的范圍。這里有兩個宏: LOG_MASK(int priority):創(chuàng)建一個僅由一個優(yōu)先級級,priority代表優(yōu)先級別。 LOG_UPTO(int priority):創(chuàng)建優(yōu)先級范圍, priority代表其中的最低優(yōu)先級,并作為參數(shù)傳給該宏 【 例 323】 /* */ include include include include include int main() { int mask。 time_t rawtime。 struct tm * timeinfo。 char c[100]。 openlog(test:, LOG_PID, LOG_USER)。 time ( amp。rawtime )。 【 例 323】 (續(xù)) timeinfo = localtime ( amp。rawtime )。 syslog(LOG_INFO, The current date/time is: %s\n, asctime(timeinfo))。 getcwd(c,sizeof(c))。 syslog(LOG_INFO, you are in the direcory: %s\n, c)。 closelog()。 mask=setlogmask(LOG_UPTO(LOG_NOTICE))。 syslog(LOG_INFO, LOG_INFO is inferior to LOG_NOTICE.\n)。 syslog(LOG_DEBUG, LOG_DEBUG is inferior to LOG_NOTICE.\n)。 syslog(LOG_NOTICE, you can see the notice. \n)。 ~/exp/vmlinux/ 【 例 323】 (續(xù)) setlogmask(mask)。 syslog(LOG_INFO, restore the old log level. \n)。 syslog(LOG_DEBUG, the debug information.\n)。 return 0。 } ~/exp/vmlinux/ 運行結果 ? 用命令: tail 10 /var/log/message得到后10行,如下圖 嵌入式 C程序架構 ?嵌入式 C程序 ?人機界面 ?指針的使用方法 一、嵌入式 C程序 ?模塊 ?任務模式 ?面向?qū)ο蟮?C 模塊 ?模塊是指完成某個功能或某些聯(lián)系緊密的功能的代碼,一般由一個源文件(擴展名為 c)和一個頭文件(擴展名為 h)組成 . ?源文件中一般包含變量的定義、函數(shù)的定義等內(nèi)容。 ?頭文件中一般包含對應源文件中的函數(shù)的聲明及變量的聲明。 ?頭文件中不應該包含導致內(nèi)存分配的語句,如定義變量。定義變量會產(chǎn)生內(nèi)存分配的操作。 一個不好的例子 /**/ int a = 2。 /*test1 .c*/ include …… /*test2 .c*/ include …… /*test3 .c*/ include …… 一個好的例子 /**/ extern int a = 2。 /*test1 .c*/ include …… /*test2 .c*/ include …… /*test3 .c*/ include …… 任務模式 ?早期嵌入式系統(tǒng)中沒有操作系統(tǒng)的概念,程序員直接面向裸機編寫程序,程序的結構通常分為兩部分:前臺程序和后臺程序。 ? 前臺程序一般為無限循環(huán)結構,根據(jù)相關標志位來決定是否執(zhí)行某段子程序。 ? 后臺程序負責檢查每個任務是否具備執(zhí)行的條件,并據(jù)此設置相應標志位。 無限循環(huán)的兩種方案 1. while(1) { } 2. for(。) { } 好:一目了然 不好:含義不明確 任務模式(續(xù)) ?隨著大規(guī)模集成電路技術的發(fā)展,單個芯片內(nèi)集成的晶體管數(shù)目越來越多,從而使得芯片的功能不斷增強,出現(xiàn)了各種復雜而強大的嵌入式處理器,處理器內(nèi)一般集成了ROM、 RAM等存儲器和多種功能部件以及接口,如果有一個操作系統(tǒng)來控制和管理硬件,使程序員從底層編程中解放出來,從而專注于具體的應用,就可以顯著提高開發(fā)效率。目前高端處理器一般都先運行一個嵌入式操作系統(tǒng),然后在此操作系統(tǒng)之上開發(fā)各種應用程序。 任務模式(續(xù)) ?隨著半導體技術發(fā)展,嵌入式處理器的硬件資源逐漸豐富,運行速度不斷提高,功能越來越強大,應用環(huán)境越來越復雜,此時,僅僅基于硬件直接編寫程序越來越困難,在這個背景下,實時操作系統(tǒng)應運而生。 任務模式(續(xù)) ?實時操作系統(tǒng) (RTOS)是嵌入式應用軟件的基礎和開發(fā)平臺。它包括一個可靠性很高的實時內(nèi)核,將 CPU時間、中斷、 I/O、定時器等資源都封裝起來,向用戶提供標準的API,并根據(jù)各個任務的優(yōu)先級,采用各種任務調(diào)度算法,合理地在不同任務之間分配CPU時間 面向?qū)ο蟮?C ?眾所周知 C語言是面向過程,并不包含面向?qū)ο蟮奶匦?,無法使用面向?qū)ο蟪绦蛟O計的思路。由于面向?qū)ο蟮膬?yōu)良特性,如果 C語言能具有類似的特點,無疑將使程序開發(fā)過程發(fā)生本質(zhì)變化,提高效率。 C語言具有結構體以及指針特性,可以用來模擬一個 類 。 面向?qū)ο蟮?C(續(xù)) Struct A { int a。 /* 數(shù)據(jù)成員 */ float b。 /* 數(shù)據(jù)成員 */ Struct A *this。 /* this指針 */ void (*f)(
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1