嵌入式系統(tǒng)設(shè)計(jì)與項(xiàng)目實(shí)施 課件 第5、6章 水資源PH檢測系統(tǒng)設(shè)計(jì)與制作、智能門鎖設(shè)計(jì)與制作_第1頁
嵌入式系統(tǒng)設(shè)計(jì)與項(xiàng)目實(shí)施 課件 第5、6章 水資源PH檢測系統(tǒng)設(shè)計(jì)與制作、智能門鎖設(shè)計(jì)與制作_第2頁
嵌入式系統(tǒng)設(shè)計(jì)與項(xiàng)目實(shí)施 課件 第5、6章 水資源PH檢測系統(tǒng)設(shè)計(jì)與制作、智能門鎖設(shè)計(jì)與制作_第3頁
嵌入式系統(tǒng)設(shè)計(jì)與項(xiàng)目實(shí)施 課件 第5、6章 水資源PH檢測系統(tǒng)設(shè)計(jì)與制作、智能門鎖設(shè)計(jì)與制作_第4頁
嵌入式系統(tǒng)設(shè)計(jì)與項(xiàng)目實(shí)施 課件 第5、6章 水資源PH檢測系統(tǒng)設(shè)計(jì)與制作、智能門鎖設(shè)計(jì)與制作_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

水資源pH檢測系統(tǒng)設(shè)計(jì)與制作適用平臺:STM32F1xx任課老師:xxx1pH傳感器信號調(diào)理電路設(shè)計(jì)pH檢測儀應(yīng)用程序設(shè)計(jì)pH檢測儀系統(tǒng)調(diào)試方法μCOS-Ⅲ任務(wù)狀態(tài)及狀態(tài)轉(zhuǎn)換μCOS-Ⅲ任務(wù)調(diào)度方法及任務(wù)實(shí)現(xiàn)方法0102030405本章要點(diǎn)2Part.01總體方案及硬件電路設(shè)計(jì)31.1軟件方案設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題4

軟件設(shè)計(jì)時(shí)需要結(jié)合具體硬件來進(jìn)行相關(guān)驅(qū)動(dòng)程序的編寫。本任務(wù)中pH檢測儀具有pH值檢測、液晶顯示、溫度補(bǔ)償功能、GPRS無線通信功能和GPS定位功能,因此結(jié)合相關(guān)功能的要求,需要編寫A/D數(shù)據(jù)采集程序、液晶顯示驅(qū)動(dòng)、溫度補(bǔ)償算法程序、無線通信協(xié)議信息解析和GPS模塊驅(qū)動(dòng)程序,由于系統(tǒng)需要的軟件功能模塊較多,且考慮到后期對其他功能的補(bǔ)充,在系統(tǒng)軟件設(shè)計(jì)中用μCOS-Ⅲ嵌入式實(shí)時(shí)操作系統(tǒng)作為軟件平臺,采用C語言進(jìn)行開發(fā),編譯環(huán)境采用μVision5IDE集成開發(fā)環(huán)境,它是目前針對ARM處理器,尤其是Cortex-M3內(nèi)核處理器的最佳開發(fā)工具。1.2硬件設(shè)計(jì)方案總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題5圖5-1系統(tǒng)硬件原理框圖

由圖5-1可知,系統(tǒng)硬件主要由STM32F103核心控制模塊、LCM12864液晶顯示模塊、GPSRS通信模塊、GPS/BD定位模塊、太陽能和市電供電自動(dòng)切換模塊、pH電極信號處理電路和溫度補(bǔ)償電路等組成。各模塊的核心器件選型見本教材配套電子資源。1.3硬件電路設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題6

系統(tǒng)硬件電路共分四部分:第一部分是STM32F103最小系統(tǒng)電路;第二部分是pH信號處理和溫度補(bǔ)償電路;第三部分是系統(tǒng)供電電路;第四部分是GPSRS通信和GPS/BD定位電路。詳細(xì)的系統(tǒng)電路設(shè)計(jì)資源見本教材配套電子資源。Part.02μCOS-Ⅲ應(yīng)用基礎(chǔ)72.1μCOS-Ⅲ簡介總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題8

μCOS-Ⅲ是MicroCOSThree用C語言編寫的微型操作系統(tǒng),是一個(gè)能夠進(jìn)行升級和固化的實(shí)時(shí)內(nèi)核,管理任務(wù)的數(shù)量不受限制。μCOS-Ⅲ作為第3代的系統(tǒng)內(nèi)核,現(xiàn)今實(shí)時(shí)內(nèi)核所具備的功能μCOS-Ⅲ都支持,如資源管理、同步、任務(wù)間的通信等。μCOS-Ⅲ的特色功能在其他實(shí)時(shí)內(nèi)核中是沒有的,如運(yùn)行時(shí)間測量功能、任務(wù)掛起功能、直接發(fā)送信號等。

μCOS系列操作系統(tǒng)最早產(chǎn)生于1992年,如今已經(jīng)有了多個(gè)版本的更新?lián)Q代,μCOS-Ⅲ隨著技術(shù)不斷發(fā)展應(yīng)運(yùn)而生。μCOS-Ⅱ中一些使用頻率較低的功能已經(jīng)被刪除或更新,新一代的μCOS-Ⅲ添加了更高效、實(shí)用的功能和服務(wù)。其中時(shí)間片輪轉(zhuǎn)(roundrobin)成為μCOS-Ⅲ的特色功能之一。1.μCOS-Ⅲ實(shí)時(shí)系統(tǒng)介紹2.1μCOS-Ⅲ簡介總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題92.μCOS-Ⅲ實(shí)時(shí)系統(tǒng)特性1)可剝奪的多任務(wù)內(nèi)核,支持單CPU;2)支持時(shí)間片輪轉(zhuǎn)功能,即一個(gè)任務(wù)可以被多個(gè)任務(wù)使用,當(dāng)這個(gè)優(yōu)先級處于最高就緒狀態(tài)的時(shí)

候,μCOS-Ⅲ會輪流調(diào)度當(dāng)前優(yōu)先級的所有任務(wù),讓每個(gè)任務(wù)能夠由用戶指定的時(shí)間長度來運(yùn)

行一段時(shí)間;3)中斷快速響應(yīng),采用鎖定內(nèi)核調(diào)度的方式而不是關(guān)中斷的方式保護(hù)臨界段程序,降低關(guān)中斷的

時(shí)間,可以快速響應(yīng)中斷請求,如果應(yīng)用中存在非??斓闹袛嗾埱笤?,在直接發(fā)布模式下的中

斷關(guān)閉時(shí)間不能滿足要求的時(shí)候,可以使用延遲發(fā)布模式來降低中斷關(guān)閉時(shí)間;2.1μCOS-Ⅲ簡介總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題102.μCOS-Ⅲ實(shí)時(shí)系統(tǒng)特性4)任務(wù)數(shù)不受限制;5)支持軟件定時(shí)器,用戶可以在“單次”和“周期”型定時(shí)器中自由選擇;6)支持任務(wù)掛起,即同時(shí)等待多個(gè)內(nèi)核對象時(shí),μCOS-Ⅲ允許一個(gè)任務(wù)同時(shí)等待多個(gè)事件,一

個(gè)任務(wù)能夠掛起在多個(gè)信號量或消息隊(duì)列上,當(dāng)其中任何一個(gè)等待的事件發(fā)生時(shí),等待的任

務(wù)會被喚醒;7)支持直接向任務(wù)發(fā)送信號和消息,μCOS-Ⅲ支持中斷或任務(wù)直接給另一個(gè)任務(wù)發(fā)送信號和消

