(学习日记)2024.03.26:UCOSIII第二十三节:系统启动流程概览(持续更新)

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.03.26:UCOSIII第二十三节:系统启动流程概览(持续更新)

  • 三十七、UCOSIII:系统启动流程概览
    • 1、运行启动文件
    • 2、系统初始化
      • 1. 初始化钩子函数相关的代码
      • 2. 把中断嵌套计数器设为0
      • 3. 设置多任务处理器的状态
      • 4. 将锁定计数器、当前任务指针、最高优先级任务指针、当前优先级数值、最高优先级数值、优先级记录数值设为0
      • 5. 初始化优先级列表
      • 6. 初始化就绪列表
      • 7. 初始化任务管理器
      • 8. 初始化空闲任务
      • 9. 初始化时钟节拍任务
      • 10. 操作系统配置初始化
    • 3、定义启动任务
      • 1. 板级硬件进行初始化
      • 2. CPU初始化
      • 3. 时钟初始化
      • 4. 内存初始化
      • 5. 创建各种任务
      • 6. 删除启动任务自身
    • 3、启动任务调度器

三十七、UCOSIII:系统启动流程概览

本章是糅杂了笔者自己的感悟,从debug调试的视角来粗略一览系统启动流程,特点是快速上手、快速回忆,需要对之前各个函数都有一定的了解。

1、运行启动文件

在系统上电的时候第一个执行的是启动文件里面由汇编编写的复位函数Reset_Handler

复位函数的最后会调用C库函数__main__main函数的主要工作是初始化系统的堆和栈,最后调用C中的main()函数,从而去到C的世界。

2、系统初始化

进入系统初始化函数OSInit(),OSInit()声明如下:

void  OSInit (OS_ERR  *p_err)

系统初始化主要包括:

1. 初始化钩子函数相关的代码

OSInitHook();   /*初始化钩子函数相关的代码*/

2. 把中断嵌套计数器设为0

OSIntNestingCtr= (OS_NESTING_CTR)0;     /*清除中断嵌套计数器*/

3. 设置多任务处理器的状态

OSRunning =  OS_STATE_OS_STOPPED;       /*未启动多任务处理*/

4. 将锁定计数器、当前任务指针、最高优先级任务指针、当前优先级数值、最高优先级数值、优先级记录数值设为0

OSSchedLockNestingCtr = (OS_NESTING_CTR)0;/*清除锁定计数器*/OSTCBCurPtr= (OS_TCB *)0;       /*将OS_TCB指针初始化为已知状态  */
OSTCBHighRdyPtr = (OS_TCB *)0;OSPrioCur = (OS_PRIO)0;                 /*将优先级变量初始化为已知状态*/
OSPrioHighRdy                   = (OS_PRIO)0;
OSPrioSaved                     = (OS_PRIO)0;

5. 初始化优先级列表

OS_PrioInit();  /*初始化优先级位图表*/

6. 初始化就绪列表

OS_RdyListInit();       /*初始化就绪列表*/

7. 初始化任务管理器

OS_TaskInit(p_err);   /*初始化任务管理器*/

8. 初始化空闲任务

OS_IdleTaskInit(p_err);    /* 初始化空闲任务  */       

9. 初始化时钟节拍任务

OS_TickTaskInit(p_err);   /* 初始化时钟节拍任务*/       

10. 操作系统配置初始化

OSCfg_Init();

3、定义启动任务

系统在启动任务里面创建各种应用任务,当所有任务都创建成功后,启动任务把自己删除。
启动任务声明如下:

static  void  AppTaskStart (void *p_arg)

启动任务主要包括如下内容:

1. 板级硬件进行初始化

BSP_Init();

2. CPU初始化

CPU_Init();

在CPU初始化中,需要初始化时间戳、最大关中断时间测量 和 CPU 名字

3. 时钟初始化

cpu_clk_freq = BSP_CPU_ClkFreq();/* Determine SysTick reference freq. */
cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;
OS_CPU_SysTickInit(cnts); /*Init μC/OS periodic time src (SysTick).*/

