0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何对RT-Thread内核有基本的了解?

lPCU_elecfans 来源:未知 作者:肖冰 2019-07-19 10:12 次阅读
内核基础

内核的连载内容包括 RT-Thread 内核基础:内核简介、系统的启动流程及内核配置的部分内容,以上内容都是为后面的章节奠定基础。本章内容将分为3篇连载!

RT-Thread 内核的简单介绍,从软件架构入手讲解实时内核的组成与实现,这部分给初学者引入一些 RT-Thread 内核相关的概念与基础知识,让初学者对内核有初步的了解。学完本章内容以后,读者将会对 RT-Thread 内核有基本的了解,知道内核的组成部分、系统如何启动、内存分布情况以及内核配置方法。

RT-Thread 内核介绍

内核是操作系统最基础也是最重要的部分。下图为 RT-Thread 内核架构图,内核处于硬件层之上,内核部分包括内核库、实时内核实现。

内核库是为了保证内核能够独立运行的一套小型的类似 C 库的函数实现子集。这部分根据编译器的不同自带 C 库的情况也会有些不同,当使用 GNU GCC 编译器时,会携带更多的标准 C 库实现。

实时内核的实现包括:对象管理、线程管理及调度器、线程间通信管理、时钟管理及内存管理等等,内核最小的资源占用情况是 3KB ROM,1.2KB RAM

线程调度

线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。支持 256 个线程优先级(也可通过配置文件更改为最大支持 32 个或 8 个线程优先级,针对 STM32 默认配置是 32 个线程优先级),0 优先级代表最高优先级,最低优先级留给空闲线程使用;同时它也支持创建多个具有相同优先级的线程,相同优先级的线程间采用时间片的轮转调度算法进行调度,使每个线程运行相应时间;另外调度器在寻找那些处于就绪状态的具有最高优先级的线程时,所经历的时间是恒定的,系统也不限制线程数量的多少,线程数目只和硬件平台的具体内存相关。

线程管理将在后面的《线程管理》章节详细介绍。

时钟管理

RT-Thread 的时钟管理以时钟节拍为基础,时钟节拍是 RT-Thread 操作系统中最小的时钟单位。RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动的停止定时器否则将永远持续执行下去。

另外,根据超时函数执行时所处的上下文环境,RT-Thread 的定时器可以设置为 HARD_TIMER 模式或者 SOFT_TIMER 模式。

通常使用定时器定时回调函数(即超时函数),完成定时服务。用户根据自己对定时处理的实时性要求选择合适类型的定时器。

定时器将在后面的《时钟管理》章节展开讲解。

线程间同步

RT-Thread 采用信号量、互斥量与事件集实现线程间同步。线程通过对信号量、互斥量的获取与释放进行同步;互斥量采用优先级继承的方式解决了实时系统常见的优先级翻转问题。线程同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥量。线程通过对事件的发送与接收进行同步;事件集支持多事件的 “或触发” 和“与触发”,适合于线程等待多个事件的情况。

信号量、互斥量与事件集的概念将在后面的《线程间同步》章节详细介绍。

线程间通信

RT-Thread 支持邮箱和消息队列等通信机制。邮箱中一封邮件的长度固定为 4 字节大小;消息队列能够接收不固定长度的消息,并把消息缓存在自己的内存空间中。邮箱效率较消息队列更为高效。邮箱和消息队列的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。

邮箱和消息队列的概念将在后面的《线程间通信》章节详细介绍。

内存管理

RT-Thread 支持静态内存池管理及动态内存堆管理。当静态内存池具有可用内存时,系统对内存块分配的时间将是恒定的;当静态内存池为空时,系统将申请内存块的线程挂起或阻塞掉 (即线程等待一段时间后仍未获得内存块就放弃申请并返回,或者立刻返回。等待的时间取决于申请内存块时设置的等待时间参数),当其他线程释放内存块到内存池时,如果有挂起的待分配内存块的线程存在的话,则系统会将这个线程唤醒。

动态内存堆管理模块在系统资源不同的情况下,分别提供了面向小内存系统的内存管理算法及面向大内存系统的SLAB 内存管理算法。福利:在电子发烧友网公众号回复资料,免费领取一份模电资料集

