在线时间58 小时
UID175586
注册时间2010-3-14
NXP金币0
TA的每日心情 | 奋斗 2017-1-17 10:45 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I
高级会员

- 积分
- 780
- 最后登录
- 2023-11-17
|
使用的是k60的板子,mqx 3.7。
在user_config.h中添加了:
#define MQX_HAS_TIME_SLICE 1
增加了同优先级任务轮询的属性(k60的bsp在默认情况下不启动轮询属性)
同时制定任务模板列表为:
TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
/* Task number, Entry point, Stack, Pri, String, Auto? */
{MAIN_TASK, Main_task, 1500, 9, "main", MQX_AUTO_START_TASK},
{
TASK_A, //TASK_TEMPLATE_INDEX
Task_A, //TASK_ADDRESS
1000, //TASK_STACKSIZE
9, //TASK_PRIORITY
"task_a", //TASK_NAME
MQX_AUTO_START_TASK, //TASK_ATTRIBUTES
0, //CREATION_PARAMETER
0 //DEFAULT_TIME_SLICE
},
{
TASK_B, //TASK_TEMPLATE_INDEX
Task_B, //TASK_ADDRESS
1000, //TASK_STACKSIZE
10, //TASK_PRIORITY
"task_b", //TASK_NAME
MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK, //TASK_ATTRIBUTES
0, //CREATION_PARAMETER
10 //DEFAULT_TIME_SLICE
},
{
TASK_C, //TASK_TEMPLATE_INDEX
Task_C, //TASK_ADDRESS
1000, //TASK_STACKSIZE
10, //TASK_PRIORITY
"task_c", //TASK_NAME
MQX_AUTO_START_TASK|MQX_TIME_SLICE_TASK, //TASK_ATTRIBUTES
0, //CREATION_PARAMETER
20 //DEFAULT_TIME_SLICE
},
{0}
};
其中任务B为:
void Task_B(uint_32 initial_data)
{
MQX_TICK_STRUCT mqx_tick;
MQX_TICK_STRUCT mqx_tick_pre = {0};
//MQX_TICK_STRUCT mqx_tick_mid;
int result; //保存时间比较结果
int *tick_ptr = (int *)(&mqx_tick);
int i;
while (1)
{
_time_get_ticks(&mqx_tick);
result = PSP_CMP_TICKS(&mqx_tick, &mqx_tick_pre);
if (result > 0) //有时间片更新
{
//mqx_tick_pre = mqx_tick
_mem_copy(&mqx_tick, &mqx_tick_pre, sizeof(MQX_TICK_STRUCT));
//printf(" TASK_B:\t");
for (i = 0; i < sizeof(MQX_TICK_STRUCT)/sizeof(int); i++)
{
printf("%8d ", *(tick_ptr+i));
}
printf("\t\tB");
printf("\n");
}
} //end_while
} //end_task
任务C为:
void Task_C(uint_32 initial_data)
{
MQX_TICK_STRUCT mqx_tick;
MQX_TICK_STRUCT mqx_tick_pre = {0};
//MQX_TICK_STRUCT mqx_tick_mid;
int result; //保存时间比较结果
int *tick_ptr = (int *)(&mqx_tick);
int i;
while (1)
{
_time_get_ticks(&mqx_tick);
result = PSP_CMP_TICKS(&mqx_tick, &mqx_tick_pre);
if (result > 0) //有时间片更新
{
//mqx_tick_pre = mqx_tick
_mem_copy(&mqx_tick, &mqx_tick_pre, sizeof(MQX_TICK_STRUCT));
//printf(" TASK_C:\t");
for (i = 0; i < sizeof(MQX_TICK_STRUCT)/sizeof(int); i++)
{
printf("%8d ", *(tick_ptr+i));
}
printf("\t\t\tC");
printf("\n");
}
} //end_while
} //end_task
此时发现串口打印输出异常,不显示任何输出信息了。
我在mcf52233demo板上,执行同样的应用程序,没有任何问题。
请知情人士给予指点,关于k60&mqx下时间片轮询属性的设定,为什么会出现情况?当如何解决?
PS:虽然我在user_config.h中设定了MQX_HAS_TIME_SLICE为1,但编译之后使用发现在其它地方MQX_HAS_TIME_SLICE的值还是为0,这是什么情况呢?
|
|