码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • μC/OS-II---内存管理2(os_core.c)


    流程---内存管理扩展

      • 初始化μC/OS-II
      • 创建用户起始任务
      • 开始多任务调度
      • 统计Task
      • 创建用户应用程序任务

    在这里插入图片描述

    初始化μC/OS-II

    void  OSInit (void)
    {
    	OSInitHookBegin();                                           /* Call port specific initialization code   */
    	OS_InitMisc();                                               /* Initialize miscellaneous variables       */
    	OS_InitRdyList();                                            /* Initialize the Ready List                */
    	OS_InitTCBList();                                            /* Initialize the free list of OS_TCBs      */
    	OS_InitEventList();                                          /* Initialize the free list of OS_EVENTs    */
    	#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
    		OS_FlagInit();                                               /* Initialize the event flag structures     */
    	#endif
    	#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
    		OS_MemInit();                                                /* Initialize the memory manager            */
    	#endif
    	#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u)
    		OS_QInit();                                                  /* Initialize the message queue structures  */
    	#endif
    		OS_InitTaskIdle();                                           /* Create the Idle Task                     */
    	#if OS_TASK_STAT_EN > 0u
    		OS_InitTaskStat();                                           /* Create the Statistic Task                */
    	#endif
    	#if OS_TMR_EN > 0u
    		OSTmr_Init();                                                /* Initialize the Timer Manager             */
    	#endif
    		OSInitHookEnd();                                             /* Call port specific init. code            */
    	#if OS_DEBUG_EN > 0u
    		OSDebugInit();
    	#endif
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    创建用户起始任务

    #if OS_TASK_CREATE_EN > 0u
    INT8U      OSTaskCreate     (
    									void           (*task) (void *p_arg),
    									void            *p_arg,
    									OS_STK          *ptos,
    									INT8U            prio
    							);
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    开始多任务调度

    void  OSStart (void)
    {
    	if (OSRunning == OS_FALSE)
    	{
    		OS_SchedNew();                               /* Find highest priority's task priority number   */
    		OSPrioCur     = OSPrioHighRdy;
    		OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
    		OSTCBCur      = OSTCBHighRdy;
    		OSStartHighRdy();                            /* Execute target specific code to start task     */
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    统计Task

    #if OS_TASK_STAT_EN > 0u
    void  OSStatInit (void)
    {
    	#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */
    		OS_CPU_SR  cpu_sr = 0u;
    	#endif
    		OSTimeDly (2u);                              /* Synchronize with clock tick                        */
    		OS_ENTER_CRITICAL();
    		OSIdleCtr    = 0uL;                          /* Clear idle counter                                 */
    		OS_EXIT_CRITICAL();
    		OSTimeDly (OS_TICKS_PER_SEC / 10u);          /* Determine MAX. idle counter value for 1/10 second  */
    		OS_ENTER_CRITICAL();
    		OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
    		OSStatRdy    = OS_TRUE;
    		OS_EXIT_CRITICAL();
    }
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    创建用户应用程序任务

  • 相关阅读:
    HackTheBox UpDown python沙箱逃逸获得用户shell,sudo提权
    FOC系列(一)----DRV8301芯片的学习
    开学了,如何用python开发个上课点名小程序~
    AsyncHttpClient And Download Speed Limit
    计算机网络第三章——数据链路层(中)
    (10)(10.8) 固件下载
    Hive从入门到大牛【Hive 学习笔记】
    golang - 实现并发数控制的方法
    瑞吉外卖项目实战Day9-前后端分离,项目部署
    记录:移动设备软件开发(layout六大布局)
  • 原文地址:https://blog.csdn.net/weixin_45880844/article/details/134405500
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号