【正文】
is designed for microcontroller system and open source software designed for preemptive multitasking realtime operating system with other realtime operating systems such as linux with the implementation of high efficiency, small footprint, realtime performance and superior scalability and so on. the minimum core can be piled from 2KB. This paper describes the structure and position of the monitoring system software and hardware design. System hardware including power modules, display module, temperature data acquisition module, limit alarm module, key control module, JTAG circuit and the main processing chip. System software design to plete the μC / OSII realtime embedded operating system migration. Second, the design of the four tasks namely the temperature detection task, showing task, Alarm set task and key tasks 4 tasks. The task of collecting temperature sent to the controller detected. The task of achieving realtime display shows temperature. Warning establishment duty establishment temperature maximum and minimum value, if surpasses the limiting value to report to the police. System Migration μC / OSII realtime embedded operating system, the success of key response time, clear and stable temperature display.Keywords: μC / OSII。本文詳細(xì)闡述了監(jiān)控系統(tǒng)組成結(jié)構(gòu)和軟硬件設(shè)計(jì)。 DS18B20。當(dāng)今嵌入式系統(tǒng)(單片機(jī))集成越來(lái)越多資源,內(nèi)部存儲(chǔ)資源日益豐富,用戶不需要擴(kuò)充資源就可以完成項(xiàng)目開(kāi)發(fā),不僅是開(kāi)發(fā)簡(jiǎn)單,產(chǎn)品小巧美觀,同時(shí)系統(tǒng)也更加穩(wěn)定,目前該方向既是發(fā)展為SOC(片上系統(tǒng))。目前低端定位的單片機(jī)仍然走俏,但高端的單片機(jī)(微處理器)卻是風(fēng)起云涌,SOC 技術(shù)的發(fā)展,現(xiàn)代電子技術(shù)應(yīng)用中包含了硬件(HW)、硬件加軟件(HW+SW)、固件(FW)3 個(gè)層次。1969年,Busi請(qǐng)Inter為他們的每一種新式計(jì)算機(jī)分別進(jìn)行設(shè)計(jì),而且設(shè)計(jì)了一種用在所有型號(hào)上的通用電路。當(dāng)小孩子或者矮個(gè)子的人在的時(shí)候不會(huì)充氣的智能氣囊,掌上電子記事薄和個(gè)人數(shù)字助理(PDA)、數(shù)碼照相機(jī)和儀表導(dǎo)航系統(tǒng)。一般為專門(mén)設(shè)計(jì)的芯片。(4)功率嵌入式系統(tǒng)的產(chǎn)品很多都是由電池供電的,因此對(duì)于電源的管理可以說(shuō)到了近乎苛刻的地步。(3)PowerPCPowerPC 體系結(jié)構(gòu)規(guī)范由IBM、Apple 和Motorola 共同提出。嵌入式操作系統(tǒng)在通信、電子、自動(dòng)化等領(lǐng)域具有無(wú)比的優(yōu)越性,其實(shí)時(shí)處理能力得到越來(lái)越多的重視,關(guān)于嵌入式操作系統(tǒng)的研究正在不斷深入。與分時(shí)系統(tǒng)相比,具有多路性、獨(dú)立性、及時(shí)性、交互性、可靠性的特點(diǎn)。(2)實(shí)時(shí)操作系統(tǒng)的特點(diǎn)由于實(shí)時(shí)操作系統(tǒng)與通用操作系統(tǒng)的基本設(shè)計(jì)原則差別很大,因此在很多資源調(diào)度策略的選擇上以及操作系統(tǒng)實(shí)現(xiàn)的方法上兩者郡具有較大的差異。操作系統(tǒng)的(中斷延遲、任務(wù)切換、驅(qū)動(dòng)程序延遲等)行為是可知的和可預(yù)測(cè)的是指在全負(fù)載的情形下,最壞反應(yīng)時(shí)間可知的;通常都是在中斷服務(wù)程序中使高優(yōu)先級(jí)任務(wù)進(jìn)入就緒態(tài)(例如使用發(fā)送信號(hào)的方法),退出中斷服務(wù)程序后,將進(jìn)行任務(wù)切換,高優(yōu)先級(jí)任務(wù)被執(zhí)行[3]。對(duì)于一些對(duì)中斷響應(yīng)時(shí)間有嚴(yán)格要求的系統(tǒng),這是必不可少的。μC/OSⅡ的這種特性是好是壞,主要看從什么角度來(lái)判斷了。一個(gè)完整的程序可以劃分成幾個(gè)任務(wù),不同的任務(wù)執(zhí)行不同的功能。在這個(gè)過(guò)程中即使有優(yōu)先權(quán)更高的任務(wù)進(jìn)入了就緒態(tài),因?yàn)闊o(wú)法得到此信號(hào)量,也不能使用該資源。發(fā)生這種情況,在μC/OSⅡ中稱為優(yōu)先級(jí)反轉(zhuǎn)。更重要的是,C語(yǔ)言是和處理器無(wú)關(guān)的,這就能夠讓程序員可以著眼于算法和應(yīng)用而不用考慮特定處理器結(jié)構(gòu)的細(xì)節(jié)語(yǔ)言與其他語(yǔ)言比如Pascal 和FORTRAN 區(qū)別開(kāi)的地方就是,C語(yǔ)言是一個(gè)非?!暗图?jí)”的高級(jí)語(yǔ)言,C語(yǔ)言給與嵌入式程序員很大程度的直接控制硬件的能力,卻不會(huì)失去高級(jí)語(yǔ)言帶來(lái)的好處。匯編語(yǔ)言現(xiàn)在只用作高級(jí)語(yǔ)言的附件,通產(chǎn)只用在那些必須要求極高效率或非常緊湊,或者是其他方法無(wú)法編寫(xiě)的小段代碼里。即使是這些領(lǐng)地這幾年也在逐漸喪失,這是一件很不幸的事情,因?yàn)榕cC++比起來(lái),Ada 有很多特性可以簡(jiǎn)化嵌入式軟件的開(kāi)發(fā)工作[8]。通過(guò)電源模塊為電路板提供電源。它的測(cè)溫范圍為55~+125℃,并且在10~+85℃精度為177。 DS18B20引腳排列表1 詳細(xì)引腳說(shuō)明8 引腳SOIC 封裝 TO9 封裝 符號(hào) 說(shuō)明5 1 GND 接地 4 2 DQ 數(shù)據(jù)輸入/輸出引腳。在那之后,產(chǎn)生的溫度數(shù)據(jù)以兩個(gè)字節(jié)的形式被存儲(chǔ)到高速暫存器的溫度寄存器中,DS18B20繼續(xù)保持等待狀態(tài)。 ARM的CortexM3是32位的RISC處理器,提供額外的代碼效率,在通常8和16位系統(tǒng)的存儲(chǔ)空間上發(fā)揮了ARM內(nèi)核的高性能。多達(dá)80個(gè)通用I/O口連接到16個(gè)外部中斷線。 在需要的情況下,I/O引腳的外設(shè)功能可以通過(guò)一個(gè)特定的操作鎖定,以避免意外的寫(xiě)入I/O寄存器。大部分的μC/OSⅡ代碼時(shí)使用 ANSI C 語(yǔ)言書(shū)寫(xiě)的,因此μC/OSⅡ的可移植性好。由于μC/OSⅡ在設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以μC/OSⅡ的移植相對(duì)來(lái)說(shuō)是比較容易的[11]。改為:OS_CPU_SysTickHandler;并在文件前添加:Ⅱ操作系統(tǒng)整體圖連接完成μC/OSⅡ 的內(nèi)核代碼后,還要添加板級(jí)移植驅(qū)動(dòng),才能驅(qū)動(dòng)系統(tǒng)運(yùn)行,;。 OSInit()。 }用App_TaskCreate()函數(shù)建立4個(gè)任務(wù),任務(wù)名分別為:App_TaskKEY(按鍵設(shè)置任務(wù))、App_TaskLED(顯示任務(wù))、App_TaskTEMP(采集溫度任務(wù))、App_TaskWARN(報(bào)警任務(wù))。 if (OS_TASK_NAME_SIZE = 9) OSTaskNameSet(APP_TASK_LED_PRIO, TASK LED, amp。if (OS_TASK_NAME_SIZE = 9) OSTaskNameSet(APP_TASK_WARN_PRIO, TASK WARN, amp。}} 顯示處理函數(shù)以下程序?yàn)闇囟炔杉蝿?wù)調(diào)用具體溫度采集函數(shù)的代碼:static void App_TaskTemp(void *p_arg) 溫度采集函數(shù){(void) p_arg。KeyTask()相關(guān)程序主要代碼如下:void KeyTask(void){static unsigned char CurrKey, iLoopCount = 0。 static unsigned char oldkey = 0。 oldkey = currkey。 return 1。 aa = numb。 //個(gè)位數(shù) j[3] = aa j[0] * 1000 j[1] * 100 j[2] * 10。顯示小數(shù)點(diǎn) } Delay(200)。 //c GPIO_ResetBits(GPIOA, GPIO_Pin_4)。 報(bào)警 } else { BuzzleOFF()。為了在線調(diào)試的方便和快捷高效,本系統(tǒng)使用的存儲(chǔ)器程序?qū)懭霝樵谙到y(tǒng)可編程。軟件設(shè)計(jì)了4個(gè)任務(wù)來(lái)驗(yàn)證μC/OSⅡ系統(tǒng)。將顯示任務(wù)的優(yōu)先級(jí)設(shè)置高于讀取溫度的優(yōu)先級(jí)則解決這個(gè)問(wèn)題。數(shù)碼管顯示實(shí)時(shí)溫度。這樣就可以保證重要任務(wù)總是優(yōu)先擁有CPU,系統(tǒng)中各個(gè)實(shí)時(shí)任務(wù)的調(diào)用不用設(shè)計(jì)者調(diào)控,完全由操作系統(tǒng)來(lái)自行調(diào)控完成。參 考 文 獻(xiàn)[1] 張宏海,李成忠,陳祝亞. 嵌入式實(shí)時(shí)系統(tǒng)[J]. 安徽工業(yè)大學(xué)學(xué)報(bào),2005,9(9):5687.[2] 李郁松,郭裕順. 嵌入式實(shí)時(shí)系統(tǒng)及其開(kāi)發(fā)[J]. 杭州電子工業(yè)學(xué)院學(xué)報(bào),2006,1(1):2345.[3] 劉亭,[J].傳感器的世界2009,1(1):3942.[4] [J].農(nóng)業(yè)工程學(xué)報(bào),1997,13(增):262—269.[5] [J].科學(xué)技術(shù)與工程,2007,23(7) :6080—6083.[6] [M]. 北京:電子工業(yè)出版社,2003.[7] [M].武漢:華中理工大學(xué)出版社,2004.[8] Micbael 著,++嵌入式系統(tǒng)編程[M].北京:中國(guó)電力出版社,2001.[9] 他們的認(rèn)真,他們的執(zhí)著,都讓我學(xué)到了很多的東西。最后我要感謝通信工程061 班的所有同學(xué)們,四年的大學(xué)里,同學(xué)們一起生活,一起學(xué)習(xí)。作為我們?cè)诖髮W(xué)中的最后一門(mén)課程,畢業(yè)設(shè)計(jì)不僅讓我鞏固了大學(xué)里所學(xué)到的知識(shí),還讓我學(xué)習(xí)到了嚴(yán)謹(jǐn)而又踏實(shí)的工作作風(fēng)。當(dāng)然在設(shè)計(jì)中還存在許多其他不盡完善的地方,在今后的工作中來(lái)加以優(yōu)化。本系統(tǒng)采用的μC/OSⅡ最主要的特點(diǎn)就是源碼公開(kāi)。經(jīng)過(guò)硬件和軟件的調(diào)試,系統(tǒng)演示如下:(1) 系統(tǒng)顯示實(shí)時(shí)溫度狀態(tài) 系統(tǒng)上電復(fù)位以后,數(shù)碼管顯示實(shí)時(shí)溫度。程序編譯和下載環(huán)境是KEIL UVISION4。這種方法直接利用系統(tǒng)中帶有JTAG 接口的器件,如CPU、CPLD、FPGA 等,執(zhí)行對(duì)系統(tǒng)程序存儲(chǔ)器芯片內(nèi)容的擦除和編程操作。 向端口寫(xiě)入數(shù)據(jù)}void BuzzleOFF(void) { GPIO_ResetBits(GPIOA, GPIO_Pin_12)。 //e GPIO_ResetBits(GPIOC, GPIO_Pin_14)。 //0 設(shè)置掃描0口 GPIO_ResetBits(GPIOB, GPIO_Pin_6)。 //負(fù)溫度顯示負(fù)號(hào): for (l = 0。 else { aa = ~aa + 1。}}return 0。 break。 unsigned char UpKey, DownKey, SetKey。CurrKey) == 1)讀取鍵值判斷按鍵是否抬起 { KeyDealFlag = KEYEXEC。 OSTimeDlyHMSM(0, 0, 1, 100)。endif}為了代碼更加清楚明了,此設(shè)計(jì)編寫(xiě)時(shí)將各個(gè)任務(wù)編寫(xiě)的具體函數(shù)都放在板級(jí)庫(kù)文件中供任務(wù)調(diào)用。endif os_err = OSTaskCreate((void(*)(void *)) App_TaskTEMP, (void *) 0,采集任務(wù) (OS_STK *) amp。 os_err = OSTaskCreate((void(*)(void *)) App_TaskKEY, (void *) 0,按鍵任務(wù) (OS