嵌入式操作系統(tǒng)設(shè)計(jì)_v3.0.5R.pptx_第1頁
嵌入式操作系統(tǒng)設(shè)計(jì)_v3.0.5R.pptx_第2頁
嵌入式操作系統(tǒng)設(shè)計(jì)_v3.0.5R.pptx_第3頁
嵌入式操作系統(tǒng)設(shè)計(jì)_v3.0.5R.pptx_第4頁
嵌入式操作系統(tǒng)設(shè)計(jì)_v3.0.5R.pptx_第5頁
已閱讀5頁,還剩147頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、嵌入式操作系統(tǒng),主 講: 王曉榮 Email: ,嵌入式操作系統(tǒng)簡介,1,什么是嵌入式操作系統(tǒng),EOS(Embedded OperatingSystem) 用在嵌入式系統(tǒng)中的操作系統(tǒng) 它在硬件和應(yīng)用程序之間,通過提供應(yīng)用程序接口,屏蔽了硬件工作的一些細(xì)節(jié),從而提高了應(yīng)用程序的開發(fā)效率,嵌入式操作系統(tǒng)的優(yōu)缺點(diǎn),優(yōu)點(diǎn): 提高了系統(tǒng)的可靠性 程序設(shè)計(jì)和擴(kuò)展更容易 應(yīng)用程序模塊化,設(shè)計(jì)過程大為簡化 縮短了產(chǎn)品的開發(fā)周期。 缺點(diǎn): ROM/RAM開銷大 25%的CPU額外負(fù)荷 內(nèi)核費(fèi)用較高,常見的EOS,Android、Ubuntu、FreeRTOS 、Linux、Windows CE、VxWorks、

2、 、 UCOS、 RT-Thread、mbedOS等 3個(gè)以上,EOS市場(chǎng)份額(2013-2014),Inhouse/custom,Inhouse: 公司內(nèi)部自己開發(fā) Custom:客戶定制 市場(chǎng)份額逐年減少,趨勢(shì)分析,開源OS超越商用OS,趨勢(shì)分析,Android與FreeRTOS成為主導(dǎo) Android: 基于Linux的開源非實(shí)時(shí)操作系統(tǒng),主要應(yīng)用于移動(dòng)設(shè)備,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)開發(fā)。 FreeRTOS:輕量、開源、實(shí)時(shí)、可靠、易用的操作系統(tǒng)。最近在ST新推的STM32Cube中集成了FreeRTOS,影響力進(jìn)一步提升。,趨勢(shì)分析,RT-Thread影響擴(kuò)大 RT-Thr

3、ead :由熊譜翔(bernard)發(fā)起并組織的開源項(xiàng)目,結(jié)合了VxWorks和ucos兩個(gè)操作系統(tǒng)的優(yōu)點(diǎn),綜合性能優(yōu)于ucos。,趨勢(shì)分析,mbedOS可能成為黑馬 mbedOS :ARM公司2014年底推出的基于 Cortex-M架構(gòu)的物聯(lián)網(wǎng)操作系統(tǒng),可使智能硬件開發(fā)進(jìn)一步簡單,可能會(huì)一統(tǒng)江湖,但目前還處在早期階段,穩(wěn)定性、成本、安全等問題都有待進(jìn)一步驗(yàn)證。,UCOSII,C/OS-II是一個(gè)源碼公開、商用收費(fèi)的實(shí)時(shí)多任務(wù)操作系統(tǒng)。其絕大部分源碼是用ANSI C寫的,使其可以方便移植并支持大多數(shù)類型的處理器。C/OS-II通過了聯(lián)邦航空局(FAA)商用航行器認(rèn)證。C/OS-II占用很少的系

4、統(tǒng)資源(幾K的 RAM和ROM),并且在高校教學(xué)使用是不需要申請(qǐng)?jiān)S可證。,UCLINUX,uClinux是完全符合GNU/GPL公約的操作系統(tǒng),完全開放代碼。uClinux從Linux 2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。適用于沒有虛擬內(nèi)存或內(nèi)存管理單元(MMU)的處理器,例如ARM7TDMI。它通常用于具有很少內(nèi)存或Flash(幾百K)的嵌入式系統(tǒng)。它保留了Linux的大部分優(yōu)點(diǎn):穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò)功能、完備的對(duì)各種文件系統(tǒng)的支持、以及標(biāo)準(zhǔn)豐富的API等。,WINCE,Windows CE是微軟開發(fā)的一個(gè)開放的、可升級(jí)的32位嵌入式操作系統(tǒng),是基于掌上

