原创 如何开始编写嵌入式软件?

2008-10-31 19:29 2534 10 11 分类: MCU/ 嵌入式
下星期开始,连着休息两个星期,这段时间就离开南京回到我那遥远的家乡了。为了庆祝

,特贴出个人心得,望大家支持!觉得好可要跟帖啊!标题有点过了,只是为了多吸引几双眼球,

可别以为我就爱吹牛。
    这篇心得不是面向初学者的,而是面向入门了的急需提高编程水平的人。如果是初学,可

以浏览一下,对于以后形成自己编程的方式和风格有参考价值;如果是已经入门的,可要好好琢磨

了。同时欢迎大家指正。
    我的工作偏软,只用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开发板用了快两年了,现在还可以用。动手多了,自然就可以成为解决问题的专家!!
    说了这么多,就是希望大家都能进步,提高自己的水平。同时也希望大家能拿出自己的体

会与经验,共同进步。木桶定律讲得很有道理:一只木桶盛水的多少,并 不取决于桶壁上最长的那

块木板,而恰恰取决于桶壁上最短的那块木板。只有大家水平都高了,才能做出更好的产品。

文章评论1条评论)

登录后参与讨论

用户1438129 2008-11-1 08:34

支持,共同提高
相关推荐阅读
用户158720 2010-01-20 18:55
好久没有写博客了,如果想找请看下边的网址
http://bbs.eeworld.com.cn/index.php?fromuser=daicheng...
用户158720 2008-12-20 18:44
状态机的两种写法
有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软件上称为FMM--有限消息机)。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,...
用户158720 2008-12-20 18:43
基于状态机控制的面向对象的前后台协从多任务系统设计
一、任务分析    根据题目要求,划分任务如下:    1、键盘扫描线程    2、灯显示线程    3、LED1-LED4四个独立线程    4、后台监视线程    5、串口收发中断    共计7个...
用户158720 2008-12-20 18:42
一种裸奔多任务模型
stateMachine + timerTick + queue。在RTOS环境下的多任务模型:任务通常阻塞在一个OS调用上(比如从消息队列取数据)。外部如果想让该任务运转,就要向消息队列发送消息。任...
用户158720 2008-12-19 20:35
C-51语言程序设计基础
c51设计基础<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />1.7 寄存器组定义8...
用户158720 2008-12-19 20:31
硬件工程师面试试题
模拟电路 1、基尔霍夫定理的内容是什么?(仕兰微电子) 2、平板电容公式(C=εS/4πkd)。(未知) 3、最基本的如三极管曲线特性。(未知) 4、描述反馈电路的概念,列举他们的应用。(仕兰微电子)...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条