查看: 6630|回复: 7

[MQX] K60&MQX关于时间片轮询配置的问题

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
    发表于 2012-2-19 21:56:25 | 显示全部楼层 |阅读模式
    使用的是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,这是什么情况呢?
    我知道答案 目前已有6人回答
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-20 09:39:46 | 显示全部楼层

    RE:K60&MQX关于时间片轮询配置的问题

    while (1)
        {

    这个循环里面,记得添加一个延时。用来切换任务使用,不然这样会死到一个任务里面,而其他的任务就不能运行了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
     楼主| 发表于 2012-2-20 11:18:55 | 显示全部楼层

    回复:K60&MQX关于时间片轮询配置的问题

    是的,一直没注意这个问题呢。
    不过若任务具备时间片轮询的属性,在处理“滴答”的时候若判断时间片用完,是可以被抢占的。
    今天重新从头开始写程序,问题已经解决。
    感觉MQX在ColdFire平台和Kinetis平台还是有一点区别的,学习的时候还是要留心呢。
    比较怪异的是,昨天无论怎样修改user_config.h中的MQX_HAS_TIME_SLICE,经过编译都为0的情况,今天竟然消失了。
    呵呵,有的时候电脑也需要休息一下。希望大家身体健康。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
     楼主| 发表于 2012-2-20 11:19:14 | 显示全部楼层

    回复:K60&MQX关于时间片轮询配置的问题

    是的,一直没注意这个问题呢。
    不过若任务具备时间片轮询的属性,在处理“滴答”的时候若判断时间片用完,是可以被抢占的。
    今天重新从头开始写程序,问题已经解决。
    感觉MQX在ColdFire平台和Kinetis平台还是有一点区别的,学习的时候还是要留心呢。
    比较怪异的是,昨天无论怎样修改user_config.h中的MQX_HAS_TIME_SLICE,经过编译都为0的情况,今天竟然消失了。
    呵呵,有的时候电脑也需要休息一下。希望大家身体健康。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-2-20 16:01:39 | 显示全部楼层

    RE:K60&MQX关于时间片轮询配置的问题

    如果有其他的问题,欢迎到论坛留贴。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
     楼主| 发表于 2012-3-2 20:16:50 | 显示全部楼层

    回复:K60&MQX关于时间片轮询配置的问题

    关于修改user_config.h文件无法不起作用的情况,当时可能是由于自己修改的是lib目录下经过复制的user_config.h文件,而不是bsp工程中参加编译过程的,因此,在编译bsp工程中没起到作用。后来我将lib目录下对应k60子目录下生成的库文件和头文件删除掉之后,重新修改bsp工程下的user_config.h文件,编译后,再编译创建应用工程,一切正常。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-3-3 10:05:09 | 显示全部楼层

    RE:K60&MQX关于时间片轮询配置的问题

    有时候一个例程下面有很多相同的源文件,这个时候就需要选择工程中用到的来配置。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    224

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    322
    最后登录
    1970-1-1
    发表于 2012-3-7 10:24:48 | 显示全部楼层

    RE:K60&MQX关于时间片轮询配置的问题

    使用时间片轮询方式的任务是无需为了切换任务而加延时的,除非有延时需要。
    不要误导啊。。。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-12 16:40 , Processed in 0.104210 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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