RTThread笔记
文章平均质量分 87
。
并行不是并发
电子爱好者一个。
展开
-
RT-Thread学习笔记(16):内核移植相关API
目录libcpu相关API实现全局中断开关关闭全局中断打开全局中断实现线程栈初始化实现上下文切换实现第一次切换实现正常切换实现PendSV中断实现时钟节拍libcpu相关API实现全局中断开关无论内核代码还是用户的代码,都可能存在一些变量,需要在多个线程或者中断里面使用,如果没有相应的保护机制,那就可能导致临界区问题。RT-Thread 里为了解决这个问题,提供了一系列的线程间同步和通信机制来解决。但是这些机制都需要用到 libcpu 里提供的全局中断开关函数。/* 关闭全局中断 */rt_ba原创 2022-04-05 11:44:50 · 411 阅读 · 0 评论 -
RT-Thread学习笔记(15):中断管理
目录什么是中断???中断介绍中断相关名词中断管理的运作机制中断延迟中断处理过程中断前导程序用户中断服务程序中断后续程序中断栈什么是中断???当 CPU 正在处理内部数据时,外界发生了紧急情况,要求 CPU 暂停当前的工作转去处理这个 异步事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。实现这一功能的系统称为 中断系统,申请 CPU 中断的请求源称为 中断源。中断是一种异常,异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果不及时进行处理,轻则系统出错,重则会导致系原创 2022-04-05 10:46:34 · 4183 阅读 · 0 评论 -
RT-Thread学习笔记(14):内存管理
目录内存管理的基本概念内存管理的运作机制静态内存管理动态内存管理小内存管理模块SLAB内存管理模块内存管理的应用场景静态内存管理接口动态内存管理接口附:memheap 管理算法内存管理的基本概念在计算系统中,变量、中间数据一般存放在系统存储空间中,只有在实际使用时才将它们从存储空间调入到中央处理器内部进行运算。通常存储空间可以分为两种:内部存储空间和外部存储空间。RT-Thread操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内存管理函数原型,而不关心这些内存管理函数是如何实现的,所以原创 2022-04-04 21:35:27 · 3130 阅读 · 0 评论 -
RT-Thread学习笔记(13):软件定时器
硬件定时器和软件定时器硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。软件定时器,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,它实现的功能与硬件定时器也是类似的。使用硬件定时器时,每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息;而使原创 2022-04-04 20:08:09 · 2732 阅读 · 0 评论 -
RT-Thread学习笔记(12):事件
事件特点RT-Thread提供的事件具有如下特点:事件只与线程相关联,事件相互独立,一个32位的事件集合(set变量),用于标识该线程发生的事件类型,其中每一位表示一种事件类型(0表示该事件类型未发生、1表示该事件类型已经发生),一共32种事件类型。事件仅用于同步,不提供数据传输功能。事件无排队性,即多次向线程发送同一事件(如果线程还未来得及读走),等效于只发送一次。允许多个线程对同一事件进行读写操作。支持事件等待超时机制。在 RT-Thread 中,每个线程都拥有一个事件信息标记,它有原创 2022-04-03 12:47:23 · 1067 阅读 · 0 评论 -
RT-Thread学习笔记(11):互斥量
目录互斥量的优先级继承机制互斥量和二值信号量的区别互斥量的运作机制互斥量控制块互斥量的优先级继承机制在RT-Thread操作系统中为了降低优先级翻转问题利用了优先级继承算法。优先级继承算法是指,暂时提高某个占有某种资源的低优先级线程的优先级,使之与在所有等待该资源的线程中优先级最高那个线程的优先级相等,而当这个低优先级线程执行完毕释放该资源时,优先级重新回到初始设定值。因此,继承优先级的线程避免了系统资源被任何中间优先级的线程抢占。互斥量和二值信号量的区别互斥量与二值信号量最大的不同是:互斥量具有优原创 2022-04-03 11:57:35 · 1322 阅读 · 0 评论 -
RT-Thread学习笔记(10):信号量
目录概念二值信号量运作机制计数型信号量的运作机制概念信号量(Semaphore)是一种实现线程间通信的机制,实现线程之间同步或临界资源的互斥访问,常用于协助一组相互竞争的线程来访问临界资源。在多线程系统中,各线程之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。二值信号量信号量资源被获取了,信号量值就是 0,信号量资源被释放,信号量值就是 1,把这种只有 0和 1 两种情况的信号量称之为二值信号量。在线程系统中,我们经常会使用这个二值信号量,比如,某个线程需要等待一个标记原创 2022-04-03 10:58:24 · 1636 阅读 · 0 评论 -
RT-Thread学习笔记(9):邮箱
目录邮箱的概念运作机制邮箱的控制块应用场合参考邮箱的概念邮箱在操作系统中是一种常用的IPC通信方式,邮箱可以在线程与线程之间。中断与线程之间进行消息的传递,此外,邮箱相比于信号量与消息队列来说,其开销更低,效率更高,所以常用来做线程与线程、中断与线程间的通信。邮箱中的每一封邮件只能容纳固定的4字节内容(STM32是32位处理系统,一个指针的大小即为4个字节,所以一封邮件恰好能够容纳一个指针),当需要在线程间传递比较大的消息时,可以把指向一个缓冲区的指针作为邮件发送到邮箱中。线程能够从邮箱里面读取邮件消原创 2022-03-27 13:21:48 · 2172 阅读 · 0 评论 -
RT-Thread学习笔记(8):消息队列
本节笔记参考于:野火-《RT-Thread内核实现与应用开发实战》以及RT消息队列基本概念消息队列的运作机制消息队列的阻塞机制消息队列的应用场景常用函数基本概念消息队列,是一种常用于线程间通信的数据结构,队列可以在线程与线程间、中断和线程间传送信息,实现了线程接收来自其他线程或中断的不固定长度的消息,并根据不同的接口选择传递消息是否存放在线程自己的空间。线程能够从队列里面读取消息,当队列中的消息是空时,挂起读取线程,用户还可以指定挂起的线程时间timeout;当队列中有新消息时,挂起的读取线程被唤醒并原创 2022-03-27 12:03:36 · 2587 阅读 · 0 评论 -
RT-Thread学习笔记(7):线程管理
本节笔记参考于:野火-《RT-Thread内核实现与应用开发实战》以及RT线程管理线程基本概念线程调度器线程状态线程挂起函数线程恢复函数线程设计要点RT-Thread中程序运行的上下文包括:中断服务函数:线程:空闲线程:线程执行时间线程基本概念RT-Thread的线程可认为是一系列独立线程的集合。每个线程在自己的环境中运行。在任何时刻,只有一个线程得到运行,RT-Thread调度器决定运行哪个线程。调度器会不断启动、停止每一个线程,宏观看上去所有的线程都在同时在执行。作为线程,不需要对调度器的活动有所原创 2022-03-26 17:16:15 · 2661 阅读 · 0 评论 -
RT-Thread学习笔记(6):文件系统的使用(F407外置Flash带移植过程)
1、虚拟文件系统本节内容建议参考:文件系统RT-Thread官方介绍,我也是copy过来的。文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型 (Abstract data type),是一种用于向用户提供底层数据访问的机制。文件系统通常存储的基本单位是文件,即数据是按照一个个文件的方式进行组织。当文件比较多时,将导致文件繁多,不易分类、重名的问题。而文件夹作为一个容纳多个文件的容器而存在。DFS简介DFS 是 RT-Thread 提供的虚拟文件系统组件,全称为 Devic原创 2022-03-20 19:07:24 · 1880 阅读 · 0 评论 -
RT-Thread学习笔记(5):SPI驱动框架分析
1、两个设备模型在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。1、总线设备模型struct rt_spi_bus{ struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner;};原创 2022-03-14 21:22:44 · 10615 阅读 · 1 评论 -
RT-Thread学习笔记(4):正点原子F407配置STemwin
1、准备工作正点原子F407开发板ENV工具Keil编译器RT-Thread4.0.5源码正点原子屏幕2、移植开始生成代码目录输入scons --distmenuconfig配置保存添加文件(drv_lcd.c)\dist\stm32f407-atk-explorer\packages\STemWin-latest\demo目录下这里使用的是做好的BSP,我们LCD是使用FSMC控制的,BSP的stm32f4xx_hal_msp.c已经有了HAL_FSMC_Msp原创 2022-03-12 11:11:30 · 4905 阅读 · 0 评论 -
RT-Thread学习笔记(3):启动流程
RT-Thread的启动流程本节内容学习于RT-Thread官方文档。通过前两节,大家大概理解了RT-Thread的驱动框架,现在我先给大家展示一个代码:int main(void){ int count = 1; /* set LED0 pin mode to output */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); while (count++) { rt_pin_write(LED0_PIN,原创 2022-03-10 19:37:08 · 438 阅读 · 0 评论 -
RT-Thread学习笔记(2):serial驱动框架简要分析
rt_hw_usart_init函数干了些什么??之前写了一篇pin设备框架分析pin设备框架分析,简单理了一下pin设备框架实现的思想,其实今天要说的串口基本类似,今天咱们就长话短说,我介绍几个重要的部分。首先就是标题的这个函数。包括上一节内容的**int rt_hw_pin_init(void)**函数。我们都是围绕这个进行介绍的。int rt_hw_usart_init(void){ rt_size_t obj_num = sizeof(uart_obj) / sizeof(struc原创 2022-03-10 18:59:30 · 1623 阅读 · 0 评论 -
RT-Thread学习笔记(1):pin设备框架的简单解读
重要结构体介绍rt_device_pin结构体struct rt_device_pin{ struct rt_device parent; /* 父类 */ const struct rt_pin_ops *ops; /* 操作函数集 */};rt_device结构体struct rt_device{ struct rt_object parent; /**< inherit from rt_objec原创 2022-03-10 12:55:06 · 1455 阅读 · 3 评论