5、型電腦類的電子設(shè)備操作,它是精簡的Win 95。Windows CE的圖形用戶界面相當(dāng)出色。Win CE具有模塊化、結(jié)構(gòu)化和基于Win32應(yīng)用程序接口以及與處理器無關(guān)等特點(diǎn)。Win CE不僅繼承了傳統(tǒng)的Windows圖形界面,并且在Win CE平臺(tái)上可以使用Win 95/98上的編程工具(如Visual Basic、Visual C+等)、使絕大多數(shù)的應(yīng)用軟件只需簡單的修改和移植就可以在Windows CE平臺(tái)上繼續(xù)使用。,VxWorks,VxWorks操作系統(tǒng)是美國WIND RIVER公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展

6、能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等,甚至在1997年4月登陸火星表面的火星探測(cè)器上也使用到了VxWorks。,stm32cube,1,相關(guān)軟件安裝,安裝“STM32CubeMX”(需JAVA 支持) 安裝“JAVA” 添加MCU組件 詳見“軟件安裝.docx”,例題,led_v0.1 功能:利用cube生成代碼框架,編寫最簡單的代碼實(shí)現(xiàn)LED亮滅。 步驟見3,課堂練習(xí),在例題基礎(chǔ)上,移植嵌入式系統(tǒng)課程中

7、的led模塊、delay模塊實(shí)現(xiàn)led亮滅。,例題,在上一練習(xí)基礎(chǔ)上,利用cube實(shí)現(xiàn)對(duì)uart1的支持。,例題,添加printf模塊。,freeRTOS簡介,1,創(chuàng)始人,2002年由Richard Barry創(chuàng)建。,freeRTOS簡介,“小巧,簡單,易用”的開源實(shí)時(shí)操作系統(tǒng) 主要實(shí)現(xiàn):任務(wù)管理,(任務(wù)間)通訊,硬件接口 “任務(wù)管理”大約占核心代碼的50% “通訊” 大約占核心代碼的40% “硬件接口”大約占核心代碼的6%,課堂練習(xí),利用cube實(shí)現(xiàn)對(duì)freeRTOS的支持。,創(chuàng)建任務(wù),1,例題,os_create_task_v0.1 1P10例1:創(chuàng)建任務(wù) 觀察運(yùn)行結(jié)果,結(jié)果分析(P12)

8、,感覺2個(gè)任務(wù)同時(shí)運(yùn)行 實(shí)際上,每次只有1個(gè)任務(wù)在運(yùn)行,HAL,Hardware Abstraction Layer 硬件抽象層,時(shí)間片輪轉(zhuǎn),當(dāng)優(yōu)先級(jí)相同任務(wù)同時(shí)運(yùn)行時(shí),實(shí)際上是定時(shí)輪流執(zhí)行。(1P18圖4),時(shí)間片輪轉(zhuǎn)時(shí)間,1 / configTICK_RATE_HZ,思考,為什么串口沒有輸出?,棧深度,1000word = 4000byte 4k + 4k + 1.5k = 9.5k 3k 解決辦法: 1. 將1000改?。?90以下) 2. 將3k改大,思考,為什么會(huì)出現(xiàn)幀丟失?,例題,os_create_task_v0.2 在v0.1版本上做了如下改動(dòng): 利用cube將heap更改為:

9、0 x8000 在任務(wù)中增加循環(huán)次數(shù)的打印輸出 觀察運(yùn)行結(jié)果,分析,Printf函數(shù)執(zhí)行時(shí),獨(dú)占了串口緩沖區(qū)資源。,訪問臨界區(qū),taskDISABLE_INTERRUPTS():禁止中斷 taskENTER_CRITICAL():進(jìn)入臨界區(qū) vTaskSuspendAll ():禁止調(diào)度 成對(duì)出現(xiàn) 三對(duì)函數(shù)在功能上的區(qū)別,禁止中斷,taskDISABLE_INTERRUPTS() taskENABLE_INTERRUPTS() 最簡單、最強(qiáng)大 不再響應(yīng)任何中斷,但對(duì)實(shí)時(shí)性影響巨大。 禁止中斷時(shí)間盡可能短。,進(jìn)入臨界區(qū),taskENTER_CRITICAL() taskEXIT_CRITICAL

