查看: 2988|回复: 4

[MQX] 请教关于MQX lwtimer的问题

[复制链接]

该用户从未签到

6

主题

45

帖子

0

注册会员

Rank: 2

积分
154
最后登录
2021-12-2
发表于 2013-6-6 21:11:16 | 显示全部楼层 |阅读模式
各位朋友,在下在一块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();
      
   
    }
}
 
 
 
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

6

主题

45

帖子

0

注册会员

Rank: 2

积分
154
最后登录
2021-12-2
 楼主| 发表于 2013-6-8 08:44:27 | 显示全部楼层

RE:请教关于MQX lwtimer的问题

那位朋友能帮我看看吗?就是说说建议也可以
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

8

帖子

0

新手上路

Rank: 1

积分
12
最后登录
1970-1-1
发表于 2013-6-8 08:55:09 | 显示全部楼层

RE:请教关于MQX lwtimer的问题

我也是遇到了和定时器相关的问题 没解决
根据我的理解  _task_block()是将该任务挂起  _time_delay()是将任务挂起一段时间后再继续执行该任务。
目前我遇到的问题是_time_delay()将任务挂起后  不会回来再执行这个任务了    我也不太清楚userconfig.h里面要怎么设置
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

45

帖子

0

注册会员

Rank: 2

积分
154
最后登录
2021-12-2
 楼主| 发表于 2013-6-8 09:41:08 | 显示全部楼层

回复:请教关于MQX lwtimer的问题

回复第 3 楼 于2013-06-08 08:55:09发表:
我也是遇到了和定时器相关的问题 没解决
根据我的理解 _task_block()是将该任务挂起 _time_delay()是将任务挂起一段时间后再继续执行该任务。
目前我遇到的问题是_time_delay()将任务挂起后 不会回来再执行这个任务了 我也不太清楚userconfig.h里面要怎么设置 

我也赞同你的理解。但是我也觉得定时器组件既然需要设置优先级和栈空间,那就相当于一个隐形的任务,所以不管_task_block()和time_delay()后都应该再去执行定时器
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

16

帖子

0

新手上路

Rank: 1

积分
16
最后登录
1970-1-1
发表于 2013-6-17 17:50:54 | 显示全部楼层

RE:请教关于MQX lwtimer的问题

是怎么裁剪配置的?会不会有什么相关config被去掉了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 19:23 , Processed in 0.092824 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表