首页 > 其他分享 >嵌入式操作系统的一些基本概念

嵌入式操作系统的一些基本概念

时间:2024-01-18 19:12:14浏览次数:22  
标签:优先级 中断 任务 抢占 CPU 嵌入式操作系统 内核 一些 基本概念

1、前后台系统

  一些对实时性要求不那么严格的基于芯片的开发会采用前后台系统架构来进行开发,前后台系统前台由中断构成,后台由一个顺序处理任务的无限循环构成。

// 中断服务程序
void keyHandle();
void uartHandle();

// 主函数
int main(int argc, char **argv)
{
    BSP_Flash_Init();
    BSP_Board_Init();
    BSP_UART_Init();

    while(true)
    {
        if(flag)
        {

        }
        else
        {

        }

        ...
    }
}

2、操作系统

  操作系统时计算机中最基本的程序,操作系统负责将计算机中全部软硬件资源分配、回收、控制、协调等并发的活动。操作系统提供用户接口,为用户扩展新的功能提供软件平台。

3、实时操作系统(RTOS)

  实时操作系统最大的特性是“实时性”,即严格按照优先级来分配CPU时间。

4、代码的临界区

  在临界区中的代码不能被打断,即原子操作,在进入和执行完毕代码临界区代码时要开关中断。

5、资源

  程序运行时一切可使用的软硬件环境统称为资源,资源包括打印机、显示屏、数组、结构等。

6、共享资源

  由一个以上任务共同访问的资源称作共享资源,在访问共享资源时需要加锁(互斥),防止有一个以上的任务共同修改公共资源。

7、任务

  一个任务也可以称作一个线程,是一个简单的程序,每一个任务都可以认为CPU完全属于程序自己。每一个任务都有自己的CPU寄存器和任务栈空间。

8、任务切换

  当有更高优先级的任务就绪或中断发生就会抢占CPU执行,首先将当前执行的程序CPU寄存器中的数据复制到当前程序的栈空间,然后从高优先级任务的栈空间复制相应数据到CPU寄存器中执行,这个过程就叫任务切换。CPU内部寄存器越多任务切换的开销就越大,任务切换需要的时间取决于 有多少寄存器需要入栈,一个实时系统内核的性能不应该用一秒可以切换多少任务来评估。

9、内核

  在多任务系统中内核负责为任务分配CPU时间、任务间通信和切换任务。使用实时内核可以大大简化程序设计,简化了任务调度、通信等问题。内核提供信号量管理、消息队列、延时等。

10、调度

  调度就是决定任务使其运行。

11、非抢占式内核

  非抢占式调度也称为合作型多任务,调度规则是要等待当前运行任务自动结束后才调度下一个任务运行。

12、抢占式内核

  当任务要求实时性是就要选择抢占式内核,调度规则是一旦有更高优先级的任务就绪就立即抢占CPU运行,不管是否有任务正在运行。

13、任务优先级

  任务优先级越高就越容易抢占CPU运行。

14、中断

  中断是一种硬件机制,用于处理异步事件。一旦中断被识别,CPU立即进行现场保护跳转运行中断服务程序。进入中断服务程序时可以选择关中断来屏蔽接下来的中断事件,关中断的时间尽量要短。

  前后台系统:中断服务程序运行结束后,则跳转到后台程序继续运行。

  非抢占式内核:中断服务程序运行结束后,则跳转到中断发生前的程序继续运行。

  抢占式内核:中断服务程序运行结束后,则跳转到优先级最高的就绪程序继续运行。

15、时钟节拍

  时钟节拍时特定的周期性中断,用于特定的任务,一般10 - 200ms,时间越短系统额外的开销越大。可以用来提供延时和等待超时的依据。

 

标签:优先级,中断,任务,抢占,CPU,嵌入式操作系统,内核,一些,基本概念
From: https://www.cnblogs.com/GREEN-FIEID/p/17972633

相关文章

  • (五):ElasticSearch基本概念
    1、ElasticSearchElasticsearch是面向文档(documentoriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearc......
  • 一些好用的工具收集
    ImageJ:https://imagej.net/ij/download.html可以打开Bayer格式的图片,查看其像素值,在做一些raw域图像处理算法的时候会需要用到。Snipaste:windows上顶好用的截图、贴图工具,可以从微软商店直接安装。YUView:https://github.com/IENT/YUView可以查看各种格式的YUV数据,同时......
  • C# Task 异步的一些流程简单测试 Task 测试 异步测试
    测试程序:publicclassTAKS_TEST{privatereadonlyDictionary<int,Task<T_TEST>>DataDic=newDictionary<int,Task<T_TEST>>();privateT_TESTGetRes(inti){Thread.Sleep(i*1000);returnnewT_TEST(){......
  • flask伪造session的一些笔记
    关于flask工具要注意的一些点:密钥使用字符串和数字生成出来的是不一样的伪随机数生成key的时候python2和python3是不一样的,python2会后面的小数自动约分。解密出来的字符串不能直接更改值,需要改为键对值的格式伪随数生成key的方法有很多种,有的可以获取mac地址/sys/class/net/......
  • 业界使用 ES 的一些工程实践
    欢迎读者在评论区共享读过的ES(ElasticSearch)工程实践的文章性能优化美团外卖搜索基于Elasticsearch的优化实践美团外卖LBS场景下,采用LongObjectHashMaphash查询方式优化了倒排链的查询、采用RLE编码将postinglist极致压缩,优化了倒排链的合并。滴滴落地ZSTD压缩算......
  • Bessel 函数的一些性质
    泊松(Poisson)积分表达式:\[J_\nu\left(z\right)=\dfrac{\left(z/2\right)^\nu}{\sqrt{\pi}\Gamma\left(\nu+1/2\right)}\int_0^{\pi}\cos\left(z\cos\theta\right)\sin^{2\nu}\theta\mathrm{d}\theta\left(\mathrm{Re}\left(\nu\right)\gt-\dfrac......
  • 这个错误可能是由于 `PyInstaller` 在打包过程中没有正确地包含 `imp` 模块。以下是一
    `PyInstaller`默认使用运行它的Python解释器来打包您的脚本¹。如果您想要指定一个不同的Python解释器,您可以使用完整路径来运行`PyInstaller`³。例如,如果您想要使用位于`/path/to/python3`的Python3解释器,您可以使用以下命令:```bash/path/to/python3-mPyInstaller......
  • ObjectMapper工具类 json字符串和 对象之间转换。和对于 ObjectMapper的一些可选设置
    ObjectMapper工具类json字符串和对象之间转换。和对于ObjectMapper的一些可选设置。添加maven依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.3</version> </d......
  • 盘点一下在swagger中一些有用且经常忽略的属性
    震惊!,这些Swagger的属性你都了解吗?盘点一下在swagger中一些有用且经常忽略的属性启用永久授权EnablePersistAuthorizationapp.UseSwaggerUI(c=>{//指定SwaggerJSON文件的终结点,用于加载和显示API文档。......
  • Python一些提高效率的类库和装饰器用法
    本文主要是慢慢积累Python中一些能提高效率的类库和装饰器,闲话少说,开始进入主题。一、重试【问题引申:接口网络抖动不稳如何做?回答:请求接口捕获异常和接口请求重试】1fromretryingimportretry2#等待1秒后重试,最大重试次数为33@retry(stop_max_attempt_number=3,wait_......