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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 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, 下载次数: 62

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

    楼主威武~

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 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)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-04-30 10:10:32

3

主题

155

回帖

537

积分

高级会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:43 , Processed in 0.124144 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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