查看: 2058|回复: 7

[已解决] 关于创建任务的问题?(已解决)

[复制链接]

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
发表于 2013-9-24 11:26:38 | 显示全部楼层 |阅读模式
如下例程,我创建了hello_task为MQX_TIME_SLICE_TASK,时间片为10
hello_task任务中count是不是每隔10ms就自动加1呀???
如果我理解的对的话,那例程怎么不执行呀????
const TASK_TEMPLATE_STRUCT  MQX_template_list[] =
{
   /* Task Index,   Function,    Stack,  Priority,  Name,        Attributes,          Param, Time Slice */
    { SERVER_TASK,  server_task, 1000,   8,         "server",    MQX_AUTO_START_TASK, 0,     0 },
    { CLIENT_TASK,  client_task, 1000,   8,         "client",    0,                   0,     0 },  
    { HELLO_TASK,    hello_task, 1000,   8,         "client",    MQX_TIME_SLICE_TASK, 0,     10 },   
   
    { 0 }
};
 
uint_32  count = 0;
void  hello_task
    (
        uint_32 param   
    )
{
    count++;
if(count>10){
   count = 0;
    _task_block();
   }
}
void server_task
   (
      uint_32 param
   )
{
   SERVER_MESSAGE_PTR msg_ptr;
   _mqx_uint          i;
   _queue_id          server_qid;
   boolean            result;
   _task_id           task_id;
    uint_32           time;
   _mqx_uint highest_priority;
   /* open a message queue */
   server_qid = _msgq_open(SERVER_QUEUE, 0);
  
   if (server_qid == 0) {
      printf("\nCould not open the server message queue\n");
      _task_block();
   }
   /* create a message pool */  
   message_pool = _msgpool_create(sizeof(SERVER_MESSAGE),
      NUM_CLIENTS, 0, 0);
     
   if (message_pool == MSGPOOL_NULL_POOL_ID) {
      printf("\nCount not create a message pool\n");
      _task_block();
   }
   /* create the client tasks */
   for (i = 0; i < NUM_CLIENTS; i++) {
      task_id = _task_create(0, CLIENT_TASK, (uint_32)i);
     
      if (task_id == 0) {
         printf("\nCould not create a client task\n");
         _task_block();
      }
   }
  
    task_id = _task_create(0, HELLO_TASK, 0);
  
   if (task_id == 0) {
       printf("\nCould not create a client task\n");
       _task_block();
   }
   while (TRUE) {
      msg_ptr = _msgq_receive(server_qid, 0);
     
      if (msg_ptr == NULL) {
         printf("\nCould not receive a message\n");
         _task_block();
      }
      printf(" %c \n", msg_ptr->DATA[0]);
 
      /* return the message */  
      msg_ptr->HEADER.TARGET_QID = msg_ptr->HEADER.SOURCE_QID;
      msg_ptr->HEADER.SOURCE_QID = server_qid;
     
      result = _msgq_send(msg_ptr);
     
      if (result != TRUE) {
         printf("\nCould not send a message\n");
         _task_block();
      }
   }
}
void client_task
   (
      uint_32 index
   )
{
   SERVER_MESSAGE_PTR msg_ptr;
   _queue_id          client_qid;
   boolean            result;
   client_qid  = _msgq_open((_queue_number)(CLIENT_QUEUE_BASE +
      index), 0);
   if (client_qid == 0) {
      printf("\nCould not open a client message queue\n");
      _task_block();
   }
  
   while (TRUE) {
      /*allocate a message*/
      msg_ptr = (SERVER_MESSAGE_PTR)_msg_alloc(message_pool);
      if (msg_ptr == NULL) {
         printf("\nCould not allocate a message\n");
         _task_block();
      }
      msg_ptr->HEADER.SOURCE_QID = client_qid;     
      msg_ptr->HEADER.TARGET_QID = _msgq_get_id(0, SERVER_QUEUE);
      msg_ptr->HEADER.SIZE = sizeof(MESSAGE_HEADER_STRUCT) +
         strlen((char_ptr)msg_ptr->DATA) + 1;
      msg_ptr->DATA[0] = ('A'+ index);
    
      printf("Client Task %ld\n", index); 
     
      result = _msgq_send(msg_ptr);
     
      if (result != TRUE) {
         printf("\nCould not send a message\n");
         _task_block();
      }
  
      /* wait for a return message */
      msg_ptr = _msgq_receive(client_qid, 0);
     
      if (msg_ptr == NULL) {
         printf("\nCould not receive a message\n");
         _task_block();
      }
   
       /* free the message */
      _msg_free(msg_ptr);
   }
}
 
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2013-9-24 11:43:54 | 显示全部楼层

回复:关于创建任务的问题?

你创建的是round robin的任务, 需要在user_config.h  中添加 #define MQX_HAS_TIME_SLICE 1 , 并且重新编译BSP 与PSP
回复 支持 反对

使用道具 举报

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
 楼主| 发表于 2013-9-24 12:02:53 | 显示全部楼层

回复:关于创建任务的问题?

我已经设置了,是否还要设置默认时间片值吗?如何设置 ?感谢大侠 ·!!!
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2013-9-24 12:27:46 | 显示全部楼层

RE:关于创建任务的问题?

你需要使用连续的优先级, 8,9,10 等等
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2013-9-24 12:31:02 | 显示全部楼层

RE:关于创建任务的问题?(正解)

优先级必须大于7, 最小为8,且需要连续
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2013-9-24 12:48:48 | 显示全部楼层

RE:关于创建任务的问题?

还有, 你创建任务是用  MQX_AUTO_START_TASK | MQX_TIME_SLICE_TASK, 让OS 启动后自动执行这个任务
回复 支持 反对

使用道具 举报

该用户从未签到

51

主题

307

帖子

0

高级会员

Rank: 4

积分
651
最后登录
2020-9-4
 楼主| 发表于 2013-9-24 13:18:28 | 显示全部楼层

回复:关于创建任务的问题?

这些我都做了,如何得到时间片的默认值呢?感谢!
 
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2013-9-24 13:46:48 | 显示全部楼层

RE:关于创建任务的问题?

你创建任务时可以设置time slice,  默认值请参考mqx_cnfg.h
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-8-5 16:54 , Processed in 0.105008 second(s), 27 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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