展开查看
以下是引用老学童在2014-05-27 17:01:49的发言 >7楼:假如功能执行时,被某个优先级较高的中断打断,如果没有这些装载指令,系统不会在L堆栈中留出相应的存储区,那么,这些临时区的数据会丢失,用了这些装载指令,就相当于在这些临时区定义了临时变量,发生中断时系统会自动划出存储区保护这些临时区。
原先看楼主给的程序,感觉那3个LB没什么用,觉得挺疑惑的。
看了老学童大侠的解释我还是很疑惑。
我同意实际使用临时变量就相当于在声明区定义临时变量,效果是一样的。
但是每个优先级都有自己的本地堆栈区,高优先级的中断只会使用自己的本地堆栈区而不会使用到被中断的优先级的本地堆栈区,所以不需要靠这样来保护低优先级的临时变量,或者说是多余的,系统本身设计已经保护了。
我想如果要保护这些临时变量,那么应该是针对可能会覆盖到它们的情况,比如下级调用。
从楼主的程序使用AR2的偏移量来看,说明这段程序是可以用于多重背景调用的FB的程序。那么只有当该FB在调用其他FC或FB时,系统要为下级调用划分临时变量时,才需要考虑用这种办法来保护临时变量。