STM32CubeMX+FreeRTOS學(xué)習(xí)[6]-互斥量(Lu)_第1頁
STM32CubeMX+FreeRTOS學(xué)習(xí)[6]-互斥量(Lu)_第2頁
STM32CubeMX+FreeRTOS學(xué)習(xí)[6]-互斥量(Lu)_第3頁
STM32CubeMX+FreeRTOS學(xué)習(xí)[6]-互斥量(Lu)_第4頁
STM32CubeMX+FreeRTOS學(xué)習(xí)[6]-互斥量(Lu)_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、FreeRTOS學(xué)習(xí)之六:互斥量前提:默認已經(jīng)裝好MDK V5和STM32CubeMX,并安裝了STM32F1xx系列的支持包。硬件平臺:STM32F1xx系列。目的:學(xué)習(xí)互斥量的使用。多任務(wù)系統(tǒng)中存在一種潛在的風(fēng)險。當(dāng)一個任務(wù)在使用某個資源的過程中,即還沒有完全結(jié)束對資源的訪問時,便被切出運行態(tài),使得資源處于非一致,不完整的狀態(tài)。如果這個時候有另一個任務(wù)或者中斷來訪問這個資源,則會導(dǎo)致數(shù)據(jù)損壞或是其它相似的錯誤。考慮如下情形,有兩個任務(wù)都試圖往一個 LCD 中寫數(shù)據(jù):· 任務(wù) A 運行,并往串口寫字符串“Hello world”。· 任務(wù) A 被任務(wù) B 搶占,但此時字符

2、串才輸出到“Hello w”。· 任務(wù) B 往串口寫“Abort, Retry, Fail?”,然后進入阻塞態(tài)。· 任務(wù) A 從被搶占處繼續(xù)執(zhí)行,完成剩余的字符輸出“orld”?,F(xiàn)在串口接收端收到的是被破壞了的字符串“Hello wAbort, Retry, Fail?orld”。本文例子將再現(xiàn)上述問題,并用互斥量解決該問題。本文例子使用STM32CubeMX配置創(chuàng)建兩個任務(wù),一個任務(wù)連續(xù)發(fā)送字符串“Hello world!”,另一個連續(xù)發(fā)送字符串“Abort, Retry, Fail?”。Step1.打開STM32CubeMX,點擊“New Project”,選擇芯片型號

3、,STM32F103RBTx。Step2.配置時鐘引腳。Step3.配置USART1為異步串口。Step4.將系統(tǒng)時基源改為TIM4。Step5.使能FreeRTOS。Step6.配置時鐘樹。8M輸入時,通過PLL得到72M內(nèi)部時鐘。Step7.配置串口參數(shù),使用默認值即可。Step8.配置FreeRTOS。在Tasks and Queues選項卡,默認配置了一個名為defaultTask的任務(wù),其優(yōu)先級為普通,任務(wù)堆棧大小為128字,任務(wù)函數(shù)名為StartDefaultTask。雙擊藍色的地方,彈出對話框,將任務(wù)名修改為Hello,將任務(wù)函數(shù)名修改為HelloTask。點擊Add按鈕,增加一

4、個任務(wù)Abort,優(yōu)先級設(shè)置為Normal,函數(shù)名為AbortTask。在Timers and Semaphores選項卡,添加互斥量myMutex01。注:其他的都使用默認參數(shù)。Step9.生成代碼。等完成后直接打開工程。工程基本組織結(jié)構(gòu)如下圖,其中Application/User組中的文件是用戶可以修改的,而其他組中的文件一般不進行修改。Step10.分析程序結(jié)構(gòu)。在進入main函數(shù)之前,先定義了幾個變量,聲明了幾個函數(shù)。再看main函數(shù)。將main函數(shù)整理,刪除很多注釋之后,得到下圖所示內(nèi)容。其中第部分,是硬件配置;第部分,創(chuàng)建了一個互斥量和兩個任務(wù);第部分,啟動調(diào)度器。Step11.添加代碼。先實現(xiàn)一個串口打印字符串的函數(shù):要特別說明的是,因為HAL_UART_Transmit()函數(shù)本身使用了硬件鎖來避免串口共享沖突,所以在此使用了osDelay()函數(shù),目的是人為制造UART共享沖突,以模擬多任務(wù)系統(tǒng)中資源共享沖突的情況。在此因為用到了strlen()函數(shù),所以要在main文件中包含頭文件string.h。在兩個任務(wù)函數(shù)中分別添加功能代碼。Step12.編譯下載運行。通過串口調(diào)試助手接收MCU發(fā)送的數(shù)據(jù),下圖是一種可能的結(jié)果。Step13.用互斥量解決共享沖突。在實際應(yīng)用中,比如使用LCD輸出顯示,就可能會遇到上述的共享沖突情況。把串口打印字符

溫馨提示

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

評論

0/150

提交評論