之前一直关注linux内核 rtos内核 那STM32裸机的“”内核“”(源程序)是什么样的 他有哪些功能(模块)

把操作系统跟一款单片机作比较合适吗????
应该说是linux应用程序和裸机程序的比较

linux应用程序和裸机程序都是依托一款芯片运行的,linux可以运在cotex-a系列的芯片,裸机运行在cotex-m系列的芯片上。

实际上我比较的是下面两种情况中的②,只不过带操作系统的②功能比较强大罢了
case 1.运行操作系统的单片机: 硬件-----②操作系统内核-------应用程序
case 2.裸奔的单片机:硬件-----②xxxxxx------应用程序

先不管是哪个操作系统,问:内核的作用是什么

一、内核是什么 现代操作系统设计采用层次结构,往往将一些与硬件紧密相关的模块或运行频率较高的模块 设置在第一层软件中,称为操作系统的内核。内核功能简介 内核,是基于硬件的第一层软件扩充,是操作系统的核心,提供操作系统最基础的功能,是操作系统的基础。它为众多应用软件提供计算机硬件的安全访问的一部分软件,这种访问资源是有限的,并且内核决定一个程序对某部分硬件资源分配和占用多久进行管理。直接对硬件操作是非常复杂的,所以内核通过提供硬件抽象的方法来完成操作,硬件的抽象隐藏了复杂性,对软件提供和硬件交互的一个简洁的接口,是程序设计更为简单。但严格的说内核并不是计算机系统的必要组成部分。它主要对系统进程管理、内存管理、设备管理、网络管理及文件系统管理

linux内核:

有进程管理(进程调度 ,而且有不同的调度算法,编译内核前可选择使用哪种调度算法 进程间通信方法的实现)内存管理(外设mmu),文件系统、网络功能、硬件驱动、安全机制

STM32的“”内核“”,没有进程的概念,更不会有进程管理功能,也没有内存管理功能,没有网络功能等等那她有什么功能?????以下文件是不是可以看作stm32的“”内核“”

1.stm32f10x.h这个文件,实际上就相当于STM32的硬件抽象,他隔绝了底层的寄存器,向上提供了各种结构体,同时这个文件定义了很多的常量,都是在使用的时候赋值给某个寄存器的
2.system_stm32f10x.c和.h他们的作用是初始化系统(时钟),这个是启动的汇编文件里调用的,用于初始化系统
3.core_cm3.c和.h文件,他们是干什么的呢,看名字就知道这是个和内核比较接近的文件,所以它的功能就是初始化内核,我们都知道内核才是ARM公司的,其他的外设都是芯片厂商的,但是到底初始化了内核的什么,暂时还不清楚,
下次再补充
4.标准的外设驱动,misc是关于NVIC中断分组的,这个驱动被单独列出来因为原来的版本里面没有这个文件。
5. 再就是stm32f10x_it.c这个文件是系统中断函数
6. last BUT not least stm32f10x_conf.h这个文件里面的细节要注意,这个文件里面有一个宏,他可以开启所有的库函数里面的一个隐藏技能,就是再编译阶段检查函数的参数是否符合要求,相当吊的一个功能,他怎么实现的呢:利用断言和这个 assert_param(isXXX_ALL_PERIPH( ))宏

rtos最主要的就是任务调度功能

RTOS内核技术研究:任务上下文切换

前言
任务(task)或线程(thread),可以理解为一个个【用户的】功能函数,RTOS内核就是管理这些功能函数的运行逻辑,根据某些策略,如优先级、时间片,在各个运行的函数之间进行切换。

为何任务或线程不能【并行】工作,需要切换?原因是一般的MCU,都是单核处理,所以如果想实现多任务,需要分时复用CPU,宏观上,任务在各自的并行运行,微观上,任务根据调度,不断的切换运行,每个时间片,只有一个任务在运行。

切换任务,不单单是PC指针的跳转,还需要保存各个任务的现场,如CPU寄存器组,各个任务的现场称之为:任务上下文,context。

像裸机系统,中断来了,CPU会【自动保存现场】,自动压栈部分必要的CPU寄存器。中断处理完回来,执行LR,恢复CPU寄存器的值,程序继续正常的接着上次被中断的地方跑,而不是从头开始跑。

如何切换
任务或线程切换的实质:【上下文的切换】。

每个任务或线程,都设置一个控制块(结构体),用于保存CPU的一组寄存器。任务上下文切换时,可能会被外部中断打断,造成寄存器的错误保存,所以一般在上下文切换过程中,需要关闭全局中断响应。

