恭喜,你发布的帖子
发布于 2025-09-06 12:48:52
69楼
每个子程序除了记录本身 static 的数据外,还记录了下级子程序的数据指针
通过指针可以确认本子程序是否被分配过内存地址,这样不会因为“乱序”或局部扫描引起数据地址错乱的问题,哪怕在 中断 中也能使用,学到了
提到的 “V7700.0的下升沿是天然的回收内存的绝佳标志位,代表可以释放回收分配给它的内存”,这句话怎么理解呢,求指教,确实没看到初始化或者回收动作
这 VB0 起还是断电保持的,当修改了程序后(扩大了 static 的数量),很有可能地址会重新排列,没有初始化或者回收,内存排布可能会有问题(指针≠0,不会重新分配)
分配时能区分 非保持 和 保持 就更好了,firstscan 时直接复位 非保持 区域
另外有个建议,分配核心函数中,使用 AC 前,建议保存 AC 值,在完成后恢复 AC,这样外部可以随意使用,比如外部 循环+AC 调用子程序就能放心使用
是的,建议很好尤其是AC的使用,只是探讨了回收的一种可能性,可行性的方案,程序没有做,而且回收相对复杂,想要用回收回来的存储区更复杂。只做了最简单,无冗余,无容错的递增式分配,程序也做了多次断电上电测试了,VB0断电保持应该不会出问题,关键是子程序要按照例程类似的规范来写,子程序里也可以包含物理地址的首地址指针,解决物理AI/AQ/I/Q点的映射问题。这个程序总体还是不太中看,更不中用。
补充:子程序A扩大static其实是没问题的,不用重新分配A,当然前提是子程序A必须预留了足够#预留扩展容器XX,扩展时分配给新的子程序B,既A扩展部分是NEWB(新的子程序B)。
请填写推广理由:
分享
只看
楼主