10、() 增加了一個(gè)臨界區(qū)嵌套計(jì)數(shù) 當(dāng)進(jìn)入臨界區(qū)時(shí),禁止中斷 退出所有嵌套的臨界區(qū)后再使能中斷 如果只有1層,效果等同于禁止中斷。,禁止調(diào)度,vTaskSuspendAll () xTaskResumeAll () 允許中斷,但禁止任務(wù)調(diào)度。,例題,os_create_task_v0.3 在v0.2版本上作如下改動(dòng): 在任務(wù)中寫串口時(shí),加保護(hù)。 觀察運(yùn)行結(jié)果,課堂練習(xí),例題是在啟動(dòng)調(diào)度器之前先完成兩個(gè)任務(wù)的創(chuàng)建。請(qǐng)修改例題,實(shí)現(xiàn)在一個(gè)任務(wù)中創(chuàng)建另一個(gè)任務(wù)。(1P13),任務(wù)優(yōu)先級(jí),1,優(yōu)先級(jí)實(shí)驗(yàn),將例題“os_create_task_v0.3”中任務(wù)2的優(yōu)先級(jí)設(shè)為2,觀察運(yùn)行結(jié)果。,結(jié)果分析(P1

11、9),調(diào)度器總是選擇具有最高優(yōu)先級(jí)的可運(yùn)行任務(wù)來執(zhí)行。 任務(wù)1 的執(zhí)行時(shí)間被任務(wù)2“餓死(starved)”了。,執(zhí)行流程(P20),擴(kuò)充“非運(yùn)行態(tài)”,1,非運(yùn)行態(tài)(P21),阻塞態(tài)(blocked) 掛起態(tài)(suspended ) 就緒態(tài)(ready),阻塞態(tài)(blocked),任務(wù)正在等待某個(gè)事件: 定時(shí)事件 同步事件,掛起態(tài)(suspended ),調(diào)度器對(duì)掛起態(tài)的任務(wù)“不可見”,就緒態(tài)(ready),任務(wù)已準(zhǔn)備好,等待被運(yùn)行。,任務(wù)狀態(tài)機(jī),思考,分析例題“os_create_task_v0.3”中,各任務(wù)的狀態(tài)。,調(diào)度器,調(diào)度器總是在所有就緒態(tài)任務(wù)中,選擇最高優(yōu)先級(jí)的任務(wù),進(jìn)入運(yùn)行態(tài)。

12、 如果被選中的任務(wù)不止一個(gè),則輪流進(jìn)入運(yùn)行態(tài)。,例題,os_task_delay 利用阻塞態(tài)實(shí)現(xiàn)延遲 實(shí)現(xiàn):將例題“os_create_task_v0.3”中的任務(wù)2優(yōu)先級(jí)設(shè)為2,2個(gè)任務(wù)中的延時(shí)語句替換為: “vTaskDelay(1000 / portTICK_RATE_MS);”,vTaskDelayUntil(),vTaskDelay()延時(shí)的時(shí)間是:從該函數(shù)調(diào)用起,到該函數(shù)切出止。 vTaskDelayUntil()延時(shí)的時(shí)間是:從上一次切出該函數(shù)起,到這一次切出該函數(shù)止。,課堂練習(xí),將例題“os_task_delay”中的延時(shí)語句替換為vTaskDelayUntil()。,incl

