This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C129ENCPDT:用于动态存储器分配的最大堆大小

Guru**** 2578945 points
Other Parts Discussed in Thread: TM4C129ENCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/785381/ccs-tm4c129encpdt-max-heap-size-for-dynamic-memory-allocation

器件型号:TM4C129ENCPDT

工具/软件:Code Composer Studio

您好!

我正在尝试使用 TM4C129ENCPDT 评估套件来实现 MODBUS TCP 服务器(从属)器件。 因此、对于存储器分配、我只做了以下参考表。 四种 Modbus 数据类型的存储器分配必须在程序本身中进行配置。

根据该表、我推断、如果我们配置为使用 Modbus 数据类型的所有地址、则需要动态分配41.5KB (不确定是否正确)的存储器。  

由于我的控制器中有256KB 的 RAM,我能否直接将 42496 (41.5KB x 1024)字节放入项目属性->CCS Build->ARM Linker->Basic 选项的堆大小中。

将41.5KB 的内存分配为堆是否会以任何方式影响控制器的性能?

感谢你能抽出时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    MODBUS TCP 是否是您在应用程序上运行的唯一设备? 如果是这种情况、那么我认为将堆大小增加到41KB 不会影响性能。 但是、如果您正在加载许多模块、所有模块都在运行、则需要确保运行时任务不会动态请求比分配的堆内存更多的内存。 否则、我认为您将会满意。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Charles。

    除了 Modbus 之外、我的程序还具有使用 lwIP 的以太网通信、至少 两个 SSI 模块和一个 I2C 模块。   

    是否有方法计算所需的动态存储器分配大小?

    谢谢!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="RAGHUL N M">是否有方法可以计算所需的动态内存分配大小?我不知道自动确定所需动态内存分配大小的方法。

    但是、请参阅 Compiler/DK-TM4C129X:是否有任何方法来最大化堆大小? 方法来使用堆的所有剩余 RAM。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    切斯特、您好!

     非常感谢您在您参考的主题中分享您的知识和技巧。 我不知道任何用于计算自动使用/分配的动态存储器的工具。 这通常由应用程序处理。 它不是 C 语言固有的东西。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。

    实际上、在了解了我的项目要求后、TM4C129ENCPDT 中内置的256KB RAM 似乎还不够。 该程序将具有图形库和具有大字符串的运算。

    因此、我们计划使用外部 RAM。  有许多选项,如 NVRAM、SDRAM 等

    有人能建议去哪一个?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您将需要根据您的系统要求做出该决定。 我唯一的评论是、您想要增加堆栈/堆的 RAM。 为什么要使用非易失性内存(如 NVRAM)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Charles。

    我将在堆/堆栈中维护的数据将被频繁修改(至少每秒修改一次)。 如果控制器的电源关闭并再次通电、我需要恢复这些数据。
    在我的上一个项目中、我在每次修改后都将修改后的数据写入控制器内的 EEPROM、从而完成此操作。 一旦控制器的电源关闭并再次打开、我将首先读取 EEPROM 并恢复最后修改的数据。 但每秒从 EEPROM 中写入和读取数据都会使我的系统速度变慢。 对于 Modbus、我需要每秒向 EEPROM 写入大量数据。

    因此、我们计划为堆存储器单独使用 NVRAM、如果控制器由于断电和通电而复位、我还可以恢复上次修改的数据。

    请向我推荐任何可与 TM4C129ENCPDT 控制器 IC 连接的 RAM IC。

    感谢你能抽出时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您需要对外部器件进行自己的研究。 下面只是外部 EEPROM 的一个示例。 您可以使用 MCU 的 EPI 接口访问外部 EEPROM。 有关详细信息、请参阅数据表。

    ww1.microchip.com/.../doc0270.pdf