電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 3093|回復(fù): 1
收起左側(cè)

中山嵌入式培訓(xùn)機(jī)構(gòu)_嵌入式操作系統(tǒng)移植ADS移植uC/OS-II

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-14 16:54:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
中山嵌入式培訓(xùn)機(jī)構(gòu)_嵌入式操作系統(tǒng)移植ADS移植uC/OS-II,   

引言

隨著Internet的發(fā)展和應(yīng)用,越來越多的嵌入式系統(tǒng)接入網(wǎng)絡(luò)。然而,大部分嵌入式系統(tǒng)都是作為B/S模式中的應(yīng)用服務(wù)器,必須隨時(shí)對客戶機(jī)的請求做出回應(yīng),要求具有較強(qiáng)的實(shí)時(shí)性。mC/OS-II是近年來發(fā)展迅速的一個(gè)開放源碼實(shí)時(shí)操作系統(tǒng),具有移植性好、可裁剪、可固化的優(yōu)點(diǎn)。將mC/OS-II引入網(wǎng)絡(luò)嵌入式系統(tǒng),既可以實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)性要求,同時(shí)可以提高系統(tǒng)的可靠性,易于調(diào)試程序。

  
  


圖1 系統(tǒng)硬件結(jié)構(gòu)框圖(點(diǎn)擊圖片放大)

  
  


圖2 系統(tǒng)TCP/IP協(xié)議部分程序流程圖(點(diǎn)擊圖片放大)

系統(tǒng)硬件設(shè)計(jì)

本系統(tǒng)設(shè)計(jì)中采用美國Cygnal公司生產(chǎn)的集成混合信號SoC芯片C8051F020,其內(nèi)核與8051兼容。當(dāng)它工作在最大系統(tǒng)時(shí)鐘頻率 25MHz 時(shí),峰值速度可以達(dá)到 25MIPS。C8051F020除了256B的內(nèi)部 RAM,還另有位于外部數(shù)據(jù)存儲器地址空間的 4KB的 XRAM,以及64KB可在系統(tǒng)編程的 FLASH 存儲器。因此,它有足夠的RAM空間用于存放1500B的以太幀,以及μC/OS-II中再入函數(shù)的模擬棧。C8051F020除了有標(biāo)準(zhǔn)8051的端口( P0、P1、P2和P3)外,還附加4個(gè)端口(P4、P5、P6和P7),內(nèi)部還有很多的功能器件。

系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示。網(wǎng)卡芯片使用臺灣 Realtek 公司生產(chǎn)的RTL8019AS。在系統(tǒng)中用到的網(wǎng)卡地址為十六進(jìn)制的0300H~0310H,因此,C8051F020的P7口采用復(fù)用方式與RTL8019AS的數(shù)據(jù)/地址線相接,網(wǎng)卡的SA8腳則直接與高電平相接。C8051F020的 P5.2與RTL8019AS的復(fù)位端相連,用來復(fù)位網(wǎng)卡。RTL8019AS則外接一個(gè)隔離LPF濾波器,通過RJ45接口接入以太網(wǎng)。多個(gè)單總線溫度傳感器DS18B20共享一條總線,由 P3.0口進(jìn)行控制。

系統(tǒng)軟件實(shí)現(xiàn)

TCP/IP協(xié)議實(shí)現(xiàn)

介質(zhì)訪問層主要由以太網(wǎng)控制器 RTL8019AS來實(shí)現(xiàn),其數(shù)據(jù)通信協(xié)議采用IEEE802.3 標(biāo)準(zhǔn),只處理接收地址與本機(jī)物理地址相符或?yàn)閺V播地址的以太幀,并只對ARP、IP數(shù)據(jù)報(bào)進(jìn)行處理。