息,不用再創(chuàng)建和使用諸如信號量或者事件標(biāo)志等內(nèi)核對象作為其他發(fā)送信號任務(wù)的中介。2.2μCOS-Ⅲ移植總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題11移植μCOS-Ⅲ,需要處理器滿足如下條件:1)具備相應(yīng)的能夠產(chǎn)生可重入函數(shù)的C編譯器;2)能夠提供周期性的中斷;3)可以實(shí)現(xiàn)對中斷功能的相關(guān)處理;4)具備存儲和載入堆棧指針、CPU寄存器、堆棧指令;5)有足夠的RAM用于存放μCOS-Ⅲ的變量、結(jié)構(gòu)體、任務(wù)控制塊、任務(wù)堆棧等;6)其編譯器支持64位的數(shù)據(jù)類型。圖5-2顯示了μCOS-Ⅲ架構(gòu)、它與其他軟件硬件的關(guān)系。2.2μCOS-Ⅲ移植總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題12圖5-2

μCOS-Ⅲ架構(gòu)關(guān)系圖圖5-2中(1)~(8)分別為:(1)應(yīng)用層模塊(2)與內(nèi)核無關(guān)的CPU文件(3)BSP模塊(4)與CPU無關(guān)的OS內(nèi)核模塊(5)與CPU相關(guān)的OS內(nèi)核模塊(6)與特定CPU相關(guān)的模塊uC/CPU(7)μC庫文件(8)配置文件詳細(xì)講解見課本P186。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題131.μCOS-Ⅲ中的任務(wù)

在μCOS-Ⅲ中任務(wù)就是程序?qū)嶓w,μCOS-Ⅲ能夠管理和調(diào)度這些小任務(wù)(程序)。μCOS-Ⅲ中的任務(wù)由三部分組成:任務(wù)堆棧、任務(wù)控制塊和任務(wù)函數(shù)。1)任務(wù)堆棧:上下文切換的時(shí)候用來保存任務(wù)的工作環(huán)境,對應(yīng)STM32的內(nèi)部寄存器值。2)任務(wù)控制塊:用來記錄任務(wù)的各個(gè)屬性。3)任務(wù)函數(shù):由用戶編寫的任務(wù)處理程序。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題142.μCOS-Ⅲ中的任務(wù)函數(shù)

任務(wù)函數(shù)是用戶編寫的任務(wù)執(zhí)行程序,具有執(zhí)行功能。任務(wù)函數(shù)模板如下:voidXXX_task(void*p_arg){while(1){

}}由任務(wù)函數(shù)模板可知:1)任務(wù)函數(shù)通常是一個(gè)無限循環(huán),也可以是一個(gè)只執(zhí)行1次

的任務(wù);2)任務(wù)函數(shù)的參數(shù)是一個(gè)void類型,目的是可以傳遞不同類

型的數(shù)據(jù)甚至函數(shù);3)任務(wù)函數(shù)其實(shí)就是一個(gè)C語言的函數(shù),在μCOS-Ⅲ中這個(gè)

函數(shù)不能由用戶自行調(diào)用,任務(wù)函數(shù)何時(shí)執(zhí)行、何時(shí)停

止完全由操作系統(tǒng)來控制。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題153.μCOS-Ⅲ中的系統(tǒng)任務(wù)μCOS-Ⅲ默認(rèn)有5個(gè)系統(tǒng)任務(wù):1)空閑任務(wù):μCOS-Ⅲ創(chuàng)建的第1個(gè)任務(wù),也是μCOS-Ⅲ必須創(chuàng)建的任務(wù),此任務(wù)由μCOS-Ⅲ自動(dòng)創(chuàng)建,不需要用戶手動(dòng)創(chuàng)建;2)時(shí)鐘節(jié)拍任務(wù):此任務(wù)也是必須創(chuàng)建的任務(wù);3)統(tǒng)計(jì)任務(wù):用來統(tǒng)計(jì)CPU使用率和各個(gè)任務(wù)的堆棧使用量。此任務(wù)是可選任務(wù),由宏OS_CFG_STAT_TASK_EN控制是否使用此任務(wù);4)定時(shí)任務(wù):用來向用戶提供定時(shí)服務(wù),也是可選任務(wù),由宏OS_CFG_TMR_EN控制是否使用此任務(wù);5)中斷服務(wù)管理任務(wù):可選任務(wù),由宏OS_CFG_ISR_POST_DEFERRED_EN控制是否使用此任務(wù)。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題164.μCOS-Ⅲ中的任務(wù)狀態(tài)從用戶的角度看,μCOS-Ⅲ的任務(wù)一共有5種狀態(tài):1)休眠態(tài):任務(wù)已經(jīng)在CPU的RAM中了,但還不受μCOS-Ⅲ管理。2)就緒態(tài):系統(tǒng)為任務(wù)分配了任務(wù)控制塊,并且任務(wù)已經(jīng)在就緒表中登記,這時(shí)這個(gè)任務(wù)就具備了運(yùn)行的條件,此時(shí)任務(wù)的狀態(tài)就是就緒態(tài)。3)運(yùn)行態(tài):任務(wù)獲得CPU的使用權(quán),正在運(yùn)行。4)等待態(tài):正在運(yùn)行的任務(wù)需要等待一段時(shí)間,或者等待某個(gè)事件,這時(shí)這個(gè)任務(wù)就進(jìn)入了等待態(tài),此時(shí)系統(tǒng)就會把CPU使用權(quán)轉(zhuǎn)交給別的任務(wù)。5)中斷服務(wù)態(tài):當(dāng)發(fā)送并響應(yīng)中斷請求,當(dāng)前正在運(yùn)行的任務(wù)被掛起,CPU轉(zhuǎn)而去執(zhí)行中斷服務(wù)函數(shù),此時(shí)任務(wù)狀態(tài)叫作中斷服務(wù)態(tài)。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題175.μCOS-Ⅲ中的任務(wù)狀態(tài)轉(zhuǎn)換

μCOS-Ⅲ通過調(diào)用不同API函數(shù)可以在等待態(tài)、休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)和中斷服務(wù)態(tài)之間轉(zhuǎn)換,具體的轉(zhuǎn)換關(guān)系圖5-3所示。圖5-3

μCOS-Ⅲ任務(wù)狀態(tài)轉(zhuǎn)換圖例如:可以調(diào)用API函數(shù)OSTaskCreat()把任務(wù)從休眠態(tài)切換到就緒態(tài);也可以調(diào)用OSTaskDel()把任務(wù)從任務(wù)就緒表中刪除,任務(wù)從就緒態(tài)切換到休眠態(tài)。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題186.μCOS-Ⅲ中任務(wù)創(chuàng)建的基礎(chǔ)(1)創(chuàng)建任務(wù)堆棧

任務(wù)堆棧是任務(wù)的重要部分,堆棧是在RAM中按照“先進(jìn)先出”(FIFO)的原則組織的一塊連續(xù)的存儲空間。為了滿足任務(wù)切換和響應(yīng)中斷時(shí)保存CPU寄存器中的內(nèi)容及任務(wù)中調(diào)用其他函數(shù)的需要,每個(gè)任務(wù)都有自己的堆棧。1)任務(wù)堆棧創(chuàng)建。#defineSTART_STK_SIZE512CPU_STKSTART_TASK_STK[START_STK_SIZE];

CPU_STK為CPU_INT32U類型,也就是unsignedint類型,為4B的,那么任務(wù)堆棧START_TASK_STK的大小就為:512×4字節(jié)=2048B。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題196.μCOS-Ⅲ中任務(wù)創(chuàng)建的基礎(chǔ)(1)創(chuàng)建任務(wù)堆棧2)任務(wù)堆棧初始化。