4. 内存初始化

Mem_Init();

5. 创建各种任务

使用OSTaskCreate()函数来创建各个任务
OSTaskCreate()在之前的章节已介绍,声明如下:

void  OSTaskCreate (OS_TCB        *p_tcb,CPU_CHAR      *p_name,OS_TASK_PTR    p_task,void          *p_arg,OS_PRIO        prio,CPU_STK       *p_stk_base,CPU_STK_SIZE   stk_limit,CPU_STK_SIZE   stk_size,OS_MSG_QTY     q_size,OS_TICK        time_quanta,void          *p_ext,OS_OPT         opt,OS_ERR        *p_err)

6. 删除启动任务自身

使用OSTaskDel()函数来删除,声明如下:

void  OSTaskDel (OS_TCB  *p_tcb,OS_ERR  *p_err)

3、启动任务调度器

OSStart函数声明如下:

OSStart(&err);

之前章节已解释,此处不再概述
该函数思路就一个,把 最高优先级任务指针 赋值给 当前任务指针 ,然后将 最高优先级任务指针 指向下一个最高优先级任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事…

沃尔玛百货有限公司 企业网页设计制作 企业html网页成品 跨国公司网页设计开发 web前端开发,html+css网页设计素材,静态html学生网页成品源码

沃尔玛百货有限公司 WalMart 7页面 企业主题 带jquery图片轮播特效 滚动文字 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.or…

如何保证redis里的数据都是热点数据

MySQL 里有 2000w 数据&#xff0c;Redis 中只存 20w 的数据&#xff0c;如何保证 redis 中的数据都是热点数据&#xff1f; 1.Redis 过期删除策略 1&#xff09;惰性删除:放任键过期不管&#xff0c;但是每次从键空间中获取键时&#xff0c;都检查取得的键是否过期&#xff0c…

华为 Pocket 2 防晒指南:用好这三个功能,再也不用担心被晒伤了!

防晒现在已经是外出护肤的日常操作&#xff0c;但为什么明明涂了防晒霜还是会被晒伤&#xff1f;华为 Pocket 2的出现&#xff0c;为我们带来了全新的防晒解决思路&#xff0c;可以在防晒霜涂抹、晒斑检测、紫外线强度检测三方面帮到我们。 紫外线看不见也摸不着&#xff0c;我…

【跟着CHATGPT学习硬件外设 | 04】ADC

本文根据博主设计的Prompt由CHATGPT生成&#xff0c;形成极简外设概念。 &#x1f680; 1. 概念揭秘 1.1 快速入门 模数转换器&#xff08;ADC&#xff0c;Analog-to-Digital Converter&#xff09;是一种将模拟信号转换为数字信号的电子设备。模拟信号通常表示物理测量的连…

【CKA模拟题】案例演示如何创建PVC

Useful Resources: Persistent Volumes Claim 题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesA persistent volume named red-pv-cka is available. Your task is to create a Persi…

56、FreeRTOS/GPIO与定时器相关学习20240329

一、代码实现控制开发板上的指示灯闪烁。 /* USER CODE BEGIN 0 */ //利用定时器机制 定时器溢出时对应的回调函数实现如下 //本次实现控制PB0&#xff0c;PB1两个灯 int flag1 0,flag2 0;//使用一个标记执行以下代码 会造成一个灯常亮 另一个常灭 void HAL_TIM_PeriodElaps…

Charles抓包配置代理手机连接

Charles下载地址&#xff1a; Charles_100519.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Charles_100519.zip最新版正式版官方版绿色版下载,Charles_100519.zip安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com…

MIPI RFFE接口

1. 概况 MIPI RFFE是一种专门针对当前及未来无线系统在射频(RF)前端控制界面规范。随着手机射频系统日趋复杂&#xff0c;业界需要一个单一控制界面解决方案。MIPI联盟的RF前端控制界面(RFFE)规范通过提供一个可连接到收发器或无线电的总线界面解决了这一难题&#xff0c;可用于…

