《紅綠燈編程實現(xiàn)》PPT課件.ppt_第1頁
《紅綠燈編程實現(xiàn)》PPT課件.ppt_第2頁
《紅綠燈編程實現(xiàn)》PPT課件.ppt_第3頁
《紅綠燈編程實現(xiàn)》PPT課件.ppt_第4頁
《紅綠燈編程實現(xiàn)》PPT課件.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,紅綠燈編程實現(xiàn),圖示,狀態(tài)圖,偽碼,While(1) A紅=B紅=C綠=0;A綠=B綠=C紅=1; delay 100s; A綠=B紅=C紅=0;A紅=B綠=C綠=1; delay 100s; A紅=B綠=C紅=0;A綠=B紅=C綠=1; delay 100s;,硬件支持的分析,我們有4個Led,用于表示6個燈? Led0 亮表示 A路口綠燈亮 滅表示A路口紅燈亮 Led1 亮表示B路口綠燈亮 滅表示B路口紅燈亮 Led2 亮表示C路口綠燈亮 滅表示C路口紅燈亮,Include頭文件,#include #include #include #include ,預(yù)處理,所謂預(yù)處理是指在進行編譯的

2、第一遍掃描之前所作的工作。 宏定義#define 允許用一個標(biāo)識符來表示一個字符串, 稱為宏。 文件包含#include 注意實際情況中的重定義情況。,子函數(shù),int light_red(int fd, char lukou) int light_green(int fd, char lukou),函數(shù),庫函數(shù)和自定義函數(shù) printf 、 scanf 、 getchar 函數(shù)的特性 返回值,參數(shù),變量的有效區(qū)域 函數(shù),變量的申明,子函數(shù)輸入?yún)?shù)判斷,if(fd 0) return -1; if(lukou != A) ,語句結(jié)構(gòu),分支語句 if語句,switch語句 循環(huán)語句 while語句

3、,for語句 轉(zhuǎn)移語句 break語句,return語句,Switch分支語句,switch(lukou) case A: ioctl(fd, 0, 0); break; case B: ioctl(fd, 0, 1); break; case C: ioctl(fd, 0, 2); break; default: break; ,文件操作,文件操作 open open(/dev/leds, 0); ioctl ioctl(fd, 0, 1); close close(fd);,ioctl,int ioctl(int handle, int cmd,int *argdx, int argcx)

4、; ioctl是設(shè)備驅(qū)動程序中對設(shè)備的I/O通道進行管理的函數(shù)。所謂對I/O通道進行管理,就 是對設(shè)備的一些特性進行控制,例如串口的傳輸波特率、馬達的轉(zhuǎn)速等等。 其中fd就是用戶程式打開設(shè)備時使用open函數(shù)返回的文件標(biāo)示符,cmd就是用戶程式對設(shè) 備的控制命令,至于后面的省略號,那是一些補充參數(shù),一般最多一個,有或沒有是和 cmd的意義相關(guān)的。 ioctl函數(shù)是文件結(jié)構(gòu)中的一個屬性分量,就是說如果你的驅(qū)動程式提供了對ioctl的支 持,用戶就能在用戶程式中使用ioctl函數(shù)控制設(shè)備的I/O通道。,open,int open( const char * pathname, int flags)

5、; int open( const char * pathname,int flags, mode_t mode); 返回值 若所有欲核查的權(quán)限都通過了檢查則返回0 值,表示成功,只要有一個權(quán)限被禁止則返回-1。 參數(shù)pathname 指向欲打開的文件路徑字符串。下列是參數(shù)flags 所能使用的旗標(biāo): O_RDONLY 以只讀方式打開文件 O_WRONLY 以只寫方式打開文件 O_RDWR 以可讀寫方式打開文件。 上述三種旗標(biāo)是互斥的,也就是不可同時使用,但可與下列的旗標(biāo)利用OR(|)運算符組合。,O_CREAT 若欲打開的文件不存在則自動建立該文件。 O_EXCL 如果O_CREAT 也被設(shè)

