版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 . - -可修編.本科畢業(yè)論文本科畢業(yè)論文設(shè)計設(shè)計論文題目論文題目:基于基于 STM32STM32 的嵌入式操作系統(tǒng)的嵌入式操作系統(tǒng)程序設(shè)計及實現(xiàn)程序設(shè)計及實現(xiàn)XXXX:郝宇郝宇學號學號:4 4班級班級:0101 班班年級年級:20212021 級級專業(yè)專業(yè):電子信息工程電子信息工程學學 院院:信息工程學院信息工程學院指導教師指導教師:丁光哲講師丁光哲講師完成時間完成時間:20212021 年年 5 5 月月 2020 日日. . .word.作者聲明作者聲明本畢業(yè)論文設(shè)計是在導師的指導下由本人獨立撰寫完成的,沒有剽竊、抄襲、造假等違反道德、學術(shù)規(guī) X 和其他侵權(quán)行為。對本論文設(shè)計的研究做出
2、重要奉獻的個人和集體,均已在文中以明確方式標明。因本畢業(yè)論文設(shè)計引起的法律結(jié)果完全由本人承當。畢業(yè)論文設(shè)計成果歸武昌工學院所有。特此聲明作者專業(yè):電子信息工程作者學號:4 4作者簽名:年年 月月 日日. . .word.基于基于 STM32STM32 的嵌入式操作系統(tǒng)的嵌入式操作系統(tǒng)程序設(shè)計及實現(xiàn)程序設(shè)計及實現(xiàn)郝宇郝宇The Design and Implementation of embedded operating system program based on STM32Hao,Hao, YuYu. . .word.20212021 年年 5 5 月月 2020 日日. . .word.
3、摘要摘要隨著科學技術(shù)不斷的進步,工業(yè)生產(chǎn)越來越先進復雜,操作系統(tǒng) C/OS-II是高效、穩(wěn)定、可靠、節(jié)能的系統(tǒng),廣泛應(yīng)用安防,消費電子中。而基于Cortex-M3 架構(gòu)下的 STM32 是一款性價比優(yōu)越新型微處理器,將 C/OS-II移植到STM32 上能夠發(fā)揮其高效的性能,從而投入社會生產(chǎn),制造出很多有用又實惠的電子產(chǎn)品,為我們的生活帶來便利。本文主要的研究內(nèi)容是 C/OS-II 操作系統(tǒng)理論分析、移植方法、應(yīng)用程序設(shè)計及調(diào)試仿真實現(xiàn)。首先,對 C/OS-II 的理論分析,研究其實際應(yīng)用及系統(tǒng)構(gòu)造;其次,分析 STM32 硬件平臺及 C/OS-II 的移植需求;最后,在 C/OS-II上開發(fā)
4、 LCD,LED,按鍵 KEY 等應(yīng)用程序,并對多任務(wù)系統(tǒng)調(diào)試分析。主要研究結(jié)論如下:1C/OS-II 操作系統(tǒng)主要分為任務(wù)管理、內(nèi)存管理和時間管理三大局部,其間通信是通過消息隊列和消。2C/OS-II 移植主要在 OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM 三個文件中,涉及到數(shù)據(jù)類型、堆棧、中斷定義和任務(wù)切換等。3應(yīng)用程序設(shè)計優(yōu)先級分配要合理,硬件平臺初始化模塊化處理。關(guān)鍵詞:關(guān)鍵詞:嵌入式系統(tǒng);C/OS-II;移植. . .word.AbstractAbstractWith the progress of science and technology constant
5、ly, advanced industrial production to more plex, the operating systemC/OS-II is efficient, stable,reliable, energy saving system, widely used in the security, and consumer electronics. Andbased on the STM32 architecture Cortex-M3 framework is a superior cost-effective new microprocessor, C/OS-II tra
6、nsplantation to STM32 can play its efficient performance, thus in social production and create a lot of useful and affordable electronic product, bring convenience to our lives.This article main research content isC/OS-II operating system theory analysis, method of transplantation, application desig
7、n and debugging of the simulation implementation. First of all, the theoretical analysis ofC/OS-II, research the actual application and system structure; Second, analysis of STM32 hardware platform and the demand C/OS-II transplantation. Finally, on theC/OS-II development of LCD, LED, button KEY app
8、lications, and analysis of multitasking system debugging. Main research conclusion is as follows: (1)C/OS-II operating system consists of three major task management, memory management and time management, in which munication is through the message queue and email. (2)C/OS-II transplantation mainly
9、inOS_CPU_C.C, OS_CPU_A.ASM file, OS_CPU.H,three involves the data type definition and task switching etc, stack, interrupt. (3)The application design to the allocation of priorities, initialize the modular processing hardware platform. Keywords:Keywords: embedded system;C/OS-II; transplant. . .word.
10、 . .word.目錄目錄1 1 概概 述述.1 11.1 研究的目的及意義11.2 國內(nèi)外研究狀況綜述 11.3 研究的主要內(nèi)容 22 2 C/OS-IIC/OS-II 的理論介紹的理論介紹 3 32.1 C/OS-II 各模塊的根本功能 32.2 STM32 上移植方法 73 3 LCDLCD 屏程序設(shè)計及調(diào)試屏程序設(shè)計及調(diào)試 12123.1 工具概述 123.2 硬件構(gòu)造 133.3 C 程序設(shè)計 153.4 調(diào)試 16結(jié)語結(jié)語 1818主要參考文獻主要參考文獻 1919附附 錄錄 2 20 0附錄 1 主程序代碼 20. . .word. . .word.1 1 概概 述述1 1. .
11、1 1 研研究究的的目目的的及及意意義義C/OS-II是由美國工程師Jean Labrosse編寫的嵌入式多任務(wù)的實時操作系統(tǒng),包括實時內(nèi)核、任務(wù)管理、時鐘管理、任務(wù)間通信同步(信號量、消息隊列)和內(nèi)存管理。除了有上面的優(yōu)點外,C/OS-II它具有別的操作系統(tǒng)沒有的優(yōu)點,具體如下:1源代碼開放:C/OS-II的源代碼可以免費獲取,且標有清晰的注釋,可讀性好。2可移植性好:C/OS-II的源代碼90以上是用C語言編寫的,可以很容易地把它移植到各類8位、16位和32位處理器上。3穩(wěn)定性高:C/OS-II已得到FAA的標準認證,且目前已有上百個商業(yè)應(yīng)用實例,其穩(wěn)定性和可靠性是經(jīng)過實踐驗證的。因此,C
12、/OS-II廣泛的應(yīng)用于控制系統(tǒng)中,如在衍射儀高壓控制系統(tǒng)中使用C/OS-II操作系統(tǒng)是一種很好的選擇??刂葡到y(tǒng)是一個復雜的系統(tǒng),它需要多個系統(tǒng)協(xié)同工作。傳統(tǒng)的系統(tǒng)開發(fā)我們往往使用前后臺的方式,但是這種開發(fā)方式在任務(wù)較簡單的開發(fā)中比擬適用,對于任務(wù)比擬復雜的系統(tǒng)往往力不從心。對于任務(wù)較多而且復雜的情況我們就要引入實時操作系統(tǒng)RTOS。RTOS表達了一種新的應(yīng)用程序設(shè)計思想和開放的框架,用戶在編寫程序時,可以分別編寫各個任務(wù),不必同時將所有任務(wù)運行的各種可能情況記在心中,大大減小了程序編寫的工作量,而且減小了出錯的可能,保證最終程序具有高可靠性,從而降低程序的復雜度和開發(fā)周期。由于控制系統(tǒng)功能較
13、復雜,諸多的功能可以劃分成許多不同的模塊,模塊之間既彼此聯(lián)系又相對獨立,可以當作不同的任務(wù)來進展處理。所以,使用實時操作系統(tǒng),將不同的功能劃分成不同的任務(wù)進展處理使得設(shè)計大大簡化。1 1. .2 2 國國內(nèi)內(nèi)外外研研究究狀狀況況綜綜述述嵌入式系統(tǒng)是繼IT網(wǎng)絡(luò)技術(shù)之后,又一個新的技術(shù)開展方向。中國單片機二十年論壇總結(jié)出,我國嵌入式起步較早,但總體來說開展緩慢,和國外的開發(fā)應(yīng)用具有很大的差距,造成這一局面的原因是多方面的。在國內(nèi)嵌入式系統(tǒng)開發(fā)方面,多是一些低層次的應(yīng)用,停留在以前老的技術(shù)根底之上。例如,經(jīng)典51系列單片機在上世紀我國的工業(yè)信息化改造過程中發(fā)揮了重要的作用,滲透到生產(chǎn)生活的各個方面。
14、與此同時在大學電類相關(guān)的工科單片機教學中,依. . .word.然是經(jīng)典的51,微機原理依然是8086/88,這顯然表達不了最新的技術(shù)特征,造成了大學教育與實際社會需要的脫節(jié)。國外的大局部高校和國內(nèi)的極少數(shù)大學相繼開設(shè)嵌入式微處理器設(shè)計等相關(guān)的前沿性的課程,可見基于STM32技術(shù)將是未來微控制開發(fā)的主流方向。由于C/OS-II系統(tǒng)具有體積小、性能強、功耗低、可靠性高以及面向行業(yè)應(yīng)用的突出特征,目前已經(jīng)被廣泛的應(yīng)用于軍事國防、消費電子、網(wǎng)絡(luò)通信、工業(yè)控制等各個領(lǐng)域。今天嵌入式系統(tǒng)帶來的工業(yè)年產(chǎn)值已超過了1萬億美元,1997年來自美國嵌入式系統(tǒng)大會(Embedded System Conferen
15、ce)的報告指出,未來5年僅基于嵌入式計算機系統(tǒng)的全數(shù)字電視產(chǎn)品,就將在美國產(chǎn)生一個每年1500億美元的新市場。美國汽車大王福特公司的高級經(jīng)理也曾宣稱,“福特出售的計算能力已超過了IBM,由此可以想見嵌入式計算機工業(yè)的規(guī)模和廣度。1998年11月在美國加州舉行的嵌入式系統(tǒng)大會上,基于RTOS的Embedded Internet成為一個技術(shù)新熱點。在國內(nèi),“維納斯方案和“女媧方案一度鬧得沸沸揚揚,機頂盒、信息加電這兩年更成了IT熱點,而實際上這些都是嵌入式系統(tǒng)在特定環(huán)境下的一個特定應(yīng)用。據(jù)調(diào)查,目前國際上已有兩百多種嵌入式操作系統(tǒng),而各種各樣的開發(fā)工具、應(yīng)用于嵌入式開發(fā)的儀器設(shè)備更是不可勝數(shù)。在
16、國內(nèi),雖然嵌入式應(yīng)用、開發(fā)很廣,但該領(lǐng)域卻幾乎還是空白,只有三兩家公司和極少數(shù)人員在從事這方面工作。由此可見,嵌入式系統(tǒng)技術(shù)開展的空間真是無比廣闊。1 1. .3 3 研研究究的的主主要要內(nèi)內(nèi)容容本文是在基于 32 位的 ARM 微處理器 STM32 和嵌入式實時操作系統(tǒng) C/OS-II 上進展嵌入式操作系統(tǒng)的移植和功能實現(xiàn)。通過將嵌入式實時操作系統(tǒng)C/OS-II 移植到 STM32 微處理器上,并對其進展軟件功能的擴展和硬件擴展,實現(xiàn)了一個根本完整的嵌入式實時操作系統(tǒng)。建立了基于嵌入式 ARM 處理器的應(yīng)用軟件體系;將 C/OS-II 移植到 STM32,建立了嵌入式操作系統(tǒng)研究及C/OS-
17、II 下的開發(fā)環(huán)境體系。包括 C/OS-II 系統(tǒng)配置、C/OS-II 下的移植、啟動、測試和功能實現(xiàn)等。完成了基于 STM32 的 C/OS-II 的應(yīng)用設(shè)計。本文主要分為 4 章,章節(jié)安排如下: 1緒論。主要介紹了開題的背景和研究意義,以及 C/OS-II 的國內(nèi)外研究現(xiàn)狀。2C/OS-II 的理論介紹。主要介紹 C/OS-II 各模塊的根本功能和在STM32 上移植方法。. . .word.3硬件平臺介紹及 LCD 屏程序設(shè)計及調(diào)試。多任務(wù)的建立并實現(xiàn)根本功能。4結(jié)語。主要介紹本論文中的優(yōu)點和缺乏之處。2 2 C/OS-IIC/OS-II 的理論介紹的理論介紹2.12.1 C/OS-II
18、C/OS-II 各模塊的根本功能各模塊的根本功能2.1.12.1.1 C/OS-IIC/OS-II 內(nèi)核構(gòu)造內(nèi)核構(gòu)造1C/OS-II 是以源代碼形式提供的實時操作系統(tǒng)內(nèi)核,其包含的文件構(gòu)造如圖 2.1 所示:應(yīng)用軟件應(yīng)用軟件用戶代碼用戶代碼C/OS-II 內(nèi)核文件內(nèi)核文件( (與處理器類型無關(guān)的代碼與處理器類型無關(guān)的代碼) )OS_CORE.C OS_TASK.COS_FLAG.C OS_TIME.COS_MBOX.C COS-II.COS_MEM.C COS-II.HOS_MUTEX.C OS_SEM.COS_Q.CC/OS-II 配置文件配置文件( (與應(yīng)用程序有關(guān)與應(yīng)用程序有關(guān)) )OS
19、_CFG.HINCLUDES.H移植移植 C/OS-II與處理器類型有關(guān)的代碼與處理器類型有關(guān)的代碼OS_CPU.H OS_CPU_C.C OS_CPU_A.ASM CPU 定時器定時器圖圖 2.1 C/OS-II 內(nèi)核構(gòu)內(nèi)核構(gòu)造造軟件硬件. . .word.基于C/OS-II操作系統(tǒng)進展應(yīng)用時,設(shè)計時的主要任務(wù)是將系統(tǒng)合理劃分成多個任務(wù),并由RTOS進展調(diào)度,任務(wù)之間使用C/OS-II提供的系統(tǒng)效勞進展通信,以配合實現(xiàn)應(yīng)用系統(tǒng)的功能。與前后臺系統(tǒng)一樣,基于C/OS-II的多任務(wù)系統(tǒng)也有一個main主函數(shù),main函數(shù)由編譯器所帶的C啟動程序調(diào)用。在main主函數(shù)中主要實現(xiàn)C/OS-II的初始
20、化OSInit()、任務(wù)創(chuàng)立、一些任務(wù)通信方法的創(chuàng)立、C/OS-II的多任務(wù)啟動OSStart()等常規(guī)操作。另外,還有一些應(yīng)用程序相關(guān)的初始化操作,例如:硬件初始化、數(shù)據(jù)構(gòu)造初始化等。 2OSInit()初始化C/OS-II所有的變量和數(shù)據(jù)構(gòu)造,并建立空閑任務(wù)OS_TaskIdle(),這個任務(wù)總是處于就緒態(tài)。2.1.22.1.2 C/OS-IIC/OS-II 內(nèi)核體系構(gòu)造圖內(nèi)核體系構(gòu)造圖C/OS-II內(nèi)核主要對用戶任務(wù)進展調(diào)度和管理,并為任務(wù)間共享資源提供效勞。包含的模塊有任務(wù)管理、任務(wù)調(diào)度、任務(wù)間通信、時間管理、內(nèi)核初始化等。C/OS-II內(nèi)核體系構(gòu)造如圖2.2所示:. . .word.
21、圖圖 2.22.2 內(nèi)核構(gòu)造圖內(nèi)核構(gòu)造圖2.1.32.1.3 任務(wù)狀態(tài)及其轉(zhuǎn)換關(guān)系任務(wù)狀態(tài)及其轉(zhuǎn)換關(guān)系在多任務(wù)系統(tǒng)中,任務(wù)是設(shè)計者實現(xiàn)應(yīng)用系統(tǒng)的根本形式,也是C/OS-II系統(tǒng)進展調(diào)度的根本單元。任務(wù)可以是一個無限的循環(huán),也可以在一次執(zhí)行后被操作系統(tǒng)刪除。任務(wù)函數(shù)和任何C函數(shù)一樣,具有一個返回類型和一個參數(shù),但是它決不返回。任務(wù)控制塊TCB是一個數(shù)據(jù)構(gòu)造OS_TCB,一旦一個任務(wù)創(chuàng)立,就有一個和它關(guān)聯(lián)的TCB被賦值。當任務(wù)的CPU使用權(quán)被剝奪時,它用來保存該任務(wù)的狀態(tài)。這樣,當任務(wù)重新獲得CPU使用權(quán)時,可以從TCB中獲取任務(wù)切換前的信息,準確的繼續(xù)運行。2.1.42.1.4 任務(wù)調(diào)度器任務(wù)調(diào)
22、度器C/OS-II總是運行進入就緒態(tài)的優(yōu)先級最高的任務(wù)。任務(wù)調(diào)度器的功能是:在就緒表中查找最高優(yōu)先級的任務(wù),然后進展必要的任務(wù)切換,運行該任務(wù)。C/OS-II的任務(wù)調(diào)度有兩種情況:任務(wù)級的任務(wù)調(diào)度由OS_Sched()完成;中斷級的任務(wù)調(diào)度由OSIntExt()完成。這兩種任務(wù)調(diào)度情況調(diào)用的任務(wù)切換函數(shù)不同:任務(wù)級的任務(wù)調(diào)度OS_Sched()調(diào)用了任務(wù)切換函數(shù) OS_TASK_SW(),而中斷級的調(diào)度OSIntExt()調(diào)用了任務(wù)切換函數(shù)OSIntCtxSw()。任務(wù)級的任務(wù)調(diào)度是由于有更高優(yōu)先級的任務(wù)進入就緒態(tài),當前的任務(wù)的. . .word.CPU使用權(quán)被剝奪,發(fā)生了任務(wù)到任務(wù)的切換;中
23、斷級的調(diào)度是指當前運行的任務(wù)被中斷打斷,由于ISR運行過程中有更高優(yōu)先級的任務(wù)被激活進入就緒態(tài)。而中斷返回前ISR調(diào)用OSIntExt()函數(shù),該函數(shù)查找就緒表發(fā)現(xiàn)有必要進展任務(wù)切換,從而被中斷的任務(wù)進入等待狀態(tài),運行被激活的高優(yōu)先級的任務(wù)。1任務(wù)切換任務(wù)切換有兩種:OS_TASK_SW()和OSIntCtxSw()。任務(wù)級的任務(wù)切換OS_TASK_SW()是宏調(diào)用,通過軟中斷指令來實現(xiàn)CPU存放器內(nèi)容切換。例如:#define OS_TASK_SW() asm(“int #32”)。任務(wù)級的任務(wù)切換過程:保存當前運行的任務(wù)的CPU存放器值到該任務(wù)的堆棧。如:堆棧指針,程序計數(shù)器,狀態(tài)存放器等
24、。將要運行的高優(yōu)先級的任務(wù)的存放器值從堆?;謴偷紺PU存放器。進展TCB的切換,并運行任務(wù)。中斷級的任務(wù)切換OSIntCtxSw()是在OSIntExt()中調(diào)用的,我們一般在用戶ISR中調(diào)用OSIntExt()以實現(xiàn)中斷返回前的任務(wù)調(diào)度。由于ISR已經(jīng)將CPU存放器的值存入被中斷的任務(wù)的堆棧中,所以O(shè)SIntCtxSw()的實現(xiàn)和OS_TASK_SW()不一樣,具體參見移植文檔。2就緒表每個就緒的任務(wù)都放在就緒表中,就緒表有兩個變量:OSRdyGrp和OSRdyTbl。OSRdyGrp中,將任務(wù)按優(yōu)先級分組,八個為一組。OSRdyGrp的每一位代表每組任務(wù)是否有進入就緒態(tài)的任務(wù)。在就緒表中查
25、找優(yōu)先級最高的任務(wù)不需要掃描整個OSRdyTbl,只要查優(yōu)先級判定表OSUnMapTbl。OSUnMapTbl是常量表,所以查找優(yōu)先級最高的任務(wù)的執(zhí)行時間為常量,和就緒表的任務(wù)數(shù)無關(guān)。2.1.52.1.5 中斷效勞中斷效勞在用戶的ISR中可以調(diào)用OSIntEnter()和OSIntExit()通知C/OS-II發(fā)生了中斷,這樣可以實現(xiàn)ISR返回前的任務(wù)調(diào)度。2.1.62.1.6 時鐘節(jié)拍時鐘節(jié)拍C/OS-II要求用戶提供一個周期性的時鐘源,來實現(xiàn)時間的延遲和超時功能,時鐘節(jié)拍應(yīng)該每秒發(fā)生10100次/秒。時鐘節(jié)拍率越高,系統(tǒng)的額外負荷就越重。應(yīng)該在多任務(wù)系統(tǒng)啟動后,也就是調(diào)用OSStart()
26、后再開啟時鐘節(jié)拍器。系統(tǒng)設(shè)計者可以在第1個開場運行的任務(wù)中調(diào)用時鐘節(jié)拍啟動函數(shù)。假設(shè)用定時器. . .word.TA0作為時鐘中斷源,那么,在移植過程中實現(xiàn)了函數(shù)init_timer_ta0(),此函數(shù)用來初始化定時器TA0,并將其翻開。C/OS-II中的時鐘節(jié)拍效勞是在ISR中調(diào)用OSTimeTick()實現(xiàn)的。OSTimeTick()跟蹤所有任務(wù)的定時器以及超時時限。2.1.72.1.7 C/OS-IIC/OS-II 的初始化和啟動的初始化和啟動調(diào)用C/OS-II的效勞之前要先調(diào)用系統(tǒng)初始化函數(shù)OSInit()。OSInit()初始化C/OS-II所有的變量和數(shù)據(jù)構(gòu)造,并建立空閑任務(wù)。C/
27、OS-II初始化任務(wù)控制塊、事件控制塊、消息隊列緩沖、標志控制塊等數(shù)據(jù)構(gòu)造的空緩沖區(qū)。多任務(wù)的啟動是通過調(diào)用OSStart()實現(xiàn)的。啟動之前要至少創(chuàng)立一個任務(wù)。OSStart()調(diào)用就緒任務(wù)啟動函數(shù)OSStartHighRdy(),其功能是將任務(wù)棧的值恢復到CPU存放器,并執(zhí)行中斷返回指令,強制執(zhí)行該任務(wù)代碼。2.1.2.1.8 8 內(nèi)存管理內(nèi)存管理在ANSI C中是使用malloc和free兩個函數(shù)來動態(tài)分配和釋放內(nèi)存。但在嵌入式實時系統(tǒng)中,屢次這樣的操作會導致內(nèi)存碎片,且由于內(nèi)存管理算法的原因,malloc和free的執(zhí)行時間也是不確定。C/OS-II中把連續(xù)的大塊內(nèi)存按分區(qū)管理。每個分
28、區(qū)中包含整數(shù)個大小一樣的內(nèi)存塊,但不同分區(qū)之間的內(nèi)存塊大小可以不同。用戶需要動態(tài)分配內(nèi)存時,系統(tǒng)選擇一個適當?shù)姆謪^(qū),按塊來分配內(nèi)存。釋放內(nèi)存時將該塊放回它以前所屬的分區(qū),這樣能有效解決碎片問題,同時執(zhí)行時間也是固定的。2.1.2.1.9 9 任務(wù)管理任務(wù)管理C/OS-II中最多可以支持64個任務(wù),分別對應(yīng)優(yōu)先級063,其中0為最高優(yōu)先級。63為最低級,系統(tǒng)保存了4個最高優(yōu)先級的任務(wù)和4個最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個。C/OS-II提供了任務(wù)管理的各種函數(shù)調(diào)用,包括創(chuàng)立任務(wù),刪除任務(wù),改變?nèi)蝿?wù)的優(yōu)先級,任務(wù)掛起和恢復等。系統(tǒng)初始化時會自動產(chǎn)生兩個任務(wù):一個是空閑任務(wù),它的優(yōu)
29、先級最低,該任務(wù)僅給一個整型變量做累加運算;另一個是統(tǒng)計任務(wù),它的優(yōu)先級為次低,該任務(wù)負責統(tǒng)計當前CPU的利用率。 2.1.12.1.10 0 C/OS-IIC/OS-II 任務(wù)間通信方式任務(wù)間通信方式1信號量信號量由兩局部組成:一局部是16位的無符號整型信號量的計數(shù)值;另一局部是由等待該信號量的任務(wù)組成的等待任務(wù)表。信號量用于對共享資源的訪問,用鑰匙符號,符號旁數(shù)字代表可用資源數(shù),對于二值信號量該值為1。信號. . .word.量還可用于表示某事件的發(fā)生,用旗幟符號表示,符號旁數(shù)字代表事件已經(jīng)發(fā)生的次數(shù)?;コ庑托盘柫坑糜谔幚砉蚕碣Y源。2消息一種通信機制,可以使一個任務(wù)或者中斷效勞子程序向另一
30、個任務(wù)發(fā)送一個指針型的變量,通常該指針指向一個包含了消息的特定數(shù)據(jù)構(gòu)造。3消息隊列另一種通信機制,允許一個任務(wù)或者中斷效勞子程序向另一個任務(wù)發(fā)送以指針方式定義的變量或其它任務(wù),因具體應(yīng)用不同,每個指針指向的包含了消息的數(shù)據(jù)構(gòu)造的變量類型也有所不同。2.2STM322.2STM32 上移植方法上移植方法2.2.12.2.1 平臺需求平臺需求C/OS-II的正常運行需要處理器平臺滿足以下要求:1處理器的C編譯器能產(chǎn)生可重入代碼。2用C語言就可以翻開和關(guān)閉中斷。3處理器支持中斷,并且能產(chǎn)生定時中斷(通常在10至100Hz之間)。 4處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。5處理器有
31、將堆棧指針和其它CPU存放器讀出和存儲到堆?;騼?nèi)存中的指令。2. 2.2 2.2 .2 移植方法移植方法1內(nèi)核頭文件OS_CPU.H 在OS_CP U.H 中,主要聲明了一些與微處理器相關(guān)的常量、宏和typedef。 定義與處理器無關(guān)的數(shù)據(jù)類型 typede f unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char NT8S; typedef unsigned short INT16U; typedef signed short INT16S; typedef unsigned int INT32U; t
32、ypedef signed int NT32S; typedef float FP32; typedef double FP64; . . .word.typedef unsigned int OS_STK; typedef unsigned int OS_CPU_SR; 在STM32處理器及keil MDK 或者IAR 編譯環(huán)境中可以通過查手冊得知short類型是16位而int類型是32位,這對于Cortex-M3內(nèi)核是一致的。故這局部代碼無需修改。盡管C/OS-II定義了float 類型和double 類型,但為了方便移植它們在C/OS-II源代碼中并未使用。為了方便使用堆棧,C/OS-I
33、I定義了一個堆棧數(shù)據(jù)類型。在Cortex-M3 中存放器為32位,故定義堆棧的長度也為32位。Cortex-M3 狀態(tài)存放器為32位,定義OS_CPU_SR主要是為了在進出臨界代碼段保存狀態(tài)存放器。 2臨界代碼段 C/OS-II為了保證某段代碼的完整執(zhí)行,需要臨時的關(guān)閉中斷,在這段代碼執(zhí)行完成之后再翻開中斷。這樣的代碼段稱作臨界代碼段。C/OS-II通過定義兩個宏OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 來分別實現(xiàn)中斷的關(guān)閉和翻開。一般來說,采用方法3來實現(xiàn)這兩個宏。這兩個宏分別定義如下:#define OS_CRITICAL_METHOD 3 #defi
34、ne OS_ENTER_CRITICAL() cpu_sr = OS_CPU_SR_Save(); #define OS_EXIT_CRITICAL() OS_CPU_SR_Restore(cpu_sr); 函數(shù)OS_CPU_SR_Save()和OS_CPU_SR_Restore(cpu_sr)在OS_CPU_A.ASM中定義。同時得注意,在使用這兩個宏之前,必須定義OS_CPU_SR cpu_sr;否那么編譯時將出錯。 3棧的增長方向 盡管C/OS-II支持兩種方向生長的棧,但對于以Cortex-M3為內(nèi)核的STM32 微處理器來說,它支持向下增長的滿棧,故需要定義棧增長方向宏為1。即定義成
35、如下形式 #define OS_STK_GROWTH 1 4任務(wù)級任務(wù)切換 任務(wù)級任務(wù)切換調(diào)用宏OS_TASK_SW()來實現(xiàn)。因為這個宏也是與處理器相關(guān)的,因此這個宏在OS_CPU_A.ASM中描述。 5其他函數(shù)聲明 在OS_ CPU.H中,還聲明了以下幾個函數(shù),這幾個函數(shù)均在OS_CPU_A.ASM中實現(xiàn)。 . . .word.void OSCtxSw(void); void OSIntCtxSw(void); void OSStartHighRdy(void); void OS_CPU_PendSVHandler(void); 6與處理器相關(guān)的匯編代碼OS_CPU_A.ASM在OS_CP
36、 U_A.ASM中實現(xiàn)的是下面五個與處理器相關(guān)的函數(shù)。 OS_CPU_SR_Save(); OS_CPU_SR_Restore(); OSStartHighRdy(); OSCtxSw(); OSIntCtxSw(); 2.3.32.3.3 函數(shù)實現(xiàn)函數(shù)實現(xiàn)1關(guān)中斷函數(shù)OS_CPU_SR_Save() 即先保存當前的狀態(tài)存放器然后關(guān)中斷。故關(guān)中斷實現(xiàn)代碼如下 OS_CPU_SR_Save MRS R0, PRIMASK; CPSID I BX LR 這也是宏OS_ENTER_CRITICAL() 的最終實現(xiàn)。 2恢復中斷函數(shù)OS_CPU_SR_Restore() 這是宏OS_EXIT_CRIT
37、ICAL()的最終實現(xiàn)。也就是將狀態(tài)存放器的內(nèi)容從R0中恢復,然后跳轉(zhuǎn)回去。此函數(shù)完成的將中斷狀態(tài)恢復到關(guān)中斷前的狀態(tài)。其代碼如下: OS_CPU_SR_Restore MSR PRIMASK, R0 BX LR Cortex-M3處理器有單獨的指令來翻開或者關(guān)閉中斷,所以這兩個函數(shù)實現(xiàn)起來很簡單。 3啟動最高優(yōu)先級任務(wù)運行OSStartHighRdy() OSStart()調(diào)用OSStartHighRdy()來啟動最高優(yōu)先級任務(wù)的運行,從而啟動整個系統(tǒng)。OSStartHighRdy()主要完成以下幾項工作: . . .word. 為任務(wù)切換設(shè)置PendSV的優(yōu)先級; 為第一次任務(wù)切換設(shè)置棧指
38、針為0; 設(shè)置OSRunning = TRUE,以說明系統(tǒng)正在運行;觸發(fā)一次PendSV,翻開中斷等待第一次任務(wù)的切換。 4任務(wù)級和中斷級任務(wù)切換 因為Cortex-M3進入異常自動保存存放器R3-R0,R12,LR,PC和xPSR這種的特殊機制,這兩個函數(shù)都是觸發(fā)一次PendSV來實現(xiàn)任務(wù)的切換。首先是微處理器自動保存上面提到的存放器,然后把當前的堆棧指針保存到任務(wù)的棧中,將要切換的任務(wù)的優(yōu)先級和任務(wù)控制塊的指針賦值給運行時的最高優(yōu)先級指針和運行時的任務(wù)控制塊指針,最后再把要運行的任務(wù)的堆棧指針賦值給微處理器的堆棧指針,這樣就可以退出中斷效勞程序了。中斷效勞程序退出的時候?qū)⒆詣映鰲3-R0
39、,R12,LR,PC和xPSR。具體的PendSV效勞程序的偽代碼如下: OS_CPU_PendSVHandler : / 進入異常,處理器自動保存R3-R0,R12,LR,PC和xPSR if (PSP != NULL) /判斷不是開場第一次任務(wù) 保存R4-R11到任務(wù)的堆棧; OSTCBCur-OSTCBStkPtr = SP; /保存堆棧的指針到任務(wù)控制塊 OSTaskSwHook(); /實現(xiàn)用戶擴展功能而定義的鉤子 OSPrioCur = OSPrioHighRdy; /設(shè)置運行任務(wù)為最高優(yōu)先級就緒任務(wù) OSTCBCur = OSTCBHighRdy; / 設(shè)置運行的任務(wù)控制塊為最高
40、/就緒任控制塊務(wù) PSP = OSTCBHighRdy-OSTCBStkPtr;/將要切換的任務(wù)堆棧指/ 針賦給微處理器的堆棧指 / 針從而實現(xiàn)切換 從堆棧中恢復 R4-R11; 從異常中返回; / 退出異常,處理器自動恢復R3-R0,R12,LR,PC和xPSR 這樣很容易寫出PendSV中斷效勞程序的代碼了。 5與CPU 相關(guān)的C 函數(shù)和鉤子函數(shù)OS_CPU_C.C . . .word.這個文件中包含10個函數(shù),具體如下: OSInitHookBegin (); OSInitHookEnd (); OSTaskCreateHook (); OSTaskDelHook (); OSTaskI
41、dleHook (); OSTaskStatHook (); OSTaskStkInit (); OSTaskSwHook (); OSTCBInitHook (); OSTimeTickHook (); 這10個函數(shù)有9個是為了擴展用戶功能而定義的鉤子函數(shù),這些鉤子函數(shù)可以都為空函數(shù),也可以加上一些用戶需要的擴展功能。另外一個不是鉤子函數(shù),它是OSTaskStkInit()。這個函數(shù)的功能是當一個任務(wù)被創(chuàng)立時,它完成這個任務(wù)堆棧的初始化。這個函數(shù)首先將用戶為任務(wù)分配的堆棧頂?shù)刂焚x值給一個棧指針變量,然后再通過這個棧指針向任務(wù)的棧空間寫入初值。這個初值無關(guān)緊要,為0就可以了。這個函數(shù)的代碼時下
42、如下: OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt) OS_STK *stk; (void)opt; /防止編譯器報錯 stk = ptos; / 將棧頂?shù)刂焚x值給棧指針變量 / 以進入異常的順序來給棧賦初值 *(stk) = (INT32U)0 x00000000L; /xPSR *(-stk) = (INT32U)task; /Entry Point *(-stk) = (INT32U)0 x00000000L; / R14 (LR) *(-stk) = (INT3
43、2U)0 x00000000L; /R12 *(-stk) = (INT32U)0 x00000000L; /R3 *(-stk) = (INT32U)0 x00000000L; / R2 *(-stk) = (INT32U)0 x00000000L; / R1 . . .word.*(-stk) = (INT32U)p_arg; /R0 : 傳遞的參數(shù) / 剩下的存放器初始化 *(-stk) = (INT32U)0 x00000000L; / R11 *(-stk) = (INT32U)0 x00000000L; /R10 *(-stk) = (INT32U)0 x00000000L; /
44、R9 *(-stk) = (INT32U)0 x00000000L; /R8 *(-stk) = (INT32U)0 x00000000L; /R7 *(-stk) = (INT32U)0 x00000000L; / R6 *(-stk) = (INT32U)0 x00000000L; / R5 *(-stk) = (INT32U)0 x00000000L; / R4 return (stk); 其他的鉤子函數(shù)都為空函數(shù)。這樣,整個移植的代碼就介紹完了。整個移植的過程非常容易。剩下的工作就是編寫用戶任務(wù),并在開發(fā)板上驗證,以此來驗證該移植方案是可行的和成功的。3LCD3LCD 屏程序設(shè)計及調(diào)試
45、屏程序設(shè)計及調(diào)試3.13.1 工具概述工具概述RVMDK 源自德國的 KEIL 公司,是 RealView MDK 的簡稱。RealView MDK 集成了業(yè)內(nèi)最領(lǐng)先的技術(shù),支持 ARM7、ARM9 和 Cortex-M3 核處理器,自動配置啟動代碼,集成 Flash 燒寫模塊,強大的 Simulation 設(shè)備模塊,性能分析等功能。3.1.1keil43.1.1keil4 工程建立以及仿真方法工程建立以及仿真方法1新建工程。翻開 MDK 軟件,選擇 ProjectNew uVision Project 菜單項,新建一個文件夾名為“畢業(yè)設(shè)計,保存,那么彈出器件選擇對話框,這里選擇STM32F1
46、03RB。單擊“OK按鈕,那么彈出一個對話框加載啟動文件到工程中。. . .word.翻開“畢業(yè)設(shè)計文件夾,在里面添加子文件夾2添加系統(tǒng)文件與工程管理?;氐健爱厴I(yè)設(shè)計文件夾中,把系統(tǒng) SYSTEM 文件夾delay,sys,usart 文件夾復制過來,再建立 main 和 hardware 文件夾用于主函數(shù)和各外設(shè)資源函數(shù)?;氐焦こ讨校c擊 manage ponents,添加工程中的文件,進展分類管理工程。3最后新建 main 文件,在編輯區(qū)寫代碼。3.1.23.1.2 硬件平臺紹硬件平臺紹ALIENTEK MiniSTM32 選擇的是 STM32F103RBT6 作為 MCU,STM32F1
47、03 的型號眾多,作為一款低端開發(fā)板,選擇 STM32F103RBT6 是最正確的選擇。128K FLASH、20K SRAM、2 個 SPI、3 個串口、1 個 USB 、1 個 CAN、2 個 12 位的 ADC、RTC、51 個可用 IO 腳,這樣的配置無論放到那里都是很不錯的了,更重要的是其價格,18 元左右的零售價,相對其他芯片配置及價格,所以我們選擇了它作為我們的主芯片。BOOT1 用于設(shè)置 STM32 的啟動方式,其對應(yīng)啟動模式如表 3.1 所示:表表 3.1BOOT03.1BOOT0、BOOT1BOOT1 啟動模式表啟動模式表BOOT0BOOT1啟動模式說明0X用戶閃存存儲器用
48、戶閃存存儲器,也就是 FLASH 啟動10系統(tǒng)存儲器系統(tǒng)存儲器啟動,用于串口下載11SRAM 啟動SRAM 啟動,用于在 SRAM 中調(diào)試代碼按照表 3.1,一般情況下如果我們想用用串口下載代碼,那么必須配置BOOT0 為 1,BOOT1 為 0,而如果想讓 STM32 一按復位鍵就開場跑代碼,那么需要配置 BOOT0 為 0,BOOT1 隨便設(shè)置都可以。ALIENTEK 這款開發(fā)板專門設(shè)計了一鍵下載電路,通過串口的 DTR 和 RTS 信號,來自動配置 BOOT0 和BOOT1,因此不需要用戶來手動切換他們的狀態(tài),直接串口下載和軟件自動控制,可以非常方便的下載代碼。 P3 和 P1 分別用于
49、 PORTA 和 PORTB 的 IO 口引出,其中 P2 還有局部用于 PORTC 口的引出。PORTA 和 PORTB 都是按順序排列的,這樣設(shè)計的目的是為了讓大家更方便地與外部設(shè)備連接。P2 連接了 DS18B20 的數(shù)據(jù)口以及紅外傳感器的數(shù)據(jù)線,它們分別對應(yīng)著 PA0 和 PA1,只需要 19 通過跳線帽將 P2 和 P3 連接起來就可以使用了。這里不直接連在一起的原因有二:1,防止紅外傳感器和. . .word.DS18B20 對這兩個 IO 口作為其他功能使用的時候的影響;2,DS18B20 和紅外傳感器還可以用來給其他板子提供輸入,等于我們的板子為別的板子提供了紅外接口和溫度傳感
50、器,在調(diào)試的時候,還是蠻有用的。P4 口連接了 PL2303 的串口輸出,對應(yīng)著 STM32 的串口 1PA9/PA10 ,在使用的時候,也是通過跳線帽將這兩處連接起來。這樣設(shè)計有 2 個好處:1,使得 PA9 和 PA10 用作其他用途。使用的時候,不受到 PL2303 的影響。2,USB 轉(zhuǎn)串口可以用作他用,并不僅限在這個板上的 STM32 使用,也可以連接到其他板子上,這樣 ALIENEK MiniSTM32 就相當于一個 USB 串口。P5 口是另外一個 IO 引出排陣,將 PORTC和 PORTD 等的剩余 IO 口從這里引出。 在此局部原理圖中,我們還可以看到 STM32F103R
51、BT6 的各個 IO 口與外設(shè)的連接關(guān)系,這些將在后面給大家介紹。 這里 STM32 的 VBAT 采用 CR1220 紐扣電池和 VCC3.3 混合供電的方式,在有外部電源VCC3.3的時候,CR1220不給 VBAT 供電,而在外部電源斷開的時候,那么由 CR1220 給 VBAT 供電。這樣,VBAT 總是有電的,以保證 RTC 的走時以及后備存放器的內(nèi)容不喪失。3.23.2 硬件構(gòu)造硬件構(gòu)造3.2.1STM323.2.1STM32 最小系統(tǒng)最小系統(tǒng)STM32F103 最小系統(tǒng)包括電源電路,復位電路,時鐘電路,主芯片和下載接口。STM32F103 使用 3.3V 供電,且引腳接有濾波電容
52、,保證芯片工作穩(wěn)定;復位電路使用的低電平復位,該電路上電可以復位,按鍵按下時也可以復位;時鐘電路使用 8MHZ晶振,和 22pF 電容助振。. . .word.圖圖 3.13.1 最小系統(tǒng)最小系統(tǒng)3.2.2LCD3.2.2LCD 接口接口顯示電路使用的是 2.4 寸的 TFT 液晶顯示器,該顯示器有 16 位的數(shù)據(jù)口和5 位的控制端口。圖圖 3.23.2 液晶顯示液晶顯示3.2.3LED3.2.3LED 接口接口輸入單元和指示局部,直接引到 STM32F103 的 IO 口。. . .word.圖圖 3.33.3 按鍵和按鍵和 LEDLED 燈燈3.2.43.2.4 紅處接收電路紅處接收電路H
53、S0038 用于顯度的采集,其通信是單總線式,直接與 STM32F103 相連。圖圖 3.43.4 紅處接收單元紅處接收單元3.3C3.3C 程序設(shè)計程序設(shè)計在C/OS-II里面創(chuàng)立6個任務(wù):開場任務(wù)、LED0、LED1、觸摸屏,KEY按鍵任務(wù)和LCD顯示任務(wù),開場任務(wù)用于創(chuàng)立其他LED0、LED1、紅處接收、按鍵和LCD顯示任務(wù),之后掛起;LED0任務(wù)用于控制DS0的亮滅,DS0每秒鐘亮800ms;LED1任務(wù)用于控制DS1的亮滅,DS1亮300ms,滅300ms,依次循環(huán);觸摸屏任務(wù)用于手寫輸入,并立即顯示;LCD顯示任務(wù)用于顯示圖形,和接收紅外信號信息顯示出來;KEY按鍵任務(wù)分別使屏進入
54、校準功能,以及顯示歡送界面。 首先,建立根本的工程后,在該工程源碼下面參加C/OS-II文件夾,存放C/OS-II源碼我們已經(jīng)將C/OS-II源碼分為三個文件夾:CORE、PORT和CONFIG 。翻開工程,新建C/OS-II-CORE、C/OS-II-PORT和C/OS-II-CONFIG三個分組,分別添加C/OS-II三個文件夾下的源碼,并將這三個文件夾參加頭文件包含路徑。C/OS-II-CORE分組下面是C/OS-II的核心源碼,我們不需要做任何變動。 C/OS-II-PORT分組下面是我們移植C/OS-II要修改的3個代碼,這個在移植的時候完成。 C/OS-II-CONFIG分組下面是
55、C/OS-II的配置局部,主要由用戶根據(jù)自己的需要對C/OS-II進展裁剪或其他設(shè)置。工程框架如下列圖3.5:. . .word.其次,對 os_cfg.h 里面定義 OS_TICKS_PER_SEC 的值為 200,也就是設(shè)置C/OS-II 的時鐘節(jié)拍為 5ms,同時設(shè)置 OS_MAX_TASKS 為 10,也就是最多 10個任務(wù)包括空閑任務(wù)和統(tǒng)計任務(wù)在內(nèi)。再次,在 main.c 文件中設(shè)置任務(wù)堆棧大小、設(shè)置任務(wù)優(yōu)先級、任務(wù)堆棧,創(chuàng)立 5 個任務(wù)。如圖 3.5 所示:圖圖 3.53.5 任務(wù)構(gòu)造任務(wù)構(gòu)造3.43.4 調(diào)試調(diào)試3.4.13.4.1 設(shè)置編譯環(huán)境設(shè)置編譯環(huán)境1翻開 project
56、 菜單,選擇 Options for Target“畢業(yè)設(shè)計對話框,如圖3.6 在 target 中,將晶振選為 8MHz;在 output 中,將 Creat HEX File 復選框選中。為調(diào)試方便,將產(chǎn)生調(diào)試中間信息的復選框也選中。. . .word.圖圖 3.63.6 編譯環(huán)境窗口編譯環(huán)境窗口2在 C/C+中,將各分文件的路徑參加如圖 3.7 圖圖 3.73.7 路徑添加路徑添加3在 Debug 中,將 Use 選中并設(shè)置為 Cortex-M/R J-LINK/J-Trace,設(shè)為JINK 連接實物仿真了。4在 Utilities 中,設(shè)置如圖 3.8,并翻開 Settings,設(shè)置
57、FLASH 為 256KB。圖圖 3.8Utilities3.8Utilities3.4.23.4.2 調(diào)試結(jié)果調(diào)試結(jié)果編譯程序,排出 error 和 warning,如圖 3.9 得到正確的程序,下載程序到開發(fā)板上,得到了預(yù)期結(jié)果. . .word.圖圖 3.93.9 編譯結(jié)果編譯結(jié)果將程序下載到開發(fā)板上,并觀察現(xiàn)象,LED 小燈按程序要求正常運行,紅外接收器正確顯示數(shù)值,按鍵 KEY0 可實現(xiàn)進入校準功能,KEY1 可以顯示歡送界面,KEY2 可以去除,說明程序正確。現(xiàn)象如圖 3.10圖圖 3.103.10 實物現(xiàn)象實物現(xiàn)象結(jié)語結(jié)語本文完成基于 32 位 ARMv7 微處理器 Cortex
58、-M3 和嵌入式實時操作系統(tǒng)C/OS-II 的嵌入式操作系統(tǒng)的移植和功能的實現(xiàn)。經(jīng)過幾個月的深入學習,了解了嵌入式操作系統(tǒng) C/OS-II 的性能、特點、構(gòu)造和根本運行原理,以及通過實驗調(diào)試的方法完成對 C/OS-II 時間管理函數(shù),任務(wù)管理函數(shù)的靈活應(yīng)用。認真掌握 Cortex-M3 的硬件構(gòu)造和指令系統(tǒng),并在 ALIENTEK MiniSTM32 開發(fā)板上調(diào)試串口,TFT 彩屏以及 ADC 實驗。本文將嵌入式實時操作系統(tǒng) C/OS-II 移植到 Cortex 微處理器上,并對其進展系統(tǒng)測試和系統(tǒng)功能實現(xiàn),實現(xiàn)了一個根本完整的嵌入式實時操作系統(tǒng)。該系統(tǒng)一方面實現(xiàn)了單個 IO 口和多人 IO
59、口的組合輸入輸出控制,采用模塊化設(shè)計思想,具有代表性。另一方面,它又是一個相對完整的系統(tǒng),可以應(yīng)用于工業(yè)控制的各個顯示終端,完成指示功能。由于實時操作系統(tǒng)內(nèi)核 C/OS-II 是為嵌入式應(yīng)用編寫的通用軟件,所以不得不強調(diào)處理器的通用性和功能的全面性。在實際應(yīng)用中可以根據(jù)需要裁減和優(yōu)化。其次,本文所調(diào)度的任務(wù)較簡單,主要是為了說明方法。在程序調(diào)試過程中,由于對 STM32RTB6 內(nèi)核學習還不是很透徹,出現(xiàn)了警. . .word.告,一直困擾。任務(wù)中參加更多任務(wù)時老出錯,程序不能正常運行,但通不斷學習,查閱資料得以解決。本人認真進展了課題的研究并完成了本論文,由于作者水平有限,論文中可能仍有錯誤
60、和缺乏之處,敬請大家批評指正。最后,感謝指導教師的關(guān)心和細心的指導,感謝同學們的幫助。謝謝你們的支持!主要參考文獻主要參考文獻1 意法半導體.STM32中文參考手冊.第10版.意法半導體中國投資公司,2021.2 X 軍.例說 STM32.:航空航天大學,2021.3 宋巖譯. Joseph Yiu.CortexM3 權(quán)威指南.:航空航天大學,2021.4 X 榮.圈圈教你玩 USB.:航空航天大學,2021.5 杜春雷.ARM 體系構(gòu)造與編程.:清華大學,2003.6 李寧.ARM 開發(fā)工具 RealView MDK 使用入門.:航空航天大學出版社,2021.7 俞建新.嵌入式系統(tǒng)根底教程.
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國清華版信息技術(shù)小學四年級下冊新授課 第4課 獨特景觀-在幻燈片中插入文本框 說課稿
- Unit7 Grammar Focus 說課稿 2024-2025學年人教版英語七年級上冊
- 貴州省安順市(2024年-2025年小學六年級語文)統(tǒng)編版競賽題(下學期)試卷及答案
- 安徽省合肥市新站區(qū)2024-2025學年九年級上學期期末化學試卷(含答案)
- 二零二五年度周轉(zhuǎn)材料租賃與施工現(xiàn)場安全生產(chǎn)合同3篇
- 陜西省商洛市(2024年-2025年小學六年級語文)部編版小升初真題(上學期)試卷及答案
- 貴州黔南經(jīng)濟學院《手繪表現(xiàn)技法景觀》2023-2024學年第一學期期末試卷
- Unit 1 What's the matter Section B 2a-2e 說課稿 2024-2025學年人教版八年級英語下冊
- 二零二五年度二零二五年期工業(yè)廠房租賃合同范本2篇
- 2025企業(yè)公司年會盛典暨年終總結(jié)大會(蛇舞新春榮耀同行主題)活動策劃方案-49正式版
- 洛欒高速公路薄壁空心墩施工方案爬模施工
- 事業(yè)單位公開招聘工作人員政審表
- GB/T 35199-2017土方機械輪胎式裝載機技術(shù)條件
- GB/T 28591-2012風力等級
- 思博安根測儀熱凝牙膠尖-說明書
- 數(shù)字信號處理(課件)
- 出院小結(jié)模板
- HITACHI (日立)存儲操作說明書
- (新版教材)蘇教版二年級下冊科學全冊教案(教學設(shè)計)
- 61850基礎(chǔ)技術(shù)介紹0001
- 電鏡基本知識培訓
評論
0/150
提交評論