需要优化代码(减小大小)CODESYS ST (TwinCat 2) 以节省内存
Need to optimize code (Reduce the size) CODESYS ST (TwinCat 2) to save memory
beckhoff BC9000 PLC 的代码大小(CODESYS ST、TwinCat 2)(最大 64 kB)应降至最低:
var
word_CO2: word;
(跳过代码)
需要减小此代码的大小:
MEMCPY(ADR(word_CO2),ADR(ReceiveBuffer[3]),1);
MEMCPY(ADR(word_CO2)+1,ADR(ReceiveBuffer[2]),1);
MEMCPY 已经是一个优化的库函数(即它调用一个函数,它不应该“内联代码”)。我看不出你将如何优化它。您的代码需要进行一些重组以减少其他地方的重复代码,减少您正在使用的内存变量的数量或更好的硬件。 64 kB 现在已经很小了。我参与的 PLCopen 控制器有 4 MB 和 64 kB 仅用于保留数据...
也许像您在评论中看到的那样修改您的问题,读者真的不太清楚为什么您认为 MEMCPY 是您的麻烦制造者....
要减少 CoDeSys 2.3 中的代码大小,请执行以下操作:
- 进入'Project' -> 'Options' -> 'Build'.
- Select 'Replace constants'.
- Select 'Exclude objects'...开始一一排除系统库中的灰色FB和FUN
- 如果您不确定要排除的内容,请执行 'Clean All' 和 'Rebuild All' 命令。在两者之间也定期执行它们。
如果以上没有帮助您的代码需要审查和优化。一般来说,尽量避免使用多个 IF...ELSIF 语句,而是使用 MUX 和 SEL 运算符以及(一点点)CASE 逻辑。切换到 POINTER 算法并将数据压缩到 ARRAYS 中也有帮助。使用位访问 BYTE、WORD 和 DWORD 变量而不是 BOOL 变量。
beckhoff BC9000 PLC 的代码大小(CODESYS ST、TwinCat 2)(最大 64 kB)应降至最低:
var
word_CO2: word;
(跳过代码)
需要减小此代码的大小:
MEMCPY(ADR(word_CO2),ADR(ReceiveBuffer[3]),1);
MEMCPY(ADR(word_CO2)+1,ADR(ReceiveBuffer[2]),1);
MEMCPY 已经是一个优化的库函数(即它调用一个函数,它不应该“内联代码”)。我看不出你将如何优化它。您的代码需要进行一些重组以减少其他地方的重复代码,减少您正在使用的内存变量的数量或更好的硬件。 64 kB 现在已经很小了。我参与的 PLCopen 控制器有 4 MB 和 64 kB 仅用于保留数据...
也许像您在评论中看到的那样修改您的问题,读者真的不太清楚为什么您认为 MEMCPY 是您的麻烦制造者....
要减少 CoDeSys 2.3 中的代码大小,请执行以下操作:
- 进入'Project' -> 'Options' -> 'Build'.
- Select 'Replace constants'.
- Select 'Exclude objects'...开始一一排除系统库中的灰色FB和FUN
- 如果您不确定要排除的内容,请执行 'Clean All' 和 'Rebuild All' 命令。在两者之间也定期执行它们。
如果以上没有帮助您的代码需要审查和优化。一般来说,尽量避免使用多个 IF...ELSIF 语句,而是使用 MUX 和 SEL 运算符以及(一点点)CASE 逻辑。切换到 POINTER 算法并将数据压缩到 ARRAYS 中也有帮助。使用位访问 BYTE、WORD 和 DWORD 变量而不是 BOOL 变量。