- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机编程经验.
单片机编程经验
思路如下: 1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。 1 V??A! j* N7 t2、设立一个模块(子程序)ID寄存器。 c6 b3 K* N! B g8 Z- I3、为每个子程序配置一个唯一的ID号码。 ( R4 N b! a7 ~+ V6 c4、每当子程序执行完毕,要返回(RET)之前,先将本子程序的ID号送入 ID寄存器 , y# v* ~% r6 I/ X C$ B1 @5、返回到上级程序后,先判断ID寄存器中的ID号。如果正确,则继续执行;如果不正确,则表示 ; Y4 m1 a1 D4 i* kPC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初始化段或程序错误处理段。 1 z A! ~; i1 H. a5 m; }这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID 号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。到了程序错误处理段,要杀要剐(冷启动还是热启动)就由您了。仅以一条代码来揭示程序飞跑的本质! - S+ W9 Y??_$ \) _, k9 _- A7 f750102H??;MOV 01H,#02H 如当前PC不是指向75H,而是指向01H或02H,那么51内的指令译码器将把她们忠实地翻译成AJMP 6 B- w1 }( I: @! X6 K3 t8 jXX01H 或 LJMP XXXXH??而XX01H XXXXH又是什么呢?天知道!这样恶性飞跑下去那还不死定! 5 f; X z7 W7 U??@( c; t改革一下: ; q R% |+ k??H% W. O6 L1 [ qCLR A ;0C4H , V* V2 b) f; l, ZINC A ;04H 4 {6 s; m1 u, [7 {1 z7 W+ E1 |MOV R1,A ;0F9H 1 {0 F9 D! I3 G i1 _% X( p9 ^INC A ;04H? ?4 a( p9 [ ^2 q$ ^+ K8 OMOV @R1,A??;86H ( O. y! n/ J/ i( U _每一字节代码都不能在生成跳转和循环,且都是单字节指令!往那跑去?跑出去了都要自己回来!“在家”千日好!“跳出”事事难嘛!这样只要平时习惯了用累加器和寄存器把数倒一倒,把那些危险代码都给倒掉,这样虽说给PC的“足”上多加了两字节的“包” 9 A# q5 W# h. r: y d4 b可它不好“跑”啊!“足包”====跑!有朋友会问:要是PC抓做02H--LJMP 又有抓做了老鼻子远的XXH,再抓做隔壁的YYH不就没用了吗?提这样的问题只有ZENYIN这种钻牛角得才会提!PC那一位最活跃啊?PC0啊!要“扯拐”显然发生在她身上,至于那PC15同志啊,睡得更死猪一样,雷爆(强干扰)来了都打不醒?此外如果干扰都强到了PC高位都出错的地步!关电!关电!不干了!“不是我们不行而是敌人太强大”!反过来要是敌人在你的专政下,只是偶尔出来捣捣乱,但一出来就冲到屁西(PC)高层, + l3 y7 U??Y/ j s; u {就要问问是不是你的王国根基(硬件)有问题了?而非出在意识形态(软件)上!硬件为本!软件为标!标本兼治铸就坚强体魄,方能百毒不侵! 9 I7 a E0 ^3 Q6 J7 q经验之二、不要轻信软件狗 $ Q W; u6 ]$ \, a+ E) a关于软件狗的讨论,论坛上多矣。匠人也曾经查阅过许多关于软件狗的文章。有些大师确实提出了一些比较有技巧性的方法。 + Y+ A) V2 j7 S# e8 L但是,匠人的忠告是:不要轻信软件狗!其实,软件狗相当于软件的一种自律行为。一般的思路都是通过设立一个计数器,在计时中断中 9 |7 S( X4 t4 }对其+1,在主程序的适当地方对其清零。如果程序失控了,清零指令未被执行,但中断造常发生,则计数器溢出(狗狗叫了)。 $ T8 i3 T. |/ n但是这里有个问题:万一干扰导致中断被屏蔽了,那软件狗就永远不会叫了!——针对这种可能,有人提出在主程序中反复刷新中断使能标志,保证不让中断被屏蔽。——但万一程序飞到某个死循环中去了,不再执行“刷新中断使能标志”这一功能了,还是有可能把狗狗活活饿死。 3 Z% h* v3 j$ ?4 c3 k, W所以,匠人的观点是:看门狗必须拥有独立的计数器。(即硬件看门狗)好在现在好多芯片都提供了内部WDT。这种狗都是自带计数器的。即使干扰导致程序失控,WDT还是会造常计数直到溢出。当然,匠人也没有要将软件狗一棍子全部打死的意思。毕竟不管是软狗还是硬狗,逮到耗子就是好狗嘛(狗拿耗子——多管闲事?)。如果哪
文档评论(0)