OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3736|回复: 2

为何低、高优先级的任务都能执行,但中间优先级的不可以?

[复制链接]

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2018-7-10
在线时间
17 小时
发表于 2018-9-22 00:04:36 | 显示全部楼层 |阅读模式
8金钱
我有两个问题:
1、我的工程起了8个任务,优先级编号从4-11.目前来看,编号为9的和11的任务都能启动,然而标号为10的任务却无法启动。任务11是个空任务:

void camera_task(void *p_arg)
{
OS_ERR err;
p_arg = p_arg;

while(1)
{  
  DEBUG("camera_task START\r\n");
  OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //ÑÓʱ500ms
  DEBUG("camera_task END\r\n");
}
}

任务9是看门狗喂狗和定时向485口发送数据:
void check_task(void *p_arg)
{
OS_ERR err;
p_arg = p_arg;

while(1)
{
  DEBUG("check_task START\r\n");
  TX485_1();
  TX485_2();
  TX485_3();
  
/*  
  //µÈ´ýʼþ±êÖ¾×é
  OSFlagPend((OS_FLAG_GRP*)&EventFlags,
       (OS_FLAGS )GPS_FLAG | TCP_FLAG,
           (OS_TICK     )0,
       (OS_OPT     )OS_OPT_PEND_FLAG_SET_ALL+OS_OPT_PEND_FLAG_CONSUME,
       (CPU_TS*     )0,
       (OS_ERR*     )&err);
  DEBUG("GPS|TCP valid\r\n");
*/
  IWDG_Feed();  //ι¹·
  DEBUG("check_task END\r\n");
  OSTimeDlyHMSM(0,0,0,500, OS_OPT_TIME_HMSM_STRICT,&err); //ÑÓʱ500ms
}
}

没有启动的任务10,主要是用了个消息队列接受数据并处理,消息队列的用法应该没错,因为别的任务也起了2-3个消息队列都能执行:
//labelÈÎÎñº¯Êý
void label_task(void *p_arg)
{
u8 i, *pMsg;
OS_ERR err;
OS_MSG_SIZE size;
p_arg = p_arg;

while(1)
{   
  DEBUG("label_task START\r\n");
  pMsg = OSQPend((OS_Q* )&LABEL_Msg,   
      (OS_TICK  )0,
                  (OS_OPT  )OS_OPT_PEND_BLOCKING,
                  (OS_MSG_SIZE* )&size,
                  (CPU_TS*  )0,
                  (OS_ERR*  )&err);
  
  if(pMsg != (void *)0)
  {
   for(i = 0; i < size; i++)
   {
    if(pMsg[i] == 'A')
    {
     memcpy(Label_ID, pMsg+i, 7);
     label_error = 0x0;
     labelerr_times = 0x0;
     
     memset(USART3_RX_BUF, 0, USART3_REC_LEN);
     break;
    }           
   }
   if(i == size)
   {
    labelerr_times++;
    if(labelerr_times == 3)
    {
     label_error = 0x1; //&Ograve;&Ntilde;&frac34;&shy;&Ouml;&Atilde;1&pound;&not;&Egrave;&ccedil;&sup1;&ucirc;&sup2;&raquo;&frac12;&Oacute;±ê&Ccedil;&copy;&pound;&not;±ê&Ouml;&frac34;&Icirc;&raquo;&raquo;&sup1;&Ecirc;&Ccedil;1
     labelerr_times = 0x0;
    }
   
    memset(USART3_RX_BUF, 0, USART3_REC_LEN);
    DEBUG("LABEL&Ecirc;&yacute;&frac34;&Yacute;&Icirc;&THORN;&ETH;§\r\n");
   }
  }
  else
  {
   memset(USART3_RX_BUF, 0, USART3_REC_LEN);
   DEBUG("LABEL&Ecirc;&yacute;&frac34;&Yacute;&Oacute;&ETH;&Icirc;ó\r\n");
  }
  
  DEBUG("label_task END\r\n");
  OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //&Ntilde;&Oacute;&Ecirc;±1s
}
}

请问下大家遇到这种情况怎么调试?  有什么注意事项!

2、我现在调试也会遇到进入HardFault的地方,请问怎么调试?我看网上的方法感觉不好用啊?请大家赐教

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2018-7-10
在线时间
17 小时
 楼主| 发表于 2018-9-22 20:43:35 | 显示全部楼层
或者大家有这方面的经验吗?比如某个任务不执行该怎么调试了?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-9-23 02:22:51 | 显示全部楼层
lqab1983 发表于 2018-9-22 20:43
或者大家有这方面的经验吗?比如某个任务不执行该怎么调试了?

删除到只剩下这一个任务,看运行部
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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