【动手学深度学习-pytorch】 9.4 双向循环神经网络

在序列学习中&#xff0c;我们以往假设的目标是&#xff1a; 在给定观测的情况下 &#xff08;例如&#xff0c;在时间序列的上下文中或在语言模型的上下文中&#xff09;&#xff0c; 对下一个输出进行建模。 虽然这是一个典型情景&#xff0c;但不是唯一的。 还可能发生什么其…

IDEA插件开发-File -> New->project 中添加一个类java工程

写一个IDEA插件&#xff0c;在IDEA的File -> New -> Project 中添加一个选项myOptions &#xff0c;该选项集成java选项的所有功能&#xff0c;同时新增一个小功能&#xff0c;这个小功能是: 把插件功能下lib目录中的jar包自动加到新建的工程的依赖中 1. 在 IntelliJ IDE…

Vue中使用Vuex(超详细)基本使用方法

在vue中使用vuex&#xff0c;不同的vue版本要对应使用不同的vuex&#xff0c;在这里不做详情介绍&#xff0c;想具体了解的&#xff0c;请自行度娘或者必应一下。 在使用vuex之前&#xff0c;我们创建一个新的项目&#xff0c;这里我们使用的是vue的脚手架创建一个vue项目。 …

入围中国大模型 + 知识管理最佳案例 15 强,杭州悦数 x 中国船舶项目收获认可!

近期&#xff0c;由国内知名的数字化研究与服务机构沙丘社区发布的《2024 中国“大模型知识管理”最佳实践案例 15 强》新鲜出炉&#xff0c;杭州悦数科技有限公司助力中国船舶集团有限公司第七〇八研究所打造的行业方案“基于图和多级智能体的动态排障知识问答系统”榜上有名。…

vue属性与方法

vue属性与方法 计算属性v-model指令——表单的实现样式绑定 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

对iOS的内存存储的一些理解

最近写项目的时候遇到了一些内存上的问题&#xff08;比如内存泄漏等等&#xff09;&#xff0c;通过网上的方法解决后&#xff0c;好奇iOS的数据是如何存储的&#xff0c;特记于此。 一、iOS的内存区域 iOS 中应用程序使用的计算机内存不是统一分配空间&#xff0c;运行代码使…

【感悟《剑指offer》典型编程题的极练之路】02字符串篇!

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 文章所属专栏&#xff1a;《剑指offer》典型编程题的极练之路 ​​​​​​ 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c…

Leetcode 剑指 Offer II 071.按权重随机选择

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个正整数数组 w &#xff0c;其中 w[i] 代表下标 i 的权重…

电子级高纯PFA材质实验室器皿耗材PFA漏斗PFA试剂瓶PFA烧杯

PFA三角漏斗&#xff0c;整体均是PFA材质&#xff0c;无污染风险&#xff0c;可高压灭菌。 尺寸&#xff1a;外径40mm、160mm PFA三角漏斗 特点&#xff1a; 1、一体式成型&#xff0c;结构稳定&#xff1b; 2、化学耐受性强&#xff0c;耐受强酸、强碱以及各种有机溶剂&…

如何划分训练集、测试集、验证集

训练集、测试集和验证集是在机器学习和数据科学中常用的术语&#xff0c;用于评估和验证模型的性能。它们通常用于监督学习任务中。 1. 训练集&#xff08;Training Set&#xff09;&#xff1a;训练集是用于训练机器学习模型的数据集。在训练期间&#xff0c;模型使用训练集中…

Tomcat是如何处理并发请求的?

Tomcat处理请求流程&#xff1a; Tomcat是采用了扩展JDK线程池的方案 :先启动若干数量的线程&#xff0c;并让这些线程都处于睡眠状态&#xff0c;当客户端有一个新请求时&#xff0c;就会唤醒线程池中的某一个睡眠线程&#xff0c;让它来处理客户端的这个请求&#xff0c;当处…