欢迎来到天天文库
浏览记录
ID:59221745
大小:40.50 KB
页数:6页
时间:2020-09-09
《单片机编程经验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机编程经验思路如下:1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。1V A!j*N7t2、设立一个模块(子程序)ID寄存器。'c6b3K*N!B'g8Z-I3、为每个子程序配置一个唯一的ID号码。(R4Nb!a7~+V6c4、每当子程序执行完毕,要返回(RET)之前,先将本子程序的ID号送入ID寄存器,y#v*~%r6I/X"C$B1@5、返回到上级程序后,先判断ID寄存器中的ID号。如果正确,则继续执行;如果不正确,则表示;Y4m1a1D4i*kPC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到
2、初始化段或程序错误处理段。1z"A!~;i1H.a5m;}这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。到了程序错误处理段,要杀要剐(冷启动还是热启动)就由您了。仅以一条代码来揭示程序飞跑的本质!-S+W9Y _$)_,k9_-A7fH ;MOV01H,#02H如当前PC不是指向75H,而是指向01H或02H,那么51内的指令译码器将把她们忠实地翻译成AJMP6B-w1}(I:@!X6K3t8jXX01H或LJMPXXXXH 而XX01HXXX
3、XH又是什么呢?天知道!这样恶性飞跑下去那还不死定!5f;X"z7W7U @(c;t改革一下:;q"R%
4、+k H%W.O6L1[qCLRA;0C4H,V*V2b)f;l,ZINCA;04H4{6s;m1u,[7{1z7W+E1
5、MOVR1,A;0F9H1{0F9D!I3G"i1_%X(p9^INCA;04H 4a(p9["^2q$^+K8OMOV@R1,A ;86H(O.y!n/J/i(U'_每一字节代码都不能在生成跳转和循环,且都是单字节指令!往那跑去?跑出去了都要自己回来!“在家”千日好!“跳出”事事难嘛!这样只要平时习惯了用累加器和寄存器把数倒一倒,
6、把那些危险代码都给倒掉,这样虽说给PC的“足”上多加了两字节的“包”9A#q5W#h.r:y'd4b可它不好“跑”啊!“足包”====跑!有朋友会问:要是PC抓做02H--LJMP又有抓做了老鼻子远的XXH,再抓做隔壁的YYH不就没用了吗?提这样的问题只有ZENYIN这种钻牛角得才会提!PC那一位最活跃啊?PC0啊!要“扯拐”显然发生在她身上,至于那PC15同志啊,睡得更死猪一样,雷爆(强干扰)来了都打不醒?此外如果干扰都强到了PC高位都出错的地步!关电!关电!不干了!“不是我们不行而是敌人太强大”!反过来要是敌人在你的专政下,只是偶尔出来捣捣乱,但一出来就冲到屁西
7、(PC)高层,+l3y7U Y/j"s;u'{就要问问是不是你的王国根基(硬件)有问题了?而非出在意识形态(软件)上!硬件为本!软件为标!标本兼治铸就坚强体魄,方能百毒不侵!9I7aE0^3Q6J7q经验之二、不要轻信软件狗$Q'W;u6]$,a+E)a关于软件狗的讨论,论坛上多矣。匠人也曾经查阅过许多关于软件狗的文章。有些大师确实提出了一些比较有技巧性的方法。+Y+A)V2j7S#e8L但是,匠人的忠告是:不要轻信软件狗!其实,软件狗相当于软件的一种自律行为。一般的思路都是通过设立一个计数器,在计时中断中9
8、7S(X4t4}对其+1,在主程序的适当地方对其清零
9、。如果程序失控了,清零指令未被执行,但中断造常发生,则计数器溢出(狗狗叫了)。$T8i3T.
10、/n但是这里有个问题:万一干扰导致中断被屏蔽了,那软件狗就永远不会叫了!——针对这种可能,有人提出在主程序中反复刷新中断使能标志,保证不让中断被屏蔽。——但万一程序飞到某个死循环中去了,不再执行“刷新中断使能标志”这一功能了,还是有可能把狗狗活活饿死。3Z%h*v3j$?4c3k,W所以,匠人的观点是:看门狗必须拥有独立的计数器。(即硬件看门狗)好在现在好多芯片都提供了内部WDT。这种狗都是自带计数器的。即使干扰导致程序失控,WDT还是会造常计数直到溢出。当然,匠人也没有要
11、将软件狗一棍子全部打死的意思。毕竟不管是软狗还是硬狗,逮到耗子就是好狗嘛(狗拿耗子——多管闲事?)。如果哪位训狗专家确实养过一条能看门的好软件狗,请牵出来让大伙瞧瞧。$a*W-w7D5F7W2c6m9C6U(u:V#u0q.R%{)T"Fx经验之三、话说RAM冗余技术9m4Z$k4I3r%d-{所谓的RAM冗余,就是:)S5u7i"D4i/D%D d1、将重要的数据信息备份2份(或以上)并存放在RAM中不同的区域(指地址不相连)。 X.f,K"F4F0[2、当平时对这些数据进行修改时,同时也更新备份'{2a;w!s6_!m5N3、当干扰发生并被拦截到“程序错
此文档下载收益归作者所有