
RT-Thread
文章平均质量分 95
奇偶变不变
你好!这里是奇偶变不变 | 象限符号辨,我的个人知识库,记录我学习和思考的地方。这里没有特定的主题,从技能到灵感,从工具到感悟,聚焦学习与成长。这不仅是我的成长记录,也是一个开放的空间,关注我,一起感受知识积累的乐趣吧!
展开
-
RTOS之信号
安装信号主要用于确定信号值与线程针对该信号值所采取的操作之间的映射关系,即线程将要处理哪个信号,以及当该信号被传递给线程时,将执行什么操作。如上图所示,假设线程 1 需要处理信号,它首先安装信号并解除对该信号的阻塞,同时设定该信号的异常处理方式。然后,其他线程可以向线程 1 发送信号,触发线程 1 对该信号的处理。如果某个信号被阻塞,则该信号不会传递给安装此信号的线程,也不会触发软中断处理。线程接收到信号并打印了接收到的信号值。对信号的操作主要包括:安装信号、阻塞信号、解除信号阻塞、发送信号和等待信号。原创 2024-12-25 11:43:23 · 975 阅读 · 0 评论 -
RTOS之消息队列
发送消息时,消息队列对象会先从空闲消息链表上取出一个空闲消息块,将发送的消息内容复制到该消息块中,然后将消息块挂到消息队列的尾部。由于线程 2 发送的消息 "I" 是紧急消息,它会直接插入到消息队列的队首,因此线程 1 会在接收到消息 "B" 后,先接收到紧急消息 "I",然后再接收消息 "C"。与邮箱例子中相同的消息结构定义,如果仍然需要向接收线程发送此消息,在邮箱例子中,只能发送指向该结构的指针(在函数指针被发送后,接收线程能够正确访问指针指向的内容,通常这部分数据需要留给接收线程来释放)。原创 2024-12-25 11:35:24 · 1090 阅读 · 0 评论 -
RTOS之邮箱
在这种场景下,线程 1 可以将按键状态作为邮件发送到邮箱,线程 2 从邮箱中读取邮件并执行相应的 LED 控制操作。例如,存在三个线程,线程 1 发送按键状态,线程 2 发送 ADC 采样数据,而线程 3 则根据接收到的邮件类型执行不同的操作。当线程从邮箱接收邮件时,如果邮箱为空,接收线程可以选择等待直到收到新的邮件,或设置超时时间。当线程向邮箱发送邮件时,如果邮箱未满,邮件会被复制到邮箱中。如果发送线程选择等待,当邮箱中的邮件被接收而空出空间时,等待的发送线程会被唤醒并继续发送。原创 2024-12-21 16:15:55 · 2669 阅读 · 0 评论 -
RTOS之事件集
如果同时设置了清除标记位,则线程 #1 唤醒后会将事件 1 和事件 30 清零,否则事件标志将保持置 1 状态。一个线程或中断服务例程发送事件到事件集,等待的线程会被唤醒并处理相应的事件。即一个线程与多个事件的关系可以是:任意一个事件发生就唤醒线程,或者所有事件都发生才唤醒线程。然后,遍历等待在该事件集上的线程链表,判断是否有线程的事件激活要求与当前事件标志值匹配,如果有,则唤醒该线程。事件集控制块包含事件集的重要参数。线程必须与所有关联的事件都发生同步,即只有当所有关联事件都发生后,线程才会被唤醒。原创 2024-12-21 14:42:30 · 1009 阅读 · 0 评论 -
RTOS之互斥量
当一个线程持有互斥量时,互斥量处于闭锁状态,并且该线程拥有该互斥量的所有权。当线程 A 尝试获取已被线程 C 占用的互斥量时,线程 C 的优先级会被提升至线程 A 的优先级,从而避免了线程 C 被线程 B 抢占。优先级翻转是指,当一个高优先级线程试图访问共享资源时,如果该资源被一个低优先级线程占用,而该低优先级线程在运行时又可能被其他中等优先级的线程抢占,导致高优先级线程被许多低优先级线程阻塞,无法及时获得执行。如果线程的运行优先级被互斥量提升,则释放互斥量后,线程的优先级恢复为持有互斥量前的优先级。原创 2024-12-17 14:41:39 · 1205 阅读 · 0 评论 -
RTOS之信号量
信号量也可以认为是一个递增或递减的计数器,需要注意的是信号量的值非负。信号量工作示意图如下图所示,每个信号量对象都有一个信号量值和一个线程等待队列,信号量的值对应了信号量对象的实例数目、资源数目,假如信号量值为 5,则表示共有 5 个信号量实例(资源)可以被使用,当信号量实例数目为零时,再申请该信号量的线程就会被挂起在该信号量的等待队列上,等待可用的信号量实例(资源)。例如当信号量的值等于零时,并且有线程等待这个信号量时,释放信号量将唤醒等待在该信号量线程队列中的第一个线程,由它获取信号量;原创 2024-12-17 13:53:56 · 695 阅读 · 0 评论 -
RT-Thread 的时钟管理
启动后只会触发一次定时器事件,然后自动停止。会周期性地触发定时器事件,除非用户手动停止,否则将一直持续执行。根据定时器超时函数执行时所处的上下文环境,RT-Thread 的定时器可以分为HARD_TIMER模式和SOFT_TIMER。原创 2024-12-15 18:28:13 · 955 阅读 · 0 评论 -
RT-Thread 的线程管理
每次切换到 B 线程时,B 线程会运行 5 个系统节拍的时长。在中断处理过程中,如果中断服务程序使得一个比当前运行线程优先级更高的线程具备了运行条件(例如,释放了一个被高优先级线程等待的信号量),那么当中断处理完成后,系统并不会立即返回到被中断的线程继续执行,而是会进行一次线程切换,将 CPU 的使用权交给优先级更高的线程。调用此函数后,当前线程会被从其所在优先级的就绪队列中移除,并添加到该优先级队列的末尾,然后调度器会进行线程上下文切换(如果当前优先级只有一个线程,则线程继续执行,不进行上下文切换)。原创 2024-12-15 17:29:24 · 1371 阅读 · 0 评论 -
RT-Thread 内核基础
操作系统内核是操作系统的核心,是最基础也是最重要的部分。它就像计算机的大脑,负责管理系统的核心资源,包括线程、线程间的通信、时间、中断和内存等。RT-Thread 内核也承担着这样的角色,它位于硬件之上,由内核库和实时内核实现构成。内核库可以理解为是内核的工具箱,它提供了一些类似 C 语言库的基本函数,帮助内核独立运行。这些函数的具体内容会根据所使用的编译器而有所不同。例如,使用 GNU GCC 编译器时,内核库会包含更多标准 C 库的函数。原创 2024-12-15 17:26:58 · 1161 阅读 · 0 评论 -
RT-Thread 简介
初识 RTOS 的世界,或许 RT-Thread 对你来说还是个陌生的名字。但随着学习的深入,你会逐渐领略到它的独特魅力,感受到它与其他 RTOS 的不同之处。RT-Thread,这款由中国团队倾力打造的嵌入式实时操作系统,拥有完全自主知识产权,历经 16 年的磨砺与沉淀,在物联网的浪潮中,正逐步蜕变为一个功能完备、组件丰富的物联网操作系统。它就像一颗冉冉升起的新星,在嵌入式领域散发着耀眼的光芒。准备好开启你的 RT-Thread 探索之旅了吗?相信它会带给你意想不到的惊喜!原创 2024-12-08 16:07:21 · 1491 阅读 · 0 评论