STM32 ARM架构的MCU,有一个异常:PendSV,可悬起异常。这个PendSV,可以手动Pend,触发PendSV中断,并进入PendSV_Handler 中断处理函数。如果这个PendSV中断的优先级调整到最低,保证其他高优先级的中断处理完成,再进入PendSV中断,在关闭全局中断的情况下进行任务上下文切换,这样实时性得到保证,并能【安全】地进行任务上下文切换。
https://blog.csdn.net/tcjy1000/article/details/118322735?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164252359516780271518651%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164252359516780271518651&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-4-118322735.first_rank_v2_pc_rank_v29&utm_term=RTOS%E5%86%85%E6%A0%B8%E7%9A%84%E5%8A%9F%E8%83%BD&spm=1018.2226.3001.4187

拓展

STM32开发内核结构

之前一直关注linux内核 rtos内核 那STM32裸机的“”内核“”(源程序)是什么样的 他有哪些功能(模块)_第1张图片
图中已经很清晰了,我只想强调几个点:

  1. stm32f10x.h这个文件真是相当的吊啊,基本上所有的哭文件里都有包含这个文件,因为这个文件实际上就相当于STM32的硬件抽象,他隔绝了底层的寄存器,向上提供了各种结构体,同时这个文件定义了很多的常量,都是在使用的时候赋值给某个寄存器的

  2. 再往上来一个层级,system_stm32f10x.c和.h他们的作用是初始化系统(时钟),这个是启动的汇编文件里调用的,用于初始化系统

  3. 而对于core_cm3.c和.h文件,他们是干什么的呢,看名字就知道这是个和内核比较接近的文件,所以它的功能就是初始化内核,我们都知道内核才是ARM公司的,其他的外设都是芯片厂商的,但是到底初始化了内核的什么,暂时还不清楚,
    下次再补充

  4. 再往上就是标准的外设驱动,misc是关于NVIC中断分组的,这个驱动被单独列出来因为原来的版本里面没有这个文件。

  5. 再就是stm32f10x_it.c这个文件是系统中断函数

  6. last BUT not least
    stm32f10x_conf
    .h这个文件里面的细节要注意,这个文件里面有一个宏,他可以开启所有的库函数里面的一个隐藏技能,就是再编译阶段检查函数的参数是否符合要求,相当吊的一个功能,他怎么实现的呢:利用断言和这个 assert_param(isXXX_ALL_PERIPH( ))宏

好了总结一下,函数怎么操作底层寄存器的呢?首先明确一点,外设啥的都是要映射到存储器中的,所以用那个硬件抽象层的文件把寄存器用结构体来封装一下,然后将这个结构体的地址设置为存储器中该外设所映射的那个地址,这样操作结构体的时候就是操作寄存器,然后在将这些结构体的操作封装为库函数(即驱动函数)
https://blog.csdn.net/weixin_44712171/article/details/106367479?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164252191016780264019575%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164252191016780264019575&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-2-106367479.first_rank_v2_pc_rank_v29&utm_term=stm32%E7%9A%84%E5%86%85%E6%A0%B8&spm=1018.2226.3001.4187
学习STM32(一)之芯片类型,内核架构的关系
https://blog.csdn.net/lizhoufan/article/details/84837396?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164252191016780264019575%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164252191016780264019575&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-84837396.first_rank_v2_pc_rank_v29&utm_term=stm32%E7%9A%84%E5%86%85%E6%A0%B8&spm=1018.2226.3001.4187

STM32中cortex-M3内核的学习

对于这个内核,它是哈佛结构,数据总线与指令总线分开。具有Thumb2指令集。主要了解三个部分得功能,第一是寄存器组,第二是存储器空间管理,第三是NVIC中断控制器。
它的内部存在R0-R15寄存器,其中对于R0-R7可以由Thumb指令集访问,R8-R12由Thumb2和ARM指令集访问。还有一些特殊寄存器。
对于存储器,它是32位总线,可以访问最多4G空间,不过它已经大概分好了访问的内容,这其中最重要的就是位带的理解,如何访问。
整体框架
中断基本概念,多少个中断,多少个抢占式中断,什么是优先级和子优先级,怎么将向量表从ROM中移动到内存中,有什么要求,怎么配置中断向量,什么是咬尾中断。

你可能感兴趣的:(STM32,stm32,linux,单片机)