下星期开始,连着休息两个星期,这段时间就离开南京回到我那遥远的家乡了。为了庆祝,特贴出个人心得,望大家支持!觉得好可要跟帖啊!标题有点过了,只是为了多吸引几双眼球,可别以为我就爱吹牛。
这篇心得不是面向初学者的,而是面向入门了的急需提高编程水平的人。如果是初学,可 以浏览一下,对于以后形成自己编程的方式和风格有参考价值;如果是已经入门的,可要好好琢磨了。同时欢迎大家指正。
我的工作偏软,只用P89C669,MSP430开发几个产品,主要包括GPRS负荷控制终端,交流采样等电力产品,运行情况还不错。上月公司硬件平台升级,转向ARM了。
作嵌入式软件这一行,一定要对它有兴趣,要热爱这一行。有时为了一个更好的方案,自己的程序会反复修改、调试,确实很累,可以说双休日没事的话,一定在家里调程序。再加上随时要学习新技术,新器件,当然英语好点就更方便一些了。所以大家一定要有吃苦的准备。
在语言方面,感觉就是工具的差别,软件思想其实都一样。不可否认汇编的确强大,有些功能用汇编很简单就可以实现,用C可能就要麻烦些,但C的强项我就不说了,网上到处倒是。我用P89C669芯片时,就用的汇编,用MSP430时就是C+汇编了,C用的久了,很多方法极为接近C++的数据封装的风格,只是做不出继承和多态,可能是水平不够。要点是大家一定要学会分层设计。总的说来,就是将基本操作做到最低一层,包括简单的寄存器操作等;在它的上面一层作驱动层,基本上要在这两层将硬件相关的操作包括进来以及所有中断处理服务,这点极为要紧。例如在汇编中经常要考虑函数要不要PUBLIC,在C语言中模块要安排好,哪些是私有函数(STATIC),哪些是公有函数等。注意用汇编也要封装好,不该访问的全局变量就不要引出否则将来程序大了,要让你维护的话,你会死得很惨。说到底就是要封装好。我认为这就是专业与业余的区别。如果只是业余学习的话,可以看看开发板的DEMO程序,看懂即可然后跑个程序看看,体会一下控制硬件的感觉就好,而专业人士肯定不会用DEMO。至少我不用。在这两层上面就是应用层,要求下一层为上一层服务。还是举个例子吧,免得名词太多,大家晕头。比如在MSP430中UART的485通讯的编写,可以将其寄存器的操作、波特率的设置,端口的处理等作为第一层,如果用C语言的话,通常用内联函数,一两句就可完成的简单操作。用汇编的话用宏就可以了。这一层的编写只需要你对芯片熟悉就没有任何问题。要注意的是由于直接与寄存器操作,特权很高,所以它们的头文件只能被第二层#INCLUIDE.第二层比较复杂一些,通常将中断中对于UART缓冲,以及对时钟的处理封装好。为什么用时钟呢?呵呵,就不告诉你!就不告诉你!...。别扔了,我说还不行吗?因为465通常需要切换控制端口,可以借用定时器来完成。注意只是借用。因为一个系统产品肯定会用道定时器的,而485切换控制可以借用,不用单独占用定时器的。当然,如果资源够得话也可以单独用一个定时器来完成。那第三层方什么呢?其实就是规约的解析部分。它们通常在主程序中被调用。这样一条线下来,好处实在是太多了。各层主题目标明确,脉络清晰,便于调试和维护,另外如果硬件平台改变了,可以只改写最下面的两层,第三层以上的东东基本上不用改动,你想想那么多的规约解析处理程序可以重复利用,多好呀。我现在改ARM,很快就搞定的串口通讯部分。这就是分层的好处。这样随着代码的累积,开发大型的产品也是很容易的事情了。
大家感兴趣的话可以用MSP430做一个485通讯,第一层要自己作,第二层可以参考IAR安装目录下\DOC\APPNOTES\AppNote430-03文件,但是要改动,加入定时切换功能,并且最好将缓冲区相关的变量用结构封装起来免得太乱,最后按自己的需要写第三层规约解析,在这一层千万不要直接操作硬件,只能调用第二层提供的功能。做完之后,你一定感觉到自己进步了。我最初就是这么做的。以后如果工作需要,可以进一步作全双工通讯,那样的话,缓冲区要改,收发控制也要精心准备的。。
作嵌入式软件的人一定要敢于动手,不要依赖别人,(干这一行男的较多,估计胆子都较大),如果是作偏软的话就更不用担心了,买个实验板,写程序、调试程序估计几年都没问题,我的430开发板用了快两年了,现在还可以用。动手多了,自然就可以成为解决问题的专家!!
说了这么多,就是希望大家都能进步,提高自己的水平。同时也希望大家能拿出自己的体会与经验,共同进步。木桶定律讲得很有道理:一只木桶盛水的多少,并 不取决于桶壁上最长的那块木板,而恰恰取决于桶壁上最短的那块木板。只有大家水平都高了,才能做出更好的产品。
Re: [分享] 如何开始编写嵌入式软件?
有什么想法?