網(wǎng)絡(luò)層實(shí)現(xiàn)IP、ARP和ICMP 協(xié)議:IP 數(shù)據(jù)報(bào)的首部保留 20 字節(jié)的基本控制信息,每個(gè)IP數(shù)據(jù)報(bào)包含一個(gè)分片;實(shí)現(xiàn)完整的ARP 協(xié)議;對于ICMP協(xié)議, 只實(shí)現(xiàn) ICMP 中類型號為 0 ,代碼為 0 的 Ping 應(yīng)答協(xié)議。

傳輸層實(shí)現(xiàn)TCP協(xié)議。在系統(tǒng)中,TCP 協(xié)議只用于支持 HTTP 協(xié)議,由于在連接時(shí)一直處于被動(dòng)服務(wù)的狀態(tài),因此在設(shè)計(jì)中省去了SYN - SENT 狀態(tài)和CLOSED狀態(tài),讓它一開始就處于 LISTEN 狀態(tài),來監(jiān)聽客戶端的連接請求,避免了主動(dòng)打開的操作,可更高效地服務(wù)于客戶機(jī)。而當(dāng)服務(wù)器發(fā)出數(shù)據(jù)報(bào)時(shí),系統(tǒng)并不存儲,只是記錄下該數(shù)據(jù)報(bào)的狀態(tài)信息。由于系統(tǒng)中數(shù)據(jù)傳輸量少,滑動(dòng)窗口可設(shè)置為一個(gè)固定值(1 500 字節(jié) )。

應(yīng)用層實(shí)現(xiàn)HTTP 協(xié)議,F(xiàn)場監(jiān)測設(shè)備與用戶的交互式數(shù)據(jù)交換通過 HTTP 協(xié)議來實(shí)現(xiàn),HTTP在端口80上使用TCP的服務(wù)。系統(tǒng)TCP/IP協(xié)議部分程序的流程圖如圖2所示。

uC/OS-II對TCP/IP協(xié)議及溫度監(jiān)測的實(shí)時(shí)管理

uC/OS-II在C8051F020單片機(jī)上的移植

uC/OS-II的移植,要求所用的C編譯器支持混合編程,在這里選用 KEIL C51集成開發(fā)環(huán)境。由于uC/OS-II是可剝奪的實(shí)時(shí)操作系統(tǒng),任務(wù)隨時(shí)會被另一任務(wù)中斷,一段時(shí)間后再可以運(yùn)行。為了防止在任務(wù)切換過程中相應(yīng)數(shù)據(jù)被破壞,mC/OS-II中使用了大量的可重入函數(shù)。在KEIL C51中,Cx51編譯器為再入函數(shù)生成模擬棧,通過這個(gè)模擬棧完成參數(shù)傳遞和存放局部變量。根據(jù)再入函數(shù)所采用的編譯模式(SMALL、COMPACT、LARGE),模擬棧可以位于片內(nèi)或片外存儲空間。對于本系統(tǒng),模擬棧對RAM空間的要求較大,故選用LARGE模式?芍苯永眯酒霞傻腦RAM(4K),無須另外擴(kuò)展外部數(shù)據(jù)存儲器。通過配置STARTUP.A51文件進(jìn)行設(shè)置:

XBPSTACK EQU 1 ; //選用LARGE模式

XBPSTACKTOP EQU 1000H ; //設(shè)置再入棧棧頂指針

在移植過程中主要完成對以下五個(gè)文件的修改:與CPU相關(guān)的文件OS_CPU_A.ASM、OS_CPU_C.C、OS_CPU.H和與應(yīng)用相關(guān)的文件OS_CFG.H、INCLUDES.H。

其移植過程在這里不是重點(diǎn),下面簡要介紹與應(yīng)用相關(guān)較緊密的部分設(shè)置。

0S-CPU.H:

#define OS_CRITICAL_ METHOD 1 //中斷方式1

#if OS_CRITICAL_METHOD == 1

#define OS_ENTER_ CRITICAL() EA=0

//關(guān)中斷

#define OS_EXIT_CRITICAL() EA=1 //開中斷

#endif

OS_CFG.H:

