ABB N***01
ABB N***01
ABB N***01
分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。
参考了市面上各种各样的嵌入式书籍,MCS-51,AVR,ARM等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角。写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的。结构化模块化的程序设计的思想,使***基本的要求。然而这么将这个抽象的概念运用到工程实践当中恩?那需要在做项目的过程中经历磨难,将一些东西总结出来,抽象升华为理论,对经验的积累和技术的传播都大有裨益。所以在下出来献丑一下,总结一些东西。
就我个人的经验而谈,有两个设计思想是非常重要的。
一个就是“时间片轮的设计思想”,这个对实际中解决多任务问题非常有用,通常可以用这个东西来判断一个人是单片机学习者,还是一个单片机工程师。这个必须掌握。由于网上介绍这个的帖子也不少,所以这里就不多说了。
第二个就是我今天想说的主题“分层屏蔽的设计思想”。下面用扫描键盘程序例子作为引子,引出今天说的东西。
问题的提出
单片机学习板一般为了简单起见,将按键分配的很好,例如整个4*4的键盘矩阵分配到P1口上面,8条控制线,刚好。这样的话程序也非常好写。只需要简单的KEY_DAT = P1;端口的数据就读进来了。
诚然,现实中没有这么好的事情。在实际的项目应用当中,单片机引脚的复用相当厉害,这跟那些所谓的单片机学习板就有很大的差别了。
另外一个原因,一般设计来说,是“软件配合硬件”的设计流程,简单点说就是,先确定好硬件原理图,硬件布线,***后才是软件的开发,因为硬件修改起来比较麻烦,相对来说软件修改的时候比较好改。这个就是中国传统的阴阳平衡哲学原理。硬件设计和软件设计本来就是鱼和熊掌的关系,两者不可兼得。方便了硬件设计,很可能给写软件带来很大的麻烦。反过来说,方便了软件设计,硬件设计也会相当的麻烦。如果硬件设计和软件设计同时方便了,那只有两种可能,一是这个设计方案非常简单,二是设计师已经达到了一个非常高的境界。我们不考虑那么多情况,单纯从常用的实际应用的角度来看问题。
硬件为了布线的方便,很多时候会可能将IO口分配到不同的端口上面,例如上面说的4*4键盘,8根线分别分配到P0 P1 P2 P3上面去了。那么,开发板的那些扫描键盘程序可以去见鬼了。怎么扫按键?我想起了我刚开始学习的时候,分成3段非常相似的程序,一个一个按键的扫描的经历……
或许有人不甘心,“那些东西我花了很长时间学习的,也用的好好的,怎么能说一句不用就不用?”虽然有点残忍,但是我还是想说“兄弟,接受现实吧,现实是残酷的……”
不过,人区别于低等动物的差别,是人会创造,在碰到困难的时候会想办法解决,于是我们开始了沉思……
***后我们引入初中数学学的“映射”的概念来解决问题。基本思想就是,将不同端口的按键映射到相同端口上面。
这样按键扫描程序就分成3个层次了。
1)***底层的是硬件层,完成端口扫描,20ms***消抖,将端口的数据映射到一个KEY_DAT寄存器上面,KEY_DAT作为对上层驱动层的一个接口。
2)中间的一层是驱动层,驱动层只对KEY_DAT寄存器的数值进行操作。简单点说,我们无论底层的硬件是怎么接线的,在驱动层都不需要关心,只需要关心KEY_DAT这个寄存器的数值是什么就可以了。这样出来的间接效果就是“屏蔽了底层硬件的差异”,所以驱动层写的程序就可以通用了。
FOXBORO 84F-U01S6SSTJG
FOXBORO 84F-U02S6SSTJG
FOXBORO 84F-U3QS6SSTJG
FOXBORO 9301A-SIZE-TSJ-IN IMT25-IEATB10N
FOXBORO 930HA-SIZE-TSJ-IN IMT25-IEATB10N
FOXBORO IPM-P0904HA______________
FOXBORO FBM02
FOXBORO AD908AD
FOXBORO AD908MFE
FOXBORO P0916FL
FOXBORO P0916FM
FOXBORO P0973CA
FOXBORO P0916BXOC
FOXBORO FBM204
FOXBORO IPM-P0904HA
FOXBORO FCM10E
FOXBORO FBM01 P0400DA
FOXBORO FBM04 P0400YE
FOXBORO FBM01 P0400DA
FOXBOROFBM01 P0400DA
FOXBORO FBM04 P0400YE
FOXBORO P0911***
FOXBORO P0970BC
FOXBORO P0902XA FBM41
FOXBORO FBM07
FOXBORO FBM41
FOXBORO P0903ZL
FOXBORO FCM10E
FOXOBO FBM224
FOXBORO CP60
FOXBORO FBM202
FOXBORO FBM203
FOXBORO FBM204
FOXBORO FBM206
FOXBORO FBM207
FOXBORO FBM211
FOXBORO FBM242
FOXBORO FBM04 P0400YE
FOXBORO FCM10E P0914YM
FOXBORO IPM02 P0904HA
FOXBORO FBM01 P0400DA
FOXBORO FBM04 P0400YE
FOXBORO P0911VJ
FOXBORO P0911YY
FOXBORO P0915FU
FOXFBORO P0915FX
FOXBORO P0973BJ
FOXBORO P0901VK
FOXBORO P0904HA
FOXBORO FBM204
FOXBORO FBM01 P0400DA
FOXBORO FBM04 P0400YE
FOXOROBO FBM02 P0400YC
FOXOROBO FBM03 P0400YD
FOXBORO FCM10E P0914YM
FOXBORO FBI10E P0972AJ
FOXBORO FBM01 P0400DA
FOXBORO FBM03 P0400YD
FOXBORO P0500RU
FOXBORO P0972BE
FOXBORO P0904HA
FOXBORO FBM41
FOXOBORO FBM42
FOXBORO P0903CW
FOXBORO P0904HA
FOXBORO FBM01 P0400DA
FOXOROBO FBM02 P0400YC
FOXBORO P0400HH
FOXBORO P0500RG
FOXBORO P0902YU
FOXBORO FCM10E P0914YM
FOXBORO P0903CW
FOXBORO P0903CW
FOXBORO P0916JP
FOXBORO P0916DC
FOXBORO FBM01 P0400DA
FOXBORO FBM02 P0400YC
FOXBORO CP60
FOXBORO P0926GG
FOXBORO P0904HA
FOXBORO P0904HA
FOXBORO FBM01 P0400DA
FOXBORO P0400HH
FOXBORO FBM02 P0400YC
FOXBORO FBM04 P0400YE
FOXBORO FBM02
FOXBORO CP30
FOXBORO P0914WH FBM207B
FOXBORO FBM02
FOXOBORO CM400YH
FOXOBORO CM400YN
FOXOBORO P0400YF
FOXOBORO P0700WB
FOXOBORO P0960HA
FOXBORO P0904HA
FOXOBORO CP60-P096IFR
FOXBORO FBM242
FOXOBORO FBM207B
FOXBORO FBI10E P0972AJ
FOXBORO FBM04 P0400YE
FOXBORO IPM02 P0904HA
FOXBORO FBM201
FOXBORO FBM207C_________________________________________________________-
FOXBORO FBM237
FOXBORO FBM242
FOXBORO FBM02 P0400YC
FOXBORO P0970BC
FOXBORO P0904HA
FOXBORO P0904BS
FOXBORO CP40B
FOXBORO CP40B
FOXBORO FBM01 P0400DA
FOXOBO FBM201
FOXBORO FBM201
FOXBORO FBM41
FOXBORO CP40B
FOXBORO CP30
FOXBORO FBI:P0932ZE
FOXBORO FBI接头:P0800DC
FOXBORO FBM01:P0400DA
FOXBORO FBM01接头:AD194HH
FOXBORO FBM04:P0500YE
FOXBORO FBM04接头:AD194RY
FOXBORO FBM07:CM400YH
FOXBORO FBM07接头:P0500SR
FOXBORO FBM09:CM400YK
FOXBORO FBM09接头:P0700HU
FOXBORO IMP2电源模块:P0903ZL
FOXBORO P0950CA
FOXBORO P0950CQ
FOXBORO P0904BS
FOXBORO FBM01 P0400DA
FOXBORO CP30
FOXBORO IPM02 P0904HA
FOXBORO FBM07:CM400YH
FOXBORO FBM09:CM400YK
FOXBORO FBM12:CM400YN
FOXBORO FBM14:CM400YQ
FOXBORO FBM41:P0902XA
FOXOBO P0972AJ
FOXBORO FBI10E P0972AJ
FOXBORO FBM01
FOXBORO P0800DC
FOXBORO FBM203
FOXBORO FBM203
FOXBORO PO400VR
FOXBORO FBM242
FOXBORO FBM07:CM400YH
FOXBORO FCM10E
FOXBORO P0904HA
FOXBORO PO916JP
FOXBORO FBM04
FOXBORO FBM07
FOXBORO FBM09
FOXBORO P0916JP
FOXBORO FBM04 P0400YE
FOXBORO FBM201
FOXBORO FBM203
FOXBORO FBM204