单片机程序规划尽管小,或许很多人并不去留意项目开发的一些办法,计划拿到手就开端写,然后是想到什么地方,就写到什么地方,思绪杂乱,要将项目准时完结却是没有问题,可是假如说后期的保护,修正等,便是噩梦了,更不必说让他人来保护代码了,由于自己看起来都费劲。
单片机程序很简单写,可是怎样写的好的确需求经历堆集,技巧的堆集。很多时便是一个新手和一个内行的差异地点。好的单片机程序要做到以下几点:
C言语的话仍是有些书去介绍怎样规划程序,可是汇编的书本除了介绍指令集,底子没有去介绍汇编程序的一些规划思维,小技巧等。把握一些技巧后,发现学习汇编其实并不难。
或许学C言语的时分触摸过模块化的概念,其实汇编也需求模块化。代码应该是一个 block 为单位的,例如C言语的函数,严厉规则一致的“进口”“出口”,这样的代码让人看起来明晰,代码牢靠,保护便利。模块应该是一个独立的收拾,和外界的联络只能够经过模块的进口和出口,少用或许不必全局变量。
方针:假如你的汇编写的很像C 那么你就了解了什么叫模块了。
例如看下面的一个比如:
(注释:xxx表明一行或许多行代码)
—————————————————–程序块一
Label1 :
xxxxxxx
jbs flag 假如满意条件
Jmp Label2 则跳出程序块一,持续履行下面的程序
Xxxxxxx
—————————————————–程序块二
Label2 :
Xxxxxxxx
Lable3 :
XXXXXX
目的很简单,Label1 先履行一段程序,然后条件判别跳转到 Label2 。这样写无疑能完结程序需求的逻辑,可是这样好欠好?为什么?
咱们说,这样处理是欠好的,为什么?咱们能够先看一个比如,假如程序块一需求移动,那么看产生什么事情,事实上这是十分常见的
—————————————————–程序块二
Label2 :
Xxxxxxxx
—————————————————–程序块一
Label1 :
xxxxxxx
jbs flag
Jmp Label2
Xxxxxxx
Lable3 :
XXXXXX
看出没有,逻辑变了!!!程序原本的目的是跳出程序块一,持续履行下面的程序的,可是移动了之后发现程序块一中的跳转地址依然是跳到程序块二的进口,很简单会构成一个死循环,违反的最初的目的。当然有人必定会说:“这很简单啊,我修正一下”
jbs flag
Jmp Label3
这样程序不是相同能够正常的跑吗?对的,你没有错。可是问题是,你每移动一次程序块,都在这儿修正标号,作业量大,简单犯错,在实践保护程序中,几乎便是一场噩梦。
这便是我今日想说的,就叫模块间“耦合”。一个模块和其他模块产生了互联联系,使得两个程序都不能很好的独立出来。
怎样处理这个问题?看比如:
—————————————————–程序块一
Label1 :
xxxxxxx
jbs flag
Jmp Label1_end
Xxxxxxx
Label1_end:
—————————————————–程序块二
Label2 :
Xxxxxxxx
这个程序只做了很小的修正, jmp 指令跳出的不是本来的 Label2,而修正为在本来的模块一中的结尾处的 Label1_end 标号处。能够了解不?这样程序块一就彻底的独立起来了,他和程序中的其他模块一点联系都没有。假如我要移动一下:
—————————————————–程序块二
Label2 :
Xxxxxxxx
—————————————————–程序块一
Label1 :
xxxxxxx
jbs flag
Jmp Label1_end
Xxxxxxx
Label1_end:
这次好多了,咱们发现底子不需求修正代码,本来的程序就运转的很好。或许这仅仅一个微乎其微的小比如,可是我想说的是,从这个小比如中体验到模块化程序的重要性。当然了,这个是最基本的技巧。