第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第1頁(yè)
第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第2頁(yè)
第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第3頁(yè)
第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第4頁(yè)
第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)軟件基礎(chǔ)第三章第一章:緒論——回顧1、嵌入式系統(tǒng)的特點(diǎn)2、嵌入式系統(tǒng)的分類3、嵌入式系統(tǒng)的組成4、嵌入式系統(tǒng)開(kāi)發(fā)流程問(wèn)第三章:嵌入式軟件系統(tǒng)基礎(chǔ)本章學(xué)習(xí)目標(biāo):

1、熟悉嵌入式程序中的C語(yǔ)言現(xiàn)象;

2、掌握鏈表的使用;

3、了解常見(jiàn)的嵌入式操作系統(tǒng);

4、了解操作系統(tǒng)的主要功能;第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象----includedefinestaticvolatileinline#include<stdio.h>#include“myhead.h”#defineMAX_LINE25staticintk=100;main(){volatileint*i=0x10;i=abc(199);……}#ifndefMYHEAD#defineMYHEAD……inlineint

abc(intx){ returnx^3;}#endifmain.cmyhead.h——一切都是因?yàn)轭A(yù)編譯和編譯優(yōu)化!第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象宏定義:#define宏名[(變量1,變量2,…)][宏體]說(shuō)明:

1、編譯器會(huì)把源代碼中出現(xiàn)的全部宏名替換為對(duì)應(yīng)的宏體

2、變量沒(méi)有類型區(qū)分,只是一個(gè)占位標(biāo)識(shí)符

3、宏名和宏體采用空格分開(kāi),宏體中允許出現(xiàn)更多的空格

4、作用:定義宏常量、防重復(fù)包含、定義語(yǔ)句塊助記符

5、如果宏體包含多條語(yǔ)句,必須包含在do{}while(0)中,宏體中的占位標(biāo)識(shí)符(數(shù)字常量)必須在宏體中用小括號(hào)括起

6、宏名中的字母一般采用大寫(xiě)

7、宏常量的值在程序運(yùn)行期間不能改變----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象定義宏常量:#define宏常量名宏體#defineMAX_LINE127#defineMATRIX(128*128)……x=MAX_LINE+MATRIX^2;…………x=127+(128*128)^2;……預(yù)編譯時(shí)替換----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象防止頭文件重復(fù)包含:#ifndef

宏名#define宏名……#endif注意:

1、宏名要取復(fù)雜一些,且最好與頭文件名相關(guān);

2、一般只在頭文件中出現(xiàn)。#ifndefMY_HEAD_H#defineMY_HEAD_H#defineMAXLINE100int

abc;#endif頭文件myhead.h----defineincludestaticvolatileinlinep34第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象定義語(yǔ)句塊助記符:#define宏名(變量1,變量2,…)語(yǔ)句#define宏名(變量1,變量2,…)do{語(yǔ)句1;語(yǔ)句2;…;}while(0)#defineMUL(a,b)(a*b)#defineMUL(a,b)((a)*(b))#defineMAX(a,b)((a)>(b)?(a):(b))#defineDEBUGERR(a,err)\do{\

if((a)<0){\

printf(“Error:%s\n”,err);\ exit(1);\ }\}while(0)----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象異步執(zhí)行程序,不可預(yù)知的事情時(shí)有發(fā)生防優(yōu)化標(biāo)識(shí)符:volatile類型變量;作用:用volatile修飾過(guò)的變量在編譯時(shí)不做優(yōu)化處理;例子P36----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象static關(guān)鍵字:static類型變量|函數(shù);作用:

1、對(duì)于變量,規(guī)定作用域和生存期;

2、對(duì)于函數(shù),規(guī)定作用域;被static修飾的函數(shù)其作用域是文件

同一個(gè)文件內(nèi)的函數(shù)可以調(diào)用它;被static修飾的變量其生存期就是程序運(yùn)行期。如果在函數(shù)中定義,那么作用域是該函數(shù)體,如果在函數(shù)外定義,期作用域就是文件(也就是說(shuō)該變量對(duì)于文件中的任何代碼都是可見(jiàn)的);----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象#include<stdio.h>staticinti=100;abc(intx){ staticinttotal=0;

intj=0; total+=x;j+=i;

printf(“total=%d;j=%d\n”,total,j);}main(){

for(intj=0;j<10;j++)abc(j);}total=0;j=100total=1;j=100total=3;j=100total=6;j=100total=10;j=100total=15;j=100total=21;j=100total=28;j=100total=36;j=100total=45;j=100----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象----defineincludestaticvolatileinline

