标签: 无标签
匠人手记 编程思路漫谈 [ 转 ]
一、前言
长久以来,都想写一篇关于编程思想的文章,但是一直没敢下笔。因为这实在是一个比较难
以用文字表达清楚的话题。
思想是什么呢?
思想是隐藏在灵魂深处的东西。它对外的展现,也许是种观点,也许是种方法,也许是种技
巧。
但更多时候,思想也许只是个一闪即逝的灵感,划过脑际不留痕迹。思想是活的精灵,就像
流水,千回百转,奔流不息。而当我们想去捧起,那水却又悄悄从指尖缝隙里流走。
思想就是这么得不可捕捉,没有常形。而一旦被捕捉到了,那思想便也就从那一刻开始定格、
僵化、失去活力,成为一潭死水。这样的思想又有何用呢?
语言文字,由于它的局限性,它也许可以表述编程的思路,却很难传递编程的思想。编程思
想有时只能意会却不能言传。
因此,匠人只能退而求其次,就写一篇关于编程思路的手记吧。
二、程序的基本结构
对于新手来说,背熟了指令集并不代表你就会写程序了。就像我们普通人,即使认识了所有
的汉字,但并不代表就会写文章了。
如何把那一条条指令汇集成程序,并顺利实现预期的要求呢?或者说,如何根据具体的要求
构建程序的框架呢?这往往成为新手上路后遇到的第一个“坎”。
那好,就随着匠人娓娓的叙说,从最简单的程序结构开始,进行一场进阶之旅吧……
单片机的程序都是为了实现某个特定的功能而定制的。因此每个程序的流程也不可能完全相
同。但是写得多了,总还是有些规律可循。事实上,大多数程序都可以套用这样一个基本流
程结构(参见图 3.1:基本程序结构)。
图 3.1:基本程序结构
这是一种比较完美的基本结构(完美的标准就是“简单有效”)。在这个程序结构中包含了
两部分:
1、初始化程序
单片机上电复位后,从复位入口处开始运行程序。这个时候,应该先对系统进行自检和初始
化动作。系统的初始化动作包括对 IO 口、RAM(变量)、堆栈、定时器、中断、显示、
ADC、以及其它功能模块的初始化。初始化动作一般只需要执行一遍。
如果有必要,还可以在这段程序里建立分支结构,如热启动和冷启动分支。程序可以根据系
统复位类型、系统自检的结果或其它条件,选择性地执行初始化动作。
2、主程序循环体
初始化程序结束后,系统的工作环境已经建立起来了,这时就可以进入主程序。
主程序一般是个循环体。在这里执行的是程序要实现的具体功能。如输入检测、输出控制及
人机界面等等。这些功能语句可以直接写在主程序里,也可以写成子程序形式,由主程序进
行调用。
三、模块化的程序结构
原则上来说,匠人是不会在主程序里直接写功能语句的(喂狗指令除外)。一个好的主程序
结构应该通过子程序去调用具体功能模块,这是程序模块化的要求。那种“脚踩西瓜皮,滑
到哪里算哪里”可不是我们的风格哦。
在这种模块化的程序结构中,主程序仅仅是执行调度功能,负责轮流调用功能模块程序。主
评论9