任務(wù)通過恢復(fù)現(xiàn)場才能切換回上一個(gè)任務(wù),并且接著從上次中斷的地方開始運(yùn)行?,F(xiàn)場就是CPU內(nèi)部的各個(gè)寄存器。

在創(chuàng)建一個(gè)新任務(wù)時(shí),必須把系統(tǒng)啟動(dòng)這個(gè)任務(wù)時(shí)所需的CPU相關(guān)寄存器初始值先存放在任務(wù)堆棧中。這樣當(dāng)任務(wù)獲得CPU使用權(quán)時(shí),就把任務(wù)堆棧的內(nèi)容復(fù)制到CPU的相關(guān)寄存器,從而任務(wù)可以順利地啟動(dòng)并運(yùn)行。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題206.μCOS-Ⅲ中任務(wù)創(chuàng)建的基礎(chǔ)(1)創(chuàng)建任務(wù)堆棧2)任務(wù)堆棧初始化。

使用任務(wù)堆棧初始化API函數(shù)對任務(wù)堆棧進(jìn)行初始化。μCOS-Ⅲ提供了完成堆棧初始化的函數(shù)OSTaskStkInit(),其示例如下:CPU_STK*OSTaskStkInit(OS_TASK_PTR

p_task,

void

*p_arg,

CPU_STK

*p_stk_base,

CPU_STK

*p_stk_limit,CPU_STK_SIZE

stk_size,OS_OPT

opt)2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題216.μCOS-Ⅲ中任務(wù)創(chuàng)建的基礎(chǔ)(1)創(chuàng)建任務(wù)堆棧2)任務(wù)堆棧初始化。

OSTaskCreate()函數(shù)示例如下:voidOSTaskCreate(OS_TCB

*p_tcb,CPU_CHAR

*p_name,OS_TASK_PTR

p_task,OS_PRIO

prio,CPU_STK

*p_stk_base,CPU_STK_SIZE

stk_limit,CPU_STK_SIZE

stk_size,OS_MSG_QTY

q_size,OS_TICK

time_quanta,void

*p_ext,OS_OPT

opt,OS_ERR

*p_err)任務(wù)堆棧有兩種增長方式:1)向上增長:堆棧的增長方向從低地址向高地址增長,如果CPU的堆棧是向上增長的話,那么基地址就是&START_TASK_STK[0];2)向下增長:堆棧的增長方向從高地址向低地址增長,如果CPU堆棧是向下增長的話,基地址就是&START_TASK_STK[START_STK_SIZE-1]。2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題226.μCOS-Ⅲ中任務(wù)創(chuàng)建的基礎(chǔ)(2)創(chuàng)建任務(wù)控制塊

任務(wù)控制塊用來記錄與任務(wù)相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),每個(gè)任務(wù)都有自己的任務(wù)控制塊。任務(wù)控制塊由用戶自行創(chuàng)建,如下程序?yàn)閯?chuàng)建一個(gè)任務(wù)控制塊:

OS_TCB

StartTaskTCB;

OS_TCB為一個(gè)結(jié)構(gòu)體,描述了任務(wù)控制塊,用戶不能直接訪問任務(wù)控制塊中的成員變量,更不能改變它們。OS_TCB中有些成員采用了條件編譯的方式來確定。任務(wù)控制塊結(jié)構(gòu)體定義如下:structos_tcb{CPU_STK

*StkPtr;void

*ExtPtr;CPU_STK

*StkLimitPtrOS_TCB

*NextPtr;OS_TCB

*Prev……#ifOS_CFG_DBG_EN>0u

OS_TCB

*DbgPrevPtr;

OS_TCB

*DbgNextPtr;

CPU_CHAR

*DbgNamePtr;

#endif}2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題237.任務(wù)優(yōu)先級和任務(wù)就緒表

μCOS-Ⅲ中的任務(wù)優(yōu)先級數(shù)由宏OS_CFG_PRIO_MAX來配置,μCOS-Ⅲ中,優(yōu)先級數(shù)值越小,優(yōu)先級越高,最低可用優(yōu)先級是OS_CFG_PRIO_MAX-1。

μCOS-Ⅲ中就緒表由兩部分組成:1)優(yōu)先級位映射表OSPrioTbl[]:用來記錄哪個(gè)優(yōu)先級下有任務(wù)就緒;2)就緒任務(wù)列表OSRdyList[]:用來記錄每個(gè)優(yōu)先級下所有就緒的任務(wù)。

μCOS-Ⅲ中,任務(wù)就緒列表中優(yōu)先級最高的任務(wù)會獲得CPU使用權(quán),那么,如何查找任務(wù)就緒列表中優(yōu)先級最高的任務(wù)就成了關(guān)鍵的問題。μCOS-Ⅲ中,函數(shù)OS_PrioGetHighest()用于找到任務(wù)就緒列表中優(yōu)先級最高的任務(wù)。該程序如下:2.3μCOS-Ⅲ任務(wù)管理總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題247.任務(wù)優(yōu)先級和任務(wù)就緒表OS_PRIOOS_PrioGetHighest(void){CPU_DATA*p_tbl;OS_PRIOprio;prio=(OS_PRIO)0;p_tbl=&OSPrioTbl[0];while(*p_tbl==(CPU_DATA)0)

{

prio+=DEF_INT_CPU_NBR_BITS;

p_tbl++;}prio+=(OS_PRIO)CPU_CntLeadZeros(*p_tbl);return(prio);}2.4μCOS-Ⅲ任務(wù)調(diào)度總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題251.任務(wù)調(diào)度

任務(wù)調(diào)度就是中止當(dāng)前正在運(yùn)行的任務(wù)轉(zhuǎn)而執(zhí)行其他的任務(wù)。μCOS-Ⅲ是可剝奪型內(nèi)核,因此當(dāng)一個(gè)高優(yōu)先級的任務(wù)準(zhǔn)備就緒,并且此時(shí)獲得了任務(wù)調(diào)度,那么這個(gè)高優(yōu)先級的任務(wù)就會獲得CPU的使用權(quán)。μCOS-Ⅲ中的任務(wù)調(diào)度是由任務(wù)調(diào)度器來完成的,任務(wù)調(diào)度有兩種:任務(wù)級調(diào)度器OSSched()和中斷級調(diào)度器OSIntExit()。當(dāng)退出外部中斷服務(wù)函數(shù)的時(shí)候使用中斷級調(diào)度器。2.任務(wù)切換

當(dāng)μCOS-Ⅲ需要切換到另一個(gè)任務(wù)時(shí),它將當(dāng)前任務(wù)的現(xiàn)場保存到當(dāng)前任務(wù)的堆棧中,主要保存的是CPU寄存器值,然后恢復(fù)新的現(xiàn)場并且執(zhí)行新的任務(wù),這個(gè)過程就是任務(wù)切換。任務(wù)切換分為兩種:任務(wù)級切換和中斷級切換。任務(wù)級切換函數(shù)為OSCtxSw(),中斷級切換函數(shù)為OSIntCtxSw()。2.5μCOS-Ⅲ系統(tǒng)初始化總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題26

在使用μCOS-Ⅲ之前必須先初始化μCOS-Ⅲ,用函數(shù)OSInit()來完成μCOS-Ⅲ的初始化,而且OSInit()必須先于其他μCOS-Ⅲ函數(shù)的調(diào)用,包括OSStart()。下面的程序描述了μCOS-Ⅲ初始化過程。intmain(void){OS_ERRerr;……OSInit(&err);……OSStart(&err);}2.6μCOS-Ⅲ系統(tǒng)啟動(dòng)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題27

