汽车配件网

当前位置:首页
>>
>>
正文

我的单片机应用系统设计职业之路

我的单片机应用系统设计职业之路

我于2004年考进一所大专院校,学习电气工程及其自动化专业。2005年第二学期,我们这个专业开设了单片机课程。从那以后,我便有了单片机这个概念。虽然学习了一个学期,癫病的最新治法但对单片机还是云里雾里,只知道单片机就是一个完全集成在一个芯片上的微型计算机,也只知道单片机要用汇编语言编程。虽然在学校里做了一些实验,但像我们这些理解能力迟钝的学生,在这种应付的学习环境下,根本就不会去了解实验的原理,实验的目的,跟着其它优秀的同学把实验报告写出来就完事了。

但我们那个单片机老师对学生还是很负责的。尽管他在课堂教学上,不是那么严厉,但他对我们毕业后的就业还是很关心。我清楚地记得他说过这样一句话:我们这个专业的学生,不要毕业后,只会做接个灯泡这么简单的工作,我们要做些有水平的工作,比如单片机开发,plc开发。可以说,这句话,深深的印在了我的脑海里。是呀,虽然我是大专生,但我也是有梦想的。虽然小时候,梦想自己可以考上清华、北大,可以成为科学家,但现在是绝对不可能的了,但我也要往高处走,尽自己最大所能,把技术学好,做好。所以,我报名参加了这位老师办的单片机培训课。

这个培训课没有我想像的收获有多大。可以说,在这个培训课上,我只知道了几个单片机开发的软硬件工具,keil、开发板、仿真芯片、protel99se绘图软件,会看着原理图搭接电路了。但对单片机程序设计,还是一点想法没有。因为,这位老师,也是用汇编语言给我们讲解单片机开发。很快毕业了。我就陷入了找工作的茫茫人海中。

第一份工作是跟着一位包工头做电工,第二份工作是在一个电气设备公司做电气装配工。第三份工作是给一个BOSS仿一个大型机械公司做的平衡仪控制板。前两份工作,可以说和单片机开发一点关系都没有。第三份工作我还是有所收获的,因为,它正合我意。我当时是这样想的,单片机系统开发实际上属于电子技术范畴的,所以,我必须打好电子技术基础,但我在学校里学的是强电,电子技术只学了一些皮毛。所以,前两份工作,必然做不长。但徐州电子技术企业太少了,虽然有一些比较好点的公司,人家一看你这学历、你这水平,根本就不给你面试的机会。这第三份工作,我还是有所收获的,我自学会了电子线路绘图软件。但两个多月的时间过去了,我也没弄出啥结果来,自己也感觉不好意思待了,所以,就主动离职了。没工作的心情不好受呀,心里着急呀,但我还是有明确思路的,就是找电子方面的工作。于是,第五份工作,名义上是电子技术员,实际上是电子装配工,而且,我一干竟然是一年半。在这里,我真的接触到了实际电路。无论是模拟的,还是数字的,还是基于单片机的。虽然,我只是一个电子产品装配工。但我不同于其它人,每个产品的电路原理,我都会仔细的思考。所以,在这里,我知道了,开关电源、高频电子镇流器、还有一些实用的电子元器件。后来,我发现在这里,真得没啥前途,在这里,只会离我单片机开发的梦想越来越远,所以,我又选 择了离职。

那是2009年刚过完春节。我想,这次找工作,我一定要找到对口的,我一定要实现单片机开发这个职业。找工作真的很难。但我想,之所以难,是我心里没底,没有底气。如果我想求得一单片机开发的岗位,但我一点开发经验也没有。我就算是在做好准备、在自圆其说,在热爱这个技术,我一点实战经验没有呀。

所以,我还是选择了一家很小的公司。但这家公司用到的单片机与我平时自学的不一样,我平时看了许多51单片机方面的书,甚至通过同学的介绍也了解目前单片机的开发已普遍采用C语言了,但这家公司用的单片机是非常的小,有的只有8个管脚 ,而且只支持汇编语言。还有一种情况是,另外一个工程师特别封闭自己的技术,我只是个画板子工,根本就没功夫去碰软件上的东西。 画了大概两个多月的板子,原来的工程师因为和老板有矛盾,辞职了。公司就剩我一个技术人员,但老板对推出新产品特别急切,在加上我当时对汇编语言编程没啥思路,所以,我还是继续做我的画板子工。仿别人的机器时,芯片都是找人破解的。后来,因为种种原因,我离开了那家公司。在那边所收获到的就是会用protel99se绘制单层PCB,如此而已。

又一次陷入了找工作的状态中。这次找工作花的时间比较长。在没工作这段时间,我拿起了买了将近一年多时间的谭浩强老师写的C语言程序设计一书。大学的时候,没学过C语言,觉得C语言多难多难。但翻了翻,看了看视频,感觉也不是太难,就是由函数构成的。然后,所有的函数有一个公共入口main函数,还有各种各样的基础数据类型,构造数据类型等。而且,用于单片机开发的C语言-C51更是挺简单的,一些较复杂的数据结构在单片机程序设计中用得很少。还有更重要的是,我终于拿起了,买了许久的51单片机开发板。跑了一些程序,自己也做了一些简单的实验。我觉得对基于C语言的单片机系统开发入门了。但应付实际工作,可能还会存在一些问题。所以,我迫切希望自己能找到单片机开发的职位,哪怕工资不是很高。因为那一年,我结婚了,即将面临着来自生活上的压力。所以,在找对口的工作和工资高的工作之间,我一直在犹豫。并且心理也清楚自己的技术实力。但单片机开发依然是我追求的目标,我绝对不会放弃的。

