RT-Thread
RT-thread操作简介
ixx5
文章可见性逐篇设置中...
展开
-
RT-Thread-15-内存池
内存池在创建的时候先从系统中获取一大块内存(静态或动态),然后分成相同大小的多个小内存块,这些小内存块通过链表连接起来(此链表也称为空闲链表)。3,RT-Thread的内存池支持线程挂起功能,当内存池中无空闲内存块时,申请线程会被挂起,直到内存池中有新的可用内存块,再将挂起线程唤醒。2,为了提供内存分配效率,并且避免内存碎片,RT-Thread提供了另外一种内存管理方法----内存池(Memory Pool);内存池的内存分配方式是分配大量相同大小的小内存块。(2)容易产生内存碎片;原创 2023-06-25 22:36:13 · 263 阅读 · 0 评论 -
Rt_Thread-14-软件定时器
2、RT-Thread提供的定时器是以系统时钟节拍(OS Tick)的时间长度为定时单位,提供了基于系统节拍整数倍的定时能力,即定时数值是OS Tick的整数倍。例如一个OS Tick是10ms,那上层软件定时器只能提供10ms、20ms、100ms等时间精度的定时服务,而不能定时为15ms、25ms、35ms等时间;1、软件定时器由操作系统提供一类系统接口,它构建在硬件定时器基础之上(系统滴答定时器),软件定时器使系统能够提供不受数目限制的定时器服务;原创 2023-06-25 22:07:49 · 522 阅读 · 0 评论 -
RT-Thread-13-消息队列
并把消息缓存到自己的内存空间中,其他线程可以从消息队列中读取相应的消息并进行处理;RT-Thread中另一种线程间通信的方式—消息队列,它是对邮箱的拓展;消息队列能够接收来自线程或中断程序发出的。原创 2023-06-25 21:09:34 · 119 阅读 · 0 评论 -
RT-Thread-12-邮箱
邮箱中每一封邮件只能容纳固定4字节内容(32位系统,指针大小为4字节,故一封邮件刚好容纳一个指针);线程或中断程序将一封4字节的邮件发送到邮箱中,而其他需要的线程可从邮箱中接收这些邮件进行处理。RT-Thread中邮箱用于线程间通信,特点是:开销较低,效率较高。原创 2023-06-25 07:44:33 · 136 阅读 · 0 评论 -
RT-Thread-11-事件集
此处,可将A去某地的行为看做一个线程,将"到达目的地公交车到达公交站"、"B到公交站"看做事件发生,情况1是特定事件唤醒线程;RT-Thread中的事件集用一个32位无符号整型变量来表示,变量中的一个位代表一个事件,线程通过"逻辑与”、“逻辑或”,与一个或多个事件建立联系,形成一个事件组合。,指的是线程和任何事件之一发生同步,只要有一个事件发生,即满足条件;,指的是线程和若干事件都发生同步,只有这些事件都发生,才满足条件;事件集可用于"一对多"、“多对一”、“多对多"的线程同步;原创 2023-06-24 22:49:43 · 165 阅读 · 0 评论 -
RT-Thread-10-线程优先级翻转
当一个高优先级线程试图通过某种互斥IPC对象机制访问共享资源时,如果该IPC对象已被一低优先级的线程所持有,而在低优先级线程运行过程中可能又被其他中等优先级的线程占用,因此造成高优先级被较低优先级的线程阻塞的情况。提高占用共享资源的低优先级线程的优先级到与所以等待该共享资源的线程中优先级最高的那个线程的优先级,这样可以更快地执行然后释放共享资源,当原占有共享资源的低优先级释放该资源后,优先级恢复到原来的优先级。:使用信号量可能导致线程的优先级翻转,而互斥量可以通过优先级继承的方法解决优先级翻转问题。原创 2023-06-24 22:01:25 · 290 阅读 · 0 评论 -
RT-Thread-09-互斥量
(1)当线程持有它时,互斥量处于上锁状态,该线程拥有这个互斥量的所有权;相反,当这个线程释放这个信号量时,将对这个互斥量开锁,失去对它的所有权;(2)当一个线程持有互斥量时,其他线程将不能够对该互斥量进行开锁或者持有该互斥量;互斥量只有两种状态:LOCKED和UNLOCKED,分别代表上锁和开锁两种情况。(3)持有该互斥量的线程也能够再次获得这个互斥量(比如,递归持有)而不被挂起。互斥量(互斥锁)用于线程间互斥访问的IPC对象,是一种特殊的二值性信号量。原创 2023-06-24 21:28:53 · 241 阅读 · 0 评论 -
RT-Thread-08-生产者消费者问题
循环中,每次生产数据时,先获取缓存区信号量是否为空,这里给的初值5,初始时为5个空位;,循环中,每次读取数据时,先获取缓存区满的信号量,然后获取缓存区读写信号量,然后再进行读数据操作,之后释放缓存区读写信号量,最后释放缓存区空信号量;,生产一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复;,从缓存区中一次只读取一段数据,只有缓冲区非空时才可读取,否则必须等待,如此反复;:生产者和消费者是相互协作的关系,只有在生产者生产之后,消费者才能消费;原创 2023-06-24 19:31:39 · 89 阅读 · 0 评论 -
RT-Thread-07-信号量
从示意图可看到,每个信号量对象都有一个信号量值和一个线程等待队列,信号量的值对应信号量对象的实例数目(资源数目),假如信号量值为N,则表示共有N个信号量实例(资源)可以被使用,当信号量实例数目为零时,再申请该信号量的线程就会被挂起到该信号量的等待队列上,等待可用的信号量实例(资源);PS:可以想象成,信号量是停车场管理员(包含空余停车位数量、满/空等信息),需要进入停车场的车辆为各个线程,没空位就按停车场管理员的要求排队,有车位就根据管理员反馈的数量进入停车场;原创 2023-06-24 11:26:15 · 103 阅读 · 0 评论 -
RT-Thread-06-临界区保护
【代码】RT-Thread-06-临界区保护。原创 2023-06-24 10:46:45 · 289 阅读 · 0 评论 -
RT-Thread-05-空闲线程和两个常用的钩子函数
RT-Thread实时操作系统的空闲线程提供了钩子函数,这种空闲线程钩子函数可以让系统在空闲时执行一些不紧急的事务,例如,系统运行指示灯闪烁,CPU使用率统计等等这些;在thread1等待函数rt_thread_mdelay(500);执行的时候,系统会调度空闲函数执行,空闲函数会调取钩子函数去执行。空闲线程还负责一些系统资源回收以及将一些处于关闭状态的线程从线程调度列表中移除;在Kernel / idle.c中有空闲函数相关的函数;空闲线程在形式上是一个无限循环且永远不被挂起的线程;原创 2023-06-24 10:14:22 · 237 阅读 · 0 评论 -
RT-Thread-04-时间片轮询调度
时间片只在处在就绪态的线程当中优先级相同的线程之间起作用,优先级相同的就绪态线程,由于优先级相同无法通过优先级高低来抢占资源,这时通过各自线程的时间片来轮换占用系统资源,时间片起到了约束线程单次运行时长的作用,其单位是一个系统节拍(OS Tick);RT-Thread最大支持256个优先级(数值越小优先级越高,0为最高优先级,最低优先级预留给空闲线程);优先级和时间片是线程的两个重要参数,分别描述了线程竞争处理器资源的能力和持有处理器时间的能力。对于STM32默认设置最大支持32个优先级;原创 2023-06-24 08:42:30 · 293 阅读 · 0 评论 -
RT-Thread-03-栈空间分配
先将线程栈空间大小设置一个固定值(比如2048),在线程运行时通过查看线程栈的使用情况,再根据使用的情况合理修改设置栈空间的大小,一般栈空间最大使用量设置为70%在drv_gpio.h中有对引脚IO的驱动配置。原创 2023-06-24 08:01:46 · 399 阅读 · 0 评论 -
RT-Thread-02-线程创建
RTT中没个线程都具有独立的栈空间,在进行线程切换时,系统会将当前线程的上下文保存在线程中,当线程要恢复运行时,再从线程栈读取上下文信息,恢复线程的运行;线程上下文是指线程执行的环境,具体来说就是各个变量和数据包括所有寄存器变量、堆栈信息、内存信息等;线程栈在形式上是一段连续的内存空间,可以通过定义一个数组或者申请一段动态内存来作为线程的栈。原创 2023-06-23 22:31:57 · 356 阅读 · 0 评论 -
RT-Thread-01-动态内存
在裸机当中,程序的启动顺序是在RT-Thread当中程序的启动顺序是。原创 2023-06-23 21:16:35 · 159 阅读 · 0 评论