μCOS-Ⅲ系統(tǒng)初始化完成后,使用函數(shù)OSStart()來啟動(dòng)μCOS-Ⅲ,啟動(dòng)程序如下:voidOSStart(OS_ERR*p_err){if(OSRunning==OS_STATE_OS_STOPPED){OSPrioHighRdy=OS_PrioGetHighest();OSPrioCur=OSPrioHighRdy;OSTCBHighRdyPtr=OSRdyList[OSPrioHighRdy].HeadPtr;OSTCBCurPtr=OSTCBHighRdyPtr;OSRunning=OS_STATE_OS_RUNNING;OSStartHighRdy();*p_err=OS_ERR_FATAL_RETURN;}else{*p_err=OS_ERR_OS_RUNNING;}}2.7μCOS-Ⅲ任務(wù)API函數(shù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題281.創(chuàng)建任務(wù)API函數(shù)μCOS-Ⅲ使用任務(wù)的第一件事就是創(chuàng)建一個(gè)任務(wù),創(chuàng)建任務(wù)時(shí)使用函數(shù)OSTaskCreate(),函數(shù)原型如下:voidOSTaskCreate(OS_TCB

*p_tcb,CPU_CHAR

*p_name,OS_TASK_PTR

p_task,OS_PRIO

prio,CPU_STK

*p_stk_base,CPU_STK_SIZE

stk_limit,CPU_STK_SIZE

stk_size,OS_MSG_QTY

q_size,OS_TICK

time_quanta,void

*p_ext,OS_OPT

opt,OS_ERR

*p_err)2.7μCOS-Ⅲ任務(wù)API函數(shù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題292.刪除任務(wù)API函數(shù)

如果不想使用某個(gè)任務(wù)就可將其刪除,刪除任務(wù)時(shí)使用函數(shù)OSTaskDel(),函數(shù)原型如下:

voidOSTaskDel(OS_TCB*p_tcb,

OS_ERR*p_err)

刪除某個(gè)任務(wù)以后,它占用的OS_TCB和堆棧就可以再次利用來創(chuàng)建其他的任務(wù)。盡管μCOS-Ⅲ允許在系統(tǒng)運(yùn)行中刪除任務(wù),但是應(yīng)該盡量避免這種操作,如果這個(gè)任務(wù)可能占有與其他任務(wù)共享的資源,在刪除此任務(wù)之前這個(gè)被占有的資源如果沒有被釋放就可能導(dǎo)致奇怪的結(jié)果。2.7μCOS-Ⅲ任務(wù)API函數(shù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題303.掛起任務(wù)API函數(shù)

想暫停某個(gè)任務(wù)、又不想刪除這個(gè)任務(wù)的時(shí)候就可以使用函數(shù)OSTaskSuspend()來將這個(gè)任務(wù)掛起,函數(shù)原型如下:voidOSTaskSuspend(OS_TCB*p_tcb,

OS_ERR*p_err)4.恢復(fù)任務(wù)API函數(shù)

當(dāng)想要恢復(fù)某個(gè)被掛起的任務(wù)的時(shí)候可以調(diào)用函數(shù)OSTaskResume(),函數(shù)原型如下:voidOSTaskResume(OS_TCB*p_tcb,

OS_ERR*p_err)2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題31[能力目標(biāo)]●掌握創(chuàng)建任務(wù)的方法●掌握刪除任務(wù)的方法[任務(wù)描述]

首先創(chuàng)建起始任務(wù)start_task,然后在start_task任務(wù)中創(chuàng)建任務(wù)task1_task和task2_task,task1_task和task2_task創(chuàng)建完成后,刪除start_task任務(wù)自身。task1_task和task2_task在LCM1602上有各自的運(yùn)行區(qū)域;每隔1s它們都會在各自運(yùn)行區(qū)顯示各自的運(yùn)行次數(shù);task1_task運(yùn)行5次以后刪除任務(wù)task2_task;當(dāng)任務(wù)task1_task刪除任務(wù)task2_task以后要在液晶屏上顯示“task1_taskdeltask2_task!”。下面按步驟介紹本任務(wù)實(shí)現(xiàn)過程。2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題321.定義任務(wù)創(chuàng)建所需變量

創(chuàng)建任務(wù)之前,要定義好創(chuàng)建任務(wù)所需要的參數(shù):任務(wù)優(yōu)先級、任務(wù)控制塊、任務(wù)堆棧、任務(wù)控制塊和任務(wù)函數(shù)的聲明。

(1)創(chuàng)建起始任務(wù)的變量定義

創(chuàng)建起始任務(wù)所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineSTART_TASK_PRIO3#defineSTART_STK_SIZE128OS_TCBStartTaskTCB;CPU_STKSTART_TASK_STK[START_STK_SIZE];voidstart_task(void*p_arg);2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題331.定義任務(wù)創(chuàng)建所需變量(2)創(chuàng)建任務(wù)1的變量定義

創(chuàng)建任務(wù)1所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineTASK1_TASK_PRIO4#defineTASK1_STK_SIZE128OS_TCBTask1_TaskTCB;CPU_STKTASK1_TASK_STK[TASK1_STK_SIZE];voidtask1_task(void*p_arg);2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題341.定義任務(wù)創(chuàng)建所需變量(3)創(chuàng)建任務(wù)2的變量定義

創(chuàng)建任務(wù)2所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineTASK2_TASK_PRIO5#defineTASK2_STK_SIZE128OS_TCBTask2_TaskTCB;CPU_STKTASK2_TASK_STK[TASK2_STK_SIZE];voidtask2_task(void*p_arg);2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題352.創(chuàng)建任務(wù)

下面直接給出創(chuàng)建start_task、task1_task、task2_task這3個(gè)任務(wù)的程序。start_task任務(wù)首先在main函數(shù)中創(chuàng)建。start_task創(chuàng)建完成后,μCOS-Ⅲ會首先運(yùn)行這個(gè)任務(wù)函數(shù),在start_task任務(wù)函數(shù)中創(chuàng)建task1_task和task2_task任務(wù),task1_task和task2_task任務(wù)創(chuàng)建完成后,刪除start_task任務(wù)自身。task1_task和task2_task將在調(diào)度器的調(diào)度下運(yùn)行。2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題362.創(chuàng)建任務(wù)(1)創(chuàng)建start_task任務(wù)創(chuàng)建start_task任務(wù)的程序如下:

OSTaskCreate((OS_TCB*)&StartTaskTCB,

(OS_TASK_PTR)start_task,(void*)0,(OS_PRIO)START_TASK_PRIO,(CPU_STK*)&START_TASK_STK[0],(CPU_STK_SIZE)START_STK_SIZE/10,(CPU_STK_SIZE)START_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,

(void*)0,

(OS_OPT)OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR*)&err);(2)創(chuàng)建task1_task和task2_task任務(wù)task1_task和task2_task任務(wù)是用start_task任務(wù)函數(shù)創(chuàng)建的。詳見課本P196。2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題373.任務(wù)函數(shù)程序編寫(1)task1_task任務(wù)函數(shù)task1_task任務(wù)函數(shù)程序如下:voidtask1_task(void*p_arg){u8task1_num=0;OS_ERRerr;CPU_SR_ALLOC();p_arg=p_arg;OS_CRITICAL_ENTER();LCM_Wr_string(1,0,"Task1Run:000");OS_CRITICAL_EXIT();while(1){

task1_num++;LED0=~LED0;if(task1_num==5){OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err);LCM_Wr_string(2,0,"Task1delTask2!");printf("任務(wù)1刪除了任務(wù)2!\r\n");}Task1_numbμF[0]=task1_num/100+0x30;Task1_numbμF[1]=task1_num%100/10+0x30;Task1_numbμF[2]=task1_num%10+0x30;Task1_numbμF[3]='\0';LCM_Wr_string(1,10,Task1_numbuF);OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);//延時(shí)1s}}2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題383.任務(wù)函數(shù)程序編寫(2)task2_task任務(wù)函數(shù)task2_task任務(wù)函數(shù)程序如下:voidtask2_task(void*p_arg){u8task2_num=0;OS_ERRerr;CPU_SR_ALLOC();p_arg=p_arg;OS_CRITICAL_ENTER();LCM_Wr_string(2,0,"Task2Run:000");OS_CRITICAL_EXIT();while(1){task2_num++;LED1=~LED1;Task2_numbuF[0]=task2_num/100+0x30;Task2_numbuF[1]=task2_num%100/10+0x30;Task2_numbuF[2]=task2_num%10+0x30;Task2_numbuF[3]='\0';LCM_Wr_string(2,10,Task2_numbuF);OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);//延時(shí)1s}}2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題394.主函數(shù)程序設(shè)計(jì)charTask1_numbuF[4],Task2_numbuF[4];intmain(void){OS_ERRerr;CPU_SR_ALLOC();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart_init(115200);LED_Init();Init_1602();LCM_Wr_string(2,0,"Task2Run:000");OSInit(&err);OS_CRITICAL_ENTER();OSTaskCreate((OS_TCB*)&StartTaskTCB,(CPU_CHAR*)"starttask",(OS_TASK_PTR)start_task,(void*)0,(OS_PRIO)START_TASK_PRIO,(CPU_STK*)&START_TASK_STK[0],(CPU_STK_SIZE)START_STK_SIZE/10,(CPU_STK_SIZE)START_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void*)0,(OS_OPT)OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR*)&err);OS_CRITICAL_EXIT();OSStart(&err);}2.8任務(wù):μCOS-Ⅲ任務(wù)創(chuàng)建與刪除總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題405.功能測試可通過“μCOS-Ⅲ任務(wù)創(chuàng)建與刪除”視頻了解此任務(wù)的運(yùn)行效果。2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題41[能力目標(biāo)]●掌握掛起任務(wù)的方法●掌握恢復(fù)任務(wù)的方法[任務(wù)描述]

首先創(chuàng)建起始任務(wù)start_task,然后在start_task任務(wù)函數(shù)中創(chuàng)建任務(wù)task1_task和task2_task。task1_task和task2_task創(chuàng)建完成后,刪除start_task任務(wù)自身。task1_task和task2_task在LCM1602上有各自的運(yùn)行區(qū)域;每隔1s它們會在各自運(yùn)行區(qū)顯示各自的運(yùn)行次數(shù);task1_task運(yùn)行5次以后掛起任務(wù)task2_task;當(dāng)任務(wù)task1_task掛起任務(wù)task2_task以后在液晶屏上顯示“task1_taskSustask2_task!”。下面按步驟介紹本任務(wù)實(shí)現(xiàn)過程。2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題421.定義任務(wù)創(chuàng)建所需變量

創(chuàng)建任務(wù)之前,要定義好創(chuàng)建任務(wù)所需要的參數(shù):任務(wù)優(yōu)先級、任務(wù)控制塊、任務(wù)堆棧、任務(wù)控制塊和任務(wù)函數(shù)的聲明。(1)創(chuàng)建起始任務(wù)的變量定義

創(chuàng)建起始任務(wù)所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineSTART_TASK_PRIO

3#defineSTART_STK_SIZE

128OS_TCBStartTaskTCB;CPU_STKSTART_TASK_STK[START_STK_SIZE];voidstart_task(void*p_arg);2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題431.定義任務(wù)創(chuàng)建所需變量(2)創(chuàng)建任務(wù)1的變量定義

創(chuàng)建任務(wù)1所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineTASK1_TASK_PRIO

4

#defineTASK1_STK_SIZE

128OS_TCBTask1_TaskTCB;CPU_STKTASK1_TASK_STK[TASK1_STK_SIZE];voidtask1_task(void*p_arg);(3)創(chuàng)建任務(wù)2的變量定義

創(chuàng)建任務(wù)2所需參數(shù)的定義和任務(wù)函數(shù)的聲明程序如下:#defineTASK2_TASK_PRIO

5#defineTASK2_STK_SIZE

128OS_TCBTask2_TaskTCB;CPU_STKTASK2_TASK_STK[TASK2_STK_SIZE];voidtask2_task(void*p_arg);2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題442.創(chuàng)建任務(wù)

下面直接給出創(chuàng)建start_task、task1_task、task2_task這3個(gè)任務(wù)的程序。start_task任務(wù)在main函數(shù)中創(chuàng)建。start_task創(chuàng)建完成后,μCOS-Ⅲ會運(yùn)行這個(gè)任務(wù)函數(shù),在start_task任務(wù)函數(shù)中創(chuàng)建task1_task和task2_task任務(wù),task1_task和task2_task任務(wù)創(chuàng)建完成后,刪除start_task自身。task1_task和task2_task在調(diào)度器的調(diào)度下運(yùn)行。2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題452.創(chuàng)建任務(wù)(1)創(chuàng)建start_task任務(wù)創(chuàng)建start_task任務(wù)的程序如下:OSTaskCreate((OS_TCB*)&StartTaskTCB,(OS_TASK_PTR)start_task,(void*)0,(OS_PRIO)START_TASK_PRIO,(CPU_STK*)&START_TASK_STK[0],(CPU_STK_SIZE)START_STK_SIZE/10,(CPU_STK_SIZE)START_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void*)0,(OS_OPT)OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR*)&err);2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題462.創(chuàng)建任務(wù)(2)創(chuàng)建task1_task和task2_task任務(wù)

