




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章RT-Thread嵌入式系統概述與開發基礎
1.1RT-Thread嵌入式系統概述全套可編輯PPT課件RT-Thread嵌入式系統概述RT-Thread,全稱RealTime-Thread,誕生于2006年,是國內以開源中立、社區化發展起來的一款高可靠實時操作系統,由睿賽德科技負責開發維護和運營。因其十五年的沉淀積累,專業化的運營推廣,其高可靠性、安全、高可伸縮性和中間組件豐富易用等特性極大地滿足了市場需求。目前已經成為市面上裝機量最大(超20億臺)、開發者數量最多(超15萬)軟硬件生態最好的操作系統之一,被廣泛應用于航空、電力、軌道交通、車載、工業自動化、消費電子等眾多行業領域。RT-Thread不僅僅是一個單一的實時性操作系統,也是一個完備的應用系統,包含嵌入式系統所需的各種組件:如TCP/IP協議棧,文件系統,C庫接口,以及GUI界面等。它還具有體積小、啟動快速、占用資源小、實時性高等特點,可用于家電、消費電子、醫療設備、工控等領域。1.1.1RT-Thread操作系統RT-Thread嵌入式系統概述RT-Thread系統底層主要采用C語言編寫,性能優秀,目前已經適配市面上眾多開發板,移植方便。針對資源受限的微處理器系統,可以使用平臺工具,裁剪出僅需3KFlash,1.2KRAM存儲空間的NANO版本;對于資源豐富的設備,可以使用在線的軟件包配置工具,實現快速的模塊化裁剪,通過導入的軟件安裝包實現類似語音交互、多媒體、滑動控制等復雜功能。RT-Thread文檔資料豐富,官網文檔中心包含系統簡介、內核、設備與驅動、組件及開發工具等內容,每部分內容都包含說明和案例,并提供詳細的API參考手冊,以供開發者學習和參考。RT-Thread(Real-TimeThread)是一個實時嵌入式操作系統(RTOS),經過多年的發展,它已經成為一種受歡迎的嵌入式系統選擇。以下是RT-Thread系統的一些關鍵發展階段:1.1.1RT-Thread操作系統RT-Thread嵌入式系統概述1.1.2RT-Thread發展歷程1.項目起源RT-Thread的項目始于2006年,最初是由中國開發者Bernie開發的一個小型嵌入式實時操作系統。起初,它是為了滿足一些嵌入式系統項目的需求而創建的。2.開源發布RT-Thread于2007年在中國大陸首次開源發布。開源使得更多的開發者可以參與項目,共同推動系統的發展。3.內核架構改進在項目的早期階段,RT-Thread的內核采用了比較傳統的單內核設計。隨著時間的推移,項目逐漸轉向了微內核架構,這使得系統更加靈活和可定制。RT-Thread嵌入式系統概述4.多線程支持和實時性改進為了適應更多實時應用場景,RT-Thread增加了對多線程的支持,并優化了系統的實時性能。5.設備驅動和硬件平臺支持RT-Thread引入了設備驅動框架,使得用戶可以方便地添加和管理硬件設備的驅動程序。同時,項目逐步增加了對不同硬件平臺的支持,包括各種處理器架構。6.軟件包管理系統引入了軟件包管理系統,使用戶能夠方便地選擇和管理他們所需的軟件組件,從而簡化系統的配置和定制。1.1.2RT-Thread發展歷程RT-Thread嵌入式系統概述RT-Thread經歷了從初始的小型項目到一個功能豐富、靈活且受歡迎的嵌入式系統的演變。它的發展受到了全球嵌入式開發者社區的積極參與和推動。1.1.2RT-Thread發展歷程RT-Thread嵌入式系統概述RT-Thread是一個實時嵌入式操作系統(RTOS),其原理與架構主要包括以下幾個方面:1.1.3RT-Thread原理與架構1.微內核架構RT-Thread采用微內核設計,將系統內核分為核心部分和可選的模塊。核心部分包括調度器、任務管理和基礎服務,而其他功能如文件系統、網絡協議棧等則是作為可選模塊以插件形式存在。這種設計使得系統更加輕量、模塊化,用戶可以根據應用需求選擇加載不同的功能模塊。RT-Thread嵌入式系統概述1.1.3RT-Thread原理與架構2.多線程支持RT-Thread支持多線程操作,允許在一個應用程序中同時運行多個任務。每個線程有自己的獨立的堆棧和上下文,這有助于提高系統的并發性和靈活性。3.實時性RT-Thread注重實時性能,通過實時調度器實現對任務的高效調度。實時性能對于嵌入式系統來說至關重要,尤其是在對響應時間有嚴格要求的應用中,如工業控制和汽車電子系統等。4.設備驅動框架RT-Thread提供了設備驅動框架,允許用戶方便地添加和管理硬件設備的驅動程序。這有助于提高系統對外部硬件的兼容性,同時使得硬件抽象更容易實現。RT-Thread嵌入式系統概述1.1.3RT-Thread原理與架構5.軟件包管理系統RT-Thread引入了軟件包管理系統,使得用戶可以方便地選擇和管理他們所需的軟件組件。這些軟件包包括各種驅動、文件系統、網絡協議棧等,有助于簡化系統的配置和定制。6.中斷服務機制嵌入式系統通常需要處理中斷,RT-Thread提供了中斷服務機制,用于處理外部事件和實時響應。這對于與外設通信、傳感器輸入等操作至關重要。7.支持多種處理器架構RT-Thread被設計為可以移植到多種處理器架構上,包括ARM、MIPS、PowerPC等。這使得它適用于不同類型的硬件平臺。RT-Thread嵌入式系統概述1.1.3RT-Thread原理與架構8.系統調度器RT-Thread的系統調度器負責任務的調度和管理,確保任務按照其優先級和時間片輪轉的方式執行。這有助于實現任務的合理分配和實時性能的優化。9.內存管理RT-Thread提供了內存管理機制,包括動態內存分配和釋放。這對于嵌入式系統來說很重要,因為資源是有限的。10.社區支持和開源RT-Thread是一個開源項目,擁有龐大的開發者社區。社區的支持和貢獻推動了系統的不斷改進和更新。RT-Thread嵌入式系統概述1.1.3RT-Thread原理與架構RT-Thread以其微內核架構、實時性能和靈活性為特點,為嵌入式系統提供了一個強大的操作系統平臺。其開源性質和活躍的社區生態也使得它成為嵌入式開發者首選的RTOS之一。RT-Thread嵌入式系統概述1.1.4RT-Thread應用領域RT-Thread嵌入式系統在各種應用領域都有廣泛的應用,以下是一些RT-Thread在嵌入式系統中常見的應用領域:1.工業自動化RT-Thread在工業控制系統中被廣泛應用,用于實時控制和監控。它的實時性和多線程支持使得它適合處理工業自動化中的實時任務,如運動控制和傳感器數據采集。2.醫療設備在醫療領域,RT-Thread用于控制和監測各種醫療設備,包括呼吸機、心電圖儀、血壓計等。RT-Thread嵌入式系統概述1.1.4RT-Thread應用領域3.物聯網(IoT)設備RT-Thread適用于物聯網設備,如智能家居系統、智能傳感器和嵌入式物聯網網關。其輕量級設計使得它能夠在資源受限的設備上運行。4.汽車電子系統在汽車領域,RT-Thread可以用于車載控制系統、嵌入式信息娛樂系統、駕駛輔助系統等。5.家電和消費電子RT-Thread可用于控制家用電器,如智能電視、智能空調、智能冰箱等。其多線程支持和可移植性使得它適用于各種不同的嵌入式設備。RT-Thread嵌入式系統概述1.1.4RT-Thread應用領域6.網絡設備RT-Thread可以用于網絡設備,如路由器、交換機和網絡攝像頭。其支持網絡協議棧和設備驅動框架使得它適用于處理網絡通信任務。7.軍事和航空航天在軍事和航空航天領域,對實時性和可靠性的要求非常高。RT-Thread可以應用于飛行控制系統、導彈控制系統等。8.能源管理在能源領域,RT-Thread可以用于監控和控制能源設備,如太陽能控制系統、風力發電控制系統等。RT-Thread嵌入式系統概述1.1.4RT-Thread應用領域9.教育和研究RT-Thread也廣泛應用于嵌入式系統的教育和研究領域。和研究人員可以使用RT-Thread來學習和研究實時嵌入式系統的開發。RT-Thread在各個領域的應用表現出了很大的靈活性,這使得它成為許多嵌入式系統項目的首選。其開源性質和豐富的社區支持也為開發者提供了更多的資源和工具。第1章RT-Thread嵌入式系統概述與開發基礎
1.2RT-Thread嵌入式系統開發基礎RT-Thread嵌入式系統開發基礎RT-Thread與市場上已有的RTOS如FreeRTOS、uC/OS的主要區別之一是,它不僅僅是一個實時內核,還具備豐富的中間層組件,如下圖所示。
RT-Thread系統架構RT-Thread系統架構具體包括以下部分:
RT-Thread系統架構內核層:RT-Thread內核,是RT-Thread的核心部分,包括了內核系統中對象的實現,例
如多線程及其調度、信號量、郵箱、消息隊列、內存管理、定時器等;libcpu/BSP(芯片移植相關文件/板級支持包)與硬件密切相關,由外設驅動和CPU移植構成。組件與服務層:組件是基于RT-Thread內核之上的上層軟件,例如虛擬文件系統、FinSH命令行界面、網絡框架、設備框架等。采用模塊化設計,做到組件內部高內聚,組件之間低耦合。RT-Thread軟件包:運行于RT-Thread物聯網操作系統平臺上,面向不同應用領域的通用軟件組件,由描述信息、源代碼或庫文件組成。RT-Thread提供了開放的軟件包平臺,這里存放了官方提供或開發者提供的軟件包,該平臺為開發者提供了眾多可重用軟件包的選擇,這也是RT-Thread生態的重要組成部分。。RT-Thread嵌入式系統開發基礎RT-Thread嵌入式系統開發基礎1.ZI-ARMEmbed本書所依托的開發平臺為嵌入式原型機ZI-ARMEmbed,集成了ARMCortex-M4STM32F407控制器,2.8寸真彩LCD液晶屏,可配置的無線通信模塊(支持ZigBee/WiFi/Lora/4G等);集成光照強度傳感器、三軸傳感器、空氣質量傳感器、大氣壓力傳感器、人體紅外傳感器、震動傳感器、火焰傳感器、霍爾傳感器、燃氣傳感器、RGB和LED燈、步進電機傳感器、風扇傳感器、鎖定檢測光柵傳感器、電磁鎖傳感器、溫濕度傳感器、指紋模塊等;板載信號指示燈:電源、電池、網絡、數據,四路功能按鍵,四路LED燈,集成鋰電池接口,集成電源管理芯片,支持電池的充電管理和電量測量;板載USB串口,Ti仿真器接口,ARM仿真器接口;集成以太網;集成四路RJ45工業接口,提供ARM芯片功能輸出,硬件包含O、ADC3.3V、ADC5V、UART、RS485、兩路繼電器等功能,提供四路3.3V、5V、12V電源輸出。
RT-Thread硬件開發平臺RT-Thread嵌入式系統開發基礎
RT-Thread硬件開發平臺ZI-ARMEmbed嵌入式原型機系統ZI-ARMEmbed引腳對照表RT-Thread嵌入式系統開發基礎
RT-Thread硬件開發平臺2.STM32處理器STM32系列微控制器是一系列基于ARMCortex-M內核的嵌入式微控制器,是ST(意法半導體)公司以ARM公司的Cortex-M0、Cortex-M3、Cortex-M4和Coretex-M7四種RISC內核開發的系列產品STM32系列芯片型號與內核對應關系STM32系列的微控制器在指令集方面是向后兼容的,而相同封裝的芯片,大部分引腳的功能也相同(少數電源與新增功能引腳有區別),用戶可以在不修改印制電路板的條件下,根據需要更換不同資源(FLASH、RAM),甚至不同內核的芯片來完善自己的設計工作。RT-Thread嵌入式系統開發基礎
ZI-ARMEmbed硬件平臺連接1.仿真器連接將ARM仿真器與嵌入式原型機板卡的ARM調試口相連接,仿真器USB端與電腦相連接仿真器連接RT-Thread嵌入式系統開發基礎
ZI-ARMEmbed硬件平臺連接2.串口連接1)使用MiniUSB線將嵌入式原型機板卡與PC機相連。串口連接2)在PC機上右鍵點擊“我的電腦”,點擊“管理”進入計算機管理頁面。3)點擊“設備管理器”,找到端口(COM和LPT),查看串口的端口號:比如COM5(每臺電腦串口端口號可能都不一樣)。若沒有找到端口則有兩種可能,第一種是沒有按照實驗要求使用USB線連接硬件與PC機(重新檢查連接即可),另一種為沒有安裝串口驅動(串口第一次使用需要安裝驅動,安裝時只需要根據相應提示進行下去就可以),驅動目錄在DISK-Packages\53-常用驅動程序\USB串口驅動目錄下安裝CP210x_Drivers-win7.zip或者CH340_Drivers.zip即可(根據自己實際的硬件去選擇不同的驅動)。RT-Thread嵌入式系統開發基礎
MobaXterm串口工具1.串口配置1)安裝MobaXterm軟件,雙擊MobaXterm.exe文件即可啟動。安裝MobaXterm2)啟動軟件之后點擊“Session”新建會話,會話類型選擇“Serial”串口,在“Serialport”選擇對應的串口號(Serialport:COM5,每個電腦可能不一樣),串口設置(波特率-數據位-停止位-校驗位-流控制):115200-8-1-None-None。設置完成之后點擊“OK”即可。串口設置RT-Thread嵌入式系統開發基礎
MobaXterm串口工具2.串口使用1)嵌入式原型開發套件硬件上電啟動后,會輸出串口打印消息。2)在MobaXterm工具的串口終端可以看到啟動消息,并進入到FinSH控制臺,如圖1.12所示。FinSH控制臺RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具1.軟件安裝J-FlashARM軟件,可以將hex文件燒寫到ARM內核的單片機(如stm32f407)中。雙擊安裝包文件,默認安裝。(路徑:DISK-Packages\02-嵌入式接口技術\JLinkARM\Setup_JLinkARM_V462.exe)。特別說明:安裝J-FlashARM軟件時,如果已經安裝了IARforARM軟件,會彈出如下提示框。J-FlashARM軟件安裝1此提示框提示是否需要更換掉IARforARM軟件安裝路徑下的JLinkARM.dll文件。點擊SelectAll按鈕,勾選IAREmbeddedWorkbenchforARM(DLLV4.62in“…\IAR\bin”)選項點擊OK按鈕,按照默認,完成安裝。J-FlashARM軟件安裝2RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具2.軟件配置1)安裝完成后,可以在開始菜單欄的SEGGER文件夾下找到J-FlashARM軟件。2)根據實際的硬件需要進行配置:打開該程序后,進入如圖1.15所示界面,點擊“Options->Projectsettings”,進入設置界面。設置界面RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具2.軟件配置選擇“TargetInterface”選項卡,在界面的第一個下拉框列表中選擇“SWD”選擇“SWD”選擇“CPU”選項卡,選中第一行的“Device”選項,在Device選項框中選擇“STSTM32F407VE”(如果是燒寫RF2無線模組,對應的Devices選擇“STSTM32F103CB”),設置完畢最后點擊“確定”。選擇“STSTM32F407VE”RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具2.軟件配置3)設置完成后,點擊“Target->Connect”測試與硬件的連接是否正常。測試與硬件的連接連接成功后,在該界面下的LOG窗口下會顯示“Connectedsuccessfully”。連接成功RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具3.燒寫固件1)點擊“File”->Opendatafile,打開要燒寫入嵌入式原型機板卡的hex文件。燒寫固件1RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具3.燒寫固件2)然后點擊“Target->Erasechip”,擦除單片機的Flash扇區。燒寫固件2RT-Thread嵌入式系統開發基礎
J-FlashARM燒寫工具3.燒寫固件3)最后點擊“Target->Program&Verify”,將hex文件燒寫到嵌入式原型機板卡的MCU中。燒寫固件3RT-Thread嵌入式系統開發基礎1.2.2開發設計與實踐本項目使用J-FlashARM軟件燒錄鏡像文件,使用嵌入式原型機板卡的LCD屏幕顯示人機交互界面,K1~K4四個功能按鍵用于用戶輸入,功能按鍵對傳感器和無線設備參數進行操作。RT-Thread嵌入式系統開發基礎1.2.3開發步驟與驗證(1)準備嵌入式原型機板卡ZI-ARMEmbed、ARM仿真器、MiniUSB線。(2)完成仿真器、串口(MiniUSB線)、12V電源的連接。(3)使用MobaXterm工具創建串口終端并打開,串口設置(波特率-數據位-停止位-校驗位-流控制):115200-8-1-None-None。
硬件部署
程序下載(1)運行J-FlashARM軟件打開鏡像hex文件。(2)點擊J-FlashARM軟件“Target->Program&Verify”,將hex文件燒寫到板卡的STM32F407芯片中。(3)拔掉ARM仿真器,按下復位鍵啟動程序。RT-Thread嵌入式系統開發基礎1.嵌入式原型機板卡程序下載成功之后,LCD屏幕點亮,并顯示傳感器狀態信息,可以通過K1、K2、K3、K4共四個功能按鍵與系統進行交互。其中【K1】進行翻頁,【K2】進行選擇和取消選擇,【K3】/【K4】進行上下移動。頁面1顯示的各種采集類傳感器數據,頁面2顯示的是各種控制類傳感器狀態及開關操作,頁面3顯示的是各種安防類傳感器狀態,頁面4顯示的是無線設備參數。頁面1:各種采集類傳感器數據。
驗證效果各種采集類傳感器數據RT-Thread嵌入式系統開發基礎1.嵌入式原型機板卡頁面2:各種控制類傳感器狀態及開關操作。
驗證效果各種控制類傳感器狀態及開關操作頁面3:各種安防類傳感器狀態。各種安防類傳感器狀態頁面4:無線設備參數。無線設備參數RT-Thread嵌入式系統開發基礎2.FinSH控制臺1)程序啟動后在MobaXterm工具的串口終端可以看到啟動消息,并進入到FinSH控制臺。2)在MobaXterm串口終端FinSH控制臺輸入“help”命令(輸入之前需要把輸入法切換到英文),輸出系統可使用的命令,在控制臺中使用這些不同的命令可得到不同的輸出信息。3)可以參照實驗步驟去操作嵌入式原型機板卡的功能,進一步加深對板子的認識。
驗證效果RT-Thread嵌入式系統開發基礎本小節首先學習了RT-Thread系統架構、J-FlashARM燒寫工具,然后使用嵌入式原型機板卡的LCD屏幕顯示人機交互界面,K1~K4四個功能按鍵用于用戶輸入,功能按鍵對傳感器和無線設備參數進行操作與開發。1.2.4小結第1章RT-Thread嵌入式系統概述與開發基礎
1.3RT-ThreadStudio應用開發RT-ThreadStudio應用開發嵌入式系統集成開發環境(IntegratedDevelopmentEnvironment,IDE)是一種用于嵌入式系統開發的集成工具,它提供了一套功能強大的工具和資源,以幫助開發人員創建、編譯、調試和測試嵌入式系統的軟件和硬件。以下是一些常見的嵌入式系統IDE:KeilμVision:Keil是一家知名的嵌入式工具提供商,其μVisionIDE廣泛用于開發ARMCortex-M微控制器和其他嵌入式系統。它包括編譯器、調試器、仿真器和各種插件。IAREmbeddedWorkbench:IARSystems的EmbeddedWorkbench是另一個受歡迎的IDE,用于多種不同的嵌入式平臺,包括ARM、MSP430和Renesas等。RT-ThreadStudio應用開發AtmelStudio:AtmelStudio是MicrochipTechnology(之前是AtmelCorporation)為其AVR和SAM微控制器提供的IDE。它集成了編譯器、調試工具和AtmelSTART用于快速啟動項目的庫。Eclipse:Eclipse是一個免費的、開源的IDE平臺,可通過各種插件擴展以支持不同的嵌入式系統開發。它通常需要額外的插件來支持特定的硬件架構和編程語言。PlatformIO:PlatformIO是一個用于嵌入式開發的開源IDE,支持多種平臺和硬件架構,包括Arduino、ESP8266、ESP32、STM32等。CodeComposerStudio:CodeComposerStudio是德州儀器(TexasInstruments)為其TivaC和CCS系列微控制器提供的集成開發環境。RT-ThreadStudio應用開發RT-ThreadStudio:是一個基于RT-Thread(Real-TimeThread)實時操作系統的集成開發環境(IDE),專門設計用于嵌入式系統和物聯網設備。本節要求掌握的知識點如下:1.了解RT-ThreadStudio軟件簡介。2.掌握RT-ThreadStudio新建工程。3.掌握RT-ThreadStudio編譯、調試及程序下載基本開發方法。RT-ThreadStudio應用開發RT-ThreadStudio是由RT-Thread團隊開發的一款集成開發環境(IDE),專門用于支持和開發基于RT-Thread實時操作系統的嵌入式應用程序。它提供了一套工具,幫助開發人員更容易地創建、調試和部署嵌入式系統。以下是一些RT-ThreadStudio的關鍵特點和功能:1.基于EclipseRT-ThreadStudio的基礎是EclipseIDE,這是一個流行的開源綜合性IDE平臺。這使得RT-ThreadStudio可以利用Eclipse生態系統中的豐富插件和工具。2.支持多種處理器架構RT-ThreadStudio支持多種處理器架構,包括ARM、MIPS、RISC-V等。這使得它適用于不同類型的嵌入式系統。1.3.1RT-ThreadStudio分析RT-ThreadStudio應用開發3.RT-Thread集成IDE集成了RT-Thread操作系統,提供了對RT-ThreadAPI的直觀支持,簡化了RT-Thread項目的創建和配置。4.圖形化配置工具RT-ThreadStudio提供了圖形化配置工具,允許開發人員通過界面配置RT-Thread操作系統,而無需手動編輯配置文件。5.全面的調試支持支持多種調試工具,包括GDB調試器,使開發人員能夠進行全面的調試和性能分析。6.項目管理工具提供了項目管理工具,方便開發人員管理復雜的嵌入式項目,包括代碼組織、構建和部署。1.3.1RT-ThreadStudio分析RT-ThreadStudio應用開發RT-ThreadStudio旨在簡化嵌入式系統的開發流程,提高開發效率,特別是對于使用RT-Thread操作系統的項目,如圖1.27所示。1.3.1RT-ThreadStudio分析圖1.27RT-ThreadStudioRT-ThreadStudio應用開發安裝部署RT-ThreadStudio開發環境,使用RT-ThreadStudio新建工程,編譯和下載程序;熟悉RT-ThreadStudio開發環境的常用操作,熟悉RT-ThreadStudio程序調試。1.3.2開發設計與實踐RT-ThreadStudio應用開發1)準備嵌入式原型機板卡ZI-ARMEmbed、ARM仿真器、MiniUSB線。2)完成仿真器、串口(MiniUSB線)、12V電源的連接。3)使用MobaXterm工具創建串口終端并打開,串口設置(波特率-數據位-停止位-校驗位-流控制):115200-8-1-None-None。1.3.3開發步驟與驗證
硬件部署RT-ThreadStudio應用開發1)RT-ThreadStudio的軟件包已經存放在隨書資源包里面,也可以從官方/studio.html下載純凈版,但是開發過程中推薦使用隨書資源包中的安裝包,該安裝包已經集成了必備的系統內核和芯片BSP包。2)將RT-ThreadStudio.zip壓縮包放在任意目錄下解壓,不要有中文路徑,使用右鍵以管理員的身份運行studio.exe。或者右鍵studio.exe選擇屬性,在屬性頁面的兼容性中勾選“以管理員的身份運行此程序”,如圖1.28所示。1.3.3開發步驟與驗證
安裝軟件RT-ThreadStudio應用開發1.3.3開發步驟與驗證
安裝軟件圖1.28安裝RT-ThreadStudio1RT-ThreadStudio應用開發1.3.3開發步驟與驗證
安裝軟件圖1.29安裝RT-ThreadStudio2軟件打開后如圖1.29所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
安裝軟件圖1.30安裝RT-ThreadStudio3
打開RT-ThreadStudio軟件后,在工具欄找到“
”圖標,名稱為“SDKManager”,可以進行SDK軟件包管理,如圖1.30所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
安裝軟件圖1.31安裝RT-ThreadStudio44)本開發中的硬件主芯片為STM32F407,RT-Thread采用4.1.0版本。需要保障SDKManager管理器中RT-Thread_Source_Code對應的4.1.0版本內核、Chip_Support_Packages對應的STM32F4已經安裝,安裝后的截圖如下所示,提供的軟件包中這些組件是默認安裝好的,如圖1.31和1.32所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
安裝軟件圖1.32安裝RT-ThreadStudio5RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.33新建工程11.新建工程1)打開RT-ThreadStudio軟件,在菜單欄選擇“文件->新建->RT-Thread項目”創建RT-Thread項目(或者“文件->新建->項目->RT-Thread項目”),如圖1.33所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.34新建工程22)根據如下的配置選項進行設置:工程名:02-Template;RT-Thread:4.1.0;廠商:STM;系列:STM32F4;子系列:STM32F407;芯片:STM32F407VE;調試器:J-Link;接口:SWD。設置完成后,點擊完成即可創建02-Template工程,如圖1.34所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.35新建工程33)創建好的02-Template工程完成后如圖1.35所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.36工程編譯12.工程編譯1)點擊工具欄“
”構建按鈕完成項目的編譯,如圖1.36所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用2)在控制臺窗口提示編譯完成并沒有報錯即表示程序編譯成功。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.37工程下載13.工程下載1)如果需要將程序下載到硬件板卡,可點擊工具欄“
”下載按鈕,即可完成程序的下載,如圖1.37所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用2)在控制臺窗口提示執行完畢并沒有報錯即表示完成程序的下載。3)程序下載完成后,按下硬件板卡的復位鍵即可運行新的程序,在MobaXterm串口終端可以看到程序的啟動打印信息。\|/-RT-ThreadOperatingSystem/|\4.1.0buildOct13202217:33:302006-2022CopyrightbyRT-Threadteam[D/main]HelloRT-Thread!msh>[D/main]HelloRT-Thread![D/main]HelloRT-Thread!RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.38調試按鈕啟動調試功能4.工程調試1)如果需要進行程序調試,可點擊工具欄“
”調試按鈕啟動調試功能,如圖1.38所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.39工具欄2)進入調試功能后,工具欄中出現如圖1.39所示調試使用按鈕。下面是部分按鈕的使用解釋。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用工具欄圖標圖標的功能表示程序啟動。表示程序暫停,暫停后點擊程序啟動繼續運行。表示調試停止,點擊后調試程序退出,退出調試模式。表示單步跳入,程序跳入,比如跳入一個函數內部。表示單步跳過,程序不會跳入具體函數內部,可理解單行調試。表示單步返回,當進入函數內部時,使用此按鈕單步跳出該函數,進入外部函數。表示指令步進模式,選擇此模式后,可實現匯編代碼的單步調試。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.40添加斷點3)斷點:在調試模式下,在程序需要的位置雙擊序號處即可添加斷點,如圖1.40所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.41取消斷點點擊工具欄“”繼續按鈕全速運行程序,程序運行到斷點處會停止運行。在右側的斷點管理器中可以查看到所有的斷點,這里可以將不需要的斷點取消掉,如圖1.41所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.42跟蹤變量14)變量:在右側分欄中找到變量窗口,這個窗口中默認顯示當前所在函數中的所有變量,如圖1.42所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.43跟蹤變量2也可以手動輸入你想查閱的變量名,在表達式窗口中輸入表達式即可。如下輸入count變量,如圖1.43所示RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.44工具欄5)外設寄存器:由于RTT軟件的問題,要查看寄存器的數值時需要這里配置CSP包的版本,在新建工程時選擇的版本是0.2.2,所以下面就需要修改配置路徑。點擊工具欄“
”調試配置按鈕,如圖1.44所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.45配置工程1在SVDPath欄中找到filepath,將里面的0.2.0修改為的版本0.2.2,如圖1.45和1.46所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.46
配置工程2RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用圖1.47查看寄存器修改完成后點擊確定,這時候重新啟動調試按鈕即可正常顯示寄存器的數值。點擊相應的寄存器,會在狀態欄中顯示具體的寄存器值,如圖1.47所示。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
工具使用6)程序調試完后,點擊工具欄“
”停止圖標退出調試狀態。RT-ThreadStudio應用開發1.3.3開發步驟與驗證
驗證效果1)關閉RT-ThreadStudio軟件,拔掉仿真器。按下嵌入式原型機板卡電源按鍵重新開機上電。2)本項目創建了一個初始工程,在MobaXterm串口終端默認每秒打印一次“HelloRT-Thread!”消息。\|/-RT-ThreadOperatingSystem/|\4.1.0buildOct13202217:33:302006-2022CopyrightbyRT-Threadteam[D/main]HelloRT-Thread!msh>[D/main]HelloRT-Thread![D/main]HelloRT-Thread!3)也可以參考實驗步驟3熟悉RT-ThreadStudio軟件的使用和調試,自行設置程序斷點,進行單步調試,觀察程序中不同窗口的具體數值,深入了解工具的使用。RT-ThreadStudio應用開發1.3.4小結本小節學習了RT-ThreadStudio基本開發工具,利用掌握RT-ThreadStudio進行新建工程、編譯、調試及程序下載基本開發方法。第1章RT-Thread嵌入式系統概述與開發基礎
1.4RT-Thread嵌入式系統移植技術開發RT-Thread嵌入式系統移植技術開發1.RT-Thread系統啟動流程RT-Thread啟動代碼統一入口為rtthread_startup(),芯片啟動文件在完成必要工作(如初始化時鐘、配置中斷向量表、初始化堆棧等)后,最終會在程序跳轉時,跳轉至RT-Thread的啟動入口中。RT-Thread的啟動流程如下:1)全局關中斷,初始化與系統相關的硬件。2)打印系統版本信息,初始化系統內核對象(如定時器、調度器)。3)初始化用戶main線程(同時會初始化線程棧),在main線程中對各類模塊依次進行初始化。4)初始化軟件定時器線程、初始化空閑線程。5)啟動調度器,系統切換到第一個線程開始運行(如main線程),并打開全局中斷。1.4.1RT-Thread系統移植原理分析RT-Thread嵌入式系統移植技術開發2.啟動文件(zonesion/common/LIB/Libraries/startup_stm32f407xx.S)
啟動文件(startup.s)由芯片廠商提供,位于芯片固件庫中。每款芯片都有相對應的啟動文件,在不同開發環境下啟動文件也不相同。當系統加入RT-Thread之后,會將RT-Thread的啟動放在調用main()函數之前。1.4.1RT-Thread系統移植原理分析RT-Thread啟動在startup.s中主要完成初始化時鐘、配置中斷向量表;完成全局/靜態變量的初始化工作;初始化堆棧;庫函數的初始化;程序的跳轉等內容。3.libcpu(rt-thread/libcpu)
RT-Thread的libcpu抽象層向下提供了一套統一的CPU架構移植接口,這部分接口包含了全局中斷開關函數、線程上下文切換函數、時鐘節拍的配置和中斷函數、Cache等等內容,RT-Thread支持的cpu架構在源碼的libcpu文件夾下。RT-Thread嵌入式系統移植技術開發4.上下文切換(rt-thread/libcpu/arm/cortex-m4/context_gcc.S)
上下文切換(context_xx.s)表示CPU從一個線程切換到另一個線程、或者線程與中斷之間的切換等。在上下文切換過程中,CPU一般會停止處理當前運行的代碼,并保存當前程序運行的具體位置以便之后繼續運行。1.4.1RT-Thread系統移植原理分析上下文切換接口函數RT-Thread嵌入式系統移植技術開發5.線程初始化(rt-thread/libcpu/arm/cortex-m4/cpuport.c)線程棧初始化(cpuport.c):在RT-Thread中,線程具有獨立的棧,當進行線程切換時,會將當前線程的上下文存在棧中,當線程要恢復運行時,再從棧中讀取上下文信息,進行恢復。rt_hw_hard_fault_exception()為故障異常處理函數,在發生硬件錯誤時,執行HardFault_Handler中斷,會執行該函數。該文件中主要實現線程棧的初始化rt_hw_stack_init()與hardfault異常處理函數1.4.1RT-Thread系統移植原理分析線程棧初始化接口函數RT-Thread嵌入式系統移植技術開發6.中斷與異常在Cortex-M內核上,所有中斷都采用中斷向量表的方式進行處理,即當一個中斷觸發時,處理器將直接判定是哪個中斷源,然后直接跳轉到相應的固定位置進行處理,不需要再自行實現中斷管理。7.板級文件板級文件(board.c和board.h)主要是針對rt_hw_board_init()函數內容的實現,該函數在板級配置文件board.c中,函數中做了許多系統啟動必要的工作,其中包含:1)配置系統時鐘。2)實現OS節拍。3)初始化外設:如GPIO/UART等等。4)設置控制臺的串口設備。5)初始化系統內存堆,實現動態堆內存管理。6)板級自動初始化,使用INIT_BOARD_EXPORT()自動初始化的函數會在此處被初始化。7)其他必要的初始化。1.4.1RT-Thread系統移植原理分析RT-Thread嵌入式系統移植技術開發1.4.1RT-Thread系統移植原理分析/*************************************************************************************************名稱:rt_hw_board_init()*功能:板級初始化************************************************************************************************/RT_WEAKvoidrt_hw_board_init(){externvoidhw_board_init(char*clock_src,int32_tclock_src_freq,int32_tclock_target_freq);
/*Heapinitialization*/#ifdefined(RT_USING_HEAP)rt_system_heap_init((void*)HEAP_BEGIN,(void*)HEAP_END);//堆內存初始化#endif
hw_board_init(BSP_CLOCK_SOURCE,BSP_CLOCK_SOURCE_FREQ_MHZ,BSP_CLOCK_SYSTEM_FREQ_MHZ);//板級初始化
/*Settheshellconsoleoutputdevice*/#ifdefined(RT_USING_DEVICE)&&defined(RT_USING_CONSOLE)rt_console_set_device(RT_CONSOLE_DEVICE_NAME);//設置控制臺的調用的串口設備名#endif
/*Boardunderlyinghardwareinitialization*/#ifdefRT_USING_COMPONENTS_INITrt_components_board_init();//初始化組件#endif}RT-Thread嵌入式系統移植技術開發1.4.1RT-Thread系統移植原理分析
在rt_hw_board_init函數中還會調用hw_board_init函數,該函數中進行的就是hal庫的初始化、系統時鐘的配置clk_init、系統滴答時鐘的配置rt_hw_systick_init、pin設備和串口設備的打開等等。/*************************************************************************************************名稱:hw_board_init()*功能:板級初始化************************************************************************************************/voidhw_board_init(char*clock_src,int32_tclock_src_freq,int32_tclock_target_freq){externvoidrt_hw_systick_init(void);externvoidclk_init(char*clk_source,intsource_freq,inttarget_freq);
#ifdefSCB_EnableICache/*EnableI-Cache---------------------------------------------------------*/SCB_EnableICache();#endif
#ifdefSCB_EnableDCache/*EnableD-Cache---------------------------------------------------------*/SCB_EnableDCache();#endif/*HAL_Init()functioniscalledatthebeginningoftheprogram*/HAL_Init();//hal庫初始化,完成中斷分組等等RT-Thread嵌入式系統移植技術開發1.4.1RT-Thread系統移植原理分析/*enableinterrupt*/__set_PRIMASK(0);/*Systemclockinitialization*/clk_init(clock_src,clock_src_freq,clock_target_freq);//系統時鐘初始化/*disbaleinterrupt*/__set_PRIMASK(1);
rt_hw_systick_init();//系統滴答時鐘初始化
/*Pindriverinitializationisopenbydefault*/#ifdefRT_USING_PINexternintrt_hw_pin_init(void);rt_hw_pin_init();//pin設備初始化#endif
/*USARTdriverinitializationisopenbydefault*/#ifdefRT_USING_SERIALexternintrt_hw_usart_init(void);rt_hw_usart_init();//串口設備注冊#endif}RT-Thread嵌入式系統移植技術開發8.配置系統鬧鐘系統時鐘的配置函數是在drv_clk.c文件中clk_init函數進行,是給各個硬件模塊提供工作時鐘的基礎,一般在hw_board_init()函數中進行調用,位于drv_common.c文件中。RT-ThreadStudio軟件默認生成的代碼使用的是內部時鐘,由于各家廠商使用的外部晶振頻率不一定相同,所以這一點需要各板級廠商根據需求進行修改clk_init函數來啟動外部晶振,下面是這里調用的一種方式,這里使用的外部晶振源為8MHz。1.4.1RT-Thread系統移植原理分析/*************************************************************************************************名稱:clk_init(char*clk_source,intsource_freq,inttarget_freq)*功能:時鐘源初始化*參數:clk_source時鐘源字符描述,比如HSE,表示外部晶振源*參數:source_freq晶振源的頻率*參數:target_freq晶振源的目標頻率************************************************************************************************/voidclk_init(char*clk_source,intsource_freq,inttarget_freq){if(strcmp(clk_source,"HSE")==0)//外部晶振{RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_ClkInitTypeDefRCC_ClkInitStruct={0};
/**Configurethemaininternalregulatoroutputvoltage*/__HAL_RCC_PWR_CLK_ENABLE();RT-Thread嵌入式系統移植技術開發1.4.1RT-Thread系統移植原理分析__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/**InitializestheCPU,AHBandAPBbussesclocks*/RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM=8;RCC_OscInitStruct.PLL.PLLN=target_freq*2;RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ=7;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/**InitializestheCPU,AHBandAPBbussesclocks*/RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV2;RT-Thread嵌入式系統移植技術開發1.4.1RT-Thread系統移植原理分析if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5)!=HAL_OK){Error_Handler();}}else{system_clock_config(target_freq);}}RT-Thread嵌入式系統移植技術開發9.實現OS節拍OS節拍也叫時鐘節拍或OStick。任何操作系統都需要提供一個時鐘節拍,以供系統處理所有和時間有關的事件。時鐘節拍的實現:通過硬件timer實現周期性中斷,在定時器中斷中調用rt_tick_increase()函數實現全局變量rt_tick自加,從而實現時鐘節拍。一般地,在CortexM上直接使用內部的滴答定時器Systick實現。時鐘節拍由配置為中斷觸發模式的硬件定時器產生,當中斷到來時,將調用一次:voidrt_tick_increase(void),通知操作系統已經過去一個系統時鐘;不同硬件定時器中斷實現都不同,下面的中斷函數以STM32定時器作為示例。如下是STM32配置OS節拍示例,在初始化時鐘節拍后,直接在SysTick_Handler()中斷服務例程中調用rt_tick_increase()。rt_hw_systick_init函數由hw_board_init函數調用。該函數使用hal庫完成滴答時鐘的配置,并設置滴答時鐘的中斷優先級,可見這里的優先級設置是最高的。中斷服務例程也定義在同樣的文件內。1.4.1RT-Thread系統移植原理分析RT-Thread嵌入式系統移植技術開發9.實現OS節拍1.4.1RT-Thread系統移植原理分析/*SysTickconfiguration*/voidrt_hw_systick_init(void){#ifdefined(SOC_SERIES_STM32H7)HAL_SYSTICK_Config((HAL_RCCEx_GetD1SysClockFreq())/RT_TICK_PER_SECOND);#elseHAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND);#endifHAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn,0,0);}/*中斷服務例程*/voidSysTick_Handler(void){/*enterinterrupt*/rt_interrupt_enter();HAL_IncTick();rt_tick_increase();/*leaveinterrupt*/rt_interrupt_leave();}RT-Thread嵌入式系統移植技術開發1.4.2開發設計與實踐針對嵌入式原型機板卡ZI-ARMEmbed的硬件,進行RT-Thread項目系統移植。RT-Thread嵌入式系統移植技術開發1.4.3.1硬件部署(1)準備嵌入式原型機板卡ZI-ARMEmbed、ARM仿真器、MiniUSB線。(2)完成仿真器、串口(MiniUSB線)、12V電源的連接。(3)使用MobaXterm工具創建串口終端并打開,串口設置(波特率-數據位-停止位-校驗位-流控制):115200-8-1-None-None。1.4.3開發步驟與驗證
系統移植本次實驗是在02-Template示例工程進行項目改進的,由于該示例工程是由RT-ThreadStudio軟件自動生成的,具有一定的參考意義,因此本次實驗是在02-Template示例工程的基礎上針對實際的硬件進行板級BSP包移植,形成一個整體項目的實例工程,便于后面各個實驗的代碼建立。也可以直接導入本項目已經創建好的工程03-init直接使用。RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
系統移植1.創建工程1)將實驗2:02-Template復制一份命名為03-init,并拷貝到RT-ThreadStudio\workspace工作區目錄下。2)修改.cproject第215行的目錄路徑。(03-init/.cproject)
將這里workspacePath中02-Template修改為03-init。<storageModulemoduleId="refreshScope"versionNumber="2"><configurationconfigurationName="Debug"><resourceresourceType="PROJECT"workspacePath="/03-init"/></configuration></storageModule>RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
系統移植1.創建工程3)修改.project第3行和倒數第3行的工程名。(03-init/.project)<?xmlversion="1.0"encoding="UTF-8"?><projectDescription><name>03-init</name><comment/><projects></projects><buildSpec><buildCommand><name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name><triggers>clean,full,incremental,</triggers><arguments></arguments></buildCommand><buildCommand><name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name><triggers>full,incremental,</triggers><arguments></arguments></buildCommand></buildSpec><natures><nature>ature</nature><nature>org.rt-thread.studio.rttnature</nature><nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature><nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature></natures><name>03-init</name><linkedResources/></projectDescription>
如上,將這里name中02-Template修改為03-init。RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
系統移植1.創建工程4)修改.settings目錄中的projcfg.ini最后一行為新工程名。=(03-init/.settings/projecfg.ini)#RT-ThreadStudioProjectConfiguration#FriSep0215:21:23CST2022project_type=rttchip_name=STM32F407VEcpu_name=Nonetarget_freq=168clock_source=hsidvendor_name=STMicroelectronicsrx_pin_name=PA10rtt_path=repo/Extract/RT-Thread_Source_Code/RT-Thread/4.1.0source_freq=0csp_path=repo/Extract/Chip_Support_Packages/RealThread/STM32F4/0.2.2sub_series_name=STM32F407selected_rtt_version=4.1.0cfg_version=v3.0tool_chain=gccuart_name=uart1tx_pin_name=PA9rtt_nano_path=output_project_path=C\:/RT-ThreadStudio/workspacehardware_adapter=J-Linkproject_name=03-init如上,將這里project_name中02-Template修改為03-init。RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
系統移植1.創建工程5)修改.settings目錄中的4個配置文件頭為新工程名。(03-init/.settings)修改前工程名修改后工程名RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
系統移植2.導入工程1)運行RT-ThreadStudio軟件,在菜單欄選擇“文件->導入”功能“選擇RT-ThreadStudio項目到工作空間中”,點擊下一步,選擇根目錄為RT-ThreadStudio\workspace工作區目錄,將會出現目錄下的所有工程,勾選03-init工程并點擊完成即可導入工程1導入工程2RT-Thread嵌入式系統移植技術開發1.4.3開發步驟與驗證
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共營養師培訓考試輔導:公共營養師考試練習多選題及答案
- UHPC薄板加固服役RC梁抗彎性能研究
- 一般固體廢物處置及綜合利用項目可行性研究報告
- 高中語文和外語通跨學科教學中的評估與反饋機制
- 2025至2030年中國獺兔皮披肩行業投資前景及策略咨詢報告
- 工業綠色轉型的當前挑戰與發展趨勢
- 區域醫療協同發展模式的創新探索與實踐
- 2025至2030年中國曲皮螺栓行業投資前景及策略咨詢報告
- 農業機械企業經營管理方案
- 家庭托育體系建設的策略及實施路徑
- DL-T839-2003大型鍋爐給水泵性能現場試驗方法
- JC-T408-2005水乳型瀝青防水涂料
- FZT 74005-2016 針織瑜伽服行業標準
- 2024年廣東佛山市順德區公安局輔警招聘筆試參考題庫附帶答案詳解
- GB/T 43701-2024滑雪場地滑雪道安全防護規范
- 2024年高考工作總結(35篇)
- 文字學概要完整版本
- 酒店前臺接待培訓課件
- 《電力機車制動機》課件 7-02 最大最小有效減壓量計算
- 《冠脈造影流程操作》課件
- 嵐皋縣某鈦磁鐵礦初步詳查設計
評論
0/150
提交評論