freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm體系結(jié)構(gòu)與編程-第六章-在線瀏覽

2025-04-10 12:58本頁面
  

【正文】 /指向任務的指針 void * pdata。 //指向任務堆棧棧頂?shù)闹羔? INT8U prio //任務的優(yōu)先級 ) 29 INT8U OSTaskCreateExt( void (*task)(void *pd)。 //傳遞給任務的參數(shù) OS_STK * ptos。 //指向任務堆棧棧低的指針 INT32U stk_siaze。 //指向附加數(shù)據(jù)域的指針 INT16U opt //用于設定操作選項 ) 在調(diào)用任務建立函數(shù)后, 181。這樣就建立了一個任務。C/ OSII中,每個任務都有自己的堆??臻g??梢造o態(tài)分配堆??臻g(在編譯時分配),也可以動態(tài)分配堆??臻g(在運行時分配),這兩種聲明方式都應放置在函數(shù)外面。但必須考慮到任務調(diào)用的所有函數(shù)的嵌套情況、任務調(diào)用的所有函數(shù)為局部變量分配的所有內(nèi)存的數(shù)目,以及所有可能的中斷服務子程序嵌套對堆棧的需求。 181。這樣能夠避免為任務分配過多的堆??臻g,從而減少應用程序代碼所需的 RAM數(shù)量。為了適應系統(tǒng)以后的升級和擴展,應該多分配 10%~ 100%的堆??臻g。在 μC/OS II中,用戶任務可以通過調(diào)用系統(tǒng)提供的函數(shù) OSTaskSuspend()來掛起自身或者除空閑任務之外的其他任務。 但是,如果任務在被掛起的同時還在等待延遲時間到,則需要對任務取消掛起操作,并且要繼續(xù)等待延遲時間到,任務才能轉(zhuǎn)入就緒狀態(tài)。調(diào)用OSTaskDel()后,先進行條件判斷,當所有的條件都滿足后,就會從所有可能的 μC/OS II的數(shù)據(jù)結(jié)構(gòu)中去除任務的任務控制塊OS_TCB,這樣就不會被其他的任務或中斷服務子程序置于就緒態(tài),即任務置于休眠狀態(tài)。刪除自己參數(shù)為: OS_PRIO_SELF 直接調(diào)用這樣的刪除任務,可能出現(xiàn)某些問題,如果任務擁有一些動態(tài)的內(nèi)存或者信號量之類的資源,那么如果它被刪除了,它的資源就不會被釋放而丟失,會造成同樣使用資源的其他任務進入死等待,出現(xiàn)錯誤情況。提供了一個可以在請求刪除方和被刪除方通信完成刪除的函數(shù)。被刪除方調(diào)用得知要刪除自己,釋放資源后,在刪除自己。調(diào)用的函數(shù)原型如下: INT8U OSTaskChangePrio( INT8U oldprio。 OS_TCB * pdata ) 34 任務間同步與通信的管理 ? μC/OS II中,使用信號量、郵箱(消息郵箱)和消息隊列來實現(xiàn)任務相互同步或相互之間的通信。 ? 任務的等待時限,記錄在等待任務的任務控制塊 TCB的成員OSTCBDly中 35 ( 1)事件控制塊 μC/OS II使用叫做事件控制塊 ECB的數(shù)據(jù)結(jié)構(gòu)來描述諸如信號量、郵箱和消息隊列這些事件。 36 ? 操作事件控制塊的函數(shù) μC/OS II有 4個對事件控制塊進行基本操作的函數(shù)(定義在)。該函數(shù)被OSXXXCreate()創(chuàng)建時所調(diào)用。 – 使一個正在等待任務進入就緒狀態(tài)的函數(shù) INT8U OS_EventTaskRdy( OS_EVENT * pevent, void *msg , INT8U msk) 作用:把調(diào)用這個函數(shù)的任務在任務等待表中的位置清 0后,再把任務在任務就緒表中的對應的位置 1,然后引發(fā)一次任務調(diào)度 將在任務調(diào)用函數(shù) OSXXXPost()發(fā)送一個事件時,被調(diào)用。 將在任務調(diào)用函數(shù) OSXXXPend()請求一個事件時,被調(diào)用。 μC/OS II中的信號量由兩部分組成: 16位的無符號整數(shù)信號量的計數(shù)值( 0~ 65535);另一部分是由等待該信號量的任務組成的等待任務列表。 ? 操作 – 創(chuàng)建信號量 OSSemCreat( INT16U t)創(chuàng)建,返回已創(chuàng)建信號量的指針。 不等待調(diào)用的函數(shù)為 OSSemAccept( OS_EVENT * pevent)。先檢查是否有等待該信號量的任務。 40 – 刪除信號量 OS_EVENT *OSSemDel( OS_EVENT * pevent, INT8U opt, INT8U *err) opt OS_DEL_NO_PEND 沒有等待任務刪除 OS_DEL_ALLWAYS 立即刪除 只能任務執(zhí)行,不能在中斷服務程序中刪除 – 查詢信號量的狀態(tài) INT8U OSSemQuery( OS_EVENT * pevent, OS_SEM_DATA *pdata) pdata是一個結(jié)構(gòu)指針,存儲信號量的狀態(tài)。發(fā)送消息的任務或中斷服務子程序把這個變量送往郵箱,接收消息的任務從郵箱中取出該指針變量,完成信息交換。 42 – 向消息郵箱發(fā)送消息 INT8U OSMboxPost( OS_EVENT * pevent, void * msg) 發(fā)送廣播消息 INT8U OSMboxPostOpt( OS_EVENT * pevent, void * msg, INT8U opt) opt: OS_POST_OPT_BROADCAST 廣播消息 OS_POST_OPT_NONE 最高優(yōu)先級 43 – 請求消息郵箱 void * OSMboxPend( OS_EVENT * pevent, INT16U timeout, INT8U *err) – 查詢郵箱狀態(tài) INT8U OSMboxQuery( OS_EVENT * pevent, OS_MBOX_DATA *pdata) – 刪除郵箱 OS_EVENT *OSMboxDel( OS_EVENT * pevent,INT8U opt, INT8U *err) 44 ( 4)消息隊列管理 ? 消息隊列是 μC/OS II的另一種通信機制,它可以使一個任務或中斷服務子程序向另一個任務發(fā)送以指針定義的變量。 – 創(chuàng)建 先創(chuàng)建一個指針數(shù)組,然后用該數(shù)組來創(chuàng)建消息隊列 OS_EVENT OSQCreate( void ** start,INT16U size) – 請求消息隊列 void* OSQPend( OS_EVENT * pevent, INT16U timeout,INT8U *err) 45 – 向消息隊列發(fā)送消息 INT8U OSQPost( OS_EVENT * pevent,void * msg) 工作方式 FIFO INT8U OSQPostFront( OS_EVENT * pevent,void * msg) 工作方式 LIFO 發(fā)送廣播消息 INT8U OSQPostOpt( OS_EVENT * pevent,void * msg, INT8U opt) 46 – 清空消息隊列 INT8U OSQFlμsh ( OS_EVENT * pevent ) – 刪除消息隊列 OS_EVENT * OSQDel( OS_EVENT * pevent ) – 查詢消息隊列 INT8U OSuery( OS_EVENT * pevent, OS_Q_DATA *pdata) 47 181。C/ OSII的應用程序代碼 。 這 8個源代碼文件為、 、 、 、 、μCOS_II .C、 ,其主要實現(xiàn)的功能分別是核心管理 、事件管理 、 存儲管理 、 消息隊列管理 、 定時管理 、 信號量處理 、 消息管理和任務調(diào)度等 , 這部分代碼與處理器無關(guān) 。 系統(tǒng)設置部分的代碼由兩個頭文件 INCLμDES .H組成 。 與處理器相關(guān)的移植代碼部分包括:一個頭文件 、 一個匯編文件 C代碼文件。C/ OSII的移植和開發(fā)過程中 , 用戶所需要關(guān)注的就是這部分文件 。C/ OSII操作系統(tǒng)的文件系統(tǒng) 48 圖 2 181。C/ OSII 操作系統(tǒng)的初始化 在調(diào)用 181。C/ OSII操作系統(tǒng)要求用戶首先調(diào)用系統(tǒng)初始化函數(shù) OSInit()。C/ OSII所有的變量和數(shù)據(jù)結(jié)構(gòu) , 另外 OSInit()會建立空閑任務 , 并且這個任務總是處于就緒狀態(tài)的 。 多任務的啟動是用戶通過調(diào)用 OSStart()函數(shù)來實現(xiàn)的 。C/ OSII之前 , 用戶至少要建立一個應用任務 , 例如: void main() { OSInit()。 /*開始多任務調(diào)度 , OSStart()永遠都不會返回 */ } 50 ? ? ? 第六章 μC/OS II程序設計基礎 51 181。由于 181。 181。C/ OSII的大部分源代碼是用 C語言寫成的 , 但是 , 仍需要用匯編語言完成一些與微處理器相關(guān)的代碼 。C/ OSII在讀寫微處理器 、 寄存器時只能通過匯編語言來實現(xiàn) 。C/ OSII在設計的時候就已經(jīng)充分考慮了可移植性 。C/ OSII可以正常工作 , 處理器必須要滿足如下要求: 52 1). 微處理器的 C編譯器能產(chǎn)生可重入代碼 可重入的代碼指的是一段代碼 (如一個函數(shù) )可以被多個任務同時調(diào)用 , 而不必擔心會破壞其內(nèi)部的數(shù)據(jù) 。 可重入代碼或者只使用局部變量 , 即變量保存在 CPU寄存器中或堆棧中;或者使用全局變量 , 則要對全局變量予以保護 。 所以 , 多次調(diào)用同一個函數(shù) , 可以保證每次的局部變量互不受影響 。 代碼的可重入性是保證完成多任務的基礎 , 除了在 C程序中使用局部變量以外 , 還需要 C編譯器的支持 。 53 2). 在程序中可以使用 c語言打開或者關(guān)閉中斷 在 181。 在目前的 ARM系列的微處理器上 , 都可以設置相應的寄存器來關(guān)閉或者打開系統(tǒng)的所有中斷 。 181。 4) . 微處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧 , 并具有將堆棧指針和其他 CPU寄存器讀寫到堆棧 (或者內(nèi)存 )的指令 。C/ OSII進行任務調(diào)度的時候 , 會把當前任務的 CPU內(nèi)部寄存器的內(nèi)容存放到此任務的
點擊復制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1