garfield

Freescale MQX 使用

0
阅读(2983)

freescale MQX系统介绍:Freescale MQX软件解决方案15年来一直广泛用于各种飞思卡尔处理器,其基于模块化架构的直通式API便于微调定制应用,并可加以扩展支持多样化应用。飞思卡尔将经过市场检验的Freescale MQX软件解决方案与芯片产品系列相结合,提供结构精简、功能强大的平台满足硬件、软件、工具和服务需求。

MQX使用指南:12209858017163.pdf,这个是飞思卡尔官方的使用指南,介绍了MQX的基本原理和使用方法,全中文的哟。

然后教你一步一步建立一个属于你自己的MQX工程:12214432743163.pdf

工程文件:12215047235668.rar

简单介绍下:以我自己做的MCF52235板子为基础,使用MQX3.5 建立MQX工程。一共有六个任务,其中初始化任务init_task为自动运行的任务,在init_task中建立其他五个任务,有四个任务是控制与PORTNQ相连的四个LED 灯的亮灭,还有一个任务通过串口打印MQX版本信息,串口通信的波特率为115200,八位数据位,一位停止位,没有校验。

部分代码介绍:

任务声明:

#ifndef __main_h_
#define __main_h_
#define INIT_TASK 5
#define LED1_TASK 6
#define LED2_TASK 7
#define LED3_TASK 8
#define LED4_TASK 9
extern void init_task(uint_32);
extern void led1_task(uint_32);
extern void led2_task(uint_32);
extern void led3_task(uint_32);
extern void led4_task(uint_32);

任务列表:

TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
{INIT_TASK, init_task, 1500, 9, "init", MQX_AUTO_START_TASK, 0, 0},
{LED1_TASK, led1_task, 1500, 10, "led1", 0, 0, 0},
{LED2_TASK, led2_task, 1500, 11, "led2", 0, 0, 0},
{LED3_TASK, led3_task, 1500, 12, "led3", 0, 0, 0},
{LED4_TASK, led4_task, 1500, 13, "led4", 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};

任务初始化:

void init_task(uint_32 initial_data)
{
_task_id task_id;
printf("\n Initialize IO \n");
InitializeIO();
task_id = _task_create(0, LED1_TASK, 0);
if (task_id == MQX_NULL_TASK_ID)
{
printf("\n Could not create LED1_TASK\n");
}
else
{
printf(" LED1_TASK created \n");
}
task_id = _task_create(0, LED2_TASK, 0);
if (task_id == MQX_NULL_TASK_ID)
{
printf("\n Could not create LED2_TASK\n");
}
else
{
printf(" LED2_TASK created \n");
}
task_id = _task_create(0, LED3_TASK, 0);
if (task_id == MQX_NULL_TASK_ID)
{
printf("\n Could not create LED3_TASK\n");
}
else
{
printf(" LED3_TASK created \n");
}task_id = _task_create(0, LED4_TASK, 0);
if (task_id == MQX_NULL_TASK_ID)
{
printf("\n Could not create LED4_TASK\n");
}
else
{
printf(" LED4_TASK created \n");
}
}

任务代码:

void led1_task(uint_32 initial_data)
{
int value = 0;
printf("\n led1 task \n");
while (TRUE)
{
_time_delay(1111);
SetOutput(1,value);
value = value^1;
}
}
void led2_task(uint_32 initial_data)
{
int value = 0;
printf("\n led2 task \n");
while (TRUE)
{
_time_delay(2222);
SetOutput(2,value);
value = value^1;
}
}
void led3_task(uint_32 initial_data)
{
int value = 0;
printf("\n led3 task \n");
while (TRUE)
{_time_delay(3333);
SetOutput(3,value);
value = value^1;
}
}
void led4_task(uint_32 initial_data)
{
int value = 0;
printf("\n led4 task \n");
while (TRUE)
{
_time_delay(4444);
SetOutput(4,value);
value = value^1;
}
}

就是这样,很简单的,看了你就会。

Baidu
map