在线时间9 小时
UID164892
注册时间2007-6-20
NXP金币0
该用户从未签到
注册会员

- 积分
- 154
- 最后登录
- 2021-12-2
|
各位朋友,在下在一块K60板子上用lwtimer定时器时,发现如果用编译Freescale官方的MQX库时,lwtimer定时器正常工作,能正常打印出 “Timer LED On”和“Timer LED Off”。但是用我们自己裁剪配置的MQX时,lwtimer使用不正常。如果在LED_Task()中使用time_delay(150),则2个定时器都不正常,即一个数据都打印不出来,如果在LED_task()中使用_task_block(),则能打印出“Timer LED Off”。
我现在想问的是两个问题,lwtimer这个定时器和MQX的配置裁剪有关吗?据我所知似乎么没有啊。
为什么选择LED_Task中用time_delay(150)和_task_block会是不同的结果?其中原因到底是什么?
我自认为我的程序没问题,请各位朋友给我提出意见。另外我也是初次接触RTOS,很多概念不是很熟,请大家帮我指点迷津。先谢谢了!!!!!
所使用相关程序附在下面
static void led_on(pointer ptr)
{
printf("\nTimer LED On");
}
static void led_off(pointer ptr)
{
printf("\nTimer LED Off");
}
static void CtlStartLwTimer(void)
{
LWTIMER_STRUCT lst_on;
LWTIMER_STRUCT lst_off;
LWTIMER_STRUCT lst_led;
_mqx_uint result;
_mqx_uint wait_ticks = 0;
result=_lwtimer_create_periodic_queue(&ps, 6, wait_ticks);
if(MQX_OK == result)
{
printf("\nCreate Periodic Queue OK");
}
result= _lwtimer_add_timer_to_queue(&ps, &lst_on, 3, led_on, 0);
if(MQX_OK == result)
{
printf("\nAdd Timer 1 to Queue OK");
}
result=_lwtimer_add_timer_to_queue(&ps, &lst_off, 3, led_off, 0);
if(MQX_OK == result)
{
printf("\nAdd Timer 2 to Queue OK");
}
}
static void CtlStopLwTimer(void)
{
_mqx_uint result;
result =_lwtimer_cancel_period(&ps);
}
void CtlGetLEDMsg(T_U32 mask)
{
CtlLEDStatusInfo(data);
}
void led_task(T_U32 initial_data)
{
T_U32 result;
T_U32 mask;
while (1)
{
printf("Led Task running\n");
/*set task LED event bit*/
{
//mask = _lwevent_get_signalled();
mask=0x04;
CtlGetLEDMsg(mask);
}
_time_delay(150);
//_task_block();
}
}
|
|