搜索
bottom↓
回复: 18

初学uc/os的疑问

[复制链接]

出0入0汤圆

发表于 2013-11-25 21:58:06 | 显示全部楼层 |阅读模式
我创建了三个人物,第一个任务是建立一个内存分区,第二个任务是调用OSMemGet获得一个一个内存块,第三个任务是查询任务1建立的内存分区的状态。结果任务1执行第一次后,任务2,3根部就不执行了。这是怎么回事啊?求指教!

出0入0汤圆

发表于 2013-11-25 22:04:16 | 显示全部楼层
ostimedelay了没

出0入0汤圆

 楼主| 发表于 2013-11-25 22:05:22 | 显示全部楼层

没有啊?你的意思是每个任务要延时吗?

出0入0汤圆

 楼主| 发表于 2013-11-25 22:10:34 | 显示全部楼层
mayo20102012 发表于 2013-11-25 22:05
没有啊?你的意思是每个任务要延时吗?

延时了 也不行啊

出0入0汤圆

发表于 2013-11-25 22:12:20 | 显示全部楼层
拿去不谢
  1. /*********************************************************************************************************
  2. ** Function name:       Task_Start
  3. ** Descriptions:        Start task
  4. ** input parameters:    pvArg
  5. ** output parameters:   None 无
  6. ** Returned value:      None 无
  7. ** Created by:         
  8. ** Created Date:        
  9. **--------------------------------------------------------------------------------------------------------
  10. ** Modified by:
  11. ** Modified date:
  12. *********************************************************************************************************/
  13. static  void  taskStart (void  *pvArg)
  14. {
  15.     (void)pvArg;

  16. #if OS_TASK_STAT_EN
  17.     OSStatInit();                                                       /* Enable statistics            */
  18. #endif

  19.     /*
  20.      *  Create the other tasks here.
  21.      */
  22. #if  OS_FPU_EN
  23. #if UART_TASK
  24.     OSTaskCreateExt(taskUart,
  25.                     NULL,
  26.                     &TASK_UART_STK[TASK_UART_STK_SIZE-1],
  27.                     TASK_UART_PRIO,
  28.                     TASK_UART_PRIO,
  29.                     TASK_UART_STK,
  30.                     TASK_UART_STK_SIZE,
  31.                     NULL,
  32.                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
  33. #endif
  34.     OSTaskCreateExt(taskEthDemo,
  35.                     NULL,
  36.                     &TASK_ETH_STK[TASK_ETH_STK_SIZE-1],
  37.                     TASK_ETH_PRIO,
  38.                     TASK_ETH_PRIO,
  39.                     TASK_ETH_STK,
  40.                     TASK_ETH_STK_SIZE,
  41.                     NULL,
  42.                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  43. #else
  44. #if UART_TASK
  45.     OSTaskCreate(taskUart, NULL, &TASK_UART_STK[TASK_UART_STK_SIZE-1], TASK_UART_PRIO);
  46. #endif
  47.     OSTaskCreate(taskEthDemo, NULL, &TASK_ETH_STK[TASK_ETH_STK_SIZE-1], TASK_ETH_PRIO);
  48. #endif
  49. #if FPU_T
  50. #if  OS_FPU_EN > 0u
  51.     OSTaskCreateExt((void (*)(void *)) taskFpu,
  52.                     NULL,
  53.                     &GstkTaskFpu[TASK_FPU_STK_SIZE-1],
  54.                     TASK_FPU_PRIO,
  55.                     TASK_FPU_PRIO,
  56.                     &GstkTaskFpu[0],
  57.                     TASK_FPU_STK_SIZE,
  58.                     NULL,
  59.                     (OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP));
  60. #else
  61.     OSTaskCreate(taskFpu, NULL, &GstkTaskFpu[TASK_FPU_STK_SIZE-1], TASK_FPU_PRIO );
  62. #endif
  63. #endif                                                                  /* 去除FPU任务                    */
  64. #if 0
  65.     OSTimeDly(OS_TICKS_PER_SEC * 8);
  66.     for (;;) {
  67.         /*
  68.          *  OSTaskSuspend(OS_PRIO_SELF);
  69.          *  The start task can be pended here.
  70.          */
  71.         bspLedOn(4);
  72.         OSTimeDly(OS_TICKS_PER_SEC >> 2);

  73.         bspLedOff(4);
  74.         OSTimeDly(OS_TICKS_PER_SEC >> 2);
  75.     }
  76. #else
  77.     OSTaskDel(OS_PRIO_SELF);
  78. #endif
  79. }
复制代码

出0入0汤圆

 楼主| 发表于 2013-11-25 22:14:01 | 显示全部楼层

额 这是啥》?

出0入0汤圆

 楼主| 发表于 2013-11-25 22:15:52 | 显示全部楼层

你是高手。。。。。

出0入0汤圆

 楼主| 发表于 2013-11-25 22:16:19 | 显示全部楼层

谢谢谢谢谢谢!

出0入0汤圆

 楼主| 发表于 2013-11-25 22:17:18 | 显示全部楼层

void task1(void* pdata)
{
   
   
    INT8U err;
  
  CommTxBuf=OSMemCreate(CommTxPart,100,32,&err);
  if(CommTxBuf==NULL){
    printf("创建内存分区失败");
  }
  else {
    printf("创建内存分区成功\n");
  }
OSTimeDlyHMSM(0,0,5,0);
}
/* Prints "Hello World" and sleeps for three seconds */
void task2(void* pdata)
{
   
   INT8U err;
   task1_pblk=OSMemGet(CommTxBuf,&err);
   if(task1_pblk==NULL){
    printf("获得内存块失败\n");
   }
   else {
    printf("获得内存块成功\n");
   }
  OSTimeDlyHMSM(0,0,5,0);
}

void task3(void* pdata)
{
   
  
   
   OS_MEM_DATA* data;
    OSMemQuery(CommTxBuf,data);
   printf("剩余内存块%lu",data->OSNFree);
   OSTimeDlyHMSM(0,0,5,0);
}
/* The main function creates two task and starts multi-tasking */

int main(void)
{
  OSInit();
  OSTaskCreateExt(task1,
                  NULL,
                  (void *)&task1_stk[TASK_STACKSIZE-1],
                  TASK1_PRIORITY,
                  TASK1_PRIORITY,
                  task1_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);
              
               
  OSTaskCreateExt(task2,
                  NULL,
                  (void *)&task2_stk[TASK_STACKSIZE-1],
                  TASK2_PRIORITY,
                  TASK2_PRIORITY,
                  task2_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);
                  
                  
OSTaskCreateExt(task3,
                  NULL,
                  (void *)&task3_stk[TASK_STACKSIZE-1],
                  TASK3_PRIORITY,
                  TASK3_PRIORITY,
                  task3_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);
  OSStart();
  return 0;
}  这是我的代码 不要见笑啊 ,求您找茬儿!

出0入0汤圆

发表于 2013-11-25 22:21:37 | 显示全部楼层
mayo20102012 发表于 2013-11-25 22:17
void task1(void* pdata)
{
   

我贴的代码有个for (;;)
你在task1里也搞一个看看。
其实我没学过uc

出0入0汤圆

发表于 2013-11-25 22:28:35 | 显示全部楼层
ucos的任务要写成死循环的

出0入0汤圆

 楼主| 发表于 2013-11-26 09:32:46 | 显示全部楼层
cyj_0220 发表于 2013-11-25 22:28
ucos的任务要写成死循环的

但是我如果是创建一个内存分区 应该不需要 死循环吧 创建完后 这个任务就删除,可以么?

出0入0汤圆

 楼主| 发表于 2013-11-26 09:33:06 | 显示全部楼层
cmheia 发表于 2013-11-25 22:21
我贴的代码有个for (;;)
你在task1里也搞一个看看。
其实我没学过uc

好吧。。。。

出0入0汤圆

发表于 2014-1-6 11:09:16 | 显示全部楼层
mayo20102012 发表于 2013-11-26 09:32
但是我如果是创建一个内存分区 应该不需要 死循环吧 创建完后 这个任务就删除,可以么? ...

也没见你自删啊

出0入0汤圆

 楼主| 发表于 2014-1-7 10:57:40 | 显示全部楼层

要是 可以 就自删!

出0入0汤圆

发表于 2014-1-9 22:46:49 | 显示全部楼层
ucos的任务必须是不能返回的。应该这样写while(1) {OSTimeDlyHMSM(0,0,5,0);}

出0入0汤圆

发表于 2014-4-28 11:35:55 | 显示全部楼层
路过路过 顺便看看  顶  希望一起交流

出0入0汤圆

发表于 2016-8-17 16:59:30 | 显示全部楼层
uc/os 商用如何收费,哪位大侠知道?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 05:19

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

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