找回密码
 立即注册
查看: 183|回复: 3

FreeRTOS for STC32G12K128内核代码解读(二)任务调度(下)

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

    积分
    2110
    发表于 2024-3-9 10:26:02 | 显示全部楼层 |阅读模式
    本帖最后由 gentleman 于 2024-3-9 16:05 编辑

    FreeRTOS for STC32G12K128内核代码解读(二)任务调度(下)

        原计划,这一期 讲挂起任务
        考虑到和 阻塞任务有很高的相似度
        再发一期 就有点水了
        这期不读源码,总结一下完整的任务调度 (含阻塞)
               详细内容去对应的那一期查看
        图
           截图202403091604582299.jpg

         图2
          截图202403091000283602.jpg


         这期我们自己写一个例程
    1. 任务函数
       portTASK_FUNCTION( vTaskA, pvParameters )
    {

        UNUSED( pvParameters );
        while(1)
        {
            printf("运行任务A\r\n");               //实际项目不建议这样使用共享资源,此处仅为方便观察
            vTaskDelay(100);
        }  
        vTaskDelete(NULL);
    }

    portTASK_FUNCTION( vTaskB, pvParameters )
    {

        UNUSED( pvParameters );
        while(1)
        {
            printf("运行任务B\r\n");             //实际项目不建议这样使用共享资源,此处仅为方便观察
            vTaskDelay(500);
        }  
        vTaskDelete(NULL);
    }

    portTASK_FUNCTION( vTaskC, pvParameters )
    {

        UNUSED( pvParameters );
        while(1)
        {
            printf("运行任务C\r\n");            //实际项目不建议这样使用共享资源,此处仅为方便观察
            vTaskDelay(1000);
        }  
        vTaskDelete(NULL);
    }
    portTASK_FUNCTION( vTaskD, pvParameters )
    {

        UNUSED( pvParameters );
        while(1)
        {
            printf("运行任务D\r\n");            //实际项目不建议这样使用共享资源,此处仅为方便观察
            vTaskDelay(1000);
        }  
        vTaskDelete(NULL);
    }

      4个任务 A 延时100  B 500 CD 1000  


    2.建立任务 再main中

        xTaskCreate(vTaskA,"TaskA",128,NULL,1,NULL);
        xTaskCreate(vTaskB,"TaskB",128,NULL,2,NULL);
        xTaskCreate(vTaskC,"TaskC",128,NULL,2,NULL);
        xTaskCreate(vTaskD,"TaskD",128,NULL,2,NULL);


      让BCD 优先级2
          A 优先级1


    3.运行过程分析
      
      建立任务后  当前任务会指向任务D (不懂的去看之前的内容)
                
                  所以D会先运行
                  
         D运行   D运行到vTaskDelay(1000); 进入阻塞状态
                
                 把D 放到了 阻塞链表
                
                 这时 当前任务指向了B (不懂的还是去看之前的内容 :)
         B运行   B 阻塞
                 B 移入阻塞链表
                 当前任务指向C

         C运行   C 阻塞
                 C 移入阻塞链表
                 当前任务指向低优先级的A
         A运行   A 阻塞

                 A 移入阻塞链表
         空闲任务运行
         
         100ms到了 A 退出阻塞 ,被移回 就绪链表【1】
                   A 时此时优先级最高的任务
                   当前任务指向A
         运行A    A阻塞
         运行空闲
         
         。。。
       
         500ms    B退出阻塞,被移回就绪链表【2】
                  B的优先级更高,所以不管A是否就绪
                  当前任务都会指向B
         B运行    B阻塞
                  B 移入阻塞链表
         恢复B退出阻塞前的状态
         继续运行A 或者空闲
         。。。
         1000ms   虽然C D 同为1000ms
                  但C后移入阻塞链表的
                  C在D 的后一项
                  所以 D先退出阻塞
                  先运行D


         。。。

         以上就是 包含阻塞任务的整体任务调度分析
         例程见附件
         










    demo1.7z

    1.91 MB, 下载次数: 11

    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    • +1

      楼主威武~

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

    积分
    2110
     楼主| 发表于 2024-3-9 10:30:39 | 显示全部楼层
    本帖最后由 gentleman 于 2024-3-11 11:42 编辑

    目录
    1.任务创建(上)    FreeRTOS内核代码解读(一)任务建立(上) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
    2. 任务建立(下)  FreeRTOS for STC32G12K128内核代码解读(一)任务建立(下) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
    3. 任务调度 (上)   FreeRTOS for STC32G12K128内核代码解读(二)任务调度(上) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
    4.任务调度(中) FreeRTOS for STC32G12K128内核代码解读(二)任务调度(中) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    5.任务调度(中下)FreeRTOS for STC32G12K128内核代码解读(二)任务调度(中下) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    6.任务调度 (下)FreeRTOS for STC32G12K128内核代码解读(二)任务调度(下) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    下一期 FreeRTOS for STC32G12K128内核代码解读(三)队列(1) - FreeRTOS/实时操作系统/文件系统/嵌入式系统软件,TFT-GUI/uGFX - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

    积分
    2110
     楼主| 发表于 2024-3-9 10:32:39 | 显示全部楼层
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    4 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    2

    主题

    148

    回帖

    191

    积分

    注册会员

    积分
    191
    发表于 2024-3-27 15:13:27 | 显示全部楼层
    跟着学习
    回复 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 16:43 , Processed in 0.063140 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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