还有一种动态内存堆管理叫做 memheap,适用于系统含有多个地址可不连续的内存堆。使用 memheap 可以将多个内存堆 “粘贴” 在一起,让用户操作起来像是在操作一个内存堆。

内存管理的概念将在后面的《内存管理》章节展开讲解。

I/O 设备管理

RT-Thread 将 PIN、I2C、SPI、USBUART 等作为外设设备,统一通过设备注册完成。实现了按名称访问的设备管理子系统,可按照统一的 API 界面访问硬件设备。在设备驱动接口上,根据嵌入式系统的特点,对不同的设备可以挂接相应的事件。当设备事件触发时,由驱动程序通知给上层的应用程序。

I/O 设备管理的概念将在后面的《设备模型》及《通用设备》章节展开讲解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2905

    文章

    44361

    浏览量

    371841
  • STM32
    +关注

    关注

    2266

    文章

    10880

    浏览量

    355082
  • RT-Thread
    +关注

    关注

    31

    文章

    1277

    浏览量

    39972

原文标题:从0-1带你入门物联网操作系统(3)——内核介绍

文章出处:【微信号:elecfans,微信公众号:电子发烧友网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(二、RT-Thread内核启动流程)

    在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程.
    的头像 发表于 06-20 00:30 4994次阅读
    <b class='flag-5'>RT-Thread</b>记录(二、<b class='flag-5'>RT-Thread</b><b class='flag-5'>内核</b>启动流程)

    RT-Thread内核对象管理介绍

    继续研究RT-Thread 最基础,最重要的概念:内核对象。
    发表于 06-02 09:48 417次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>内核</b>对象管理介绍

    16天入门RT-Thread内核,快速上手无压力!

    内核的组成与实现,这部分给初学者引入一些 RT-Thread 内核相关的概念与基础知识,让初学者对内核初步的
    发表于 08-20 16:39

    RT-Thread快速入门之了解内核启动流程

    1、了解RT-Thread内核的启动流程  内核是操作系统最基础也是最重要的部分。从本文开始进入 RT-Thread
    发表于 09-05 17:01

    RT-Thread 内核学习笔记 - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 -
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>内核</b>学习笔记 - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 设备模型rt_device的理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 -
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>内核</b>学习笔记 - 设备模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 内核学习笔记 - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 -
    发表于 01-25 18:23 6次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>内核</b>学习笔记 - <b class='flag-5'>内核</b>对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 -
    发表于 01-25 18:24 3次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>内核</b>学习笔记 - <b class='flag-5'>内核</b>对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象操作API

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 -
    发表于 01-25 18:26 7次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>内核</b>学习笔记 - <b class='flag-5'>内核</b>对象操作API

    大佬带你理解RT-Thread内核并上手实践

    内核是操作系统最重要的部分,学习RT-Thread也是从最基本的内核开始。   RT-Thread内核要怎么学?编者觉得首先应该是从软件架构
    发表于 06-30 17:10 1238次阅读

    RT-Thread文档_内核基础

    RT-Thread文档_内核基础
    发表于 02-22 18:28 0次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>内核</b>基础

    RT-Thread文档_内核移植

    RT-Thread文档_内核移植
    发表于 02-22 18:31 3次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>内核</b>移植

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    如何深入理解RT-Thread内核并上手实践,看完这篇答案了!

    内核是操作系统最重要的部分,学习RT-Thread也是从最基本的内核开始。RT-Thread内核要怎么学?编者觉得首先应该是从软件架构入手,
    的头像 发表于 06-27 09:36 2393次阅读
    如何深入理解<b class='flag-5'>RT-Thread</b><b class='flag-5'>内核</b>并上手实践,看完这篇<b class='flag-5'>有</b>答案了!

    RT-Thread v5.0.2 发布

    ://github.com/RT-Thread/rt-thread/releases/tag/v5.0.2 RT-Thread 迎来了全新的版本 v5.0.2,自 v5.0.0 版本发布以来,
    的头像 发表于 10-10 18:45 1424次阅读
    <b class='flag-5'>RT-Thread</b> v5.0.2 发布