终于有机会从事基于单片机的电子产品开发这种工作。这是一家从事车载收放机生产的小型公司。公司规模不大,大概有四五十人。核心技术主要靠方案商的支持。具体来讲,方案商提供基本的开发包,并且提供技术支持。这对我来讲,是很有意义的。因为可以从方案商提供的软硬件开发包里面学到很多开发上的技巧。尽管公司效益不是太好,但对我这个没有实战经验,只会纸上谈兵的,所谓单片机技术人员,是非常有益处的。
刚一接触以前工程师留下的程序时,我真是有些晕头转向。唯一知道的是,程序的入口是main函数,不管这个项目里面有多少源文件。幸亏有在线调试器,只需和目标板连上几根线,就可以在线仿真所写的代码了。不过,刚一开始是盲目的,或者说,没有具体想好程序如何编制,就开始写代码,然后用仿真器实验运行结果。这种盲目的编码,往往带来巨大的返工。所以,后来我想到,得先在纸上画画程序的思路,尽管,我写不出完美的程序流程图或者什么NS流程图,但最起码,我要对所写的程序有个整体的把握。
后来我发现,其实方案商已经给出程序框架的说明了,是什么基于消息存取的。我立马意识到这应该是一种单片机程序设计思想。我上网也找了一些资料,也在仔细揣摩这种思想在我们这个产品开发中的具体应用。所以,我总结了一下,我接触到的这个产品软件上的特点。
首先分析下这个系统的构成。由按键、显示模块、U盘接口、SD卡接口、24C02、FM模块、静音电路以及功放和电源模块。按键采用ADKEY。即采集每个按键按下后,对应电阻上所分得的电压值,以此来区分是哪个键被接下。显示模块用得是段式LCD。这种显示器与LED不同。LED是单向供电,自发光。而这种段式LCD所显示的段本身不发光,需要背光源,并且段两端需要接交流电压,长时间通直流电压,会损坏液晶。其它的如U盘文件、SD卡文件读取,以及解码是方案商提供的。虽然最核心的东西没有学到,但对于按键驱动、LCD驱动、24C02驱动等还是长了见识。
1、很多函数是放在定时中断里面执行的。比如按键扫描、LCD扫描都是放在定时中断函数里面的。
2、采集到的按键值转换成“消息”存放到消息池里面,消息池有深度,存满后,自动从头开始存放。
3、每个功能模块(FM、MP3、RTC)都是相互独立的,都是采用相同的程序框架。
4、关于while(1)。必须在while(1)内部有跳出此死循环的条件。
5、函数是分段存储的。
这种表象的认识,对我在此源程序上的修改是有帮助的。以后,我会一一分析每一个模块的编程策略。