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.

[参考译文] CC3220SF:FreeRTOS 项目 malloc

Guru**** 2481755 points
Other Parts Discussed in Thread: SYSCONFIG, CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1357512/cc3220sf-freertos-project-malloc

器件型号:CC3220SF
主题中讨论的其他器件:SysConfig

SDK: simplelink_cc32xx_sdk_7_10_00_13

CCS 版本  12.5.0.00007  

Ticnag 版本: v3.20.LTS

问题1:

在任何 FreeRTOS 示例项目中、对于动态内存、我们将使用 pvPortMalloc、因此在链接器文件中我想保留 --heap_size=0  (它为0)。

但是、如果我没有包含 #include、 在 ti_freertos_config.c 中、它的开始位置显示以下警告

描述资源路径位置类型
#10473-D specified -heap size 参数(0)小于估计的所需最小堆大小(16)。 Basic03_FreeRTOS_pthread02 C/C++问题

为什么此警告显示如何删除它?

如果我没有包含"#include "、问题是什么 "此文件我不需要 malloc 包装程序函数

malloc 是否用于任何"sl_functions"?

问题2:

然后出于好奇、如果添加"#include "并将 malloc 编辑为 malloc1、然后它开始显示重新定义时的错误   

描述资源路径位置类型
#10056符号"calloc"重新定义:首先在"./ti_freertos_config.o"中定义;在/home/georgian/ti/ccs1250/ccs/tools/compiler/ti-cgt-armllvm_3.2.0.LTS/lib/armv7em-ti-none-eabi/c/libc.a 中重新定义 " Basic03_freertos_pthread02 C/C++问题

这意味着 calloc 已在编译器库中定义、那么为什么它在我没有执行"malloc1"更改时没有显示此错误、它只在我将 malloc 更改为 malloc1时才开始显示、否则没有错误(在 #include 文件:TI_FreeRTOS_CONFIG.c)  ?



 

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

    这有什么用呢? 您应该在 sysconfig 中设置堆大小(这将生成 FreeRTOSConfig.h:configTOTAL_HEAP_SIZE、并在 heap_4.c 中使用:

    "privacy_data static uint8_t ucHeap [ configTOTAL_HEAP_SIZE ];")

    我能够在没有看到所提到错误的情况下删除 memory.c (使用 可移植项目、即使用 SL 驱动程序)。

    我同意第二个问题没有道理-您是否改变了其他内容(例如、"包含"路径的顺序?)

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

    谢谢您重播、什么是可移植项目? 它是示例项目吗

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

     由于 SysConfig 自动生成功能、您如何删除 memory.c?

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

    问题1

    描述资源路径位置类型
    #10473-D specified -heap size 参数(0)小于估计的所需最小堆大小(16)。 Basic03_FreeRTOS_pthread02 C/C++问题

    如果我 从 SDK 中获取 gpiointerrupt_CC3220SF_LAUNCHXL_freertos_ticlang 并注释掉整个文件 ti/posix/freertos/memory.c、我将看到此警告  

    我没有更改该项目中直接导入到工作区并运行的任何内容(仅注释掉整个文件 memory.c)

    问题2

    同一项目、如果我只将 memory.c malloc 编辑为 malloc1、则显示相同的错误  

    t HIS 始终可通过 TI 的 SDK 示例项目重现(未更改任何项目设置)

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

    实现 问题2

    以下是错误:

    描述资源路径位置类型
    #10056符号"calloc"重新定义:首先在".calloc"中定义/syscfg/ti_freertos_config.o;在/home/georgian/ti/ccs1250/ccs/tools/compiler/ti-cgt-armllvm_3.2.0.LTS/lib/armv7em-ti-none-eabi/c/libc.a 中重新定义 " gpiointerrupt_CC3220SF_LAUNCHXL_freertos_ticlang C/C++问题

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

    "ti/posix/freertos/memory.c"为内存 alloc/free 服务(服务通常在 libc 中实现)提供了 FreeRTOS 实现。

    使用此文件时- FreeRTOS 服务将覆盖 libc 实现(这将在内部使用 pvPort,即 ucHeap[],因此--heap_size=0)。

    当你没有编译 FreeRTOS memory.c (即删除#include)时- 将 使用 libc 函数并且它们 基于 通过链接器命令文件定义的堆-这会以某种方式导致(我没有确切检查如何操作)链接器警告 (我想它应该会在您运行时失败)。

    当您替换/删除"ti/posix/freertos/memory.c"中的一个处理时(例如将 malloc 更改为 malloc1) - libc 函数不会被覆盖,但链接器会尝试从这两个文件中分配服务,由于其他服务重复而失败。