搜索
bottom↓
回复: 4

[请教]uCOS-II的任务切换是直接从无限循环中开始吗?

[复制链接]

出0入0汤圆

发表于 2011-8-12 21:13:40 | 显示全部楼层 |阅读模式
假设已创建两个任务,A和B。并设定启动任务优先级为0,任务A优先级为1,任务B优先级为2。代码如下:
  ....../*之前定义和声明及main()段代码略*/
void taskStart(){
   
   OSTaskCreate (taskA,
                  (void *)0,                  
                    &GstkA[TASK_A_STK_SIZE-1],
                        1);
    OSTaskCreate (taskB,
                  (void *)0,                  
                    &GstkB[TASK_B_STK_SIZE-1],
                        2);

    while(1){
      OSTaskSuspend(OS_PRIO_SELF);      /*启动任务将自己挂起*/
                                                                        
    }
}

void taskA(){
   
    .......
     /*用户代码段1*/

    while(1){
      .......
      /*用户代码段2*/
      OSTimeDly(10);
    }
}

void taskB(){
   
    .......
     /*用户代码段3*/

    while(1){
      .......
      /*用户代码段4*/
      OSTimeDly(10);
    }
}

问当任务A、B切换的时候,会执行用户代码段1和3吗?还是直接当切换到任务A时候直接执行用户代码段2?
另外,当我的用户代码程序执行时候大于OSTimeDly(10);时,会出现什么情况?
先谢谢各位了!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-12 21:43:02 | 显示全部楼层
回复【楼主位】ShaoKn
假设已创建两个任务,a和b。并设定启动任务优先级为0,任务a优先级为1,任务b优先级为2。代码如下:
  ....../*之前定义和声明及main()段代码略*/
void taskstart(){
     
   ostaskcreate (taska,
                  (void *)0,   
            &gstka[task_a_stk_size-1],  
       1);  
    ostaskcreate (taskb,
                  (void *)0,   
            &gstkb[task_b_stk_size-1],  
       2);  
    while(1){
      ostasksuspend(os_prio_self);      /......
-----------------------------------------------------------------------

1 第一次调度的时候会从任务的最开始执行,以后会从上次被调度器挂起的地方执行。
2 如果任务2的执行时间大于10,则10个ticks过后任务B会被抢占A抢占

出0入0汤圆

发表于 2011-8-12 22:30:30 | 显示全部楼层
恩呢。启动任务用c语言初始化好各个任务后会切到汇编,没有用普通的任务返回,而是修改了LR中的值(反正我是这么移植的),返回后便是其他任务。

出0入0汤圆

发表于 2011-8-12 23:05:53 | 显示全部楼层
代码段1,3这辈子只会执行一次,任务切换执行的代码只在循环体内

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-26 15:37

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

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