13、ude the API function,當(dāng)空間受限時(shí),可屏蔽不用的函數(shù)。,運(yùn)行結(jié)果,盡管兩個(gè)任務(wù)優(yōu)先級(jí)不同,但2個(gè)任務(wù)都可以得到執(zhí)行。,執(zhí)行流程(P25),利用cube創(chuàng)建任務(wù),1,課堂練習(xí),用cube創(chuàng)建任務(wù),空閑任務(wù)與鉤子函數(shù),1,空閑任務(wù),優(yōu)先級(jí)最低(0) 不能堵塞或掛起 作用: 使處理器有任務(wù)運(yùn)行 可編寫代碼實(shí)現(xiàn):測(cè)量CPU空閑時(shí)間、進(jìn)入省電模式等功能。,回調(diào)函數(shù),供驅(qū)動(dòng)層或操作系統(tǒng)層調(diào)用的應(yīng)用層函數(shù),稱為回調(diào)函數(shù)(call-back),鉤子函數(shù),鉤子函數(shù)(hook)是回調(diào)函數(shù)的一種。,例題,Os_hook 空閑任務(wù)鉤子函數(shù),觀察結(jié)果,任務(wù)循環(huán)1次,空閑任務(wù)循環(huán)了若干次。,驅(qū)動(dòng)程序移

14、植,1,驅(qū)動(dòng)程序,嵌入式系統(tǒng)課程中“裸奔”的程序,只需稍作修改即可移植到操作系統(tǒng)中。,例題,“l(fā)ed”模塊的移植。,課堂練習(xí),參考例題移植“key”模塊,并在cube默認(rèn)建的任務(wù)中實(shí)現(xiàn):按鍵打印輸出KEY_1所按下的次數(shù)。,課堂練習(xí),在freertos中,完成通用定時(shí)器的封裝和移植,并實(shí)現(xiàn)以下功能:在利用cube新建的任務(wù)中,定時(shí)串行打印輸出定時(shí)中斷調(diào)用次數(shù)。,中斷服務(wù)程序(ISR),代碼盡可能短 不能傳遞參數(shù) 不能返回值 不能加串口調(diào)試代碼,解決辦法,通常的解決辦法: 在ISR中做個(gè)標(biāo)志,然后放到主程序中處理 適用于:實(shí)時(shí)性要求不高時(shí)。,例題,os_time_v0.1 定時(shí)時(shí)間設(shè)置 啟動(dòng)定時(shí)

