RTT回顾

一、必备知识

①、多线程:在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。

②、每个线程都需要分配独立的栈空间——预先定义好的全局数组or动态分配的一段内存空间,保存于RAM

③、系统为了顺利**调度线程**,为每个线程都额外定义了**线程控制块**——“身份证”。系统对线程的操作可以通过控制块来实现

④、线程创建好后,加入**就绪列表**,表示系统可以随时调度。

⑤、调度器是操作系统的核心——**实现线程的切换**
步骤:初始化、启动。
系统调度:在就绪列表寻找优先级最高的就绪线程,后执行。

⑥、临界段——一段在执行的时候不能被中断的代码段。
(对临界段保护的处理:直接把中断全部关了,NMI FAULT 和硬 FAULT 除外)
说明:临界段是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进 入临界区的线程开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

⑦、对象:采用內核對象管理系統來訪問 / 管理所有內核對象。
RT-Thread 內核對象包括:線程,信號量,互斥量,事件,郵箱,消息隊列和定時器,內存池,設備驅動等。對象容器中包含了每類內核對象的信息,包括對象類型,大小等。對象容器給每類內核對象分配了一個鏈表,所有的內核對象都被鏈接到該鏈表上,如圖 RT-Thread 的內核對象容器及鏈表如下圖所示:
在这里插入图片描述

⑧、容器——每当用户创建一个对象,将这个对象放在容器中,方便管理
容器的成员是否有效都是通过宏定义来决定的
在这里插入图片描述

⑨、空闲线程与阻塞延时
——阻塞延时——即线程需要延时的时候,线程会放弃 CPU 的使用权,CPU 可以去干其它的事情,当线程延时时间到,重新获取 CPU 使用权,线程继续运行,
在这里插入图片描述

⑩、多优先级
同一优先级的线程会被插入到同一链表(时间片)。
不同优先级根据优先级来决定插入到线程优先级表。
在这里插入图片描述

11.定时器,每个线程都会内置一个定时器
在这里插入图片描述

12.支持时间片
——当同一个优先级下有两个或两个以上线程的时候,线程支持时间片功能,即我们可以指定线程持续运行一次的时间,单位为 tick。

二、应用知识

㈠、创建线程——静态or动态。
在这里插入图片描述

重映射串口到 rt_kprintf 函数。

㈡、启动流程
法一:将所有线程一次性创建后再调度。
在这里插入图片描述
法二:在 main 函数中将硬件和 RTOS 系统先初始化好,然后创建一个启动线程后就启动调度器,然后在启动线程里面创建各种应用线程,创建的线程会出现不同的优先级情况,根据具体情况具体处理,当所有线程都创建成功后,启动线程把自己删除。
(可参考:https://blog.csdn.net/qq_41070511/article/details/103179499)
在这里插入图片描述

㈢、线程管理
在这里插入图片描述
线程调度的原则:是一旦线程状态发生了改变,并且当前运行的线程优先级小于优先级队列组中线程最高优先级时,立刻进行线程切换(除非当前系统处于中断处理程序中或禁止线程切换的状态)。
线程状态
在这里插入图片描述
线程迁移
在这里插入图片描述

㈣、消息队列———用于线程间通信的数据结构,即在线程与线程间、中断和线程间传送信息。
消息队列的阻塞机制 ——目的:为了保护每个线程对消息队列能正常完成读写操作,而不受后来的线程干扰的过程,

㈤、信号量
——一种实现线程间通信的机制,实现线程之间同步或临界资源的互斥访问,常用于协助一组相互竞争的线程来访问临界资源。
信号量就像一把钥匙,把一段临界区给锁住,只允许有钥匙的线程进行访问:线程拿到了钥匙,才允许它进入临界区;而离开后把钥匙传递给排队在后面的等待线程,让后续线程依次进入临界区。

㈥、互斥量
——保护资源的互锁、可以通过优先级继承算法,降低优先级翻转问题产生的影响

㈦、事件
——事件是一种实现线程间通信的机制,主要用于实现线程间的同步,但事件通信只能是事件类型的通信,无数据传输。
事件用于事件类型的通讯,无数据传输。
——可用事件来做标志位,判断某些事件是否发生了,然后根据结果做处理

㈧、软件定时器
——软件定时器以系统节拍周期为计时单位。从指定的时刻开始,经过一个指定时间,然后触发一个超时事件。

㈨、邮箱
——邮箱可以在线程与线程之间。中断与线程之间进行消息的传递。

㈩、内存管理
——通过对内存的申请、释放操作,来管理用户和系统对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。
——分为:静态内存管理(内存池)与动态内存管理(堆内存管理模块).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。 RT-Thread有完整版和Nano版,对于资源受限的微控制器(MCU)系统,可通过简单易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 内核版本;而相对资源丰富的物联网设备,可使用RT-Thread完整版,通过在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,并且可以无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。 RT-Thread架构 RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件的物联网操作系统,架构如下: 内核层:RT-Thread内核,是 RT-Thread的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。 组件与服务层:组件是基于 RT-Thread内核之上的上层软件,例如虚拟文件系统、FinSH命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。 RT-Thread软件包:运行于 RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread已经支持的软件包数量已经达到 180+。 RT-Thread的特点: 资源占用极低,超低功耗设计,最小内核(Nano版本)仅需1.2KB RAM,3KB Flash。 组件丰富,繁荣发展的软件包生态 。 简单易用 ,优雅的代码风格,易于阅读、掌握。 高度可伸缩,优质的可伸缩的软件架构,松耦合,模块化,易于裁剪和扩展。 强大,支持高性能应用。 跨平台、芯片支持广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值