单片机|分享两种单片机编程思想

单片机|分享两种单片机编程思想

文章图片

单片机|分享两种单片机编程思想

文章图片

单片机|分享两种单片机编程思想


分层思想

分层的思想 , 并不是什么神秘的东西 , 事实上很多做项目的工程师本身自己也会在用 。 看了不少帖子都发现没有提及这个东西 , 然而分层结构确是很有用的东西 , 参透后会有一种恍然大悟的感觉 。 如果说我不懂LCD怎么驱动 , 那好办 , 看一下datasheet , 参考一下别人的程序 , 很快就可以做出来 。 但是如果不懂程序设计的思想的话 , 会给你做项目的过程中带来很多很多的困惑 。
参考了市面上各种各样的嵌入式书籍 , MCS-51 , AVR, ARM 等都有看过 , 但是没有发现有哪本是介绍设计思想的 , 就算有也是凤毛麟角 。 写程序不难 , 但是程序怎么样才能写的好 , 写的快 , 那是需要点经验积累的 。 结构化模块化的程序设计的思想 , 使最基本的要求 。
然而这么将这个抽象的概念运用到工程实践当中恩?那需要在做项目的过程中经历磨难 , 将一些东西总结出来 , 抽象升华为理论 , 对经验的积累和技术的传播都大有裨益 。 所以在下出来献丑一下 , 总结一些东西 。
就我个人的经验而谈 , 有两个设计思想是非常重要的 。
一个就是“时间片轮的设计思想” , 这个对实际中解决多任务问题非常有用 , 通常可以用这个东西来判断一个人是单片机学习者 , 还是一个单片机工程师 。 这个必须掌握 。 (下文将介绍) 。
第二个就是“分层屏蔽的设计思想”即分层思想 。 下面用扫描键盘程序例子作为引子 , 引出今天说的东西 。
问题的提出
单片机学习板一般为了简单起见 , 将按键分配的很好 , 例如整个 4*4 的键盘矩阵分配到 P1 口上面 , 8条控制线 , 刚好 。 这样的话程序也非常好写 。 只需要简单的:
KEY_DAT= P1;
端口的数据就读进来了 。

诚然 , 现实中没有这么好的事情 。 在实际的项目应用当中 , 单片机引脚的复用相当厉害 , 这跟那些所谓的单片机学习板就有很大的差别了 。
另外一个原因 , 一般设计来说 , 是“软件配合硬件”的设计流程 , 简单点说就是 , 先确定好硬件原理图 , 硬件布线 , 最后才是软件的开发 , 因为硬件修改起来比较麻烦 , 相对来说软件修改的时候比较好改 。 这个就是中国传统的阴阳平衡哲学原理 。 硬件设计和软件设计本来就是鱼和熊掌的关系 , 两者不可兼得 。 方便了硬件设计 , 很可能给写软件带来很大的麻烦 。
反过来说 , 方便了软件设计 , 硬件设计也会相当的麻烦 。 如果硬件设计和软件设计同时方便了 , 那只有两种可能 , 一是这个设计方案非常简单 , 二是设计师已经达到了一个非常高的境界 。 我们不考虑那么多情况 , 单纯从常用的实际应用的角度来看问题 。
硬件为了布线的方便 , 很多时候会可能将IO口分配到不同的端口上面 , 例如上面说的4*4键盘 , 8根线分别分配到 P0 P1 P2 P3 上面去了 。 那么 , 开发板的那些扫描键盘程序可以去见鬼了 。 怎么扫按键?我想起了我刚开始学习的时候 , 分成3段非常相似的程序 , 一个一个按键的扫描的经历......
或许有人不甘心 , “那些东西我花了很长时间学习的 , 也用的好好的 , 怎么能说一句不用就不用?”虽然有点残忍 , 但是我还是想说“兄弟 , 接受现实吧 , 现实是残酷的......”