task1_task和task2_task任務(wù)是用start_task任務(wù)函數(shù)創(chuàng)建的。兩個(gè)任務(wù)的創(chuàng)建程序如下:voidstart_task(void*p_arg){OS_ERRerr;CPU_SR_ALLOC();p_arg=p_arg;CPU_Init();#ifOS_CFG_STAT_TASK_EN>0uOSStatTaskCPUUsageInit(&err);#endif#ifdefCPU_CFG_INT_DIS_MEAS_ENCPU_IntDisMeasMaxCurReset();#endif#ifOS_CFG_SCHED_ROUND_ROBIN_ENOSSchedRoundRobinCfg(DEF_ENABLED,1,&err);#endif2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題472.創(chuàng)建任務(wù)OS_CRITICAL_ENTER();OSTaskCreate((OS_TCB*)&Task1_TaskTCB,(CPU_CHAR*)"Task1task",(OS_TASK_PTR)task1_task,(void*)0,(OS_PRIO)TASK1_TASK_PRIO,(CPU_STK*)&TASK1_TASK_STK[0],(CPU_STK_SIZE)TASK1_STK_SIZE/10,(CPU_STK_SIZE)TASK1_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void*)0,(OS_OPT)OS_OPT_TASK_STK_CHK|

OS_OPT_TASK_STK_CLR,(OS_ERR*)&err);OSTaskCreate((OS_TCB*)&Task2_TaskTCB,(CPU_CHAR*)"task2task",(OS_TASK_PTR)task2_task,(void*)0,(OS_PRIO)TASK2_TASK_PRIO,(CPU_STK*)&TASK2_TASK_STK[0],(CPU_STK_SIZE)TASK2_STK_SIZE/10,(CPU_STK_SIZE)TASK2_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void*)0,(OS_OPT)OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR*)&err);OS_CRITICAL_EXIT();printf("起始任務(wù)刪除了自己!\r\n");OSTaskDel((OS_TCB*)0,&err);}2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題483.任務(wù)函數(shù)程序編寫(1)task1_task任務(wù)函數(shù)task1_task任務(wù)函數(shù)程序如下:voidtask1_task(void*p_arg){u8task1_num=0;OS_ERRerr;CPU_SR_ALLOC();p_arg=p_arg;OS_CRITICAL_ENTER();LCM_Wr_string(1,0,"Task1Run:000");OS_CRITICAL_EXIT();while(1){task1_num++;LED0=~LED0;if(task1_num==5){OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);LCM_Wr_string(2,0,"Task1SusTask2!");printf("任務(wù)1掛起了任務(wù)2!\r\n");}if(task1_num==10){

OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);LCM_Wr_string(2,0,"Task1ResTask2!");24printf("任務(wù)1恢復(fù)了任務(wù)2!\r\n");}if(task1_num==11){LCM_Wr_string(2,0,"");LCM_Wr_string(2,0,"Task2Run:000");}Task1_numbuF[0]=task1_num/100+0x30;Task1_numbuF[1]=task1_num%100/10+0x30;Task1_numbuF[2]=task1_num%10+0x30;Task1_numbuF[3]='\0';LCM_Wr_string(1,10,Task1_numbuF);OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);//延時(shí)1s}}2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題493.任務(wù)函數(shù)程序編寫(2)task2_task任務(wù)函數(shù)task2_task任務(wù)函數(shù)程序如下:voidtask2_task(void*p_arg){u8task2_num=0;OS_ERRerr;CPU_SR_ALLOC();p_arg=p_arg;OS_CRITICAL_ENTER();LCM_Wr_string(2,0,"Task2Run:000");OS_CRITICAL_EXIT();while(1){task2_num++;LED1=~LED1;Task2_numbuF[0]=task2_num/100+0x30;Task2_numbuF[1]=task2_num%100/10+0x30;Task2_numbuF[2]=task2_num%10+0x30;Task2_numbuF[3]='\0';LCM_Wr_string(2,10,Task2_numbuF);OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);//延時(shí)1s}}2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題504.主函數(shù)程序設(shè)計(jì)charTask1_numbuF[4],Task2_numbuF[4];intmain(void){OS_ERRerr;CPU_SR_ALLOC();delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart_init(115200);LED_Init();Init_1602();LCM_Wr_string(2,0,"Task2Run:000");OSInit(&err);OS_CRITICAL_ENTER();

