搜索
bottom↓
回复: 1

ucos3中优先级怎么理解,见下面代码 ,大伙帮忙分析下!

[复制链接]

出0入0汤圆

发表于 2013-5-11 10:48:22 | 显示全部楼层 |阅读模式
本帖最后由 hbchf 于 2013-5-11 11:00 编辑
  1. #define ucos_debug

  2. #ifdef ucos_debug
  3. void uart_printf(uchar *buf,uchar len) //调试串口打印
  4. {
  5.     OS_ERR err;
  6.     uchar i;
  7.     for(i = 0; i< len; i++)
  8.      {
  9.         USART_SendData(USART1,buf[i]);
  10.         OSTimeDlyHMSM(0,0,0,1,OS_OPT_TIME_HMSM_STRICT,&err);                
  11.      }
  12. }
  13. #endif
复制代码
  1. //处理用户卡交易流程
  2. static void Task_DecteCard(void *p_arg)  //优先级=14
  3. {
  4.   OS_ERR err;
  5.   CPU_TS ts;
  6.   uchar buf[50];
  7.   while (1)
  8.    {
  9.     OSSemPend(&Cardflage,
  10.                       0,  //无限等待
  11.                      OS_OPT_PEND_BLOCKING,
  12.                      &ts,
  13.                      &err);
  14.     if( err == OS_ERR_NONE)               
  15.       {
  16.         sprintf((char*)buf,"Please take off the card!\r");
  17. #ifdef ucos_debug                       
  18.       uart_printf(buf,strlen(buf));       
  19. #endif                                       
  20.       }
  21.   OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err);
  22. }
  23. }
复制代码
  1. static void Task_on_off_antenna(void *p_arg)//优先级 =9
  2. {
  3.   OS_ERR err;
  4.   static uchar ch;
  5.   uchar buf[50];       
  6.   while (1)
  7.     {
  8.         OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_HMSM_STRICT,&err);
  9.         FM1715_CloseRF();
  10.         OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_HMSM_STRICT,&err);
  11.         FM1715_OpenRF();
  12.                  
  13.         memset(buf,0,sizeof(buf));
  14.         ch = mcml_request(buf); //寻卡
  15.         if(ch == FM1715_OK)   
  16.          {
  17.             ch = 0x01;
  18.             OSSemPost(&Cardflage,
  19.                            OS_OPT_POST_1,
  20.                            &err);
  21.             sprintf((char*)buf,"Detected card!\r");
  22. #ifdef ucos_debug                       
  23.            uart_printf(buf,strlen(buf));       
  24. #endif                               
  25.             GPIO_SetBits(GPIOB,GPIO_Pin_13);
  26.             OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err);
  27.             GPIO_ResetBits(GPIOB,GPIO_Pin_13);       
  28.          }   
  29.    OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err);
  30.    }
  31. }
复制代码
调试结果是,程序进入任务Task_on_off_antenna的L18后 成功释放信号量Cardflage后,任务立马跳到任务Task_DecteCard中了。
调试结果见下图1

按照任务之间优先级来理解 程序应该是执行完高优先级的任务再去别的任务的。很费解,麻烦高手帮我分析下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-5-11 21:41:22 | 显示全部楼层
原因找到了,按照优先级来理解是对的。
只是两个任务在抢占同一个uart资源,再加个信号量就可以了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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