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

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)軟件基礎第三章第一章:緒論——回顧1、嵌入式系統(tǒng)的特點2、嵌入式系統(tǒng)的分類3、嵌入式系統(tǒng)的組成4、嵌入式系統(tǒng)開發(fā)流程問第三章:嵌入式軟件系統(tǒng)基礎本章學習目標:

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

2、掌握鏈表的使用;

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

4、了解操作系統(tǒng)的主要功能;第三章:嵌入式軟件系統(tǒng)基礎——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ōu)化!第三章:嵌入式軟件系統(tǒng)基礎——C語言現(xiàn)象宏定義:#define宏名[(變量1,變量2,…)][宏體]說明:

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

2、變量沒有類型區(qū)分,只是一個占位標識符

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

4、作用:定義宏常量、防重復包含、定義語句塊助記符

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

6、宏名中的字母一般采用大寫

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

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

1、宏名要取復雜一些,且最好與頭文件名相關;

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

abc;#endif頭文件myhead.h----defineincludestaticvolatileinlinep34第三章:嵌入式軟件系統(tǒng)基礎——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)基礎——C語言現(xiàn)象異步執(zhí)行程序,不可預知的事情時有發(fā)生防優(yōu)化標識符:volatile類型變量;作用:用volatile修飾過的變量在編譯時不做優(yōu)化處理;例子P36----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎——C語言現(xiàn)象static關鍵字:static類型變量|函數(shù);作用:

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

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

同一個文件內(nèi)的函數(shù)可以調(diào)用它;被static修飾的變量其生存期就是程序運行期。如果在函數(shù)中定義,那么作用域是該函數(shù)體,如果在函數(shù)外定義,期作用域就是文件(也就是說該變量對于文件中的任何代碼都是可見的);----defineincludestaticvolatileinline第三章:嵌入式軟件系統(tǒng)基礎——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)基礎——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)基礎——C語言現(xiàn)象----defineincludestaticvolatileinline

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

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

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

structcircle*next;

intx;

inty;

intr;}第三章:嵌入式軟件系統(tǒng)基礎——鏈表例子: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)基礎——Linux中的鏈表struct

list_head{

struct

list_head*next,*prev;};奇妙的list_head鏈表節(jié)點:第三章:嵌入式軟件系統(tǒng)基礎——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)基礎——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)基礎——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)的特點、發(fā)展及其功能1、計算機的靈魂2、介于硬件層和應用軟件層之間3、高度抽象的虛擬機器4、計算機資源的管理者三、通用操作系統(tǒng)的發(fā)展:UNIXDOSWINDOWS|OS2LINUX四、功能:資源管理

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

因為專業(yè),所以高效二、發(fā)展:

1、上世紀80年代:實時多任務

VRTX32、MTOS、PSOS等

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

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

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

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

實時、商業(yè)版、市場占有率目前最高

軍工、航天、通信。2、Linux開放源碼、便于裁剪、便于移植、支持的應用軟件多、多

線程多任務網(wǎng)絡產(chǎn)品、消費類電子產(chǎn)品

發(fā)展迅猛3、Symbian

眾多移動通訊設備廠家支持、兼容性差、應用開發(fā)困難、多媒體支持差

移動設備如手機

夕陽西下。4、WindowsCE多線程多任務、模塊化、應用開發(fā)容易、功耗大、價格昂貴

PDA、手機等

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

手機等移動設備。6、PalmOS易用、高效、商業(yè)版本

掌上電腦、PDA等7、uC/OS-II多任務(64個)、實時、開源但不免費

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

形成自己的EOS2、專業(yè)LinuxEOS服務收費的LinuxEOS完全免費的LinuxEOSMvista,TimeSys紅旗EOSRT-Linux,uCLinux,uC/OS,RTAI第三章:常見的嵌入式操作系統(tǒng)和選型1·應用需求2·實時性3·CPU類型4·開發(fā)工具5·價格和服務第三章:嵌入式系統(tǒng)軟件基礎——總結1、嵌入式程序中的C語言現(xiàn)象2、鏈表3、常見的嵌入式操作系統(tǒng)4、OS的作用問5、常見嵌入式Linux第三章結束編寫一個c語言隨機選號程序(在屏幕上快速隨機顯示1~99之間的數(shù)字,按回車鍵停止跳動并退出),工程包含三個文件:包含main函數(shù)的rand_main.c,定義宏和函數(shù)聲明的頭文件rand_head.h,定義函數(shù)rand(x,y)的文件rand_fun.c用到的技術:fork,光標定位,殺進程第三章:嵌入式軟件系統(tǒng)基礎——實訓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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論