
笔者目前在开发TI的蓝牙芯片,CC2640,在开发一个与手机蓝牙通讯以实现单片机系统联结广域网功能的设备。本来想把自己开发的过程遇到的问题与困难分享出来,但是想到与我一样开发这样设备的朋友太少了,写在知乎不大好,于是还是打算将开发的过程分享到优快云上。
https://blog.youkuaiyun.com/Clarence_happy/article/details/88838008blog.youkuaiyun.com在开发CC2640前,笔者先是开发了CC2541,,CC2541是TI推出的蓝牙芯片,功能强大是没说了。这里为什么要提他,因为笔者使用官方提供的SDK开发套件代码的时候,看到了很多优秀的代码编辑方法,CC2541使用了类似TI-RTOS的实时操作系统,但是为什么说是类似的,因为我分明看到主函数的运行内容是C语言清晰可见的逻辑,并没有牵扯到底层堆栈、上下文信息保存、、等等这些操作系统必有的深奥东西,我想到CC2541上运行的也许并不是一个真正的实时操作系统。
这里笔者粗浅的说一下自己对真正操作系统的理解,希望各位朋友能斧正。
在51单片机中,笔者认为只有两个线程,一个是主线程,一个是中断线程。主线程运行在main中,是按顺序执行的代码序列,中断线程运行在特定硬件事件发生后,有对应的服务函数。这两个线程最大的特点是,主线程运行后,如果此时中断出现,系统会保护当前的各种重要数据,例如通用寄存器R0-R12和PC寄存器等等,这些信息都保存好,然后重新载入一系列中断服务函数需要的寄存器值,从而实现从主线程跳转到中断线程。
笔者认为,一个中断服务函数相当于一个中断线程,多个中断服务函数的话,会出现抢占的问题,但是优秀的处理器会处理好这些抢占的问题,例如NVIC不就是管理这些事情的吗?反正笔者认为线程的切换,换汤不换药,就是先保护现场,