找回密码
 立即注册
查看: 335|回复: 2

FreeRTOS for STC32G12K128内核代码解读(一)任务建立(下)

[复制链接]
  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2138

    积分

    荣誉版主

    积分
    2138
    发表于 2024-2-29 10:24:44 | 显示全部楼层 |阅读模式
    本帖最后由 gentleman 于 2024-2-29 13:51 编辑

    FreeRTOS for STC32G12K128内核代码解读(一)任务建立(下)

         接上回
             截图202402290905159032.jpg


        for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
        {
            vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
        }

        初始化 以优先级为索引的 就绪链表数组 pxReadyTasksLists[]
        这几段代码 涉及到了 几个链表/链表数组
        这里跳过去看一下

           截图202402290909568998.jpg

          这几个链表 /链表数组 与FreeRTOS 的几种任务状态有关
        这里补充一下,知道的可以跳到后面代码解读部分
            FreeRTOS中有4种状态
               1.运行Runing            -当前cpu正在执行的任务
               2.阻塞Blocked           -任务等待一些事件,事件完成或超时后能够被执行
                                               比如常见的  vTaskDelay() FreeRTOS提供的延时函数
               3.就绪Ready              -准备就绪,等待被cpu执行的任务
               4.挂起Suspended       - 不会被运行的任务
                                                只能通过调用指定函数 进入或退出这种状态
               下图为几个状态直接的关系,之后会详细讲解相关函数


                               截图202402290932085657.jpg      

        继续阅读代码
          346行 pxReadyTasksLists[ configMAX_PRIORITIES ]


        其中configMAX_PRIORITIES 为最高优先级  默认32 可在头文件中修改
        这个就是任务就绪链表,之后我们会把任务TCB 放在对应优先级为索引的链表中
        例:假设 任务A 优先级1   
        那么任务A 的TCB  就会被放在 pxReadyTasksLists[1]

      这个一会讲到
          xDelayedTaskList1  xDelayedTaskList2
      这两个 是任务阻塞链表
          pxDelayedTaskList  pxOverflowDelayedTaskList

      两个指针指向对应的 阻塞链表
      xSuspendedTaskList
       任务挂起链表
      xPendingReadyList
       这个是 当任务调度器停止时, 如果有任务从挂起状态恢复了(一般是在中断中),任务会被放在这个链表。
      相关状态切换函数,在任务调度时再展开
      返回到函数体

           截图202402290949473281.jpg

        如果当前任务不为空
        判断 新任务 与当前任务优先级
         保证当前任务为最高优先级
          继续

           截图202402290953303604.jpg    
          prvAddTaskToReadyList( pxNewTCB );
      添加新任务到就绪链表函数
      跳进去

       截图202402290954435251.jpg      
       截图202402290955358231.jpg
         查看第223行的宏定义
         保证uxTopReadyPriority 最高优先级
       展开224行
          截图202402290958054203.jpg

         这个函数是 插入链表尾项
         吧参数2插入  参数1链表尾部
        listINSERT_END( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xStateListItem ) ); \

         就是刚刚提到过的
         将新任务控制块的状态链表  插入 优先级索引 的任务就绪链表数组
         即 新任务TCB的 xStateListItem   插入  pxReadyTasksLists[新任务的优先级] 数组尾部

        截图202402291008456420.jpg
          退出/进入临近区    -   就是开启/关闭  总中断
          避免中断函数干扰任务的建立

          截图202402291019104541.jpg
       目前任务调度器还没有开启
       这部分也没运行,先跳过
    到此,任务建立函数的内容解读完毕
        下一篇 从

           截图202402291024117727.jpg

          vTaskStartScheduler();启动任务调度函数
       开始 解读任务调过程
         
      






    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2138

    积分

    荣誉版主

    积分
    2138
     楼主| 发表于 2024-2-29 10:30:35 | 显示全部楼层
    本帖最后由 gentleman 于 2024-3-9 10:32 编辑

    目录
    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)
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2138

    积分

    荣誉版主

    积分
    2138
     楼主| 发表于 2024-2-29 10:30:44 | 显示全部楼层
    占楼
    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-15 17:41 , Processed in 0.064890 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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