本小结以下内容包括后面临界区的保护源码分析是扩展说明,懂与不懂不影响学会使用 RT-Thread 临界区保护,因为涉及的 RTOS的调度原理,PendSV异常等知识,需要一定的基础,这里建议想学习RTOS的小伙伴务必好好看看《Cortex-M3与Cortex-M4权威指南》这个文档。 理解上面示例关系到RTOS的调度原理,上面解释中用到的中断打断线...
本小结以下内容包括后面临界区的保护源码分析是扩展说明,懂与不懂不影响学会使用 RT-Thread 临界区保护,因为涉及的 RTOS的调度原理,PendSV异常等知识,需要一定的基础,这里建议想学习RTOS的小伙伴务必好好看看《Cortex-M3与Cortex-M4权威指南》这个文档。 理解上面示例关系到RTOS的调度原理,上面解释中用到的中断打断线...
我们确实直接在函数或者线程里面创建临时变量使用 线程栈 或 者系统栈处理临时变量,但是正如上面博文里面所说的,作为一个通用的操作系统,都会且必须得有自己的合理的内存管理方式。 这个在我们现在说明的 RT-Thread 操作系统上是内核已经实现好的,我们得了解它。 知道了为什么,那么接下来我们就来了解一下 RT-Thread ...
读出切入线程的栈指针,准备切换: 正式开始切换: 把线程的R4~R11装载进对应寄存器组,并且调整PSP指针: 修改LR的值,并且退出,返回线程模式+用户级。 注意,由于指定了返回系统的状态(线程模式+用户级),退出来中断服务函数的时候系统所用栈指针是PSP,在中断返回的时候,会执行一次硬件出栈,而且是用PSP指针,刚好是把剩...
CM3中线程调度是利用PendSV悬起异常完成的,PendSV中断的优先级一般设为最低(不能让线程抢占中断获取CPU的使用权),因此关闭中断后,系统不再响应可触发线程调度的外部事件。因此,如果在中断锁保护的临界区内主动发起线程调度,需要等中断锁打开后才能执行。 注意:这里的关中断,只是屏蔽了全局中断请求,配置使能的中断在...
RT-Thread 之临界段保护 1、什么是临界段 临界段就是一段在执行的时候不能被中断的代码段。在RT-Thread里面这个临界段最常出现的就是对全局变量的操作。 那么什么情况下临界段会被打断? 一个是系统调度,另一个是外部中断。在RT-Thread里面,系统调度,最终也是产生PendSV中断,在PendSV Handler里面实现线程的切换...
5. 使用RT-Thread临界段保护时需要注意的事项 临界段应尽量短:临界段代码应尽量简短,以减少对其他线程的影响。 避免嵌套使用:尽量避免在临界段内嵌套使用其他临界段保护机制,以防止死锁等问题。 选择合适的保护机制:根据具体应用场景选择合适的临界段保护机制,如禁用中断、禁用任务调度或使用互斥量等。 注意实时性影响...
在rt-thread中,保护临界区的方法除了IPC线程间通信机制,然后就是调度锁与关闭中断了。 调度锁 rt-thread调度锁的目的是让调度器停止工作,这时不进行线程的切换工作。也就是说,在调度锁范围内的代码是独占CPU资源的,当前的被调度锁锁住的代码不能切换到其他的线程。
那么什么情况下临界段会被打断?一个是系统调度,还有一个就是外部中断。在RT-Thread中,系统调度最终也是产生PendSV中断,在PendSV Handler中实现线程的切换,所以还是可以归结为中断。既然这样,RT-Thread对临界段的保护就处理得很干脆了,直接把中断关闭,但NMI FAULT和硬FAULT除外。
二、线程通信 上面的线程同步中通过信号量、互斥量、事件集的实现保护临界区实现线程中的通信,但是这样的操作会使逻辑变得很复杂,所以RT-Thread提供了线程通信,将线程同步与线程通信的使用场景分开。 邮箱 邮箱的使用场合 邮箱是一种简单的线程间消息传递方式,特点是开销比较低,效率较高。在 RT-Thread 操作系统的实现...