我大学毕业后第一份工作,在成都WXL做无线单片机,主要就是TI的CC1110,CC2430和CC2510。那个时候用该公司的开发套件,源代码是前辈在TI的例程上修改的。当时遇到很多头疼的问题,CC2430的zigbee协议太复杂,CC1110的例程的效率又不高,SimpliciTI协议虽然开源,但是代码繁琐,而且效率也不高。总之,我没有完完整整的做好一个项目。
但是通过三年的不断学习,我的编程能力提高了。我离开了WXL,但是一个老客户要我给他设计一套WSN系统,选型芯片是CC2430。我在了解了IEEE802.15.4 MAC层协议功能强大后,决定用TIMAC协议。TIMAC协议和Z-stack都是使用的同一种OSAL,我在后来的学习中,了解到该OSAL确实功能强大,它采用内存分配机制和消息传递。OSAL中有不同的任务等级,可以通过event和msg两种形式来实现任务之间通讯。而任务切换是通过轮询的方式,比起真正的RTOS,不用为每一个任务分配栈空间,同时OSAL的中断程序中都是要么设置一个标志位,以便在任务中处理,要么将收到的数据缓存起来。由于8051的直接寻址RAM很小,OSAL将堆栈放在了XRAM中,一次函数调度入栈保存R0~R7要产生几十条指令,消耗百多个个时钟周期,所以OSAL一般在中断中都不做复杂的处理,专门提供了一个Poll的结构,就是负责将中断产生的信息发给任务队列。通常CC2430的开发系统都是接的12864的屏幕,但是我在了解了OSAL的结构后,就在一个160*160的屏幕上实现了一个基于OSAL的菜单系统。
同时,我在CC1110这条线上,也在做OSAL的移植,首先我把无线收发绑定到DMA上,串口收发也采用Queue FIFO,这个工作目前正在进行中,还考虑了无线更新程序的功能。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。