OSTaskCreate((OS_TCB*)&StartTaskTCB,(CPU_CHAR*)"starttask",(OS_TASK_PTR)start_task,(void*)0,(OS_PRIO)START_TASK_PRIO,(CPU_STK*)&START_TASK_STK[0],(CPU_STK_SIZE)START_STK_SIZE/10,(CPU_STK_SIZE)START_STK_SIZE,(OS_MSG_QTY)0,(OS_TICK)0,(void*)0,(OS_OPT)OS_OPT_TASK_STK_CHK|

OS_OPT_TASK_STK_CLR,

(OS_ERR*)&err);OS_CRITICAL_EXIT();OSStart(&err);}2.9任務(wù):μCOS-Ⅲ任務(wù)掛起與恢復(fù)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題515.功能測試可通過“μCOS-Ⅲ任務(wù)掛起與恢復(fù)”視頻了解此任務(wù)的運(yùn)行效果。Part.03軟件設(shè)計(jì)523軟件設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題53

軟件設(shè)計(jì)主要針對某個(gè)特定對象,可以完成硬件不能完成的功能,也是實(shí)現(xiàn)控制的重要組成部分。軟件是整個(gè)控制系統(tǒng)設(shè)計(jì)的核心,它具有充分的靈活性,可以根據(jù)系統(tǒng)的要求而變化。在本設(shè)計(jì)中單片機(jī)的智能控制功能主要由軟件來完成,其程序框架如圖5-4所示。軟件設(shè)計(jì)以μCOS-Ⅲ嵌入式操作系統(tǒng)為運(yùn)行平臺,各功能驅(qū)動(dòng)程序模塊化設(shè)計(jì),將系統(tǒng)所要完成的功能模塊分別編寫和調(diào)試,所有模塊調(diào)試成功以后,將各個(gè)模塊交由操作系統(tǒng)進(jìn)行相關(guān)任務(wù)管理。這樣設(shè)計(jì)有利于程序的優(yōu)化,提升程序的執(zhí)行效率,利于后期系統(tǒng)功能的添加。

本任務(wù)系統(tǒng)功能由A/D轉(zhuǎn)換任務(wù)、pH值測量任務(wù)、顯示任務(wù)、GPS定位任務(wù)、數(shù)據(jù)傳輸任務(wù)等五個(gè)子任務(wù)組成,它們在μCOS-Ⅲ統(tǒng)一調(diào)度下完成。系統(tǒng)設(shè)計(jì)流程圖如圖5-5所示。3軟件設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題54圖5-4

程序設(shè)計(jì)架構(gòu)圖圖5-5

系統(tǒng)設(shè)計(jì)流程圖3.1A/D數(shù)據(jù)采集模塊程序設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題55

本模塊的主要功能就是采集pH參數(shù)和溫度參數(shù),所以A/D轉(zhuǎn)換就成了重點(diǎn)。可將采集到的數(shù)據(jù)轉(zhuǎn)換成被測水樣的pH值和溫度值,最后經(jīng)過處理后顯示。A/D數(shù)據(jù)采集模塊程序如下:voidADC_task(void*p_arg){u16adcx;floattemp,PH;OS_ERRerr;p_arg=p_arg;while(1){adcx=Get_Adc_Average(ADC_Channel_1,10);temp=(float)adcx*(00008056640625)*1000;PH=(344-10*temp/1000)/01041*100;OSQPost((OS_Q*)&ADC_Msg,(void*)&temp,(OS_MSG_SIZE)1,(OS_OPT)OS_OPT_POST_FIFO,}}3.2主程序設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題56

沒有μCOS-Ⅲ系統(tǒng)之前需要CPU不斷地處理任務(wù),加入μCOS-Ⅲ系統(tǒng)之后主程序主要負(fù)責(zé)驅(qū)動(dòng)程序模塊初始化和各模塊任務(wù)的創(chuàng)建,然后由μCOS-Ⅲ對主程序創(chuàng)建的任務(wù)進(jìn)行統(tǒng)一管理和調(diào)配。主程序見課本P206-P209。3.3顯示模塊驅(qū)動(dòng)程序設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題57

顯示采用的是LCM12864點(diǎn)陣型液晶顯示模塊,它既可以顯示漢字又可以顯示字符,還可以自定義圖形模式。它便于操作和源程序移植。顯示驅(qū)動(dòng)程序主要顯示測試儀的工作狀態(tài)、工作模式和采集到的各種數(shù)據(jù)。

LCM12864顯示驅(qū)動(dòng)程序見課本P209-P211。3.4GPS定位模塊驅(qū)動(dòng)程序設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題58

GPS定位采用ATK-S1216F8-BDGPS/北斗模塊,它兼容33V和5V供電,成本低,功能豐富。本設(shè)計(jì)使用該模塊對pH檢測儀進(jìn)行經(jīng)/緯度定位,通過串口發(fā)送信息到單片機(jī)內(nèi)部進(jìn)行數(shù)據(jù)處理,將處理完成的經(jīng)/緯度數(shù)據(jù)遠(yuǎn)程發(fā)送到用戶上位機(jī)進(jìn)行定位。

GPS定位模塊驅(qū)動(dòng)程序見課本P211-P212。3.5無線數(shù)據(jù)傳輸協(xié)議程序設(shè)計(jì)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題59

實(shí)現(xiàn)GPRS無線通信功能首先需要編寫相關(guān)串口的驅(qū)動(dòng)程序,使它能夠?qū)崿F(xiàn)串口的開關(guān)和讀寫,然后利用串口驅(qū)動(dòng)程序GPRS無線通信模塊的數(shù)據(jù)傳輸?shù)裙δ堋@肧TM32單片機(jī)對GPRS無線通信模塊進(jìn)行數(shù)據(jù)傳輸和控制。利用GPRS無線通信模塊的DTU模式,把測量數(shù)據(jù)無線傳輸?shù)缴衔粰C(jī),使上位機(jī)實(shí)現(xiàn)了對無線數(shù)據(jù)的實(shí)時(shí)監(jiān)測和相關(guān)控制。