6、置,此指令會去檢查文件是否存在。文件若不存在則建立該文件,否則將導(dǎo)致打開文件錯誤。 O_NOCTTY 如果欲打開的文件為終端機設(shè)備,不將該終端機當(dāng)成進程控制終端機。 O_TRUNC 若文件存在并且以可寫的方式打開時,此旗標(biāo)會令文件長度清為0,而原來存于該文件的 資料也會消失。 O_APPEND 當(dāng)讀寫文件時會從文件尾開始移動,也就是所寫入的數(shù)據(jù)會以附加的方式加入到文件后面。 O_NONBLOCK 以不可阻斷的方式打開文件,也就是無論有無數(shù)據(jù)讀取或等待,都會立即返回進程之中。 O_NDELAY 同O_NONBLOCK。 O_SYNC 以同步的方式打開文件。 O_NOFOLLOW 如果參數(shù)path

7、name 所指的文件為一符號連接,會令打開文件失敗。 O_DIRECTORY 如果參數(shù)pathname 所指的文件并非為一目錄,會令打開文件失敗。,參數(shù)mode 組合,此為Linux2.2以后特有的旗標(biāo),以避免一些系統(tǒng)安全問題。參數(shù)mode 則有下列數(shù)種組合,只有在建立新文件時才會生效,此外真正建文件時的權(quán)限會受到umask值所影響,因此該文件權(quán)限應(yīng)該為(mode-umaks)。 S_IRWXU 00700 權(quán)限,代表該文件所有者具有可讀、可寫及可執(zhí)行的權(quán)限。 S_IRUSR 或S_IREAD, 00400權(quán)限,代表該文件所有者具有可讀取的權(quán)限。 S_IWUSR 或S_IWRITE,00200

8、 權(quán)限,代表該文件所有者具有可寫入的權(quán)限。 S_IXUSR 或S_IEXEC, 00100 權(quán)限,代表該文件所有者具有可執(zhí)行的權(quán)限。 S_IRWXG 00070權(quán)限,代表該文件用戶組具有可讀、可寫及可執(zhí)行的權(quán)限。 S_IRGRP 00040 權(quán)限,代表該文件用戶組具有可讀的權(quán)限。 S_IWGRP 00020權(quán)限,代表該文件用戶組具有可寫入的權(quán)限。 S_IXGRP 00010 權(quán)限,代表該文件用戶組具有可執(zhí)行的權(quán)限。 S_IRWXO 00007權(quán)限,代表其他用戶具有可讀、可寫及可執(zhí)行的權(quán)限。 S_IROTH 00004 權(quán)限,代表其他用戶具有可讀的權(quán)限 S_IWOTH 00002權(quán)限,代表其他用

9、戶具有可寫入的權(quán)限。 S_IXOTH 00001 權(quán)限,代表其他用戶具有可執(zhí)行的權(quán)限。,系統(tǒng)延時接口,unsigned int sleep(unsigned int seconds); 秒級 int usleep(useconds_t usec); 微秒級,主函數(shù)功能實現(xiàn),int main(int argc, char *argv) int fd; fd = open(/dev/leds, 0); if(fd 0) printf(Open device errorn); return -1; ,While語句,while(1) light_red(fd, A); light_red(fd, B

10、); light_green(fd, C); sleep(10);,While語句,light_red(fd, C); light_red(fd, B); light_green(fd, A); sleep(10); light_red(fd, A); light_red(fd, C); light_green(fd, B); sleep(10); ,Close關(guān)閉文件結(jié)束,close(fd); return 0; ,#include #include #include #include int light_red(int fd, char cross); int light_green(in

11、t fd, char cross); int get_numcar(); unsigned int sleep(unsigned int seconds); /the space of time is second(s) int usleep(useconds_t usec); /the space of time is microsecnd(us) int main(int argc, char *argv) int fd; fd = open(/dev/leds, 0); if(fd 0) printf(Open device errorn); return -1; while(1) li

12、ght_green(fd, A); / A represent straight light_red(fd, a); / a repersent bend light_green(fd, B); / B represent straight light_green(fd, b); / b represent bend sleep(get_numcar();,light_red(fd, A); light_red(fd, a); light_red(fd, B); light_red(fd, b); sleep(get_numcar(); light_red(fd, A); light_green(fd, a); light_red(fd, B); light_green(fd, b); sleep(get_numcar(); light_red(fd, A); light_red(fd, a); light_red(fd, B); light_red(fd, b); sleep(get_numcar(); close(fd); return -1; ,int light_red(int fd, char cross) if(f

溫馨提示

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

評論

0/150

提交評論