Professional Documents
Culture Documents
MQX
2009
MQXMQX Precise Software Technologies
1989 2009 MQX
API TCP/IP USB
MQX
MQX
1 MQX MQX
MQX
MQX
2 MQX FIFO RR
FIFO RR MQX
3 MQX MCF52223
LCD MQX
MQX
MQX
MQX
Abstract
Kernel Analysis and Application Research of Embedded Real-time Operating System MQX
II
......................................................................................................................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
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
MQX
RTOS
RTOS MQX
1.1
[1]
1.1.1 RTOS
20 70 40
40 RTOSRTOS
200 RTOS[2]RTOS
120 70
RTOS
RTOSCRTOS
[2]
21981 Ready System
VRTX32[3]20 80 RTOS
1
MQX
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/O RTOS
1
2
3
4
5
1.1.3 RTOS
1.
RTOS
MQX
2.
3.
4.
[9]
5.
1
2
6.
CPU CPU
ISR
7.
CPU
8.
CPU CPU
CPU
9.
MQX
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-1 RTOS
1-1 RTOS
VxWorks
C/OS-II
Clinux
QNX
eCos
WinCE
WindRiver 400
Jean
Labrosse 1992 64
Linux MMU
API
TCP/IP
QNX
GNU
OS
Visual Studio
Google
Android Linux
Symbian
RAM ROM
PDA
Linux
MQX
1.2 MQX
Message Queue eXecutiveMQXPrecise Software Technologies
1989 2000 3 MQXARC
[17]FreescaleColdFireIBM/Freescale
PowerPCARMARCi.MX[18]2009
ColdFire MCUMQXRTOS
MQX
1.2.1 MQX
2009 MQXRTOS 3.0.1
3.6.2
[19]-[21] 1-2
1-2 MQX RTOS
3.0.1
2009,1
3.1.0
2009,4
3.2.1
2009,6
3.3.0
2009,8
1CodeWarrior
Task-Aware DebuggingTAD
2Board Support PackageBSP
Trivial File SystemTFSI2CInter Integrated CircuitFlexCAN
Real-Time ClockRTC I/OGeneral Purpose
I/OGPIOPC PC
3 TCP/IP Real-Time TCP/IP Communication SuiteRTCSMQX
MQX File SystemMFSUniversal Serial BUSUSB
RAM
4RTCS HTTP
5 USB HUB HUB
6 USB USB
Host Development KitHDK
1
2 SNMPv2Simple Network Management ProtocolSNMP
ROM Management Information BaseMIB
3Analog-to-Digital ConverterADCSerial
Peripheral InterfaceSPI
1 ColdFire V1 V2
2 MQX Flash FlashX Flash
1 ColdFire V1-V4
Fast Ethernet ControllerFECMedium Access Control
MAC
2Shell MFS File Transfer Protocol
FTP
3USB MASS Storage DeviceMSD
Communication Device ClassCDC
MQX
3.4.0
2009,10
3.5.0
2010,2
3.5.1
2010,4
3.6.0
2010,6
3.6.2
2010,11
1.2.2 MQX
MQX
MQX
[22]
1
MQX Freescale
MQX
2[23]
MQX
3
MQX
4 APIMS-DOS MS-DOS
File SystemMFS
5[24]
RTCS MAC TCP/IP FTPTelnet
DHCPSNMPDNSHTTP
6
MQX
6USB[25]
USB USB USB PHDC
HID MSD CDCHUB
1.3
1.3.1
RTOS 40 RTOS
VxWorksC/OS-IIClinuxWindows CEAndroid 1-1
1.3.2
RTOS
MCU&DSP
RTOS
1.4
MQX
MQX
7
MQX
APITCP/IP[22]
MQX
1.4.1
MQX
1 MQX MQX RTOS
MQX
2 MQX MQX
MQX MQX
MQX FIFO
RR MQX
MQX
3 MQX
MQX
4 MQX
LCD
1.4.2
RTOS
RTOS
MQX MQX
MQX
MQX MQX MQX
MQX
RTOS MQX
MQX
1.5
RTOS RTOS
RTOS MQX
RTOS
MQX MQX
MQX MQX
MQX
MQX
MQX
MQXMQX
Bootloader
MQX
MQXMQX
MQX
MQX MQX CodeWarrior
CW
MQX
MQX
MQX
MQX
MQX MCF52223
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
2-1
BSP
I/O
RRFIFO
MQX
MQX MQX
ID
EDS EDS MQX
BSP
I/O I/O
I/O I/O API
2.2
TaskRTOS
CPU
ID
TCB[28]
RTOSC
[29]
12
MQX MQX
2.2.1
MQXTASK_TEMPLATE_STRUCT
MQX_AUTO_START_TASK
MQX
//
//
//
//
//
//
//
//
MQX
32 IDMQX
MQX 0
6
7
1 MQX
2Digital Signal ProcessingDSPMQX DSP
3MQX
4MQX FIFO
2.2.2 MQX
OS[30]MQX
13
MQX MQX
2-3 [31]
2-3
MQX
1Terminated CPU
2Blocked
[30]
3Ready
4Active CPU
2.2.3 MQX
OS CPU
CPU MQX
MQX
1
2
3
4
14
MQX MQX
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()
_task_stop_preemption()
15
MQX MQX
_task_start_preemption()
6
MQX
_task_get_error()
_task_set_error()
MQX_OK MQX_OK MQX
7
_task_restart()
ID
8
ID
MQX MQX
_task_destroy()_task_abort()
2.3
2.3.1 MQX
MQX tick
MQX
200 5 MQX ISR
MQX MQX
2.3.2 MQX
_time_get_resolution()
16
MQX MQX
_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
17
MQX MQX
1
ISR ISR
ISR
2
3
4 ISR API ISR
API ISR
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
18
MQX MQX
2-4 MQX
2-4 MQX
MQX
1MQX ISR
ISR ISR _int_default_isr() ISR
2 ISRMQX _int_install_isr()
ISR ISR_int_install_isr()
1
2
3
ISR
3 ISR_int_install_kernel_isr() ISR ISR
ISR
1
2 MQX
3
2.5
RTOS malloc() free()
RTOS
MQX
MQX MQX
19
MQX MQX
MQX
MQX MMU
MMU MMU MMU
2-5 MMU
2-5 MQX
2.6
[30]
RTOS
MQX
MQX MQX
20
MQX MQX
2.6.1
ISR
ISR
2
3
4
MQX
ISR MQX
MQX
MQX
2.6.2
ISR
12
3[38]
[39]
3
[9]
MQX MQX
MQX 0 MQX
MQX
21
MQX MQX
MQX
MQX
[40]
[41]
MQX
2.6.3
MQX
2.6.4
ISR
1
2
[42]
MQX
MQX MQX
ID
MQX
MQX ID
22
MQX MQX
ISR
MQX
2.7
MQX MQX
1
MQX
2 MQX
MQX
3 MQX
4 MQX
MQX
MQX MQX
MQX
23
MQX MQX
MQX
RTOS
RTOSMQX
BootloaderMQX
MQX
MQXMQX
3.1 MQX
MQX Bootloader
main()_mqx()
MQX 3-1 MQX
CodeWarrior BSP MQX
3-1 MQX
1ColdWarrior
CF_startup.cColdWarrior _start()
_SP_INIT.bss/.sbss C
24
MQX MQX
3MQX
mqx.c MQX _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
25
MQX MQX
__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()
MQX MQX
main() cw2.c MQX MQX
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
26
MQX MQX
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
FIFO
Round RobinRR
FIFO RR
MQX
3.2.1
MQX POSIX.4
1. FIFO
MQX FIFO FIFO
<MQX_install>\mqx\source\kernel\mqxiinit.h
#if MQX_HAS_TIME_SLICE
kernel_data->SCHED_POLICY = MQX_SCHED_FIFO;//
#endif
27
MQX MQX
FIFO
3-2
1 MQX
2
3
3-2 FIFO
2. RR
RR
RR
MQX_TIME_SLICE_TASK RR
<MQX_install>\lib\<board>.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
#define MQX_TASK_QUEUE_BY_PRIORITY
(0x00)
(0x08)
1_taskq_create()
2_taskq_suspend()
3_taskq_resume()
3.2.2
MQX
<MQX_install>\lib\<board>.cw\mqx\mqx.h
1 MQX_AUTO_START_TASK
#define MQX_AUTO_START_TASK
(0x01)
2 MQX_FLOATING_POINT_TASK
29
MQX MQX
#define MQX_FLOATING_POINT_TASK
(0x02)
3 MQX_TIME_SLICE_TASK
RR
#define MQX_TIME_SLICE_TASK
(0x04)
4 MQX_DSP_TASK DSP
DSP DSP
DSP
#define MQX_DSP_TASK
(0x08)
3.3
[44]
[45]
3.3.1
MQX FIFO RR
MQX FIFO
2
1
2 CPU I/O
30
MQX MQX
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
Q1 FIFO
Q2 FIFO
Q2Q3
31
MQX MQX
Q1Qn Qn
3Q1 Q2Q1~Qi-1
QiQi
Q1~Qi-1
Qi
3-4
3-4
3 Q1Q2 Q3 248Priority(Q1)>
Priority(Q2 ) > Priority(Q3) 3 J1 J2 J3 013
CPU 321
3-5
3-5
3.3.3
MQX Task DescriptorTD
_task_set_priority() _sched_internal()
_sched_setscheduler()_sched_set_policy() MQX
kernel _sched_internal()
32
MQX MQX
_sched_setscheduler()_task_set_priority()
<MQX_install>\mqx\source\psp\coldfire\
dispatch.cw
sc_irdyq.c
<MQX_install>\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*2n n 0n5
2 TD_STRUCT
Qnumber WaitTime
3_sched_internal()
1 6 WaitTime
maxWaitTime 1
2 1 FIFO
_task_set_priority()
2 5
6 6
1
3 I/O
33
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/OAPI
35
MQX MQX
POSIXI/O[37][49]MQXAPI 3-10
3-10 MQXAPI
MQX
1
3.4.2 MQX
MQX BSP
RAM<MQX_install>\config\<board>\user_config.h
#define BSPCFG_ENABLE_TTYB
1 BSP
fopen
MQX 3-1
3-1 MQX
I/O
ttya:
ttyb:
ttyc:
ittya:
ittyb:
ittyc:
i2c0:
i2c1:
spi0:
spi1:
gpio:
adc:
adcn:
flashx:
UART0
UART1
UART2
UART0
UART1
UART2
I2C0
I2C1
SPI0
SPI1
GPIO
ADC
ADC
CFM
36
(user_config.h)
BSPCFG_ENABLE_TTYA
BSPCFG_ENABLE_TTYB
BSPCFG_ENABLE_TTYC
BSPCFG_ENABLE_ITTYA
BSPCFG_ENABLE_ITTYB
BSPCFG_ENABLE_ITTYC
BSPCFG_ENABLE_I2C0
BSPCFG_ENABLE_I2C1
BSPCFG_ENABLE_SPI0
BSPCFG_ENABLE_SPI1
BSPCFG_ENABLE_GPIODEV
BSPCFG_ENABLE_ADC
BSPCFG_ENABLE_ADCn
BSPCFG_ENABLE_FLASHX
MQX MQX
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
{
_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;
}
identifier)
MQX MQX
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
3
device.h device.c <MQX_install>\mqx\source\io\
device device.h device.c
2. BSP
MQX Platform Support PackagePSP
Board Support PackageBSPPSP
BSP
MQX BSP
Codewarrior BSP <MQX_install>\mqx\build\codewarrior\
bsp_<board>.mcp
1 device Codewarrior IO Drivers
38
MQX MQX
2OK
3 device.h <MQX_install>\lib\
<board>.cw\mqx
4
#include<device.h>_io_device_install fopenfclosewriteread
ioctl
3.5
MQX
1MQX MQX
Bootloader Bootloader MQX
main() main() mqx()
2MQX MQX
MQX FIFO
RR MQX
MQX
MQX
3MQX MQX
MQX
RTOS MQX
39
MQX
MQX
MQX
MQX MQX
1 MQX
2 MQX 3 MQX
MQX
4
MQX
4.1 MQX
PC
MQX CodeWarrior
4.1.1 CodeWarrior
CodeWarriorCWFreescale MCU
DSP
[51]CodeWarriorGUIIntegrated
Development EnvironmentIDEMCUC
C++
CodeWarrior 3 Special 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
40
MQX MQX
[7]CW
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
3docMQX MQX
4-1 MQX
MQX
MQX
BuildExamples Source
BuildCodeWarriorIAR
BSP PSP bat
BSPPSP
Examples MQX
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.2 MQX 4-2
42
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-3 MQX
mcp
<bin>.S19 MCU
MQX
.S19
bin map
MCU map
MCU
<Progect_Data/Light/ObjectCode>.c
.o
.S19
<Sources>
CodeWarrior
4.4 MQX
4.4.1
#include
44
MQX MQX
[53]
1
2
3 MCU
MCU
4.4.2 CWMQX
Light LCD
1 LCD
2 Light.mcp LCD.mcp
3 Light_Data
45
MQX
MQX
4 bin
4.4.3
MCF52223
MQX
MCF52223 I/O I/O
MCF52223 0 MCF52223
PC
main_task led_task uart0_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<mqx.h>
//
#include<bsp.h>
//
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
46
MQX MQX
//----------------------------------------------------------------------------------------------*
//:IO_Driver.c(GPIO )
*
//----------------------------------------------------------------------------------------------*
#include<IO_Driver.h>
//----------------------------------------------------------------------------------------------*
//: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
47
MQX
MQX
UART_SEMLIGHT_SEM
Light_task.c
1LightLight_task.h
//------------------------------------------------------------------------------------------------*
//:Light_task.h ()
*
//------------------------------------------------------------------------------------------------*
#include <mqx.h>
#include <bsp.h>
#include <fio.h>
#include <IO_Driver.h>
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<Light_task.h>
//---------------------------------------------------------------------------------------------------*
//:led_task
*
// :
*
// :initial_data
*
// :
*
//----------------------------------------------------------------------------------------------------*
void led_task(uint_32 initial_data)
{
uint_8 i;
_lwsem_wait(&LIGHT_SEM);
//
for(i=0;i<times-'0';i++)
{
Light_Control(GPIO_PORT_TC,Light_Run0,1); //
_time_delay(1000);
Light_Control(GPIO_PORT_TC,Light_Run0,0); //
_time_delay(1000);
}
_lwsem_post(&UART_SEM);
//
}
3. UART
Uart_task.hUart_task.cUart_task.h
UART_SEMLIGHT_SEM
Uart_task.c PC PC
48
MQX MQX
1UARTUart_task.h
#include<mqx.h>
#include<bsp.h>
#include<IO_Driver.h>
//
#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<Uart_task.h>
//-------------------------------------------------------------------------------------------------------------*
//: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
49
MQX
MQX
{
printf("\nLED_TASK created\n");
}
}
}
fclose(serial_fd);
}
4.
main_task led_task
uart0_task main_task uart0_task
uart0_task PC led_task
//-----------------------------------------------------------------------------------------------------------*
// :Light
*
//:MCU 0 PC
*
//: I/O ,
*
//
: MQX
*
//
: Freescale MCU
*
//--------------- 2011 -----------------------------------*
#include <IO_Driver.h>
//
#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);
//
50
MQX MQX
if(task_id==MQX_NULL_TASK_ID)
{
printf("\n Could not create UART_TASK\n");
}
else
{
printf("\n UART_TASK created \n");
}
}
MCF52223 MQX
UART SPI IIC AD
Flash
4.5
MQX MQX
1 MQX CodeWarrior CW
MQX CW
2 MQX
MQX
3 MQX MQX
4 MQX
51
MQX MQX
MQX
MQX
RTOS MQX MQX
MQX
LCD
5.1
ColdFire V2 MCF52223[54]-[56]
RTOS MQX
5.1.1
MCU LCD
MCU LCD
/
1 1 4 6 /
1 1 4 1
14 14 1 USB
2LCD USB
3
52
MQX MQX
5.1.2
MCF52223 /
LCD USB 5-1
B
ZigBee
USB
RS232
LCD
MCF
52223
5-1
5.2 MQX
MQXColdFire V2 MCF52223
MQX 4-1 MQX
mqxbuildBSPPSP
[57]
1. BSP
MCF52223 MCF52235 ColdFire V2 MQX
MCF52235 MCF52235 BSP
2. BSPPSP
<MQX_install>\mqx\build\cwcf72 bsp_m52235evb.mcp
psp_m52235evb.mcp bsp_MCF52223.mcp psp_MCF52223.mcp
<MQX_install>\mqx\build\bat
bsp_m52235evb.bat
MQX MQX
<MQX_install>\mqx\source\bsp\m52235evb MCF52223
<MQX_install>\lib MCF52223.cw<MQX_
install>\lib\MCF52223.cw mqx
3.
bsp_ MCF52223.bat psp_ MCF52223.bat m52235evb
MCF52223
<MQX_install>\mqx\source\bsp\MCF52223\ m52235evb.h
MCF52223.h m52235evb
MCF52223
<MQX_install>\mqx\source\bsp\MCF52223\cw\dbg
m52235evb.cfg m52235evb.mem MCF52223.cfg MCF52223.mem
MCF52223.mem Flash MCF52223 Flash
<MQX_install>\mqx\source\bsp\MCF52223\cw\intflash.lcf
MCF52223 ROM Flash
<MQX_install>\mqx\source\bsp\MCF52223\.c.h
m52235evb MCF52223
4. PSP
codewarrior for Microcontroller V7.2 <MQX_install>\mqx\build\cwcf72\
psp_MCF52223.mcp
m52235evb user config MCF52223 user config user_config.h
<MQX_install>\config\MCF52223\user_config.h
Debug RegABI setting
1 Target Setting choose output Directory <MQX_install>
\lib\MCF52223.cw\mqx
2 Access Paths{Project}...\...\config\m52235evb add
<MQX_install>\config\MCF52223
3 BatchRunner P choose<MQX_install>\mqx\build\bat\
psp_MCF52223.bat
5. BSP
Codewarrior for Microcontroller V7.2 <MQX_install>\mqx\build\cwcf72\
54
MQX MQX
bsp_MCF52223.mcp
m52235evb user config MCF52223 user config user_config.h
<MQX_install>\config\MCF52223\user_config.h
m52235evb BSP Files MCF52223 BSP Files
add files<MQX_install>\mqx\source\bsp\<MQX_install>
.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_install>\mqx\source\bsp\MCF52223\bsp_init.c MQX
5.3 LCD
MCU LCD
5.3.1 LCD
LCDDMT80600T080TFT
MAX232 MCU[58]
LCDMCU
0xAA 0xCC0x330xC30x3C
[59] 5-1
5-1
0xAA
(1 )
LCD
1 18
LCD MCU 2 8
55
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
LCD LCD
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
MQX MQX
5-7 LCD
MCU LCD
5-8
5-8 LCD
60
MQX MQX
5.4.2
I/O
I/O
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;
61
MQX MQX
5.5
MQX
1
MQX
2 MQX MCF52223
3 LCD
4 RTOS
MQX
62
MQX
6.1
RTOS
RTOS
RTOS RTOSMQX
ROM API
RTOS
RTOS MQX
1 RTOS RTOS
MQX
2 MQX MQX
MQX
3MQXBootloader
MQXMQX
MQXMQX
4 MQX CodeWarrior CW
MQX
MQX
MQX
5 MQX MCF52223
LCD RTOS
63
MQX
6.2
RTOS MQX MQX
MQX
1 MQX TCP/IP
MQX MQX
2 MQX MQX
3 MQX
Zigbee MQX
64
MQX
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.
65
MQX
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]
66
MQX
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
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 Kim Priority 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
67
MQX
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
Rev3[DB/OL]http://www.freescale.com.
[57] MQX BSP [DB/OL]http://www.freescaleic.org.
68
Reference
Manual
MQX
69
MQX
[1] RFID
2011,28(3):44-46
[2]
[3]
2011 2
[4]
0171463
[5] 2
2011
[6] 2009
70
MQX
A MQX
71
MQX
72
MQX
73