main(){Statement1;Statement2;……;abc(10,20);……;

Statementn;……;}abc(x,y){Statement1;Statement2;……;

Statementm;return;}主函數(shù)main()子函數(shù)abc(x,y)執(zhí)行路徑第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象----defineincludestaticvolatileinline

用inline修飾過(guò)的函數(shù),函數(shù)調(diào)用在預(yù)編譯時(shí)被函數(shù)體替換,這樣程序的執(zhí)行軌跡不會(huì)發(fā)生跳轉(zhuǎn)。main(){Statement1;……;abc(10,20);……;Statementn;……;}inlineabc(x,y){clause1clause2}主函數(shù)main()子函數(shù)abc(x,y)預(yù)編譯statement1……clause1clause2……statementn……預(yù)編譯后的主函數(shù)main()編譯目標(biāo)程序第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語(yǔ)言現(xiàn)象----defineincludestaticvolatileinline

用inline修飾小的、調(diào)用頻繁的函數(shù),可以帶來(lái)以下兩個(gè)好處:1、減少了執(zhí)行軌跡上的代碼量;2、提高了程序執(zhí)行效率;第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——鏈表(理解指針)10050xB0x000000000x000000010x000000020x000000030x000000040x000000050x000000060x000000070x000000080x000000090x0000000A0x0000000B0x0000000C……0xFFFFFFFF地址內(nèi)存單元intx;&x=0x00000007x=14;14int*p;p=0x0F000009&p=0x000000010900000F*p=55;55x=?p=&x;p=0x0000000707000000第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——鏈表參考書(shū)本P38鏈表:動(dòng)態(tài)性

任意位置插入和刪除數(shù)據(jù)、動(dòng)態(tài)分配內(nèi)存。數(shù)組:靜態(tài)分配內(nèi)存。指針域數(shù)據(jù)域structcircle{

structcircle*next;

intx;

inty;

intr;}第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——鏈表例子:struct

mylist{

intx;

struct

mylist*next;}struct

mylist*head,*tail;head=new(mylist);head->x=10;tail=new(mylist)tail->x=20;tail->next=NULL;head->next=tail;printf(“%d”,head->next->x)第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——Linux中的鏈表struct

list_head{

struct

list_head*next,*prev;};奇妙的list_head鏈表節(jié)點(diǎn):第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——Linux中的鏈表#definecontainer_of(ptr,type,member)\(type*)((char*)ptr-(char*)&((type*)0)->member)struct

abc{chara;shortb;

intx;unsignedlongy;}struct

abcxyz=abc(‘m’,1,2,3);struct

abc*cba=list_entry(&xyz.x,struct

abc,x);printf(“%c-%d-%d-%d\n”,cba->a,cba->b,cba->x,cba->y);第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——Linux中的鏈表typedef

struct

server_detect_ftp

{

struct

list_headlist;charserver[20];

intport;charusername[10];charpassword[10];}server_detect_ftp_t;

int

main(void){

struct

list_headhead,*p;

server_detect_ftp_tft1,ft2,*entry;strcpy(ft1.server,"");ft1.port=34;strcpy(ft1.username,"good");strcpy(ft1.password,"good");

strcpy(ft2.server,"");ft2.port=80;strcpy(ft2.username,“bad");strcpy(ft2.password,“bad");

INIT_LIST_HEAD(&head);list_add(&ft1.list,&head);list_add_tail(&ft2.list,&ft1.list);

list_for_each(p,&head){entry=list_entry(p,struct

server_detect_ftp,list);

printf("%s\n",entry->username);}

list_del(&ftp_link1.list);}利用list_head的例子:第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——Linux中的鏈表typedef

struct

server_detect_ftp

{

struct

list_headlist;charserver[20];

intport;charusername[10];charpassword[10];}server_detect_ftp_t;

int

main(void){

struct

list_headhead,*p;

server_detect_ftp_tft1,ft2,*entry;strcpy(ft1.server,"");ft1.port=34;strcpy(ft1.username,"good");strcpy(ft1.password,"good");

strcpy(ft2.server,"");ft2.port=34;strcpy(ft2.username,"good");strcpy(ft2.password,"good");

INIT_LIST_HEAD(&head);list_add(&ft1.list,&head);list_add_tail(&ft2.list,&ft1.list);

list_for_each(p,&head){entry=list_entry(p,struct

server_detect_ftp,list);

printf("%s\n",entry->username);}

list_del(&ftp_link1.list);}利用list_head的例子:第三章:通用操作系統(tǒng)的特點(diǎn)、發(fā)展及其功能1、計(jì)算機(jī)的靈魂2、介于硬件層和應(yīng)用軟件層之間3、高度抽象的虛擬機(jī)器4、計(jì)算機(jī)資源的管理者三、通用操作系統(tǒng)的發(fā)展:UNIXDOSWINDOWS|OS2LINUX四、功能:資源管理

