本论坛中曾有不少贴子是讨论L区变量在两次调用间的值相互影响的问题,也就是前一次调用写入的值,会留给后续调用的子程序。
在子程序被调用时,一般是这样描述:系统为被调用的子程序分配一块64字节的存贮区,作为局部变量区,即L区。
我一直认为,这种分配是“静态”的,原因之一,“静态”分配执行效率高,符合实时控制要求;之二,安全可靠,不会出现象PC机编程动态内存分配时的“内存泄漏”现象。
正因为这种静态分配的特性,我认为所有L区的值也是“静态”保持,在没有“显式”写入新值前,其原值是不会起变化的。
我写了一个验证程序,有兴趣的可以下载下去看看。
1、在首次扫描时,主程序、以及各级深度的子程序(共8级)填上特定的数据;
2、在后续的扫描中,各级子程序将L区内的值,COPY到V区中,供上位机(Microwin)来读取/验证。
3、没有中断以及中断内的一级子程序。其实道理相同的。
不过要声明的是:这是验方,你所用的CPU是否符合这个特性,是要实验的。没有官方的保证。
点击此处查看附件