【RT-Thread】RT-Thread内核快速入门,内核实现与应用开发学习随笔记

本文介绍RT-Thread实时操作系统的基础概念与关键技术,包括快速入门、系统启动流程、线程管理、时钟管理等内容,并深入探讨了内核对象管理和配置方法。

目录

前言

快速入门 

工程说明

 调试命令

 系统启动步骤

用户入口代码

内核基础

线程调度

时钟管理

线程间同步

线程间通信

内存管理

I/O设备管理

程序内存分布

自动初始化机制

内核对象模型

静态与动态对象 

内核对象管理架构

遍历内核对象

内核配置与裁剪

第8章 线程的定义与线程的切换

定义线程栈:

rt_uint8_t

ALIGN 

 RT_ALIGN_SIZE

链表

线程栈初始化:rt_hw_stack_init() 函数

将线程插入到双向就绪列表        

实现调度器

系统调度

main函数

第9章 临界段的保护

第10章  对象容器的实

前言

新手入门官方文档:

Keil模拟器STM32F103 (rt-thread.org)https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/stm32f103-simulator/stm32f103-simulator官方API参考手册:

RT-Thread API参考手册: event_sample.chttps://www.rt-thread.org/document/api/event_sample_8c-example.html#a10        以下内容是随着学习随时整理的,有些来自于野火出的《RT-Thread内核实现与应用开发》的学习笔记,有些来自官网的东西,自认为难以记忆与重点的就记下来。

        大家可以浏览认识,至于大家想深入了解希望能够自己去看相关文档。

快速入门 

可以去官方有相关文档说明

首先将KEIL下载下来,官网上有相关例程

工程说明

 

 调试命令

打开调试公共点击运行(F5)代码,打开串口UART#1,点击Tab键或者help+回车,查看系统支持的命令。

 系统启动步骤

         以 MDK-ARM 为例,MDK-ARM 的用户程序入口为 main() 函数,位于 main.c 文件中。系统启动后先从汇编代码 startup_stm32f103xe.s 开始运行,然后跳转到 C 代码,进行 RT-Thread 系统功能初始化,最后进入用户程序入口 main()

 如果使用到了ARM内核则重新定义启动当时,最终跳到了rtthread_startup(); 是RT-Thread规定的统一启动入口。 启动程序函数初始化如下图所示:

 启动代码分为四部分:

用户入口代码

        为了在进入 main 程序之前,完成系统功能初始化,可以使用 $sub$$ 和 $super$$ 函数标识符在进入主程序之前调用另外一个例程,这样可以让用户不用去管 main() 之前的系统初始化操作。

内核基础

内核的组成部分、系统如何启动、内存分布情况以及内核配置方法。

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

线程调度

        线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。

时钟管理

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐者-桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值