管理CPU(進(jìn)程)、存儲(chǔ)、設(shè)備和文件一、特點(diǎn)二、現(xiàn)代操作系統(tǒng)的特點(diǎn)1、微內(nèi)核2、模塊化3、網(wǎng)絡(luò)化4、多任務(wù)第三章:嵌入式操作系統(tǒng)的特點(diǎn)、發(fā)展一、裁剪和定制通用OS嵌入式操作

因?yàn)閷I(yè),所以高效二、發(fā)展:

1、上世紀(jì)80年代:實(shí)時(shí)多任務(wù)

VRTX32、MTOS、PSOS等

2、上世紀(jì)90年代:網(wǎng)絡(luò)化、多任務(wù)、圖形界面、文件系統(tǒng)

VxWorks,Psos+,μC/OS-II等

3、本世紀(jì):支持internet、多媒體和無(wú)線網(wǎng)絡(luò)、可定制

Linux,WindowsCE,PalmOS,JAVAOS等第三章:常見(jiàn)的嵌入式操作系統(tǒng)和選型1、VxWorks

實(shí)時(shí)、商業(yè)版、市場(chǎng)占有率目前最高

軍工、航天、通信。2、Linux開(kāi)放源碼、便于裁剪、便于移植、支持的應(yīng)用軟件多、多

線程多任務(wù)網(wǎng)絡(luò)產(chǎn)品、消費(fèi)類電子產(chǎn)品

發(fā)展迅猛3、Symbian

眾多移動(dòng)通訊設(shè)備廠家支持、兼容性差、應(yīng)用開(kāi)發(fā)困難、多媒體支持差

移動(dòng)設(shè)備如手機(jī)

夕陽(yáng)西下。4、WindowsCE多線程多任務(wù)、模塊化、應(yīng)用開(kāi)發(fā)容易、功耗大、價(jià)格昂貴

PDA、手機(jī)等

走下坡路。5、Android開(kāi)源、linux內(nèi)核、完美多媒體和網(wǎng)絡(luò)支持、深度編程

手機(jī)等移動(dòng)設(shè)備。6、PalmOS易用、高效、商業(yè)版本

掌上電腦、PDA等7、uC/OS-II多任務(wù)(64個(gè))、實(shí)時(shí)、開(kāi)源但不免費(fèi)

數(shù)碼相機(jī)、醫(yī)療設(shè)備和高端音響設(shè)備等第4.5節(jié):嵌入式Linux簡(jiǎn)介1、自制嵌入式linux:裁剪定制標(biāo)準(zhǔn)Linux內(nèi)核

形成自己的EOS2、專業(yè)LinuxEOS服務(wù)收費(fèi)的LinuxEOS完全免費(fèi)的LinuxEOSMvista,TimeSys紅旗EOSRT-Linux,uCLinux,uC/OS,RTAI第三章:常見(jiàn)的嵌入式操作系統(tǒng)和選型1·應(yīng)用需求2·實(shí)時(shí)性3·CPU類型4·開(kāi)發(fā)工具5·價(jià)格和服務(wù)第三章:嵌入式系統(tǒng)軟件基礎(chǔ)——總結(jié)1、嵌入式程序中的C語(yǔ)言現(xiàn)象2、鏈表3、常見(jiàn)的嵌入式操作系統(tǒng)4、OS的作用問(wèn)5、常見(jiàn)嵌入式Linux第三章結(jié)束編寫(xiě)一個(gè)c語(yǔ)言隨機(jī)選號(hào)程序(在屏幕上快速隨機(jī)顯示1~99之間的數(shù)字,按回車鍵停止跳動(dòng)并退出),工程包含三個(gè)文件:包含main函數(shù)的rand_main.c,定義宏和函數(shù)聲明的頭文件rand_head.h,定義函數(shù)rand(x,y)的文件rand_fun.c用到的技術(shù):fork,光標(biāo)定位,殺進(jìn)程第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——實(shí)訓(xùn)rand_main.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<signal.h>#include<sys/types.h>#include"rand_head.h"main(){

int

pid;

if((pid=fork())==0){while(1){printf(“^[[2J”);//清屏

printf("^[[10;50H%d",rand_mon(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論