程玉娟-嵌入式实时操作系统mqx的内核分析及应用研究
DESCRIPTION
embedded system operating system MQX coreTRANSCRIPT
-
MQX
I
MQX
2009
MQXMQX Precise Software Technologies
1989 2009 MQX
APITCP/IP USB
MQX
MQX
1 MQX MQX
MQX
MQX
2 MQX FIFO RR
FIFO RRMQX
3 MQX MCF52223
LCD MQX
MQX
MQX
MQX
-
Abstract Kernel Analysis and Application Research of Embedded Real-time Operating System MQX
II
Kernel Analysis and Application Research of Embedded Real-time Operating System MQX
Abstract
Embedded real-time operating system MQX that applies industrial control, automotive electronics and consumer electronics is launched by Freescale semiconductor in the chinese market in 2009. MQX was first developed by Precise Software Technologies Corporation in 1989. MQX opens source after Freescale's acquisition in 2009. MQX adopts micro-kernel structure, with standard API interface, module architecture, TCP/IP protocol stack, USB protocol stack and so on. So it has excellent performance in terms of real-time, transplant and reduction. In view of the domestic research and application of MQX not yet begin, commissioned by Freescale semiconductor, the paper analyzes and researches MQX mainly from the following aspects:
(1) Researches MQX micro-kernel structure and kernel management function, and deeply analyzes MQX running implementation mechanism from MQXs startup, task scheduling, device driver and so on. Puts forward MQX engineering framework structure by the idea of underlying software component, and rewrites device driver.
(2) Analyzes and researches FIFO scheduling policy and RR scheduling policy of MQX, combines FIFO scheduling policy with RR scheduling policy, designs and implements multi-level feedback queue scheduling algorithm in the MQX, which not only responds the task with high priority but also makes the short task done quickly.
(3) Transplants MQX to the automatic bending system microcontroller MCF52223, elaborates transplant procedure, files to modify and configure in the transplant process, designs LCD touch screen interface and completes the software platform design of automatic bending system on the MQX.
Automatic bending equipment based on MQX runs well, effectively controls angle and accuracy of bending, and possesses high real-time response capability. The paper completes analysis and research of MQX, which has heuristic instructional function for its study and application in the field of embedded control.
Key words: MQX, Kernel, Task Scheduling, Device Driver, Transplant Written by ChengYujuan
Supervised by WangYihuai
-
......................................................................................................................1
1.1 .............................................................................................1 1.1.1 RTOS...........................................................................................1 1.1.2 RTOS...................................................................................................2 1.1.3 RTOS...................................................................................2 1.1.4 RTOS..................................................................................4
1.2 MQX ................................................................................................................5 1.2.1 MQX ...........................................................................................5 1.2.2 MQX ...................................................................................................6
1.3 .............................................................................................7 1.3.1 ........................................................................................................7 1.3.2 ........................................................................................................7
1.4 .............................................................................................7 1.4.1 ........................................................................................................8 1.4.2 ........................................................................................................8
1.5 .........................................................................................................9
MQX ......................................................................................................10
2.1 MQX ......................................................................................................10 2.1.1 ..........................................................................................10 2.1.2 MQX .................................................................................................11
2.2 ...............................................................................................................12 2.2.1 ..............................................................................................13 2.2.2 MQX .........................................................................................13 2.2.3 MQX .............................................................................................14 2.2.4 MQX .....................................................................................15
2.3 ...............................................................................................................16 2.3.1 MQX .....................................................................................16 2.3.2 MQX .....................................................................................16 2.3.3 MQX .........................................................................................17
2.4 ...............................................................................................................17 2.4.1 ..........................................................................................17 2.4.2 MQX .........................................................................................18
-
2.4.3 MQX .............................................................................................18 2.5 ...............................................................................................................19 2.6 ...................................................................................................20
2.6.1 ..............................................................................................................21 2.6.2 ..........................................................................................................21 2.6.3 ..............................................................................................................22 2.6.4 ..............................................................................................................22
2.7 ...............................................................................................................23
MQX ..............................................................................................24
3.1 MQX ..........................................................................................24 3.1.1 Bootloader.........................................................................................25 3.1.2 Bootloader.....................................................................................25 3.1.3 MQX .............................................................................................26
3.2 MQX ..................................................................................................27 3.2.1 ..............................................................................................27 3.2.2 ..............................................................................................29
3.3 ...........................................................................................30 3.3.1 ......................................................................................30 3.3.2 ......................................................................................31 3.3.3 ......................................................................................32 3.3.4 ..................................................................................................34
3.4 MQX ..................................................................................34 3.4.1 MQX .............................................................................35 3.4.2 MQX ............................................................................36 3.4.3 ......................................................................................37
3.5 ...............................................................................................................39
MQX ..................................................................................................40
4.1 MQX ..................................................................................................40 4.1.1 CodeWarrior..................................................................................40 4.1.2 CW ................................................................................................41
4.2 MQX ..................................................................................................41 4.3 MQX ..............................................................................................42
4.3.1 ..........................................................................42 4.3.2 ..........................................................................43
4.4 MQX .....................................................................................................44 4.4.1 ..............................................................44
-
4.4.2 CWMQX..............................................................45 4.4.3 ..................................................................46
4.5 ...............................................................................................................51
MQX ..........................................................................52
5.1 ...............................................................52 5.1.1 ......................................................................................................52 5.1.2 ......................................................................................................53
5.2 MQX ..................................................................................................53 5.3 LCD............................................................................................55
5.3.1 LCD...........................................................................................55 5.3.2 ..........................................................................................56
5.4 .......................................................................................58 5.4.1 ......................................................................................................58 5.4.2 ..............................................................................................61
5.5 ...............................................................................................................62
............................................................................................................63
6.1 .......................................................................................................................63 6.2 .......................................................................................................................64
..............................................................................................................................65
..................................................................70
A MQX.....................................................................................................71
B .............................................................................................72
..................................................................................................................................73
-
MQX
1
MQX 2009 RTOS
ROM
MQX
RTOS
RTOSMQX
1.1
[1]
Embedded Real-Time Operating SystemERTOSRTOS
1.1.1 RTOS
20 70 40
40RTOSRTOS
200RTOS[2]RTOS
120 70
RTOS
RTOSCRTOS
[2]
21981Ready System
VRTX32[3]20 80RTOS
-
MQX
2
RTOSVRTXIPIMTOS 80 ISIPSOS
16 68k8086[4]
320 90
RTOS
[4]
420 90 RTOS
RTOS
APIApplication Programming InterfaceAPI
POSIXPortable Operating System Interface of UnixPOSIXWin32
RTOS UNIXWindows
1.1.2 RTOS
RTOS
[5]RTOS
[6]
RTOS
Interrupt Service RoutineISR
I/ORTOS
1
2
3
4
5
1.1.3 RTOS
1.
RTOS
-
MQX
3
2.
3.
4.
[9]
5.
12
6.
CPUCPU
ISR
7.
CPU
8.
CPU CPU
CPU
9.
-
MQX
4
10.
1.1.4 RTOS
MP4[7]RTOS
RTOS
VxWorksC/OS-IIClinuxmicro-control LinuxQNXeCosEmbedded
Configurable Operating System[8]-[13]RTOS
Windows CEAndroidSymbian[14]-[16] 1-1RTOS 1-1 RTOS
VxWorks
WindRiver
400
C/OS-II
Jean Labrosse 1992
64
RAM ROM
Clinux
Linux
API TCP/IP
MMU
QNX
QNX
eCos GNU
WinCE
OS
Visual Studio PDA
Android Google Linux
Linux
Symbian
-
MQX
5
1.2 MQX
Message Queue eXecutiveMQXPrecise Software Technologies
19892000 3MQXARC
[17]FreescaleColdFireIBM/Freescale
PowerPCARMARCi.MX[18]2009
ColdFire MCUMQXRTOS
MQX
1.2.1 MQX
2009MQXRTOS 3.0.1
3.6.2
[19]-[21] 1-2 1-2 MQX RTOS
3.0.1 2009,1
1CodeWarrior Task-Aware DebuggingTAD2Board Support PackageBSPTrivial File SystemTFSI2CInter Integrated CircuitFlexCANReal-Time ClockRTC I/OGeneral Purpose I/OGPIOPCPC 3 TCP/IPReal-Time TCP/IP Communication SuiteRTCSMQXMQX File SystemMFSUniversal Serial BUSUSB RAM 4RTCS HTTP 5 USB HUBHUB 6 USB USBHost Development KitHDK
3.1.0 2009,4
1 2 SNMPv2Simple Network Management ProtocolSNMP ROMManagement Information BaseMIB 3Analog-to-Digital ConverterADCSerial Peripheral InterfaceSPI
3.2.1 2009,6 1 ColdFire V1 V2 2MQX Flash FlashX Flash
3.3.0 2009,8
1 ColdFire V1-V4Fast Ethernet ControllerFECMedium Access ControlMAC 2ShellMFSFile Transfer ProtocolFTP 3USBMASS Storage DeviceMSDCommunication Device ClassCDC
-
MQX
6
3.4.0 2009,10
1 USBEnhanced Host Controller InterfaceEHCI 2Personal Hospital Device ClassPHDCInter-processor communicationIPC 3 SPI SPIQSPI DSPI SPI SD
3.5.0 2010,2
1MQX 2SPI EEPROM SPIEEPROMMRAM 3ENET MAC
3.5.1 2010,4 1 ColdFire V1-V4 2 SDEmbeded Secure Digital High CapacityESDHCDigital-Analog ConverterDACNAND Flash
3.6.0 2010,6 1 CodeWarrior 10 2 eGUIembedded Graphical user interfaceeGUI 3 UDP IPC
3.6.2 2010,11
1Freescale Kinetis ARM Cortex M4 PSP 2 ARM IARMQX Kinetis 3 RTC API I/O MAC-NET Kinetis
1.2.2 MQX
MQX
MQX
[22]
1
MQX Freescale
MQX
2[23]
MQX
3
MQX
4 APIMS-DOSMS-DOS
File SystemMFS
5[24]
RTCSMAC TCP/IPFTPTelnet
DHCPSNMPDNSHTTP
-
MQX
7
6USB[25]
USB USB USB PHDC
HIDMSD CDCHUB
1.3
1.3.1
RTOS 40 RTOS
VxWorksC/OS-IIClinuxWindows CEAndroid 1-1
1.3.2
RTOS
MCU&DSP
RTOS
RTOS MQXMQX
1.4
MQX
MQX
-
MQX
8
APITCP/IP[22]
MQX
1.4.1
MQX
1 MQX MQX RTOS
MQX
2 MQX MQX
MQX MQX
MQX FIFO
RRMQX
MQX
3 MQX
MQX
4 MQX
LCD
1.4.2
RTOS
RTOS
MQXMQX
MQX
MQXMQXMQX
MQX
RTOSMQX
-
MQX
9
1.5
RTOS RTOS
RTOSMQX
RTOS
MQXMQX
MQXMQX
MQX
MQX
MQX
MQXMQX
Bootloader
MQX
MQXMQX
MQX
MQX MQX CodeWarrior
CW
MQX
MQX
MQX
MQX
MQXMCF52223
LCD
-
MQX MQX
MQX
MQX RTOS
RTOS
CPU
MQX
MQX
2.1 MQX
MQX
2.1.1
[26]
[27] 2-1
2-1
10
-
MQX MQX
2.1.2 MQX
MQX
MQX
2-2 MQX[22]
MQX
A
2-2 MQX
2-2 MQX
MQX 2-1
11
-
MQX MQX
12
2-1
RRFIFO
MQX
MQXMQX
Memory Management UnitMMU
ID
EDS EDSMQX
BSP
BSP I/O
I/O I/O I/O I/O API
2.2
TaskRTOS
CPU
ID
TCB[28]
RTOSC
[29]
-
MQX MQX
13
2.2.1
MQXTASK_TEMPLATE_STRUCT
MQX_AUTO_START_TASK
MQX
typedef struct task_template_struct {
_mqx_uint TASK_TEMPLATE_INDEX; // void (_CODE_PTR_ TASK_ADDRESS)(uint_32); // _mem_size TASK_STACKSIZE; // _mqx_uint TASK_PRIORITY; // char _PTR_ TASK_NAME; // _mqx_uint TASK_ATTRIBUTES; // uint_32 CREATION_PARAMETER; // _mqx_uint DEFAULT_TIME_SLICE; //
};
MQX
32 IDMQX
MQX 0
6
7
1MQX
2Digital Signal ProcessingDSPMQX DSP
3MQX
4MQX FIFO
2.2.2 MQX
OS[30]MQX
-
MQX MQX
2-3[31]
2-3
MQX
1Terminated CPU
2Blocked
[30]
3Ready
4Active CPU
2.2.3 MQX
OSCPU
CPUMQX
MQX
1
2
3
4
14
-
MQX MQX
15
2.2.4 MQX
RTOSMQX
[22][32]
1
[33]
MQX_task_create()_task_create_blocked()
_task_create()
_task_create_blocked()
_task_ready()
2 IDs
_task_get_id() ID
_task_get_creator() ID
ID
_task_get_id_from_name()
ID
3
_task_get_priority()_task_set_priority()
4
_sched_get_policy()_sched_set_policy()
5
_task_stop_preemption()
-
MQX MQX
16
_task_start_preemption()
6
MQX
_task_get_error()
_task_set_error()
MQX_OKMQX_OKMQX
7
_task_restart()
ID
8
ID
MQX MQX
_task_destroy()_task_abort()
2.3
2.3.1 MQX
MQXtick
MQX
200 5MQX ISR
MQX MQX
2.3.2 MQX
_time_get_resolution()
-
MQX MQX
17
_time_set()
_time_get()
_time_delay()
2.3.3 MQX
MQX
1 MQX
2
MQX
MQX
2.4
[34]
ISRRTOS
CPU
RTOS[35]
RTOSCPU
ISRISR
[36]
2.4.1
ISR
-
MQX MQX
18
1
ISRISR
ISR
2
3
4 ISR API ISR
API ISR
5
2.4.2 MQX
MQXISRMQXISR[37]
1
2
3
4
2.4.3 MQX
MQX ISR ISR
ISR MQX
ISR ISR
MQX ISR
ISR
1
2
3 ISR
4 ISR
MQX ISR ISR
-
MQX MQX
ISR ISR ISR
2-4MQX
2-4 MQX
MQX
1MQX ISR
ISR ISR_int_default_isr() ISR
2 ISRMQX_int_install_isr()
ISR ISR_int_install_isr()
123
ISR
3 ISR_int_install_kernel_isr() ISR ISR
ISR1
2MQX3
2.5
RTOS malloc() free()
RTOS
MQX
MQX MQX
19
-
MQX MQX
MQX
MQX MMU
MMUMMUMMU
2-5MMU
2-5 MQX
2.6
[30]
RTOS
MQX
MQX MQX
20
-
MQX MQX
21
2.6.1
ISR
ISR
1
234
5
MQX
ISRMQX
MQX
MQX
2.6.2
ISR
12
3[38]
[39]
3
[9]
MQX MQX
MQX 0 MQX
MQX
-
MQX MQX
22
MQX
MQX
[40]
[41]
MQX
2.6.3
MQX
2.6.4
ISR
12
[42]
MQX
MQX MQX
ID
MQX
MQX ID
-
MQX MQX
23
ISR
MQX
2.7
MQXMQX
1
MQX
2 MQX
MQX
3MQX
4 MQX
MQX
MQXMQX
MQX
-
MQX MQX
MQX
RTOS
RTOSMQX
BootloaderMQX
MQX
MQXMQX
3.1 MQX
MQX Bootloader
main()_mqx()
MQX 3-1 MQX
CodeWarrior BSPMQX
3-1 MQX
1ColdWarrior
CF_startup.cColdWarrior _start()
_SP_INIT.bss/.sbss C
24
-
MQX MQX
25
initialize_hardware() initialize_OS() main()
2BSP[37]
vectors.c_boot()
init_hw.c/bsp_init.c Flash
SDRAM PLLFlex
cw.cMetrowerksCodeWarrior
CW
cw2.cMQX Cmain()
init_bsp.cBSP I/O
3MQX
mqx.cMQX_mqx()
dispatch.cw
3.1.1 Bootloader
Bootloader
BootloaderMQX
Bootloader
CPU
Bootloader[43]
3.1.2 Bootloader
vectors.c
(vector_entry)__BOOT_STACK_ADDRESS, // __boot, //(0x004) PC
__BOOT_STACK_ADDRESS intflash.lcf
-
MQX MQX
26
__boot__boot
Program CounterPC__boot
_boot() start()_boot()
SRAMFlash IPSBAR 4G
IPSBAR
FLASHBAR Flash RAMBAR1 SRAM
start()
jsr mcf5222_init // jmp _start //
jsr mcf5222_init
PC jmp _start
CF_startup.c start()
CPU ColdFire
initialize_hardware() initialize_OS() main()
3.1.3 MQX
Bootloader main()_mqx()
MQXMQX
main() cw2.cMQXMQX
TASK_TEMPLATE_STRUCT
MQX_AUTO_START_TASK
MQX
main()
int main(void) {
extern MQX_INITIALIZATION_STRUCT MQX_init_struct; _mqx(&MQX_init_struct ); //MQX return 0;
}
mqx()
TD
-
MQX MQX
27
BSP
mqx()
_mqx()MQX[22]
typedef struct mqx_initialization_struct {
_mqx_uint PROCESSOR_NUMBER; // pointer START_OF_KERNEL_MEMORY; // RAM pointer END_OF_KERNEL_MEMORY; // RAM _mqx_uint INTERRUPT_STACK_SIZE; // TASK_TEMPLATE_STRUCT_PTR TASK_TEMPLATE_LIST; // _mqx_uint MQX_HARDWARE_INTERRUPT_LEVEL_MAX; // _mqx_uint MAX_MSGPOOLS; // _mqx_uint MAX_MSGQS; // char _PTR_ IO_CHANNEL; // I/O char _PTR_ IO_OPEN_MODE; // I/O _mqx_uint RESERVED[2]; //
}MQX_INITIALIZATION_STRUCT, _PTR_ MQX_INITIALIZATION_STRUCT_PTR;
3.2 MQX
MQX
First In First Out
FIFORound RobinRR
FIFO RR
MQX
3.2.1
MQX POSIX.4
1. FIFO
MQX FIFOFIFO
\mqx\source\kernel\mqxiinit.h
#if MQX_HAS_TIME_SLICE kernel_data->SCHED_POLICY = MQX_SCHED_FIFO;// #endif
-
MQX MQX
FIFO
3-2
1MQX
2
3
3-2 FIFO
2. RR
RR
RR
MQX_TIME_SLICE_TASK RR
\lib\.cw\mqx\mqx_cnfg.h
#define MQX_HAS_TIME_SLICE 1
MQX_TIME_SLICE_TASK
DEFAULT_TIME_SLICE
0
BSP 5ms
50ms _sched_get_rr_interval()
_sched_get_rr_interval_ticks()_sched_set_rr_interval()
_sched_set_rr_interval_ticks()
MQX
MQX
28
-
MQX MQX
RR
FIFO 3-3
3-3
3.
#define MQX_TASK_QUEUE_FIFO (0x00) #define MQX_TASK_QUEUE_BY_PRIORITY (0x08)
1_taskq_create()
2_taskq_suspend()
3_taskq_resume()
3.2.2
MQX
\lib\.cw\mqx\mqx.h
1 MQX_AUTO_START_TASK
#define MQX_AUTO_START_TASK (0x01)
2 MQX_FLOATING_POINT_TASK 29
-
MQX MQX
30
#define MQX_FLOATING_POINT_TASK (0x02)
3MQX_TIME_SLICE_TASK
RR
#define MQX_TIME_SLICE_TASK (0x04)
4MQX_DSP_TASK DSP
DSP DSP
DSP
#define MQX_DSP_TASK (0x08)
3.3
[44]
[45]
3.3.1
MQXFIFORR
MQX FIFO
1
21
2 CPU I/O
-
MQX MQX
31
MQX RR
CPU
CPU
FIFO
CPU
RR
1T=N*q
2
3
MQX FIFO RR
FIFO RR
3.3.2
MQX[30][46]
1NQ1,Q2....QN
Priority(Q1)>Priority(Q2)>...>Priority(QN)
2
Q1FIFO
Q2FIFO
Q2Q3
-
MQX MQX
Q1QnQn
3Q1Q2Q1~Qi-1
QiQi
Q1~Qi-1
Qi
3-4
3-4
3Q1Q2Q3 248Priority(Q1)>
Priority(Q2) > Priority(Q3) 3J1J2J3 013
CPU 321
3-5
3-5
3.3.3
MQXTask DescriptorTD
_task_set_priority()_sched_internal()
_sched_setscheduler()_sched_set_policy()MQX
kernel _sched_internal()
32
-
MQX MQX
33
_sched_setscheduler()_task_set_priority()
\mqx\source\psp\coldfire\
dispatch.cw
sc_irdyq.c
\mqx\source\kernel
sc_ipq.c
sc_obsel.csc_spol.c
sc_srr.c
MQX
1 kernel
60~5 5 FIFO
MQX 5ms
5ms 5*2nn0n5
2 TD_STRUCT
QnumberWaitTime
3_sched_internal()
1 6 WaitTime
maxWaitTime 1
2 1 FIFO
_task_set_priority()
2 5
6 6
1
3 I/O
4
-
MQX MQX
3.3.4
ColdWarrior 7.2
3.6.2 MQX MCF52223
80 RR
3-6 3-7
3-6
3-7
MQX
MQX
3.4 MQX
1
2
3
4
34
-
MQX MQX
3.4.1 MQX
MQX
1 I/O
2 buffercache
3
MQX
[47]
MQX
MQX
3-8 I/O I/O
3-8 MQX
MQX
FILE_STRUCTFILE_STRUCTMQX
API
FILE_STRUCT
[48] 3-9
3-9 I/O
MQX
(open)(close)(read)(write)
I/O(ioctl)MQX
I/OAPI35
-
MQX MQX
POSIXI/O[37][49]MQXAPI 3-10
3-10 MQXAPI
MQX
1
2
3.4.2 MQX
MQX BSP
RAM\config\\user_config.h
#define BSPCFG_ENABLE_TTYB 0
1 BSP
fopen
MQX 3-1
3-1 MQX
I/O (user_config.h) ttya: UART0 BSPCFG_ENABLE_TTYA ttyb: UART1 BSPCFG_ENABLE_TTYB ttyc: UART2 BSPCFG_ENABLE_TTYC ittya: UART0 BSPCFG_ENABLE_ITTYA ittyb: UART1 BSPCFG_ENABLE_ITTYB ittyc: UART2 BSPCFG_ENABLE_ITTYC i2c0: I2C0 BSPCFG_ENABLE_I2C0 i2c1: I2C1 BSPCFG_ENABLE_I2C1 spi0: SPI0 BSPCFG_ENABLE_SPI0 spi1: SPI1 BSPCFG_ENABLE_SPI1 gpio: GPIO BSPCFG_ENABLE_GPIODEV adc: ADC BSPCFG_ENABLE_ADC
adcn: ADC BSPCFG_ENABLE_ADCn flashx: CFM BSPCFG_ENABLE_FLASHX
36
-
MQX MQX
37
3.4.3
I/OMQX
1
2BSPBSP[50]
1.
MQX device.h device.c
1
device.h extern "C" {
extern _mqx_uint _io_device_install(char_ptr); }
2
device.c MQX
1_io_device_install(char_ptr)_io_dev_install()
MQX
fopen
_mqx_uint _io_device_install(char_ptr identifier) {
_mqx_uint result; result = _int_io_dev_install (
identifier, _io_device_open, _io_device_close, _io_device_read, _io_device_write, _io_device_ioctl, NULL
); return result;
}
2_io_device_open(FILE_PTR, char_ptr, char_ptr)
-
MQX MQX
38
fopen I/O
_io_device_open 3-10
_io_device_open
3_io_device_close(FILE_PTR)
fclose I/O_io_device_close 3-10
_io_device_close xxx_open
4_io_device_read(FILE_PTR, char_ptr, _mqx_int)
read I/O_io_device_read 3-10
_io_device_read
5_io_device_write(FILE_PTR, char_ptr, _mqx_int)
write I/O_io_device_write 3-10
_io_device_write
6_io_device_ioctl(FILE_PTR, _mqx_uint, pointer)I/O
_io_device_ioctl
ioctl
I/O_io_device_ioctl 3-10
3
device.h device.c\mqx\source\io\
device device.h device.c
2. BSP
MQXPlatform Support PackagePSP
Board Support PackageBSPPSP
BSP
MQX BSP
Codewarrior BSP \mqx\build\codewarrior\
bsp_.mcp
1 device Codewarrior IO Drivers
-
MQX MQX
39
2OK
3 device.h \lib\
.cw\mqx
4
#include_io_device_install fopenfclosewriteread
ioctl
3.5
MQX
1MQXMQX
BootloaderBootloaderMQX
main() main() mqx()
2MQXMQX
MQX FIFO
RRMQX
MQX
MQX
3MQXMQX
MQX
RTOSMQX
-
MQX MQX
40
MQX
MQXMQX
1MQX
2 MQX 3 MQX
MQX4
MQX
4.1 MQX
PC
MQX CodeWarrior
4.1.1 CodeWarrior
CodeWarriorCWFreescale MCU
DSP
[51]CodeWarriorGUIIntegrated
Development EnvironmentIDEMCUC
C++
CodeWarrior 3Special Edition
C
12KB 30
3 license
CodeWarrior
CodeWarrior for S08 V6.2CodeWarrior for HC12 V4.6CodeWarrior for
ColdFire V6.3CodeWarrior for ColdFire 7.1CodeWarrior for Microprocessor 9.2
CodeWarrior for MCU V10
CW
-
MQX MQX
[7]CW
MQX IARCodeWarrior for ColdFire V6.3
4.1.2 CW
CW Windows
license key
E-MAIL License.dat
License.dat License.dat
MQX
MQX
4.2 MQX
MQX
4-1
1config
Common BSP
BSP
2demo demo
3docMQXMQX
MFSRTCSUSB 4-1 MQX
4lib BSP
5mfsMFSBuildExamples
Source
6mqx MQX BSP 41
-
MQX MQX
42
BuildExamples Source
Build CodeWarriorIAR
BSP PSP bat
BSPPSP
ExamplesMQX
MQX BSP
Source MQX BSP PSP
7rtcsTCP/IP
8shellshell
9tools
10usbUSB
4.3 MQX
MQX
MQX
4.3.1
Embedded Software ComponentESC
[52]MCF52223
CW 7.2MQX 4-2
-
MQX MQX
4-2 MQX
4-2:
1 inflash.lcf
MQX
2BSPMQX
MQXApplication Binary InterfaceABI
MQXBSPABIBSP
[21]
3main
ID
4.3.2
MQX
43
-
MQX MQX
4-3 MQX
4-3MQX
mcp
.S19MCU
MQX
.S19
bin map
MCU map
MCU
.c
.o
.S19
CodeWarrior
4.4 MQX
4.4.1
#include
44
-
MQX MQX
45
[53]
1
2
3 MCU
MCU
4
5
4.4.2 CWMQX
File->New ProjectMCU
CRelocatable assembly
Project name Location
Light LCD
1 LCD
2 Light.mcp LCD.mcp
3 Light_Data
-
MQX MQX
46
4 bin
4.4.3
MCF52223
MQX
MCF52223 I/O I/O
MCF52223 0 MCF52223
PC
main_taskled_taskuart0_task
1. GPIO
GPIO
1 0 1 0MCU GPIO
Port GPIO
GPIO IO_Driver.hIO_Driver.c GPIO
GPIO
Light_Run0 MCU GPIO_PORT_TC 0
MCU IO_Driver.h
1GPIOIO_Driver.h
//-------------------------------------------------------------------------------------------* //:IO_Driver.h(GPIO) * //-------------------------------------------------------------------------------------------* #include // #include // static FILE_PTR output_port=NULL; // #define Light_PORT GPIO_PORT_TC // GPIO TC #define Light_Run0 0 //Run0 0// boolean IO_Init(uint_32 port,uint_32 name,uint_32 state); //IO_Init() void IO_Control(uint_32 port,uint_32 name,uint_32 state); //IO_Control()
2GPIOIO_Driver.c
IO_Driver.c
-
MQX MQX
47
//----------------------------------------------------------------------------------------------* //:IO_Driver.c(GPIO) * //----------------------------------------------------------------------------------------------* #include //----------------------------------------------------------------------------------------------* //:IO_Init * // : * // :port: * // name: * // state:,1=(),0=() * // : IO * //----------------------------------------------------------------------------------------------* boolean IO_Init(uint_32 port,uint_32 name,uint_32 state) { uint_32 output_set[] = // { GPIO_PIN_STATUS_0, GPIO_LIST_END }; output_set[0]=port|name|output_set[0]; output_port=fopen("gpio:write",(char_ptr)&output_set); // GPIO if(output_port) // GPIO { ioctl(output_port,(state)? GPIO_IOCTL_WRITE_LOG1:GPIO_IOCTL_WRITE_LOG0,(pointer)&output_set); } return(output_port!=NULL); } //-----------------------------------------------------------------------------------------------* //:IO_Control * // : * // :port: * // name: * // state:,1=(),0=() * // : * //------------------------------------------------------------------------------------------------* void IO_Control(uint_32 port,uint_32 name,uint_32 state) { uint_32 light[]= { GPIO_PIN_STATUS_0, GPIO_LIST_END }; light[0]=port|name|light[0]; if(output_port) // GPIO { ioctl(output_port,(state)?GPIO_IOCTL_WRITE_LOG1:GPIO_IOCTL_WRITE_LOG0,(pointer)&light); } }
2. Light
Light_task.hLight_task.cLight_task.h
-
MQX MQX
48
UART_SEMLIGHT_SEM
Light_task.c
1LightLight_task.h
//------------------------------------------------------------------------------------------------* //:Light_task.h () * //------------------------------------------------------------------------------------------------* #include #include #include #include extern uint_8 times; // extern LWSEM_STRUCT UART_SEM; extern LWSEM_STRUCT LIGHT_SEM; extern boolean IO_Init(uint_32 port,uint_32 name,uint_32 state); // extern void IO_Control(uint_32 port,uint_32 name,uint_32 state); void led_task(uint_32); //
2LightLight_task.c
//---------------------------------------------------------------------------------------------------* //:Light_task.c() * //---------------------------------------------------------------------------------------------------* #include //---------------------------------------------------------------------------------------------------* //:led_task * // : * // :initial_data * // : * //----------------------------------------------------------------------------------------------------* void led_task(uint_32 initial_data) { uint_8 i; _lwsem_wait(&LIGHT_SEM); // for(i=0;i
-
MQX MQX
49
1UARTUart_task.h
#include #include #include // #define LED_TASK 6 // extern uint_8 times; // extern LWSEM_STRUCT UART_SEM; extern LWSEM_STRUCT LIGHT_SEM; void uart0_task(uint_32 initial_data); //
2UARTUart_task.c
#include //-------------------------------------------------------------------------------------------------------------* //:uart0_task * // :,,, * // :initial_data * // : * //--------------------------------------------------------------------------------------------------------------* void uart0_task(uint_32 initial_data) { uint_32 c; uint_32 flags=0; _task_id task_id; uint_32 result; FILE_PTR serial_fd = fopen("ttya:",0); // 0 IO_Init (GPIO_PORT_TC,Light_Run0,0); // ioctl(serial_fd, IO_IOCTL_SERIAL_SET_FLAGS, &flags); // result = _lwsem_create(&UART_SEM, 1); // result = _lwsem_create(&LIGHT_SEM, 1); if (result!=MQX_OK) { printf("\nCreating sem failed: 0x%X",result); _mqx_exit(0); } while(TRUE) { if(fstatus(serial_fd)) // { _lwsem_wait(&UART_SEM); // c=fgetc(serial_fd); // times=c; if(c==IO_ERROR)break; putchar((char)c); // _lwsem_post(&LIGHT_SEM); // task_id=_task_create(0,LED1_TASK,0); // if(task_id==MQX_NULL_TASK_ID) { printf("\nCould not create LED_TASK\n"); } else
-
MQX MQX
50
{ printf("\nLED_TASK created\n"); } } } fclose(serial_fd); }
4.
main_taskled_task
uart0_taskmain_task uart0_task
uart0_task PCled_task
//-----------------------------------------------------------------------------------------------------------* // :Light * //:MCU 0 PC * //: I/O, * // :MQX * // : Freescale MCU * //--------------- 2011-----------------------------------* #include // #define MAIN_TASK 5 // ID, #define LED_TASK 6 #define UART_TASK 7 uint_8 times; // LWSEM_STRUCT UART_SEM; // LWSEM_STRUCT LIGHT_SEM; // extern void main_task(uint_32); extern void led_task(uint_32); extern void uart0_task(uint_32); // TASK_TEMPLATE_STRUCT MQX_template_list[] = { //, ,,,, , , {MAIN_TASK,main_task,1500, 9, "main",MQX_AUTO_START_TASK,0, 0},// {LED_TASK,led_task, 1500, 10, "led1", 0, 0, 0},// {UART_TASK,uart0_task,1500, 11, "uart", 0, 0, 0},// {0, 0, 0, 0, 0, 0, 0, 0} // }; //------------------------------------------------------------------------------------------------------------* //:main_task * // : * // : initial_data * // : * //-------------------------------------------------------------------------------------------------------------* void main_task(uint_32 initial_data) { int i=0; _task_id task_id; task_id=_task_create(0,UART_TASK,0); //
-
MQX MQX
51
if(task_id==MQX_NULL_TASK_ID) { printf("\n Could not create UART_TASK\n"); } else { printf("\n UART_TASK created \n"); } }
MCF52223MQX
UART SPI IIC AD
Flash
4.5
MQXMQX
1 MQX CodeWarrior CW
MQX CW
2 MQX
MQX
3 MQX MQX
4 MQX
-
MQX MQX
52
MQX
MQX
RTOS MQX MQX
MQX
LCD
5.1
ColdFire V2MCF52223[54]-[56]
RTOS MQX
5.1.1
MCU LCD
MCU LCD
/
1 1 4 6 /
1141
14141 USB
2LCD USB
3
-
MQX MQX
5.1.2
MCF52223 /
LCD USB 5-1
B
5-1
MCF52223
USB
RS232
/
LCD
ZigBee
5.2 MQX
MQXColdFire V2 MCF52223
MQX 4-1 MQX
mqxbuildBSPPSP
[57]
1. BSP
MCF52223MCF52235 ColdFire V2MQX
MCF52235MCF52235 BSP
2. BSPPSP
\mqx\build\cwcf72 bsp_m52235evb.mcp
psp_m52235evb.mcp bsp_MCF52223.mcp psp_MCF52223.mcp
\mqx\build\bat bsp_m52235evb.bat
psp_m52235evb.bat bsp_MCF52223.bat psp_MCF52223.bat
\mqx\source\bspMCF52223
53
-
MQX MQX
54
\mqx\source\bsp\m52235evbMCF52223
\libMCF52223.cw\lib\MCF52223.cw mqx
3.
bsp_ MCF52223.bat psp_ MCF52223.bat m52235evb
MCF52223
\mqx\source\bsp\MCF52223\ m52235evb.h
MCF52223.h m52235evb
MCF52223
\mqx\source\bsp\MCF52223\cw\dbg
m52235evb.cfg m52235evb.memMCF52223.cfgMCF52223.mem
MCF52223.mem FlashMCF52223 Flash
\mqx\source\bsp\MCF52223\cw\intflash.lcf
MCF52223 ROM Flash
\mqx\source\bsp\MCF52223\.c.h
m52235evbMCF52223
4. PSP
codewarrior for Microcontroller V7.2 \mqx\build\cwcf72\
psp_MCF52223.mcp
m52235evb user configMCF52223 user config user_config.h
\config\MCF52223\user_config.h
Debug RegABI setting
1 Target Setting choose output Directory
\lib\MCF52223.cw\mqx
2 Access Paths{Project}...\...\config\m52235evb add
\config\MCF52223
3 BatchRunner P choose\mqx\build\bat\
psp_MCF52223.bat
5. BSP
Codewarrior for Microcontroller V7.2 \mqx\build\cwcf72\
-
MQX MQX
55
bsp_MCF52223.mcp
m52235evb user configMCF52223 user config user_config.h
\config\MCF52223\user_config.h
m52235evb BSP FilesMCF52223 BSP Files
add files\mqx\source\bsp\
.h.c
Debug RegABI setting
1 Target SettingAccess Paths BatchRunner P
MCF52223 PSP
2 Coldfire Target File Name m52235evb_regabi_d.a
MCF52223_regabi_d.a
6.
\mqx\source\bsp\MCF52223\bsp_init.c MQX
5.3 LCD
MCU LCD
5.3.1 LCD
LCDDMT80600T080TFT
MAX232MCU[58]
LCDMCU
0xAA 0xCC0x330xC30x3C
[59] 5-1 5-1
0xAA (1) 0xCC 0x33 0xC3 0x3C
LCD1 18
LCD MCU 2 8
-
MQX MQX
3 9 LCD
LCD
5.3.2
4
PC
LCD
LCD
1.
5-2
MCU Flash
5-2
56
-
MQX MQX
2.
5-3
5-3
3.
5-4
5-4
57
-
MQX MQX
4.
5-5
LCDLCD
5-5
5.4
5.4.1
RTOS
[28]
I/O
[60]
LCD
LCD LCD
58
-
MQX MQX
USB Flash
5-6
5-6
PWM
I/O I/O PIT
I/O
UART LCDUART
LCD LCD
PC
LCD
LCD
MCU
5-7
LCD
59
-
MQX MQX
5-7 LCD
MCU LCD
5-8
5-8 LCD
USB MCU Flash
FlashMCU Flash
MCUMCU
60
-
MQX MQX
61
5.4.2
I/O
I/O
1
2
3
MQX
LCD
LCD LCD
io_LCD_int_install()io_LCD_int_open()io_LCD_int_close()
io_LCD_int_read()io_LCD_int_write()io_LCD_int_ioctl()io_LCD_int_isr()LCD ISR
LCD
ISR
typedef struct io_ lcd _init_struct // LCD {
_mqx_uint QUEUE_SIZE; /// uint_32 DEVICE; // uint_32 VECTOR; // _int_level LEVEL; //
}LCD_INT_STRUCT; typedef struct io_ lcd _ info_struct // {
LCD_INT_STRUCT INIT; // pointer OLD_ISR_DATA; // void (_CODE_PTR_ OLD_ISR)(pointer);
} LCD_INFO_STRUCT;
-
MQX MQX
62
5.5
MQX
1
MQX
2 MQX MCF52223
3 LCD
4 RTOS
MQX
-
MQX
63
6.1
RTOS
RTOS
RTOS RTOSMQX
ROM API
RTOS
RTOS MQX
1 RTOS RTOS
MQX
2MQXMQX
MQX
3MQXBootloader
MQXMQX
MQXMQX
4MQX CodeWarrior CW
MQX
MQX
MQX
5 MQX MCF52223
LCD RTOS
-
MQX
64
6.2
RTOS MQXMQX
MQX
1MQX TCP/IP
MQXMQX
2 MQX MQX
3MQX
ZigbeeMQX
-
MQX
65
[1] Wolf WMadsen JEmbedded systems education for the future[J]Proceedings of
the IEEE2000,88(1):23-30.
[2] [J]
2002,(6):6-9.
[3] VRTX32[J]
1992,5(4):7-14.
[4] [J]
2001,(3):12-17.
[5] [J]
2000,24(5):105-108.
[6] Mohamed Tag ElsirPatrick SebastianYap Vooi VoonA RTOS for Educational
Purposes[CA]International Conference on Intelligent and Advanced Systems
(ICIAS)2010:1-4.
[7] 2[M]:
2011.
[8] Paul ParkinsonFranco GasperoniHigh-Integrity Systems Development for
Integrated Modular Avionics Using VxWorks and GNAT[C]Blieberger and
Strohmeier2002:163-178.
[9] Jean J.Labrosse C/OS-II( 2)[M]
2003:88-91.
[10] Rick Lehrbaum Using Linux in Embeded and Real time
Systems[J/OL]http://www.linuxdevices.com.
[11] P MantegazzaBianchi EDozio LPapacharalambous SRTAIReal-Time
Application Interface[J]Linux Journal Magazine2000,4:105-108.
[12] Cheng FeiMiao Ke-jianWang Rui-minAnalysis and real-time performance
tests of QNX and VxWorks[J] Computer Engineering and Design
2008,29(18):4734-4739.
-
MQX
66
[13] Anthony J Massa eCos[M]
2006.
[14] Dong YibingWang LangDesign of Embedded Cropland Data Acquisition and
Processing System Based On Xscale and WinCE[J]International Forum on
Information Technology and Applications2009,31(13):22-119.
[15] Sarah AllenVidal GrauperaLee LundriganPro Smartphone Cross-Platform
Development iPhoneBlackBerryWindows Mobileand Android Development
and Distribution[M]Paul Manning2010:35-50.
[16] Thomas BaduraMichael BecherTesting the Symbian OS Platform Security
Architecture[CA] Advanced Information Networking and Applications
2009:838-844.
[17] Anon ARC international precise/MQX[J] Penton Publishing Co
2002,50(12):90-94.
[18] MQX RTOS[DB/OL]http://en.wikipedia.org/wiki/MQX.
[19] Freescale MQX RTOS 3.0.1 Release Notes[DB/OL]http://www.freescale.com.
[20] Freescale MQX RTOS 3.4.0 Release Notes[DB/OL]http://www.freescale.com.
[21] Freescale MQX RTOS 3.6.2 Release Notes[DB/OL]http://www.freescale.com.
[22] Freescale MQXTM Real-Time Operating System Users Guide
[DB/OL]http://www.freescale.com.
[23] AnonPrecise/MQX RTOS Gets User-configurable[J]Cahner Publishing Co
2001,46(12):20-25.
[24] Freescale MQX RTCS Users Guide[DB/OL]http://www.freescale.com.
[25] PHDC USB[DB/OL]http://www.freescale.com.
[26] Gien M Micro-kernel Architecture Key to Modern Operating System
Design[EB/OL]http://www.chorus.com/documentation/ref.html.
[27] [J]
2001,21(1):113-115.
[28] RTOS[D]
2008.
[29] [J]
-
MQX
67
2000,19(8):13-15.
[30] [M]
2006:37-38.
[31] MQX RTOS Hands-On[DB/OL]http://www.freescale.com.
[32] Freescale MQX RTOS Reference Manual[DB/OL]http://www.freescale.com.
[33] Ren PengXiang ZhengA Multitask Scheduling Algorithm For Vxworks: Design
and Task Simulation[CA]International Conference on Artificial Intelligence and
Computational Intelligence2009,3:353-357.
[34] Linux 2.6[D]
2008.
[35] RAM C/OS-II[D]2005.
[36] [J]
2002,24(4):38-40.
[37] Hands-On Workshop: Freescale MQX Drivers and BSPs[DB/OL].
http://www.freescale.com2010.
[38] Yan LiPing-Ping GuXian-Shan WangThe Implementation of Semaphore
Management In Hardware Real-time Operating System[J] Information
Technology Journal2011,10(1):63-158.
[39] RTOS[D]
2007.
[40] Tao WangDaxin LiuAvoiding Unbounded Priority Inversion by Integrating Task
Inheritance and Classification into Preemption Threshold
Scheduling[CA]ISSCAA2006: 593-596.
[41] Jaehong ShimKyunghee ChoiGihyun JungSeungkyu ParkHyeonSik Shin
Dongyoon KimPriority inversion handling in microkernel-based Real-Time
Mike[CA]Real-Time Computing Systems and Applications1996:238-245.
[42] Shu Hong-xiaWang Ji-hongDesign and Implementation of Message Passing for
Distributed Real-time Operating System[J]Computer Engineering and Design
2008,29(9):2239-2245.
[43] Xiaofeng WanHailin HuXiaojun ZhouAnalysis and Design of Bootloader on
-
MQX
68
Embedded Electric Power Steering System[CA]ISECS International Colloquium
on Computing, Communication, Control, and Management(CCCM)
2008,2:276-280.
[44] [D]
2009.
[45] Hessel FMarcon CSantos THigh Level RTOS Scheduler Modeling for A Fast
Design Validation[CA]IEEE Computer Society Annual Symposium on VLSI
2007:6-10.
[46] Linux[J]2004
30(20):81-83.
[47] Alessandro Rubini Linux Device Drivers[M] Sebastopol CA
OReilly&AssociatesInc1998.
[48] Freescale MQXTM I/O Drivers Users Guide[DB/OL]http://www.freescale.com.
[49] Ji Chan MaengJong-Hyuk KimMinsoo RyuAn RTOS API Translator for
Model-driven Embedded Software Development[CA]12th IEEE International
Conference on Embedded and Real-Time Computing Systems and Applications
2006:363-367.
[50] How to Develop I/O Drivers for MQX[DB/OL]http://www.freescale.com.
[51] CodeWarrior Development Studio for ColdFire Architectures
V7.2[DB/OL]http://www.freescale.com.
[52] 32 ColdFire[M]
2009.
[53] [D]
2007.
[54] ColdFire [M]
2006.
[55] MCF52223 Data Sheet Rev 2[DB/OL]http://www.freescale.com.
[56] MCF52223 ColdFire Integrated Microcontroller Reference Manual
Rev3[DB/OL]http://www.freescale.com.
[57] MQX BSP [DB/OL]http://www.freescaleic.org.
-
MQX
69
[58] DMT80600T080[DB/OL]http://www.dwin.com.cn.
[59] DMT80600T080[DB/OL]http://www.dwin.com.cn.
[60] [J]
2000,26(7):190-192.
-
MQX
70
[1] RFID
2011,28(3):44-46
[2]
[3]
2011 2
[4]
0171463
[5] 2
2011
[6] 2009
-
MQX
A MQX
71
-
MQX
B
72
-
MQX
73
1.1 1.1.1 RTOS1.1.2 RTOS1.1.3 RTOS1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
1.1.4 RTOS
1.2 MQX1.2.1 MQX1.2.2 MQX
1.3 1.3.1 1.3.2
1.4 1.4.1 1.4.2
1.5
MQX2.1 MQX2.1.1 2.1.2 MQX
2.2 2.2.1 2.2.2 MQX2.2.3 MQX2.2.4 MQX
2.3 2.3.1 MQX2.3.2 MQX2.3.3 MQX
2.4 2.4.1 2.4.2 MQX2.4.3 MQX
2.5 2.6 2.6.1 2.6.2 2.6.3 2.6.4
2.7
MQX3.1 MQX3.1.1 Bootloader3.1.2 Bootloader3.1.3 MQX
3.2 MQX3.2.1 1. FIFO2. RR3.
3.2.2
3.3 3.3.1 3.3.2 3.3.3 3.3.4
3.4 MQX3.4.1 MQX3.4.2 MQX3.4.3 1. 123
2. BSP
3.5
MQX4.1 MQX4.1.1 CodeWarrior4.1.2 CW
4.2 MQX4.3 MQX4.3.1 4.3.2
4.4 MQX4.4.1 4.4.2 CWMQX4.4.3 1. GPIO1GPIOIO_Driver.h2GPIOIO_Driver.c
2. Light1LightLight_task.h2LightLight_task.c
3. UART1UARTUart_task.h2UARTUart_task.c
4.
4.5
MQX5.1 5.1.1 5.1.2
5.2 MQX1. BSP2. BSPPSP3. 4. PSP5. BSP6.
5.3 LCD5.3.1 LCD5.3.2 1. 2. 3. 4.
5.4 5.4.1 5.4.2
5.5
6.1 6.2
A MQXB