OSTimeDlyHMSM()函數(shù)使應(yīng)用程序無需知道延時(shí)時(shí)間對應(yīng)的時(shí)鐘節(jié)拍數(shù),直接按小時(shí)、分、秒、毫秒來定義時(shí)間,方便對任務(wù)運(yùn)行時(shí)間進(jìn)行管理。

#define OS_TIME_DLY_ HMSM_EN 1

//允許使用函數(shù)OSTimeDly HMSM()。

由于每個(gè)嵌入式監(jiān)測系統(tǒng)可以同時(shí)與多個(gè)PC機(jī)連接,向不同用戶提供信息,因此可在OS_CFG.H頭文件中定義一個(gè)包含各種連接信息的結(jié)構(gòu)變量。當(dāng)TCP報(bào)文到時(shí),使用連接狀態(tài)信息檢查是否與已存在的連接相符,如果不存在則建立新的連接。這種處理可以使嵌入式監(jiān)測系統(tǒng)同時(shí)處理來自同一或不同PC機(jī)的連接。

typedef struct嵌入式視頻看誰的, 嵌入式物聯(lián)網(wǎng)技術(shù)嗎, 嵌入式床怎樣裝修好, 嵌入式云端應(yīng)用開發(fā), 嵌入式編程的輸入法, 應(yīng)屆生嵌入式開發(fā), 嵌入式匯編多久, 嵌入式工作環(huán)境, 化工企業(yè)嵌入式, 文字環(huán)繞中嵌入式, 嵌入式內(nèi)存芯片, 四川vpx嵌入式, 嵌入式是怎么樣的, 嵌入式違停抓拍儀, 嵌入式MCU型號, 麥子學(xué)院嵌入式教程, 零基礎(chǔ)學(xué)嵌入式教程, 嵌入式英文怎么寫, vs嵌入式數(shù)據(jù)庫, 嵌入式系統(tǒng)總成本, 嵌入式設(shè)備傳照片, 隱藏嵌入式電視墻,

{

INT32U ipaddr;

INT16U port;

INT8U timer;

INT8U inactivity;

INT8U state;

char query[20];

} CONNECTION;

在ARP協(xié)議部分,嵌入式系統(tǒng)將收到的IP數(shù)據(jù)報(bào)的物理地址存放在一結(jié)構(gòu)變量中。如果是向同一PC機(jī)發(fā)送數(shù)據(jù)報(bào),不需要再次發(fā)送ARP請求就可得到目的主機(jī)的物理地址,減少了建立連接的時(shí)間。

typedef struct

{

INT32U ipaddr;

INT8U hwaddr[6];

} ARP_CACHE;

在其中設(shè)置每個(gè)嵌入式系統(tǒng)的MAC地址、IP地址、子網(wǎng)掩碼和網(wǎng)關(guān)地址。

uC/OS-II中任務(wù)創(chuàng)建及優(yōu)先級設(shè)置

C8051F020的XRAM做輸入/輸出數(shù)據(jù)的內(nèi)部緩沖區(qū),RTL8019AS內(nèi)部的16K SRAM做單片機(jī)的外部數(shù)據(jù)緩沖區(qū),存儲輸入/輸出以太幀隊(duì)列。這樣C8051020就可以采用查詢方式讀取以太幀,并有充足的時(shí)間處理數(shù)據(jù)。由于輸入幀的大小不定,同時(shí)在ARP數(shù)據(jù)報(bào)發(fā)送或接收時(shí),輸出幀必須存在輸出緩沖區(qū)中,因此,輸入/輸出數(shù)據(jù)緩沖區(qū)在C8051F020的XRAM中使用動(dòng)態(tài)分配,由KEIL C51 提供的malloc()和free()函數(shù)完成。網(wǎng)頁存儲于單片機(jī)的FLASH存儲器中。當(dāng)嵌入式系統(tǒng)向PC機(jī)發(fā)送網(wǎng)頁時(shí),先將網(wǎng)頁從FLASH存儲器中取出放入XRAM,再根據(jù)用戶請求進(jìn)行整理后放入RTL8019AS的SRAM,并發(fā)送到以太網(wǎng)上。[!--empirenews.page--]