無線數(shù)據(jù)傳輸協(xié)議程序見課本P212-P213.Part.04程序下載與調(diào)試604.1測試系統(tǒng)總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題61

整個(gè)系統(tǒng)主要由主板、顯示、pH值傳感器、溫度傳感器DS18B20、GPS模塊、GPRS模塊、光伏板等組成,如圖5-6所示。圖5-6

測試系統(tǒng)實(shí)物圖4.2調(diào)試過程總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題62

開機(jī)前取下復(fù)合電極套,用蒸餾水清洗電極,用濾紙吸干;準(zhǔn)備好pH值為4.00和7.00的緩沖液。主要操作步驟如下:1)按下電源開關(guān),預(yù)熱30min。短時(shí)間測量時(shí),一般預(yù)熱不短于5分鐘;長時(shí)間測量時(shí),最好預(yù)熱在20分鐘以上,以使其有較好的穩(wěn)定性。2)標(biāo)定(兩點(diǎn)校正):在50mL燒杯中盛20mL左右的pH=400的緩沖液,將電極浸入其中,按下操作面板的mV/pH轉(zhuǎn)換檔,不時(shí)搖動(dòng)燒杯,讀數(shù)穩(wěn)定后,按下記錄鍵并輸入被測液體的pH值,記下pH值為400的緩沖液對應(yīng)的電壓值(單位為mV);用蒸餾水輕輕沖洗電極,并用濾紙吸干。4.2調(diào)試過程總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題633)再次在50mL燒杯中盛20mL左右的pH=700的緩沖液,將電極浸入其中,按下mV/pH轉(zhuǎn)換檔,不時(shí)搖動(dòng)燒杯,使讀數(shù)穩(wěn)定后,按下記錄鍵并輸入被測液體的pH值,記下數(shù)據(jù)E2(單位為mV);系統(tǒng)自動(dòng)計(jì)算當(dāng)前狀態(tài)下pH電極斜率指通過電極可以把pH值轉(zhuǎn)換成電壓,因?yàn)樵撾妷菏蔷€性的,所得直線的斜率就是電極斜率。并顯示在液晶屏上。4)先用蒸餾水清洗電極,再用被測溶液清洗;用玻璃棒攪拌溶液,使溶液均勻,把pH電極和DS18B20溫度傳感器浸入被測溶液中,讀出其pH值。5)用蒸餾水清洗電極,用濾紙吸干;套上復(fù)合電極套,套內(nèi)應(yīng)放少量電極保護(hù)液;拔下復(fù)合電極,接上短接線,以防止灰塵進(jìn)入而影響測量準(zhǔn)確性;最后關(guān)閉電源。4.2調(diào)試過程總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題64酸性溶液測量效果如圖5-7所示,堿性溶液測量效果如圖5-8所示。圖5-7

酸性液體的pH值測量圖5-8

堿性液體的pH值測量4.2調(diào)試過程總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題65

表5-1所示數(shù)據(jù)是本任務(wù)中pH檢測儀測得的數(shù)據(jù)與梅特勒·托利多pH檢測儀測得數(shù)據(jù)的比較,No.1是梅特勒·托利多pH檢測儀得到的數(shù)據(jù),No.2是本任務(wù)自行設(shè)計(jì)的pH檢測儀得到的數(shù)據(jù)。表5-1

兩種檢測器的數(shù)據(jù)比較

從表中可以看出,梅特勒·托利多pH值檢測儀比本任務(wù)設(shè)計(jì)的pH值檢測儀更精確,它的精度是0.01,本任務(wù)的測量精度只達(dá)到了0.1,原因是本任務(wù)的復(fù)合電極性能上差了一些,即電極本身的精度不夠引起的誤差就大了一些,后來經(jīng)補(bǔ)償處理效果有所改善。Part.05本章小結(jié)及習(xí)題66總體方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題675.1本章小結(jié)1.將μCOS-Ⅲ小型嵌入式系統(tǒng)移植到STM32F1系列處理器中,使用μCOS-Ⅲ進(jìn)行系統(tǒng)多任務(wù)的調(diào)度,使得STM32運(yùn)行效率更高,程序編寫更容易2.詳細(xì)介紹了LCM12864液晶顯示、GSRS通信模塊應(yīng)用、GPS/BD定位模塊應(yīng)用、太陽能和市電供電自動(dòng)切換、pH電極信號處理和溫度補(bǔ)償?shù)群诵碾娐吩O(shè)計(jì)3.硬件電路設(shè)計(jì)、制作完成后,詳細(xì)介紹了程序設(shè)計(jì)和核心源程序4.通過本任務(wù)的學(xué)習(xí),可以初步掌握操作系統(tǒng)的概念,使用μCOS-Ⅲ進(jìn)行嵌入式產(chǎn)品的軟件設(shè)計(jì),為后續(xù)開發(fā)更復(fù)雜嵌入式系統(tǒng)產(chǎn)品打基礎(chǔ)5.2本章小結(jié)及習(xí)題習(xí)題一:簡述μCOS-Ⅲ任務(wù)創(chuàng)建、任務(wù)刪除、任務(wù)掛起、任務(wù)恢復(fù)的方法。習(xí)題二:簡述μCOS-Ⅲ多任務(wù)調(diào)度的方法。習(xí)題三:簡述μCOS-Ⅲ多任務(wù)間信息傳遞的方法??傮w方案及硬件電路設(shè)計(jì)μCOS-Ⅲ應(yīng)用基礎(chǔ)軟件設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題68智能門鎖設(shè)計(jì)與制作適用平臺:STM32F1xx任課老師:xxx69智能門鎖遠(yuǎn)程控制硬件電路設(shè)計(jì)智能門鎖遠(yuǎn)程控制軟件設(shè)計(jì)

