![第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第1頁](http://file4.renrendoc.com/view10/M02/03/3F/wKhkGWW7DXaAS1PJAAEglWrV05Q102.jpg)
![第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第2頁](http://file4.renrendoc.com/view10/M02/03/3F/wKhkGWW7DXaAS1PJAAEglWrV05Q1022.jpg)
![第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第3頁](http://file4.renrendoc.com/view10/M02/03/3F/wKhkGWW7DXaAS1PJAAEglWrV05Q1023.jpg)
![第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第4頁](http://file4.renrendoc.com/view10/M02/03/3F/wKhkGWW7DXaAS1PJAAEglWrV05Q1024.jpg)
![第3章:嵌入式系統(tǒng)軟件基礎(chǔ)_第5頁](http://file4.renrendoc.com/view10/M02/03/3F/wKhkGWW7DXaAS1PJAAEglWrV05Q1025.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)開發(fā)流程問第三章:嵌入式軟件系統(tǒng)基礎(chǔ)本章學(xué)習(xí)目標(biāo):
1、熟悉嵌入式程序中的C語言現(xiàn)象;
2、掌握鏈表的使用;
3、了解常見的嵌入式操作系統(tǒng);
4、了解操作系統(tǒng)的主要功能;第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語言現(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語言現(xiàn)象宏定義:#define宏名[(變量1,變量2,…)][宏體]說明:
1、編譯器會(huì)把源代碼中出現(xiàn)的全部宏名替換為對(duì)應(yīng)的宏體
2、變量沒有類型區(qū)分,只是一個(gè)占位標(biāo)識(shí)符
3、宏名和宏體采用空格分開,宏體中允許出現(xiàn)更多的空格
4、作用:定義宏常量、防重復(fù)包含、定義語句塊助記符
5、如果宏體包含多條語句,必須包含在do{}while(0)中,宏體中的占位標(biāo)識(shí)符(數(shù)字常量)必須在宏體中用小括號(hào)括起
6、宏名中的字母一般采用大寫
7、宏常量的值在程序運(yùn)行期間不能改變----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語言現(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語言現(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語言現(xiàn)象定義語句塊助記符:#define宏名(變量1,變量2,…)語句#define宏名(變量1,變量2,…)do{語句1;語句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語言現(xiàn)象異步執(zhí)行程序,不可預(yù)知的事情時(shí)有發(fā)生防優(yōu)化標(biāo)識(shí)符:volatile類型變量;作用:用volatile修飾過的變量在編譯時(shí)不做優(yōu)化處理;例子P36----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語言現(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ù)外定義,期作用域就是文件(也就是說該變量對(duì)于文件中的任何代碼都是可見的);----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎(chǔ)——C語言現(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語言現(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語言現(xiàn)象----defineincludestaticvolatileinline
用inline修飾過的函數(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語言現(xiàn)象----defineincludestaticvolatileinline
用inline修飾小的、調(diào)用頻繁的函數(shù),可以帶來以下兩個(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ǔ)——鏈表參考書本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ǎng)絡(luò)、可定制
Linux,WindowsCE,PalmOS,JAVAOS等第三章:常見的嵌入式操作系統(tǒng)和選型1、VxWorks
實(shí)時(shí)、商業(yè)版、市場(chǎng)占有率目前最高
軍工、航天、通信。2、Linux開放源碼、便于裁剪、便于移植、支持的應(yīng)用軟件多、多
線程多任務(wù)網(wǎng)絡(luò)產(chǎn)品、消費(fèi)類電子產(chǎn)品
發(fā)展迅猛3、Symbian
眾多移動(dòng)通訊設(shè)備廠家支持、兼容性差、應(yīng)用開發(fā)困難、多媒體支持差
移動(dòng)設(shè)備如手機(jī)
夕陽西下。4、WindowsCE多線程多任務(wù)、模塊化、應(yīng)用開發(fā)容易、功耗大、價(jià)格昂貴
PDA、手機(jī)等
走下坡路。5、Android開源、linux內(nèi)核、完美多媒體和網(wǎng)絡(luò)支持、深度編程
手機(jī)等移動(dòng)設(shè)備。6、PalmOS易用、高效、商業(yè)版本
掌上電腦、PDA等7、uC/OS-II多任務(wù)(64個(gè))、實(shí)時(shí)、開源但不免費(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第三章:常見的嵌入式操作系統(tǒng)和選型1·應(yīng)用需求2·實(shí)時(shí)性3·CPU類型4·開發(fā)工具5·價(jià)格和服務(wù)第三章:嵌入式系統(tǒng)軟件基礎(chǔ)——總結(jié)1、嵌入式程序中的C語言現(xiàn)象2、鏈表3、常見的嵌入式操作系統(tǒng)4、OS的作用問5、常見嵌入式Linux第三章結(jié)束編寫一個(gè)c語言隨機(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國調(diào)速電錘行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國電子選緯器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年橡膠防震耐膠墊圈項(xiàng)目可行性研究報(bào)告
- 惠州2024年廣東惠州市中小企業(yè)服務(wù)中心招聘專業(yè)技術(shù)人員筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國大提花襯衫面料行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年園林線項(xiàng)目可行性研究報(bào)告
- 2025年升降平臺(tái)項(xiàng)目可行性研究報(bào)告
- 2025年位扭腰器項(xiàng)目可行性研究報(bào)告
- 2025年4通道粗波分復(fù)用器項(xiàng)目可行性研究報(bào)告
- 廣州廣東廣州市白云區(qū)鶴龍街道市政服務(wù)所招聘環(huán)衛(wèi)工作人員筆試歷年參考題庫附帶答案詳解
- 竣工驗(yàn)收要點(diǎn)培訓(xùn)課件
- 2024版《中醫(yī)基礎(chǔ)理論經(jīng)絡(luò)》課件完整版
- 2024年上海復(fù)旦大學(xué)附中自主招生數(shù)學(xué)試卷真題(含答案詳解)
- 物業(yè)消防安全管理培訓(xùn)【共54張課件】
- 注射泵操作使用課件
- AQ 2028-2010 礦山在用斜井人車安全性能檢驗(yàn)規(guī)范(正式版)
- 自愿參加活動(dòng)免責(zé)申明
- 字體設(shè)計(jì)(上海出版印刷高等專科學(xué)校) 知到智慧樹網(wǎng)課答案
- 2024屆浙江省紹興市初中畢業(yè)生學(xué)業(yè)水平調(diào)測(cè)科學(xué)模擬試題(一模)含答案
- 環(huán)境監(jiān)測(cè)模擬題(附參考答案)
- 生物工程畢業(yè)設(shè)計(jì)開題報(bào)告
評(píng)論
0/150
提交評(píng)論