版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、MQX開發(fā)入門,蘇州大學飛思卡爾嵌入式系統(tǒng)研發(fā)中心2011年8月 V1.0,2024/3/31,1,1.MQX簡介與發(fā)展歷史2.MQX基本結(jié)構與源碼目錄3.MQX開發(fā)環(huán)境搭建4.MQX移植與裁剪5.MQX下的工程框架6.MQX應用實例7.MQX設備驅(qū)動開發(fā),2024/3/31,2,1.MQX簡介與發(fā)展歷史,MQX(Message Queue eXecutive,消息隊列執(zhí)行)是一款用于單一處理器、多處理器和分布式處理器
2、等形式的嵌入式實時操作系統(tǒng)。MQX是Precise Software Technologies公司1989年開發(fā)的,2000年3月,被ARC公司收購,主要用在飛思卡爾(Freescale)的ColdFire系列、IBM®/Freescale的PowerPC、ARM、ARC和i.MX等微控制器或微處理器系列中。2009年,飛思卡爾出售ColdFire MCU時,附送MQX,并在官方網(wǎng)站上提供開源源代碼,使其成為開源RTOS。
3、目前,推薦在ARM Cortex-M4系列中使用。主要應用方向是:電子系統(tǒng)的智能化,1.1 MQX簡介,3,2024/3/31,MQX是面向應用的、專用特制的嵌入式RTOS,具有如下系統(tǒng)特性:(1)可伸縮性、可裁減、多層次的系統(tǒng)體系結(jié)構(2)具有優(yōu)化上下文切換和快速中斷響應,實時性高(3)可配置外形、直接應用編程接口(API)和模塊化架構(4)面向特定應用的簡化型調(diào)用接口,專門支持一類嵌入式應用(5)最小內(nèi)核處理集,系統(tǒng)開銷
4、小,運行效率高(6)具有各種即插即用的設備驅(qū)動接口,如USB主機/設備堆棧(7)具有網(wǎng)絡功能,提供TCP/IP協(xié)議棧(RTCS)協(xié)議,支持統(tǒng)一的MAC訪問層接口,1.2 MQX基本特點,2024/3/31,4,從2009年,MQX推出第一個版本RTOS 3.0.1后,其版本不斷進行升級和更新,功能不斷加強,目前推出的最新版本號是3.7.0。根據(jù)freescale網(wǎng)站提供的信息,最新版MQX在CFV2可以配置最小占用12K Flas
5、h和2.5K RAM,包括兩個任務、一個輕量級信號、中斷、隊列和內(nèi)存管理。目前,MQX已經(jīng)提推出十幾個版本,包括3.6.2和3.7.0版。其中3.6.2版是目前實驗室正在研究和使用的版本。從freescale官方網(wǎng)站可以下載到MQX 3.7.0。鏈接地址:http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MQX&nodeId=0152106079,
6、1.3 MQX發(fā)展歷史,2024/3/31,5,2.MQX基本結(jié)構與源碼目錄,MQX由核心組件和可選組件構成,為了滿足需要,可配置為低至6KB的ROM,包括內(nèi)核,中斷,信號量,隊列和內(nèi)存管理器。MQX的基本結(jié)構,2.1 MQX基本結(jié)構,2024/3/31,6,安裝MQX安裝包后,安裝目錄下有如下幾個文件夾。Config:該目錄下包含MQX配置文件Demo:幾個綜合性的示例工程Doc:MQX應用文檔,包含用戶
7、手冊、MFS參考手冊和USB參考手冊等。,2.2 MQX源碼目錄,2024/3/31,7,Lib:編譯后的輸出結(jié)果,包含庫文件和所需的頭文件等。Mfs:MFS文件系統(tǒng)源碼和一些使用示例。MQX:MQX 操作系統(tǒng)源碼。RTCS:TCP/IP 協(xié)議棧源碼和一些使用示例。Shell:shell源碼。Tools:一些輔助工具。USB:USB協(xié)議棧源碼,分為設備和主機協(xié)議棧兩部分,每個部分有一些示例代碼。,2024/3/31,8,20
8、24/3/31,9,2.3 MQX RTOS目錄,3.MQX開發(fā)環(huán)境搭建,1. 系統(tǒng)及工具 系統(tǒng):windows xp 開發(fā)環(huán)境:IAR IDE 寫入器:Jlink(固件版本:ARM V8) 開發(fā)板:K60N5122. MQX源碼安裝包 版本:MQX 3.6.2,2024/3/31,10,4.MQX移植與裁剪,為了適應不同體系結(jié)構的處理器和開發(fā)板,MQX必須把一部分與具體硬件設備相關的代碼作為抽象的接口保留出來,硬件驅(qū)動由硬
9、件設計方具體實現(xiàn),這就是MQX移植。安裝MQX源碼包后,打開MQX工程,包括bsp和psp兩個子工程。PSP(Processor support Package),平臺支持包,與處理器本身相關的一些東西,就是MQX的kernel在該處理器上的移植。BSP(Board support Package),板級支持包,包括一些跟該板子相關的設置。因此如果你的處理器不變,而設計你自己的板子的話,只需要移植和裁剪BSP,而不需要對PS
10、P做改動。,4.1 MQX移植,2024/3/31,11,因為MQX只提供了對Demo板的支持,用戶需要根據(jù)其設計的電路板來開發(fā)新的BSP。移植一般是對于BSP來說的,這是由于PSP是對于芯片和內(nèi)核相關的。假設MQX開發(fā)包提供了 K40X256的樣例程序,而未提供K60N512的,由于K40X256和K60N512 使用的是同一系列的內(nèi)核,選擇twrk40x256作為基準BSP進行修改,可以避免內(nèi)核的移植,這樣可以降低開發(fā)難度和提高開發(fā)
11、效率。移植步驟:①創(chuàng)建一個新的BSP源目錄,如:\mqx\source\bsp\ TestK60N512。TestK60N512為用戶創(chuàng)建的bsp文件。②進入基準目錄,復制基準目錄中的所有內(nèi)容到新目錄,即復制twrk40x256文件下的所有內(nèi)容到TestK60N512文件下。,2024/3/31,12,③創(chuàng)建與新BSP相關的其他的文件和目錄。新的BSP配置目錄,如:config\bsp\TestK60N512;新的構件輸出目錄,如
12、lib\TestK60N512,并在lib\TestK60N512下創(chuàng)建子目錄mqx。④復制選擇的bsp和psp工程文件。–在\mqx\build\iar目錄下,復制bsp_twrk40x256.ewp和psp_twrk40x256.ewp,分別為bsp_TestK60N512.ewp和psp_TestK60N512.ewp。–在\mqx\build\bat目錄下,復制bsp_twrk40x256.bat和psp_twrk40x
13、256.bat,分別命名為bsp_TestK60N512.bat和psp_TestK60N512.bat。,2024/3/31,13,⑤修改–在bsp_TestK60N512.bat和psp_TestK60N512.bat中把所有的twrk40x256字符串替換為TestK60N512。同時,打開psp_TestK60N512.bat修改“copy /Y ..\..\..\mqx\ source\psp\cortex\MK40X256
14、VMD100.h.”為“copy /Y ..\..\..\mqx\source\psp\ cortex\MK60N512VMD100.h .”。–將新創(chuàng)建的\mqx\source\bsp\TestK60N512\目錄下的twrk40x256.h文件改為TestK60N512.h,打開這個文件,將文件里的所有twrk40x256字符串替換為TestK60N512。–修改\mqx\source\bsp\TestK60N512\iar\
15、目錄下的intflash.icf⑥修改\config\TestK60N512\iar\目錄下的build_libs.eww文件,把字符串“twrk40x256”修改為“TestK60N512”。⑦修改工程設置使用iar打開工程文件build_libs.eww。,2024/3/31,14,打開工程后,做如下修改:修改組名“twrk40x256 BSP Files”為“TestK60N512 BSP Files”,刪除其子文件,添加
16、\mqx\source\bsp\TestK60N512目錄的文件到該組。打開文件“TestK60N512.h”把其內(nèi)容中所有的“twrk40x256”都替換為“TestK60N512”,同時修改相應的參數(shù)。如:寄存器基地址、RAM大小和基地址、ROM大小和基地址、芯片工作頻率、參考時鐘頻率、各個外圍模塊的工作頻率等參數(shù)和與具體板子有關的各種設置。打開文件“bsp.h”修改其內(nèi)容。把“#include ”修改為“#include ”如
17、果需要使用到以太網(wǎng)就需要添加:#include #include ,2024/3/31,15,在“peripheral IO Drivers”組的各子目錄下的“XXX_mk40.*”替換成相應的“XXX_mk60.*” 。這里與K60有關的文件需要自己編寫。最后,編譯bsp和psp。編譯結(jié)束得到的包放在“\lib\TestK60N512.iar\mqx”目錄下。,2024/3/31,16,通過修改user_config.h文件來改
18、變BSP(板級支持包)和PSP(平臺支持包)的設置。開發(fā)者通過在該文件中添加和移除標志(即通過宏定義)來添加或移除組件,為不同的驅(qū)動程序改變設置、添加或移除日志設置。user_config.h文件可以通過以下路徑找到: /config//user_config.h。修改user_config.h后,需要重新編譯庫。使用IAR打開\config\twrk60n512\iar\build_libs.eww工程文件,重新編譯庫
19、文件,生成后的庫文件被保存在文件夾/lib/twrk60n512.iar中。,4.2 MQX裁剪,2024/3/31,17,user_config.h中提供了以下可以使能和禁止的模塊,2024/3/31,18,通過配置user_config.h,可以有效的降低MQX對芯片F(xiàn)lash和RAM的消耗。目的:在MQX中建立兩個任務。任務一、小燈閃爍任務二、串口接收數(shù)據(jù)并把接收到的數(shù)據(jù)返回給PC機。,2024/3/31,19,1. 不裁
20、剪MQX,即包含MQX支持所有的驅(qū)動。,編譯后,代碼占用資源如下:,2024/3/31,20,2. 裁剪MQX,即只包含使用到的模塊驅(qū)動。,編譯后,代碼占用資源如下:,效果很明顯,2024/3/31,21,5.MQX下的工程框架,2024/3/31,22,6.MQX應用實例,1. 程序使用了兩種工作模式。 通過串口輸入(串口5):“*yes#”進入MQX RTOS?!?no#”進入非OS。2. 程序定義了7個任務。 任
21、務1. 主任務,用于創(chuàng)建其余6個任務 任務2. 掛載SD卡、加載分區(qū)管理、加載文件系統(tǒng) 任務3. 調(diào)用shell命令,用于操作SD卡 任務4. 用于調(diào)用小燈閃爍 任務5. 蜂鳴器定時鳴響 任務6. 讀取任務七傳遞的信號,并輸出鍵盤鍵值 任務7. 讀取鍵盤,并通過信號量傳遞給任務六,2024/3/31,23,7.MQX設備驅(qū)動開發(fā),設備驅(qū)動程序從字面上可以理解為一類程序,這類程序的目的一般是驅(qū)動內(nèi)部和外圍的硬件正常
22、工作,因此設備驅(qū)動程序都是針對特定的硬件來編寫的。設備驅(qū)動程序主要完成如下功能:(1)對設備進行初始化和釋放設備;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件,或從硬件中讀取數(shù)據(jù);(3)讀取應用程序傳送給設備文件的數(shù)據(jù)和回送應用程序請求的數(shù)據(jù);(4)檢查處理設備出現(xiàn)的錯誤。,2024/3/31,24,MQX設備驅(qū)動程序是操作系統(tǒng)內(nèi)核和硬件設備之間的接口,它是為特定的硬件而提供給用戶程序的一組標準化接口,它隱藏了設備工作的細節(jié)。,MQX的驅(qū)動程序
23、框架,2024/3/31,25,在MQX中設備驅(qū)動程序的入口地點為FILE_STRUCT結(jié)構體,F(xiàn)ILE_STRUCT結(jié)構體可以看成為函數(shù)指針的集合,在MQX中通過API把設備看成文件,對設備文件的操作也就對應成普通的文件操作。,文件句柄與I/O驅(qū)動程序的關系,2024/3/31,26,MQX抽象了對硬件設備的處理,所有的硬件設備都作為文件。包括打開(open)、關閉(close)、讀(read)、寫(write)和I/O控制(ioct
24、l)這五種操作。,MQX系統(tǒng)API的調(diào)度過程,這是我們提供給MQX調(diào)用的,,,這是MQX提供的調(diào)用接口,2024/3/31,27,1. 在MQX的BSP工程” Peripheral IO Drivers”下添加兩個文件“my_io.h”和“my_io.c”。如:在工程下添加一個串口驅(qū)動。2. 添加頭文件1)在my_io.h文件中包含以下幾個頭文件。#include "mqx.h" /* Structure
25、s and constants used by MQX */#include "fio.h" /* standard formatted I/O library */#include "io.h" /* I/O subsystem interface. */2)在my_io.c文件中添加以下頭文件#include "my_io.h" /*This is the head
26、er for this driver */,2024/3/31,28,3. 在my_io.h中聲明以下函數(shù)_mqx_uint _io_my_install(/* [IN] A string that identifies the device for fopen */char_ptr identifier//添加你定義的參數(shù)); //以下是MQX最基本的IO驅(qū)動函數(shù)聲明//以下函數(shù)的參數(shù)是由操作系統(tǒng)定義的,除了
27、函數(shù)名,其他不能修改_mqx_int _io_my_open(FILE_PTR, char_ptr, char_ptr);_mqx_int _io_my_close(FILE_PTR);_mqx_int _io_my_read(FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_my_write(FILE_PTR, char_ptr, _mqx_int);_mqx_int _io_my_ioc
28、tl(FILE_PTR, _mqx_uint, pointer);,2024/3/31,29,在“my_io.h”中聲明的六個函數(shù)需要在“my_io.c”中一一實現(xiàn)。其中:_io_my_open:打開設備,驅(qū)動程序初始化準備工作 。_io_my_close:關閉設備,用來關閉驅(qū)動程序和釋放所有的資源。_io_my_read:從打開的設備中讀取數(shù)據(jù)。_io_my_write:向打開的設備寫入數(shù)據(jù)。_io_my_ioctl: I/
29、O操作擴展,可根據(jù)設備情況來決定支持何種特殊的操作模式。_io_my_install:安裝設備驅(qū)動程序,該函數(shù)調(diào)用_io_dev_install()向MQX注冊設備,告訴內(nèi)核有一個設備的驅(qū)動程序要安裝到內(nèi)核。,2024/3/31,30,_mqx_uint _io_my_install( char_ptr identifier //添加你定義的參數(shù)){_mqx_uint result; //添加你的代碼resul
30、t = _io_dev_install(identifier,//identifier表示加載的驅(qū)動的標識,如”ttya”標識串口0 _io_my_open, _io_my_close,_io_my_read,_io_my_write,_io_my_ioctl, NULL);return result;},2024/3/31,31,驅(qū)動編寫完成,成功編譯工程后,編寫串口任務驗證驅(qū)動的有效性。裝載驅(qū)動: _io_
31、my_uart_install(“ttyd:”, DataPTR, InitPTR, new_uart3_isr, NULL, UartInit, UartGetC, UartPutC,UartGetStatus);打開設備: fopen(“ttyd:”, BSP_DEFAULT_IO_OPEN_MODE);使能中斷接收: ioctl(isr_ptr->serial_fd, UART_ENABLEINTERRUPT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- engineforjava開發(fā)入門
- bho插件開發(fā)入門
- ios新手開發(fā)快速入門
- 基于MQX的工控平臺設計.pdf
- android app開發(fā)入門教程
- android安卓程序開發(fā)入門
- 《googleandroid開發(fā)入門與實戰(zhàn)》目錄
- arm開發(fā)步步深入之lcd入門
- stm32-開發(fā)入門教程
- android應用開發(fā)經(jīng)典入門教程
- Google Android開發(fā)入門與實戰(zhàn).pdf
- 嵌入實時損傷系統(tǒng)MQX應用框架研究.pdf
- 《c語言開發(fā)入門教程》—習題答案
- flexpaper二次開發(fā)入門教程
- 維控界面開發(fā)快速學習進步基礎入門
- avr開發(fā)前準備—熔絲位(fuse)快速入門
- iphone開發(fā)入門(1)程序員眼中的iphone
- 鉗工入門基礎入門知識
- php5網(wǎng)頁游戲開發(fā)入門教程
- 攝影入門知識學習入門(經(jīng)典學習入門級教學教材)
評論
0/150
提交評論