AndroidStudio工具的使用、Android應(yīng)用中的基本布局和UI控件使用遠(yuǎn)程控制客戶端的開發(fā)01020304本章要點(diǎn)70Part.01項(xiàng)目介紹711.1項(xiàng)目描述項(xiàng)目介紹硬件電路設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試72智能門鎖的設(shè)計(jì)與制作,可以理解為依賴嵌入式技術(shù)和信息技術(shù)實(shí)現(xiàn)遠(yuǎn)程開關(guān)門鎖的操作,用來對實(shí)驗(yàn)室門鎖、倉庫門鎖的遠(yuǎn)程控制,提高管理工作效率并降低運(yùn)行維護(hù)成本。本項(xiàng)目相關(guān)技術(shù)如下。(1)自動(dòng)識別技術(shù)自動(dòng)識別技術(shù)包括條形碼識別、光學(xué)字符識別、智能字符識別以及生物測量識別等。運(yùn)用自動(dòng)識別技術(shù)可以實(shí)現(xiàn)人員管理、設(shè)備管理,并有效地進(jìn)行信息跟蹤。(2)設(shè)備通信技術(shù)設(shè)備通信技術(shù)實(shí)現(xiàn)設(shè)備的數(shù)據(jù)采集、傳輸和處理,通常包含串口通信、網(wǎng)口通信。例如數(shù)據(jù)采集IIC通信、SPI通信、TCP/IP通信,通過一定的協(xié)議、指令對前端傳感設(shè)備進(jìn)行數(shù)據(jù)采集和處理。(3)系統(tǒng)集成軟件技術(shù)系統(tǒng)最終實(shí)現(xiàn)底層數(shù)據(jù)的采集、數(shù)據(jù)處理和展示,可通過系統(tǒng)集成技術(shù)實(shí)現(xiàn)各類前端傳感器的接入,實(shí)現(xiàn)數(shù)據(jù)監(jiān)控和設(shè)備遠(yuǎn)程控制,它具有強(qiáng)大的信息和數(shù)據(jù)交互的能力,能有效地利用所采集的數(shù)據(jù)。本章小結(jié)及習(xí)題1.2項(xiàng)目方案涉及73圖6-1智能控制門鎖整體架構(gòu)圖本項(xiàng)目主要是結(jié)合無線傳感技術(shù)、單片機(jī)技術(shù)以及Android開發(fā)技術(shù)等。以單片機(jī)作為載體,結(jié)合無線傳感技術(shù)以及WiFi傳輸技術(shù)來獲取門鎖的狀態(tài),再應(yīng)用Android開發(fā)技術(shù)將信息匯總于手機(jī)客戶端,以此通過手機(jī)完成對門鎖的遠(yuǎn)程監(jiān)控與控制。智能控制門鎖整體架構(gòu)如圖6-1所示。項(xiàng)目介紹硬件電路設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題Part.02硬件電路設(shè)計(jì)74硬件電路設(shè)計(jì)75智能門鎖的硬件電路原理圖共分四部分:第一部分是STM32F103最小系統(tǒng)電路;第二部分是繼電器控制電路;第三部分是系統(tǒng)供電電路;第四部分是WiFi通信模塊ESP8266-01S接口電路。硬件電路設(shè)計(jì)項(xiàng)目介紹系統(tǒng)軟件設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題Part.03系統(tǒng)軟件設(shè)計(jì)763.1LED燈控制程序設(shè)計(jì)77按鍵對智能門鎖LED燈的控制相對比較簡單,通過對按鍵是否按下進(jìn)行循環(huán)檢測,如果檢測到按鍵按下即可完成對LED的控制操作,程序流程圖如圖6-2所示。圖6-2按鍵控制LED燈程序流程圖系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題3.1LED燈控制程序設(shè)計(jì)78系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題核心程序如下:if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0){delay_ms(50);if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0){LED5=!LED5;while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0);}}程序與流程圖一致,完成了LED亮滅的控制3.2電機(jī)鎖控制程序設(shè)計(jì)79由于電機(jī)鎖由12V電源電壓控制,但所使用電源電壓一般為5V或者3.3V,這里使用了繼電器解決此問題。電機(jī)鎖依據(jù)WiFi模塊傳遞的數(shù)據(jù)判斷是否要開啟。該控制模塊功能如圖6-3所示。圖6-3電機(jī)鎖控制模塊示意圖系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題3.2電機(jī)鎖控制程序設(shè)計(jì)80本模塊功能是不斷地監(jiān)測串口數(shù)據(jù)(WiFi傳遞來的數(shù)據(jù)),如果監(jiān)測的數(shù)據(jù)有“OPEN”字符串,就準(zhǔn)備開啟門鎖,開啟門鎖后依然會循環(huán)監(jiān)測串口數(shù)據(jù),這樣就完成了手機(jī)對門鎖的控制。圖6-4為門鎖控制程序流程圖。圖6-4門鎖控制程序流程圖系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題3.2電機(jī)鎖控制程序設(shè)計(jì)81依據(jù)流程圖設(shè)計(jì)和編寫的程序如下。程序中實(shí)現(xiàn)了在無限循環(huán)中實(shí)時(shí)檢測WiFi從串口發(fā)來的數(shù)據(jù),如果數(shù)據(jù)為CLOCK,則通過繼電器實(shí)現(xiàn)門鎖的開啟。系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題while(1){if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;//得到此次接數(shù)據(jù)的長度printf("youreceivenews:\r\n");for(t=0;t<len;t++){str[t]=USART_RX_BΜF(xiàn)[t];USART_SendData(USART1,USART_RX_BΜF(xiàn)[t]);//向串口1發(fā)送數(shù)據(jù)while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束}str[len]='\0‘;if(strcmp("CLOCK",str)==0)//門鎖開{LOCK=!LOCK;delay_ms(50);LOCK=!LOCK;}printf("\r\n");//插入換行USART_RX_STA=0;}}3.3WiFi通信程序設(shè)計(jì)821.工作模式模塊支持STA、AP、STA+AP這3種工作模式?!馭TA模式:WiFi模塊通過路由器連接互聯(lián)網(wǎng),手機(jī)或計(jì)算機(jī)通過互聯(lián)網(wǎng)實(shí)現(xiàn)對設(shè)備的遠(yuǎn)程控制;●AP模式:WiFi模塊作為熱點(diǎn),實(shí)現(xiàn)手機(jī)或計(jì)算機(jī)直接與模塊通信,實(shí)現(xiàn)局域網(wǎng)無線控制;●STA+AP模式:兩種模式共存。2.AT指令該指令有3種模式:●AT+CWMODE=1//Station模式●AT+CWMODE=2//AP模式●AT+CWMODE=3//Station兼AP模式系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題3.3WiFi通信程序設(shè)計(jì)833.WiFi模塊作為客戶端(Station模式)連接TCPserver配置,其步驟如下:1)測試指令,指令為“AT”,發(fā)送指令后若返回“OK”說明模塊的供電和通信正常;2)設(shè)置應(yīng)用模式,指令為“AT+CWMODE=1”(1為Station,2為AP,3為Station兼AP模式);3)重啟模塊,指令為“AT+RST”,修改模塊模式后需要重啟,重啟后,若返回ready字符串說明模塊重啟成功,然后模塊處于Station模式;4)查找附近無線網(wǎng)絡(luò),指令為“AT+CWJAP”(若有網(wǎng)絡(luò)名SSID和密碼password可省去此步驟);5)加入AP網(wǎng)絡(luò),指令為‘AT+CWJAP_DEF=“WIFI_SSID”,“password”’,輸入無線路由器或者熱點(diǎn)的用戶名和密碼,注意大小寫;6)設(shè)置單連接,指令為“AT+CIPMODE=1”,WiFi模塊作為客戶端連接服務(wù)器進(jìn)行透傳時(shí),客戶端需處于單連接;7)連接到服務(wù)器,指令為‘AT+CIPSTART=“TCP”,“服務(wù)器IP地址”,“端口”’;8)開啟透傳發(fā)送,指令為“AT+CIPSEND”,發(fā)送完指令后,WiFi模塊將接收到的所有數(shù)據(jù)發(fā)送至服務(wù)器;9)退出透傳模式,指令為“+++”,結(jié)尾不需要加“\r\n”,退出透傳模式,可再次發(fā)送AT測試指令。系統(tǒng)軟件設(shè)計(jì)項(xiàng)目介紹硬件電路設(shè)計(jì)智能控制APP設(shè)計(jì)程序下載與調(diào)試本章小結(jié)及習(xí)題3.3WiFi通信程序設(shè)計(jì)843.WiFi模塊作為客戶端(Station模式)連接TCPserver配置,其步驟如下:1)測試指令

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論