版權(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ù)字,按回車(chē)鍵停止跳動(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 報(bào)關(guān)and銷(xiāo)售合同
- 購(gòu)買(mǎi)空調(diào)合同范本
- 202550墩自檢:現(xiàn)場(chǎng)委托合同(基樁低應(yīng)變) 自檢
- 2025年浙教版選擇性必修1物理上冊(cè)階段測(cè)試試卷含答案
- 房屋租賃合同水電費(fèi)
- 2025刑法訴訟設(shè)備銷(xiāo)售合同范本
- 2025合同翻譯常用語(yǔ)句
- 2025常用版地區(qū)買(mǎi)賣(mài)合同書(shū)
- 2025年網(wǎng)絡(luò)及通信協(xié)議處理軟件項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 新郎結(jié)婚講話稿(合集15篇)
- 國(guó)有資產(chǎn)管理法律責(zé)任與風(fēng)險(xiǎn)防控
- 未婚生子的分手協(xié)議書(shū)
- 變更監(jiān)事章程修正案范例
- 北京小客車(chē)指標(biāo)租賃協(xié)議五篇
- 輸液室運(yùn)用PDCA降低靜脈輸液患者外滲的發(fā)生率品管圈(QCC)活動(dòng)成果
- YY/T 0681.2-2010無(wú)菌醫(yī)療器械包裝試驗(yàn)方法第2部分:軟性屏障材料的密封強(qiáng)度
- GB/T 20472-2006硫鋁酸鹽水泥
- 煙氣管道阻力計(jì)算
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務(wù)迎接重大節(jié)日、活動(dòng)的保障措施
- 醫(yī)院-9S管理共88張課件
- 高考作文復(fù)習(xí):議論文論證方法課件15張
評(píng)論
0/150
提交評(píng)論