http://blog.163.com/zhaojun_xf/blog/static/30050580200852305139206/
2008
到今年7月我刚好毕业一年,回想起我这一年内走过的路啊,平平淡淡的一年,艰辛的一年。
2005春节也没能回到老家探望父母。
毕业的一年由于工作原因,让我有机会了解了RTOS,供职公司不大,做的产品用的是51。然而51内部的RAM资源实在太少了,以至于没一个著名的RTOS可以很好的跑起来,好在那个时候我发现了small RTOS,这是作者花费很多心思专门为51而写的,显著特点是处处为节约内存而设计出来的。当时由于我刚刚从学校出来,没有多少实际经验,很多公司都不愿意接收。好不容易找到一家也就是我现在所在的公司,来到这个公司之后,没过多久,接了公司一个项目,环境网络监控,用的是
RS485的多机通讯,当然也是用的51。由于我在学校的时候学的电子信息工程专业,开过单片机和C语言的课程,业余在搞了些小东西,大多是用ASM写的,只有到后来毕业设计是才使用C51,尽管我很早就熟悉了C语言。才发现使用C51写程序是多么的能发挥设计者的想象力了。当时真的很兴奋,好高兴。刚毕业时找到一份在长春市的生产TFT-LCD液晶屏合资企业,各方面的待遇都好,但我不喜欢那份工作,没出三个月我就辞职了,到了现在所在的这家公司。
对公司来说,我和一个刚毕业学生没什么两样。所幸那时的工作不怎么忙,这才让我有了时间去专注一样东西,老板给了项目之后,我就着手做硬件,在等待PCB制造商制造样品的时候,我又开始我的软件设计,当是手头有一份陈明计的small RTOS,同事有一本书和一个支持KEIL uv2的仿真器,该有的条件到有了,我没理由不使用一下RTOS,我喜欢尝试新东西,说实在的当时对RTOS的很多概念都不清楚呢!边学边用,那个项目下位机程序并不怎么复杂,没过多久项目的基于RTOS的下位机软件就差不多了,总共4个任务,实现了
RS485多机通信,数据采集和MCU可靠性监控。其中
RS485多机通信比较复杂,使用了两个任务。
牛刀小试,感觉良好。以前想也没想过可以在
AT89S52这种资源及其有限的MCU上实现RTOS,虽然那个RTOS不是我写的,但我还是能感受到作者当初决定写这个small RTOS心情。
后来,我的第一个项目由于其他原因被搁浅了,我又接了第二个任务,这第二个任务可真是比第一个复杂多了,因为最后编译生成的目标代码是第一个项目中的目标代码4至5倍。这个项目任务增至7个,单个任务也变的复杂了。这个项目的硬件很早就做好了,基于RTOS的程序运行在那个硬件上经测试都可以满足要求,特别是在那个控制器通信频繁的时候没有丝毫不影响我的显示和数据采集。因为显示和数据采集是优先级比较高的任务。这是我明确的感受到RTOS带给我的好处。
牛刀再试,初露锋芒。
公司要采用新型的单片机开发产品,最终确定为AVR单片机,公司主要看重了
ATMEGA8L的极高性能价格比,交给我一新项目,在AVR上写程序,产品类似第二个项目,本来可以重用一些第二个项目的代码,然而第二个项目是在是基于small RTOS的,所以我不得不把small RTOS移植到avr上面去,为此我花费了一段时间去学习avr-gcc,在这之前我弄了一个盗版CodeVisionAVR,随软件包带的文档却说不支持指向指针的指针和二维数组,我的天啊,连这个都不支持我怎么移植RTOS呢,之后我有发现,即使它支持一维指针,但编译指针部分代码效率极其的低。随后我找来WinAVR读着那些不太舒服的English,终于可以很顺手的使用avr-gcc就像c51一样顺手,编辑器依然是uv2。GCC支持直接嵌入汇编语句,small RTOS移植到avr简直没有费多大力气就可以了,这样一来,本来在51上写的程序就可以直接拿到avr上来跑了,连最很烦的时间敏感程序也用不做任何改动,真是太惬意了。
small RTOS从51到avr:
1、所有的没有使用全局变量的在51中不可重入的函数都将变为可重入函数,这使得在avr下编写C函数时不在用考虑函数的可重入问题了。简化了多任务环境下的编程难度。
2、avr的芯片的内部RAM比较大,而且都可以做为堆栈使用。故small RTOS的avr版本可以使用静态堆栈,并且已经实现静态堆栈,经验证效果良好。任务切换的速度可以变的非常快,
4MHZ晶振时可以低至77us.
3、avr-gcc支持C++,RTOS & C++实在是一种美妙的组合了。C++虽然复杂,但解决复杂的问题舍她其谁?
以上就是鄙人在使用small RTOS的个人感受,希望能激励想学习和正在学习RTOS的人们!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。