ARM Cortex-M3嵌入式開發及應用教與學 課件 第12章 信號量與互斥信號量_第1頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第12章 信號量與互斥信號量_第2頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第12章 信號量與互斥信號量_第3頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第12章 信號量與互斥信號量_第4頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第12章 信號量與互斥信號量_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第十二章

信號量與互斥信號量目錄μC/OS-II信號量μC/OS-II互斥信號量信號量與互斥信號量實例本章小結1信號量和互斥信號量是μC/OS-II中最重要的兩個組件,信號量用于實現任務間的同步以及任務同步中斷服務函數的運行,互斥信號量用于保護共享資源。本章將介紹信號量與互斥信號量的概念和程序設計方法。10.1μC/OS-II信號量23信號量本質上是一個全局計數器的實現機制,釋放信號量的任務使得該計數器的值加1,請求到信號量的任務使該計數器的值減1,如果計數器的值為0,則請求該信號量的任務將掛起等待,直到別的任務釋放該信號量。通過這種方式,使得釋放信號量的任務可以控制請求信號量的任務的運行。信號量相關的函數列于右表中,這些函數的定義位于μC/OS-II內核文件os_sem.c中。μC/OS-II信號量4信號量的工作原理如下圖所示。μC/OS-II信號量5信號量相關的主要操作有:創建信號量OSSemCreate、請求信號量OSSemPend和釋放信號量OSSemPost。使用信號量的步驟為:(1)定義事件,如:“OS_EVENT*sem01;”。(2)創建信號量,如“sem01=OSSemCreate(0);”,此時,創建了信號量sem01,信號量的初始值為0。(3)在任務A中周期性地釋放該信號量,調用“OSSemPost(sem01);”實現。(4)在任務X中始終請求該信號量,用“OSSemPend(sem01,0,&err);”實現,該函數的第二個參數表示等待超時,如果為0,表示請求不到信號量時永久等待;如果為大于0的整數,則任務X等待該整數值的時鐘節拍后,仍然沒有請求到信號量時,則不再等待而繼續執行。μC/OS-II信號量10.2μC/OS-II互斥信號量67互斥信號量只有0和1兩個值,與信號量的操作類似,常用的互斥信號量管理函數列于下表中,這些函數位于μC/OS-II內核文件os_mutex.c中。μC/OS-II互斥信號量8互斥信號量的工作情況如下圖所示。μC/OS-II互斥信號量互斥信號量只有0和1兩個值,表示兩種狀態,即互斥信號量被占用和未被占用。如上圖所示,某一任務X需要使用共享資源時,首先需要請求互斥信號量M,如果沒有請求到,說明共享資源被其他任務正在使用;如果請求到M,則優先級反轉到比其他要請求該共享資源的所有任務的優先級略高的優先級繼承優先級,任務X使用完共享資源后,釋放互斥信號量M。可見,互斥信號量的請求和釋放是在同一個任務中實現的。9μC/OS-II互斥信號量使用互斥信號量的步驟如下:(1)定義事件,如“OS_EVENT*mtx01;”。(2)定義優先級繼承優先級(PIP)的值PIP_Prio,PIP的數值應比所有請求同一共享資源的任務的優先級數值要小。(3)創建互斥信號量,如“mtx01=OSMutexCreate(PIP_Prio,&err);”。(4)如果某一任務X要使用共享資源,應先調用OSMutexPend函數請求互斥信號量,如“OSMutexPend(mtx01,0,&err);”;請求到互斥信號量之后,開始使用共享資源,使用完后再調用OSMutexPost函數釋放互斥信號量,如“OSMutexPost(mtx01);”。函數OSMutexPend的第2個參數為等待超時參數,如果為0,表示請求不到互斥信號量時,一直等待;如果為大于0的整數,表示等待該整數值的時鐘節拍后,仍然請求不到互斥信號量時,則放棄等待。10.3信號量與互斥信號量實例1011信號量與互斥信號量實例工程PRJ31的具體建設步驟如下所示:(1)在工程PRJ30的基礎上,新建工程“PRJ31”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ31”下,此時的工程PRJ31與工程PRJ30完全相同。(2)修改task01.c文件,如下面的程序段所示。12信號量與互斥信號量實例13信號量與互斥信號量實例14信號量與互斥信號量實例15信號量與互斥信號量實例16信號量與互斥信號量實例17信號量與互斥信號量實例(3)新建文件task07.c、task07.h、task08.c和task08.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ31\USER”下,其代碼如下面的程序段所示。18信號量與互斥信號量實例20信號量與互斥信號量實例(4)修改uctmr.c和uctmr.h文件,如程序段所示。20信號量與互斥信號量實例(5)新建文件task09.c和task09.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ31\USER”下,其代碼如下面的程序段所示。21信號量與互斥信號量實例(6)修改文件exti.c,其代碼如下面的程序段所示。22信號量與互斥信號量實例23信號量與互斥信號量實例(7)新建文件task10.c和task10.h,保存在“D:\STM32F103RCT6PRJ\PRJ31\USER”目錄下,其代碼如下面的程序段所示。24信號量與互斥信號量實例(8)修改文件task02.c,其代碼如下面的程序段所示。25信號量與互斥信號量實例(9)新建文件task11.c和task11.h,保存在“D:\STM32F103RCT6PRJ\PRJ31\USER”目錄下,其代碼如下面的程序段所示。26信號量與互斥信號量實例(10)修改文件includes.h,其代碼如下面的程序段所示。27信號量與互斥信號量實例(11)將文件task07.c~task11.c添加到工程管理器的“USER”分組下,建設好的工程PRJ31如下圖所示。28信號量與互斥信號量實例工程PRJ31的執行流程如下圖所示。10.4本章小結2930本章小結本章詳細介紹了信號量和互斥信號量的用法,信號量的主要作用在于實現兩個用戶任務間的同步執行,或用戶任務同步中斷服務程序的執行。“信號量+全局變量”的方式還可以實現在任務間傳遞信息,或由中斷服務程序向任務傳遞信息。互斥信號量的作用在于保護共享資源,避免出現死鎖或者全局變量訪問出錯。信號量和互斥信號量均屬于事件,在os

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論