作為網(wǎng)絡(luò)服務(wù)器,C8051F020需要注意以下幾點(diǎn):

1) 服務(wù)器向一客戶機(jī)發(fā)送ARP查詢分組后,如果在0.5秒內(nèi)未收到ARP響應(yīng)分組,則重發(fā)。

2) 如果TCP連接在0.5秒內(nèi)未被激活,則調(diào)用初始化斷開連接程序,防止兩個(gè)TCP之間的連接處理長時(shí)期空閑。

3) 為了控制丟失數(shù)據(jù)報(bào),TCP在規(guī)定時(shí)間(0.5秒)內(nèi)如果沒有收到確認(rèn)包 ,就重組這個(gè)包并發(fā)送 ,這樣不需要占用存儲區(qū)來存儲包。當(dāng)收到客戶機(jī)接收到信息包的確認(rèn)報(bào)后 ,就斷開連接。

uC/OS-II對系統(tǒng)的管理是通過對任務(wù)的管理來實(shí)現(xiàn)的。它把整個(gè)程序分成許多任務(wù),每個(gè)任務(wù)相對獨(dú)立。然后在每個(gè)任務(wù)中設(shè)置超時(shí)函數(shù),一旦任務(wù)的延時(shí)時(shí)間到,任務(wù)必須交出 CPU 的使用權(quán)。根據(jù)需要,系統(tǒng)中創(chuàng)建了5個(gè)任務(wù),設(shè)置如下:

任務(wù)1:OSTaskCreate(eth_ arive,0,&mystack1[0],4);// 查詢RTL8019AS,是否有以太幀到達(dá)。

OSTimeDlyHMSM(0,0,0,500);// 延時(shí)0.5秒

任務(wù)2:OSTaskCreate(arp_ retran,0,&mystack2[0],5);//重發(fā)ARP分組

OSTimeDlyHMSM(0,0,1,0); // 延時(shí)1秒

任務(wù)3:OSTaskCreate(tcp_ inact,0,&mystack3[0],6);// 初始化斷開連接

OSTimeDlyHMSM(0,0,1,500);// 延時(shí)1.5秒

任務(wù)4:OSTaskCreate(read _temp,0,&mystack3[0],7);// 讀溫度值

OSTimeDlyHMSM(0,0,2,0); // 延時(shí)7秒

任務(wù)5:OSTaskCreate(tcp_ retran,0,&mystack3[0],8);//TCP數(shù)據(jù)報(bào)重發(fā)

OSTimeDlyHMSM(0,0,2,500);// 延時(shí)2.5秒

結(jié)語

將網(wǎng)絡(luò)功能嵌入到溫度監(jiān)測系統(tǒng)中,可在網(wǎng)絡(luò)中接入多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)連接多個(gè)單總線傳感器,以此實(shí)現(xiàn)真正的多點(diǎn)溫度監(jiān)測,以滿足用戶的需要。由于DS18B20是單總線溫度傳感器,本身的溫度測量有些延時(shí),因此在傳輸溫度數(shù)據(jù)時(shí)需要幾秒鐘的等待時(shí)間,但對整個(gè)系統(tǒng)的影響不大。采用嵌入式實(shí)時(shí)操作系統(tǒng)mC/OS-II,提高了系統(tǒng)的實(shí)時(shí)性和可靠性,有利于用戶的管理和對溫度的實(shí)時(shí)監(jiān)測。

用戶可以利用廣泛存在的以太網(wǎng)資源,通過瀏覽器直接訪問節(jié)點(diǎn),提高系統(tǒng)的開放性和互操作性,降低監(jiān)控運(yùn)行維護(hù)成本、提高監(jiān)控運(yùn)行維護(hù)效率。因此,基于嵌入式實(shí)時(shí)操作系統(tǒng)的嵌入式網(wǎng)絡(luò)有著廣闊的發(fā)展前景。

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表