15、器 HAL_TIM_Base_Start_IT(,課堂練習(xí),在os_time_v0.1的基礎(chǔ)上,實(shí)現(xiàn)led每隔0.2秒定時(shí)左移。,問題,有全局變量 如何實(shí)現(xiàn)全局變量的封裝?,例題,os_time_v0.2 增加中間驅(qū)動(dòng)層,思考,如果中斷的實(shí)時(shí)性要求很高,如何處理?,中斷管理,1,回顧,中斷服務(wù)程序(ISR)要求: 代碼盡可能短 不能傳遞參數(shù) 不能返回值 不能加串口調(diào)試代碼,回顧,通常的解決辦法: 在ISR中做個(gè)標(biāo)志,然后放到主程序中處理 適用于:實(shí)時(shí)性要求不高時(shí)。,二值信號(hào)量,創(chuàng)建1個(gè)二值信號(hào)量 ISR中,發(fā)送信號(hào) 主程序中,接收信號(hào) 如何使用二值信號(hào)量發(fā)送中斷信號(hào)?,接收信號(hào)主程序中,掛起等

16、待信號(hào),發(fā)送信號(hào),ISR中,發(fā)送信號(hào),接收信號(hào),主程序接收到信號(hào),創(chuàng)建二值信號(hào)量,定義1個(gè)信號(hào)變量: xSemaphoreHandle xSemaphore; 創(chuàng)建信號(hào): vSemaphoreCreateBinary(xSemaphore);,ISR中,發(fā)送信號(hào),相關(guān)函數(shù): portBASE_TYPE xSemaphoreGiveFromISR ( xSemaphoreHandle xSemaphore, portBASE_TYPE *pxHigherPriorityTaskWoken );,函數(shù)說明,信號(hào)量可以在ISR中發(fā)送,也可在任務(wù)中發(fā)送。 xSemaphoreGiveFromISR()

17、是xSemaphoreGive()的特殊形式,專門用于ISR中。,參數(shù)說明,參數(shù)1:信號(hào)量 參數(shù)2:輸出參數(shù),1P75 返回值: pdPASS:函數(shù)調(diào)用成功。 pdFAIL: 函數(shù)調(diào)用失敗。,主程序中,接收信號(hào),相關(guān)函數(shù): portBASE_TYPE xSemaphoreTake ( xSemaphoreHandle xSemaphore, portTickType xTicksToWait );,參數(shù)說明,參數(shù)2: 阻塞超時(shí)時(shí)間,即任務(wù)進(jìn)入阻塞態(tài)以等待信號(hào)量的最長時(shí)間。 以節(jié)拍數(shù)為單位。 如果設(shè)為portMAX_DELAY , 則永久等待。 返回值: pdPASS:獲得信號(hào)量 pdFALSE

18、:未獲得信號(hào)量,例題,os_time_v0.3 使用信號(hào)量,流程,中斷產(chǎn)生 當(dāng)前任務(wù)ISR給出信號(hào)量 ISR退出時(shí),運(yùn)行堵塞任務(wù),課堂練習(xí),利用信號(hào)量,實(shí)現(xiàn)串口輸出電子鐘。輸出格式為:hh:mm:ss,每秒單獨(dú)顯示1行。,課堂練習(xí),利用外部中斷,觸發(fā)串口輸出。,外部中斷,引腳設(shè)置 MX_GPIO_Init();,函數(shù)重入,1,函數(shù)重入定義,如果一個(gè)函數(shù)可以安全地被多個(gè)任務(wù)或中斷調(diào)用,則這個(gè)函數(shù)是可重入的。 如果一個(gè)函數(shù)除了訪問自己??臻g上的數(shù)據(jù)外,不訪問其它任何數(shù)據(jù),則這個(gè)函數(shù)就是可重入的。,不可重入函數(shù)特征,訪問了全局變量、靜態(tài)變量、I/O函數(shù)等各種共享資源。,不可重入示例,static i

19、nt tmp;void func1(int* x, int* y) tmp=*x; *x=*y; *y=tmp; ,可重入示例,void func2(int* x, int* y) int tmp; tmp=*x; *x=*y; *y=tmp; ,問題,在中斷函數(shù)或任務(wù)中,訪問共享資源均容易出問題。,互斥量,互斥量是一種特殊的二值信號(hào)量,專門用于解決共享資源問題。,互斥量原理,互斥量可看作是與共享資源關(guān)聯(lián)的令牌。一個(gè)任務(wù)想要合法地訪問資源,必須先得到(Take)該資源對(duì)應(yīng)的令牌(成為令牌持有者)。當(dāng)令牌持有者完成資源使用后,必須馬上歸還(Give)令牌。如果拿不到令牌,則不能訪問共享資源。,互

20、斥量展示,互斥量展示,互斥量展示,互斥量使用,互斥量創(chuàng)建 互斥量獲取 互斥量歸還,例題,os_reentrant_printf_1 封裝printf為可重入函數(shù),實(shí)驗(yàn),通過實(shí)驗(yàn)對(duì)比reentrant_printf函數(shù)和printf函數(shù)的區(qū)別 將任務(wù)的優(yōu)先級(jí)設(shè)為不同,再觀察實(shí)驗(yàn)現(xiàn)象,實(shí)驗(yàn)分析,當(dāng)任務(wù)的優(yōu)先級(jí)相同時(shí),printf函數(shù)出現(xiàn)了問題。 而當(dāng)任務(wù)的優(yōu)先級(jí)不同時(shí),printf函數(shù)沒有出現(xiàn)問題。 reentrant_printf函數(shù)都沒有出現(xiàn)問題。,課堂練習(xí),編寫代碼臨摹例題。,例題,os_reentrant_printf_2 將波特率降為19200,使用外部中斷觸發(fā)任務(wù)1。,實(shí)驗(yàn),采用pri

21、ntf函數(shù)時(shí),多次按鍵觸發(fā)任務(wù)1,觀察任務(wù)2輸出是否有遺漏。 改用reentrant_printf函數(shù)時(shí),觀察是否有遺漏。,實(shí)驗(yàn)分析,中斷使printf函數(shù)出現(xiàn)了問題。 中斷對(duì)reentrant_printf函數(shù)沒有影響,但是否有潛在缺陷?,潛在缺陷,現(xiàn)象,Task2的優(yōu)先級(jí)高于task1 但特殊情況下,高優(yōu)先級(jí)的task2需讓低優(yōu)先級(jí)的task1先運(yùn)行。 這一現(xiàn)象稱為“優(yōu)先級(jí)反轉(zhuǎn)”。 圖說明,優(yōu)先級(jí)反轉(zhuǎn),這是不合理的行為方式。 最壞的情形:當(dāng)高優(yōu)先級(jí)任務(wù)正等待信號(hào)量的時(shí)候,一個(gè)介于兩個(gè)任務(wù)優(yōu)先之間的中等優(yōu)先級(jí)任務(wù)開始執(zhí)行,這就會(huì)導(dǎo)致一個(gè)高優(yōu)先級(jí)任務(wù)在等待一個(gè)低優(yōu)先級(jí)任務(wù),而低優(yōu)先級(jí)任務(wù)卻無法

22、執(zhí)行!,優(yōu)先級(jí)反轉(zhuǎn)流程,解決辦法,互斥量已經(jīng)提供了最基本的“優(yōu)先級(jí)繼承”機(jī)制。 優(yōu)先級(jí)繼承:持有互斥量的低優(yōu)先級(jí)任務(wù)“繼承”了等待互斥量的任務(wù)的優(yōu)先級(jí)。,優(yōu)先級(jí)繼承流程,最基本,FreeRTOS只能實(shí)現(xiàn)最基本的互斥量的優(yōu)先級(jí)繼承機(jī)制。 這種實(shí)現(xiàn)是假定一個(gè)任務(wù)在任意時(shí)刻只會(huì)持有一個(gè)互斥量。,另一個(gè)潛在缺陷,死鎖( Deadlock ) 當(dāng)兩個(gè)任務(wù)都在等待被對(duì)方持有的資源時(shí),兩個(gè)任務(wù)都無法再繼續(xù)執(zhí)行,這種情況就被稱為死鎖。 死鎖是利用互斥量提供互斥功能的另一個(gè)潛在缺陷。,死鎖現(xiàn)象,1. 任務(wù)A 執(zhí)行,并成功獲得了互斥量X。 2. 任務(wù)A 被任務(wù)B 搶占。 3. 任務(wù)B 成功獲得了互斥量Y,之后又試

23、圖獲取X。但X已被任務(wù)A 持有,因此,任務(wù)B 進(jìn)入阻塞態(tài)以等待X 被釋放。 4. 任務(wù)A 得以繼續(xù)執(zhí)行,其試圖獲取Y。Y 已經(jīng)被任務(wù)B持有,任務(wù)A 進(jìn)入阻塞態(tài)以等待Y 被釋放。 5.任務(wù)A和任務(wù)B都無法執(zhí)行。,解決辦法,避免死鎖的最好方法就是在設(shè)計(jì)階段就考慮到這種潛在風(fēng)險(xiǎn)。 設(shè)計(jì)人員應(yīng)熟悉整個(gè)應(yīng)用程序,并能找出發(fā)生死鎖的代碼區(qū)域,消除死鎖問題。 可通過守護(hù)任務(wù)訪問共享資源徹底解決“優(yōu)先級(jí)反轉(zhuǎn)”和“死鎖”問題。,隊(duì)列管理,1,隊(duì)列,FreeRTOS中的每個(gè)任務(wù)都是具有獨(dú)立權(quán)限的小程序。 任務(wù)之間的通信是通過隊(duì)列實(shí)現(xiàn)的。 隊(duì)列就是有特殊功能的確定長度確定大小的數(shù)據(jù)單元。,隊(duì)列讀寫過程,隊(duì)列讀寫過程,隊(duì)列的特性,可多個(gè)任務(wù)向同一隊(duì)列寫入或讀出 如果隊(duì)列為空,讀隊(duì)列的任務(wù)可保持阻塞狀態(tài) 如果隊(duì)列為滿,寫隊(duì)列的任務(wù)可保持阻塞狀態(tài),隊(duì)列的創(chuàng)建,隊(duì)列發(fā)送,xQueueSend ( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait );,隊(duì)列接收,xQueueReceive ( xQueueHandl

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論