版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MQX開發(fā)入門,蘇州大學(xué)飛思卡爾嵌入式系統(tǒng)研發(fā)中心2011年8月 V1.0,2024/3/31,1,1.MQX簡介與發(fā)展歷史2.MQX基本結(jié)構(gòu)與源碼目錄3.MQX開發(fā)環(huán)境搭建4.MQX移植與裁剪5.MQX下的工程框架6.MQX應(yīng)用實例7.MQX設(shè)備驅(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系列中使用。主要應(yīng)用方向是:電子系統(tǒng)的智能化,1.1 MQX簡介,3,2024/3/31,MQX是面向應(yīng)用的、專用特制的嵌入式RTOS,具有如下系統(tǒng)特性:(1)可伸縮性、可裁減、多層次的系統(tǒng)體系結(jié)構(gòu)(2)具有優(yōu)化上下文切換和快速中斷響應(yīng),實時性高(3)可配置外形、直接應(yīng)用編程接口(API)和模塊化架構(gòu)(4)面向特定應(yīng)用的簡化型調(diào)用接口,專門支持一類嵌入式應(yīng)用(5)最小內(nèi)核處理集,系統(tǒng)開銷
4、小,運行效率高(6)具有各種即插即用的設(shè)備驅(qū)動接口,如USB主機/設(shè)備堆棧(7)具有網(wǎng)絡(luò)功能,提供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,包括兩個任務(wù)、一個輕量級信號、中斷、隊列和內(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é)構(gòu)與源碼目錄,MQX由核心組件和可選組件構(gòu)成,為了滿足需要,可配置為低至6KB的ROM,包括內(nèi)核,中斷,信號量,隊列和內(nèi)存管理器。MQX的基本結(jié)構(gòu),2.1 MQX基本結(jié)構(gòu),2024/3/31,6,安裝MQX安裝包后,安裝目錄下有如下幾個文件夾。Config:該目錄下包含MQX配置文件Demo:幾個綜合性的示例工程Doc:MQX應(yīng)用文檔,包含用戶
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é)議棧源碼,分為設(shè)備和主機協(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移植與裁剪,為了適應(yīng)不同體系結(jié)構(gòu)的處理器和開發(fā)板,MQX必須把一部分與具體硬件設(shè)備相關(guān)的代碼作為抽象的接口保留出來,硬件驅(qū)動由硬
9、件設(shè)計方具體實現(xiàn),這就是MQX移植。安裝MQX源碼包后,打開MQX工程,包括bsp和psp兩個子工程。PSP(Processor support Package),平臺支持包,與處理器本身相關(guān)的一些東西,就是MQX的kernel在該處理器上的移植。BSP(Board support Package),板級支持包,包括一些跟該板子相關(guān)的設(shè)置。因此如果你的處理器不變,而設(shè)計你自己的板子的話,只需要移植和裁剪BSP,而不需要對PS
10、P做改動。,4.1 MQX移植,2024/3/31,11,因為MQX只提供了對Demo板的支持,用戶需要根據(jù)其設(shè)計的電路板來開發(fā)新的BSP。移植一般是對于BSP來說的,這是由于PSP是對于芯片和內(nèi)核相關(guān)的。假設(shè)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文件。②進入基準目錄,復(fù)制基準目錄中的所有內(nèi)容到新目錄,即復(fù)制twrk40x256文件下的所有內(nèi)容到TestK60N512文件下。,2024/3/31,12,③創(chuàng)建與新BSP相關(guān)的其他的文件和目錄。新的BSP配置目錄,如:config\bsp\TestK60N512;新的構(gòu)件輸出目錄,如
12、lib\TestK60N512,并在lib\TestK60N512下創(chuàng)建子目錄mqx。④復(fù)制選擇的bsp和psp工程文件。–在\mqx\build\iar目錄下,復(fù)制bsp_twrk40x256.ewp和psp_twrk40x256.ewp,分別為bsp_TestK60N512.ewp和psp_TestK60N512.ewp。–在\mqx\build\bat目錄下,復(fù)制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”。⑦修改工程設(shè)置使用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”,同時修改相應(yīng)的參數(shù)。如:寄存器基地址、RAM大小和基地址、ROM大小和基地址、芯片工作頻率、參考時鐘頻率、各個外圍模塊的工作頻率等參數(shù)和與具體板子有關(guān)的各種設(shè)置。打開文件“bsp.h”修改其內(nèi)容。把“#include ”修改為“#include ”如
17、果需要使用到以太網(wǎng)就需要添加:#include #include ,2024/3/31,15,在“peripheral IO Drivers”組的各子目錄下的“XXX_mk40.*”替換成相應(yīng)的“XXX_mk60.*” 。這里與K60有關(guān)的文件需要自己編寫。最后,編譯bsp和psp。編譯結(jié)束得到的包放在“\lib\TestK60N512.iar\mqx”目錄下。,2024/3/31,16,通過修改user_config.h文件來改
18、變BSP(板級支持包)和PSP(平臺支持包)的設(shè)置。開發(fā)者通過在該文件中添加和移除標志(即通過宏定義)來添加或移除組件,為不同的驅(qū)動程序改變設(shè)置、添加或移除日志設(shè)置。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中建立兩個任務(wù)。任務(wù)一、小燈閃爍任務(wù)二、串口接收數(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應(yīng)用實例,1. 程序使用了兩種工作模式。 通過串口輸入(串口5):“*yes#”進入MQX RTOS。“*no#”進入非OS。2. 程序定義了7個任務(wù)。 任
21、務(wù)1. 主任務(wù),用于創(chuàng)建其余6個任務(wù) 任務(wù)2. 掛載SD卡、加載分區(qū)管理、加載文件系統(tǒng) 任務(wù)3. 調(diào)用shell命令,用于操作SD卡 任務(wù)4. 用于調(diào)用小燈閃爍 任務(wù)5. 蜂鳴器定時鳴響 任務(wù)6. 讀取任務(wù)七傳遞的信號,并輸出鍵盤鍵值 任務(wù)7. 讀取鍵盤,并通過信號量傳遞給任務(wù)六,2024/3/31,23,7.MQX設(shè)備驅(qū)動開發(fā),設(shè)備驅(qū)動程序從字面上可以理解為一類程序,這類程序的目的一般是驅(qū)動內(nèi)部和外圍的硬件正常
22、工作,因此設(shè)備驅(qū)動程序都是針對特定的硬件來編寫的。設(shè)備驅(qū)動程序主要完成如下功能:(1)對設(shè)備進行初始化和釋放設(shè)備;(2)把數(shù)據(jù)從內(nèi)核傳送到硬件,或從硬件中讀取數(shù)據(jù);(3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù);(4)檢查處理設(shè)備出現(xiàn)的錯誤。,2024/3/31,24,MQX設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和硬件設(shè)備之間的接口,它是為特定的硬件而提供給用戶程序的一組標準化接口,它隱藏了設(shè)備工作的細節(jié)。,MQX的驅(qū)動程序
23、框架,2024/3/31,25,在MQX中設(shè)備驅(qū)動程序的入口地點為FILE_STRUCT結(jié)構(gòu)體,F(xiàn)ILE_STRUCT結(jié)構(gòu)體可以看成為函數(shù)指針的集合,在MQX中通過API把設(shè)備看成文件,對設(shè)備文件的操作也就對應(yīng)成普通的文件操作。,文件句柄與I/O驅(qū)動程序的關(guān)系,2024/3/31,26,MQX抽象了對硬件設(shè)備的處理,所有的硬件設(shè)備都作為文件。包括打開(open)、關(guān)閉(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:打開設(shè)備,驅(qū)動程序初始化準備工作 。_io_my_close:關(guān)閉設(shè)備,用來關(guān)閉驅(qū)動程序和釋放所有的資源。_io_my_read:從打開的設(shè)備中讀取數(shù)據(jù)。_io_my_write:向打開的設(shè)備寫入數(shù)據(jù)。_io_my_ioctl: I/
29、O操作擴展,可根據(jù)設(shè)備情況來決定支持何種特殊的操作模式。_io_my_install:安裝設(shè)備驅(qū)動程序,該函數(shù)調(diào)用_io_dev_install()向MQX注冊設(shè)備,告訴內(nèi)核有一個設(shè)備的驅(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ū)動編寫完成,成功編譯工程后,編寫串口任務(wù)驗證驅(qū)動的有效性。裝載驅(qū)動: _io_
31、my_uart_install(“ttyd:”, DataPTR, InitPTR, new_uart3_isr, NULL, UartInit, UartGetC, UartPutC,UartGetStatus);打開設(shè)備: 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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- engineforjava開發(fā)入門
- bho插件開發(fā)入門
- ios新手開發(fā)快速入門
- 基于MQX的工控平臺設(shè)計.pdf
- android app開發(fā)入門教程
- android安卓程序開發(fā)入門
- 《googleandroid開發(fā)入門與實戰(zhàn)》目錄
- arm開發(fā)步步深入之lcd入門
- stm32-開發(fā)入門教程
- android應(yīng)用開發(fā)經(jīng)典入門教程
- Google Android開發(fā)入門與實戰(zhàn).pdf
- 嵌入實時損傷系統(tǒng)MQX應(yīng)用框架研究.pdf
- 《c語言開發(fā)入門教程》—習(xí)題答案
- flexpaper二次開發(fā)入門教程
- 維控界面開發(fā)快速學(xué)習(xí)進步基礎(chǔ)入門
- avr開發(fā)前準備—熔絲位(fuse)快速入門
- iphone開發(fā)入門(1)程序員眼中的iphone
- 鉗工入門基礎(chǔ)入門知識
- php5網(wǎng)頁游戲開發(fā)入門教程
- 攝影入門知識學(xué)習(xí)入門(經(jīng)典學(xué)習(xí)入門級教學(xué)教材)
評論
0/150
提交評論