微型操作系统内核源码详解系列五(1):arm cortex m3架构

2024-06-15 19:28

本文主要是介绍微型操作系统内核源码详解系列五(1):arm cortex m3架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 系列一:微型操作系统内核源码详解系列一:rtos内核源码概论篇(以freertos为例)-CSDN博客

系列二:微型操作系统内核源码详解系列二:数据结构和对象篇(以freertos为例)-CSDN博客

系列三:微型操作系统内核源码详解系列三(0):空间存储及内存管理篇(前置篇)-CSDN博客

                微型操作系统内核源码详解系列三(1):任务及切换篇(任务函数定义)-CSDN博客

                微型操作系统内核源码详解系列三(2):任务及切换篇(任务函数定义)-CSDN博客

                微型操作系统内核源码详解系列三(3):任务及切换篇(任务函数定义)-CSDN博客

                微型操作系统内核源码详解系列三(4):arm架构篇-CSDN博客

                微型操作系统内核源码详解系列三(5):进程与线程-CSDN博客

系列四:

 ​​​​​微型操作系统内核源码详解系列四(1):操作系统调度算法(linux0.11版本内核)-CSDN博客

微型操作系统内核源码详解系列四(2):操作系统调度算法(rt-thread内核)-CSDN博客

微型操作系统内核源码详解系列四(3):操作系统调度算法(FreeRTOS内核篇上)-CSDN博客

微型操作系统内核源码详解系列四(4):操作系统调度算法(FreeRTOS内核篇下)-CSDN博客

系列五:

微型操作系统内核源码详解系列五(1):arm cortex m3架构-CSDN博客

本系列笔者又回到了FreeRTOS内核源码的讲解,这是笔者在之前的博客中讲解的函数源码,

读者可以参考该图回忆笔者的讲解流程:

        截至到目前为止,笔者已经讲完了入口函数xTaskCreat函数,具体参考上图,接下来准备从pxPortinitialiseStack函数入手,正式过渡到对arm cortex m3架构的讲解。

        通过前面的12篇博客,笔者对FreeRTOS的内核进行了抽象,讲述了FreeRTOS内核源码是如何构成一个调度器的,相信读者已经对rtos的执行过程有了清晰的概念,既然核心思想已经阐述完整,那么让我们顺着主干部分一步步构建FreeRTOS内核。

        理论上,在掌握FreeRTOS内核的调度框架后,读者其实可以自己尝试写一个rtos了,并不是要写一个完整能执行的FreeRTOS,而是根据笔者在前面十余篇博客提供的基础,把对应的内核框架写出来,把各种行为用面向对象的思想进行抽象,定义对应函数,每个函数对应的功能都需要读者进行仔细思考和分配,将调度器的行为具体到每一个函数中。在这之后,读者可以参考FreeRTOS源码,一步步补充自己编写的框架的细节。

        例如,读者可以先从简单切换任务出发,不断修改切换函数,比如定义两个任务,开始是不引入优先级,task_switch函数是直接切换到另一个任务,那么读者只要完成以下工作即可:链表对象的实现,内存管理,任务定义,task_switch换成另一个任务,systick和PendSV中断完成任务切换。这些东西笔者其实已经讲得大差不差了,由于systick和PendSV中断与计算机架构密切相关,模式相对固定,直接参考FreeRTOS内核即可。如此一来,其实一个os内核已经实现了,算下来绝对不会超过一千行代码,两个星期就可以完成,如果读者想深入理解实时操作系统内核,可以进行尝试。

        本系列笔者将会回到arm架构中断部分的源码,带领读者一步步揭开任务切换神秘的面纱,这几篇博客的重点是arm cortex m3架构,FreeRTOS源码中的systick中断和PendSV中断函数是我们理解官方手册的入口。只有通过官方手册,我们对arm架构的上下文切换技术的理解才会深刻。

        笔者在前面的博客讲过一点sysytick中断和PendSV中断在arm架构中是如何完成任务切换的,让我们看看arm cortex m3官方手册:

        这就是本系列博客要探讨的重点,笔者将会结合FreeRTOS内核源码来理解官方手册。

        不过在此之前,让笔者先讲一讲pxPortinitialiseStack函数,这是一个初始化任务栈的函数,这个函数的理论依据可以参考arm cortex m3官方手册对os堆栈初始化的介绍:

        接下来笔者准备结合arm cortex m3官方手册讲解pxPortinitialiseStack函数,以便于方便读者理解arm架构中栈是如何加载到cpu寄存器的,从而理解系统上下文切换函数的源码。

这篇关于微型操作系统内核源码详解系列五(1):arm cortex m3架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064355

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作