Skip to main content

堆栈使用率的计算

每个 POU 的堆栈使用量显示在 任务配置 上的对象 堆栈使用情况 选项卡。

堆栈使用量静态计算公式为 CODESYS 使用静态调用堆栈。

计算中包含以下内容:

  • 计算从输入任务的隐式 POU 开始。

  • 对于每个 IEC 程序调用(例如 PLC_PRG),调用的每个 IEC POU 的堆栈使用量都是递归计算的。POU 的最大堆栈使用量会添加到其自己的本地堆栈使用量中,以确定 POU 的最大堆栈使用量

  • 对于动态调用,堆栈使用率的计算方法如下:确定所有可能实现的堆栈使用量,并假定最大堆栈使用量。这意味着接口方法会考虑所有可能的实现以及函数块方法的所有可能的重写

  • 对于外部呼叫,假定目标设备为其指定的值。如果设备未指定值,则假定为 0。

  • 在递归的情况下,计算会中止。类型属性编译指示的值 estimated-stack-usage 适用于递归调用的代码。如果未指定任何值,则假定为 0。

因此,堆栈使用量只是一个估计值。它可能太高了,因为假设的最低调用路径在运行时从未运行过。但是,它也可能太低,因为递归或外部调用的估计不利

27. 示例
_cds_task_configuration_tab_stack_usage_example.png


显示堆栈使用情况

  1. 双击 任务配置 对象。

    任务配置编辑器打开。

  2. 点击 构建生成代码 命令。

  3. 点击 堆栈使用情况 选项卡。

    该选项卡上的信息已更新。

    在下面 任务/最大调用堆栈,按顺序调用的 POU 在最大调用堆栈中显示为假设值。计算出的 POU 堆栈大小显示在 堆栈大小 专栏。

28. 示例

如果堆栈大小以红色显示,则相应的 POU 中可能存在堆栈溢出。你可以识别出你应该在哪里进行更改的 POU。这是调用堆栈中第一个用红色标记的 POU

_cds_task_config_stack_usuage.png