在这种情况下,我对工作也不在挑三拣四了,最重要的是工资高,我要养家活口呀。但我一直没放弃对单片机开发的自学,虽然,我心理明白,搞单片机开发是一个实践性很强的工作,但没有深厚的理论也是不行的,只有真正理解了,见识的多了,才会提高能力,所以,闲暇时,我一直在读单片机开发方面的书。甚至,用自己低微的收入买了一块ARM开发板,那时,我了解到,很多人都在搞ARM,所以,我也买了一块开发板,想自学,不过现在,也把它束之高阁了。可能是由于压力大吧,也可能是我和她的学历上的差异等,我和原来的那位分了。这又一次,让我陷入了人生的低谷。我开始在外面租房子住,因为一个人,所以,我更有时间看书学习。

有时候,我把单片机开发板拿出来,在电脑旁做一些实验,大部分时候,我是在看书。因为没有了家庭的束缚,我对找工作更加自由。一定要找一个对口的工作,能学到东西的工作。所以,我又开始了离职,找工作,再离职,再找工作的循环中。因为年龄比较大了吧,看同龄人毕业那么多年后,收入都在增加,而我还在学技术,还在为找对口的工作而发愁。所以,在工资、对口、学习三方面,我不得不做一些平衡。最终,我还是选择了工资不能太低的工作。

我虽然自学了很多科目,看了许多单片机开发方面的书。但真正对我有帮助的,还是我现在的这份工作,或许是多年的理论知识消化吧。尽管在找到这份之前,我没有完整的开发过一个单片机应用系统,但是,我对单片机不在感到神秘了。也许是单片机用的太广了,也许是一个很普及的技术了,也或许是我看得单片机书多了吧。来到这家公司,我确实收获了许多。尽管大多数时候我在抱怨公司这不好,那不好,但我心理清楚,在这里,我是很有收获的。学到了许多单片机程序设计思想。

如今C语言已经成为单片机程序设计公认的语言。我用C语言进行单片机程序设计也有两年多的时间了,C语言程序的特点使我对单片机开发更加感兴趣。让我从一个了解单片机的彷徨者到今天能用单片机开发一些产品,这期间我深有感触。

众所周知,单片机实际上就是一个典型的微型计算机系统。作为一款单片机,无论大小,都集成了计算机最基本的五大部件,运算器、控制器、存储器、输入输出。但单片机在用途上是与通用微处理器不同的。单片机是面向特殊用途的,常作为某一个设备的控制单元,所以单片机又常称为微控制器,英文缩写MCU。

最初的单片机开发语言是汇编语言,但汇编语言会随着单片机种类的不同而不同。程序设计起来难度较大。后来人们改用C语言作为单片机程序设计的通用语言。这种不依赖于机器硬件的语言,可以方便的在各类单片机系统中癫痫病的治疗方法移植,极大的加快了单片机程序开发的时间。

我们知道,从总的方向来讲,指令是按顺序被执行的,除非遇到中断。但作为单片机软件系统,我们不能用指令流的思想去构建一个单片机软件系统。通常我们会借助PC软件系统的思想,对单片机软件系统在宏观上进行分层。

首先,我们要通过单片机系统的硬件资源,明确要对哪些硬件资源进行软件封装或者软件抽象,这一步我们称为硬件驱动程序设计。对应的软件层,我们称为驱动层。这一层的程序设计是纯粹面向硬件设计的。要求程序设计人员必须对器件时序、内部可编程寄存器相当熟悉,而且还要熟悉常用的芯片级总线,如I2C、SPI等。有时,我们也将外部总线(通信接口),如RS232协议、RS485协议、CAN总线等,也归到这一层。

其次,是监控程序层,或者,我们冠之以操作系统层。这一层最主要的任务是管理。主要管理应用程序与应用程序之间、驱动程序与应用程序之间的关系。从某种意义上讲,也是一种通信关系。这一层基本上决定了程序的框架。比如常用的状态机思想、消息存取思想等。

最后一层是应用层。这一层是体现系统功能的。应用程序通常也称为任务,是直接面向使用者的。与驱动层相比,这一层的程序设计是面向逻辑的,面向数据处理的。

不论一个单片机软件系统规模有多大,它都体现了这三层架构。这也是我们程序设计最基本的思路。按照这种思路,我相信,设计出来的软件更有条理,更有层次感 ,便于分工,同时也加快了程序开发的时间。

终于有机会从事基于单片机的电子产品开发这种工作。这是一家从事车载收放机生产的小型公司。公司规模不大,大概有四五十人。核心技术主要靠方案商的支持。具体来讲,方案商提供基本的开发包,并且提供技术支持。这对我来讲,是很有意义的。因为可以从方案商提供的软硬件开发包里面学到很多开发上的技巧。尽管公司效益不是太好,但对我这个没有实战经验,只会纸上谈兵的,所谓单片机技术人员,是非常有益处的。

刚一接触以前工程师留下的程序时,我真是有些晕头转向。唯一知道的是,癫痫是否遗传程序的入口是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、函数是分段存储的。

这种表象的认识,对我在此源程序上的修改是有帮助的。以后,我会一一分析每一个模块的编程策略。