【本帖内容】RT-thread学习之线程间的同步
RT-thread学习之RTT 的与众不同RT-thread学习之object对象管理机制
RT-thread学习之Thread线程机制及应用
RT-thread学习之设备层框架设计浅析
继续我们的学习之路,前面讲了线程相关的应用方面的一些概念,其实OS的核心就是依靠线程来实现的,但是线程只是os底层实现的基本单位,一个应用往往需要很多的线程协调工作,这里就涉及到多线程间通信的问题。在原有的裸机时代,是没有什么线程概念的,但是往往可以将线程类比函数的概念,实际上本质上并无太大差别,只是对于函数的控制往往都很弱,你只能控制它开始,然后等待它自行走完一个周期,然后才去干别的活,当你需要对函数进行控制时,你的第一考虑是中断,其实这部分所实现的功能就和os对线程的管理就很像了,但是你用中断以后,如果有其它函数需要抢占执行呢,这时候你会说,嵌套中断嘛,的确可以通过嵌套中断的方式来实现对于中断级的抢占,而且从这一方面来讲它和os就更像了,但是要注意一点问题,中断时舒服前台操作的,而函数才是后台的服务,那么问题来了,你能把所有的功能都放进前台实现吗?答案肯定是不能前台中断有几个条件决定了这样做不可行,其一中断入口的条件判断是特定的,比如定时中断,外部触发中断,串口中断,都是发生在特定条件下才能进入,其二中断的数量是有限的,你有100个函数功能要执行,但不一定有一百个中断给你用,其三,涉及到系统栈的问题了,中断抢占函数执行,中断抢占中断执行,这些临时场景的保存,只有一个地,那就是系统栈,默认大小是0x400,不论发生何种抢占问题都会消耗系统栈的开销,一旦发生中断嵌套或函数嵌套调用,那么多大的系统栈才够用呢,单片机本身RAM就金贵,栈定义大了,应用级就不够用,定义小了又容易发生中断溢出,os则从另一个角度尝试解决这个问题,依然会导致RAM开销比传统裸机的大,但相对于溢出问题得到了有效的控制,总体来讲还是一个不错的选择。扯了很多,好像又有点偏了,接下来还是进入正题讲下线程间同步的问题。