恭喜,你发布的帖子
发布于 2022-07-03 10:06:53
19楼
本胖对循环的理解:OB1(主程序)当然是循环;定时中断也是循环;用定时器实现的循环同样是循环。
说个单片机的例子:
本胖当年(9x年)曾经搞过单片机,当时也只能用汇编,但大的思路却跟C的while差不多,就是主程序实际上就是一个大循环,PLC的OB1应该也是同样的思路。C
但同样还有定时中断在运行,比如:看门狗(现在流行的心跳,其实就是看门狗)。这种定时中断是硬件级别的,同样是循环。
那么,这两种循环有啥本质区别吗?软件上看就是优先级不同;硬件上看,其实还是优先级不同,高优先级的定时器(硬件,跟PLC的定时中断类似)中断,即使在CPU已经死机的情况下,仍然会产生中断。
SO,本胖曾经做过一个比较极端的程序架构:干脆不要主程序了,全部程序都放入100ms的定时中断里面。结果就是连抗干扰很垃圾的AT89C52都很抗干扰了!
上面说的不管具体是啥,本质上都是循环,只是实现的方法不同而已。
当时我们做了对比试验,基本相同的PCB、IO都不隔离(不带光耦),抗干扰能力最强的菲利普、其次的Intel、PIC,倒数第二就是ATMEL,第一的是台湾一家。
当时的主流是51兼容,只有PIC的例外,记得是16F877(RISC)单片机。当时还有Z80在苟延残喘,MOTO的6809也还剩下一口气,我们也用6809,但本胖不喜欢,也不喜欢51系列。
本胖但是有个根深蒂固的观点:所有指令必须是单字的,上面那些就只有16F877的复合要求了。理由就是PC(程序计数器)在跑飞的时候,总是落到一条指令上。那些双字节、三字节的指令,如果PC落到2、3字节上,就不可预料了。
现在好像这个也不重要了,因为芯片的抗干扰能力很强了,外部的隔离如果做得好,抗干扰能力就更强了。后来用了菲利普的LPC2119,ARM7级别的单片机,感觉那个爽啊!根本不需要扣扣索索计算那几个寄存器了,直接用C编程,内存随便用......
请填写推广理由:
分享
只看
楼主