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.

[参考译文] TI-RTOS-MCU:getaddrinfo:错误:库 n 和#39;t alloc DNS 缓冲区

Guru**** 2560390 points
Other Parts Discussed in Thread: TM4C1294KCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/836775/ti-rtos-mcu-getaddrinfo-error-couldn-t-alloc-dns-buffer

器件型号:TI-RTOS-MCU
主题中讨论的其他器件:TM4C1294KCPDT

您好!

我正在处理 HTTPS POST 项目、在该项目中、我尝试将一些数据发布到主机。

当我调用"ret = HTTPCLI_initSockAddr ((struct sockaddr *)&addr、my_HOSTNAME_HERE、0);"时、代码有时会运行到内存问题中、无法解决 DNS。  

从错误消息中、我可以看到它与内存 getaddrinfo:错误:无法分配 DNS 缓冲区有关。

cfg 文件中是否有一些需要更改的设置?
或者需要调用某个命令?

我在 TM4C1294KCPDT 上使用 TI_RTOS 2.16.01.14

我有2个正在运行的任务。 一个是 HTTPS POST、另一个是 UDP 任务。 UDP 任务持续运行、POST 任务由中断触发。

这是我在.cfg 文件中具有的内容。

/*
*为 BIOS 指定默认堆大小。
*
BIOS.heapSize = 131072;

/*========================= NDK 配置=================== *
VAR NDK = XDC.loadPackage ('ti.NDK.config');
VAR Global = xdc.useModule('ti.ndk.config.Global');
VAR TCP = xdc.useModule('ti.ndk.config.Tcp');
VAR UDP = xdc.useModule('ti.ndk.config.Udp');

global.ipv6 = false;
global.stackLibType = Global. min;
Global.networkIPAddrHook ="&netIPAddrHook";

//自动调用 fdOpen/CloseSession 以执行套接字任务*/
Global.autoOpenCloseFD = true;

global.pktNumFrameBufs=10;
global.memRawPageCount = 6;
global.ndkThreadStackSize = 1536;
global.lowTaskStackSize = 1280;
Global.normTaskStackSize = 1024;
global.highTaskStackSize = 1024;
tcp.transmitBufSize = 1024;
tcp.receiveBufSize = 1024;

global.stackInitHook ='&DHCPestHook';
Global.serviceReportHook ='statusReportHook';

这也可以通过增加堆大小来解决吗? 堆大小的限制是多少? 是否有任何与内存分配和内存分配相关的文档可以帮助我了解内存分配、因为我对内存分配没有足够的了解。

此致、

Deepak

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

    Deepak、您好!

    您可以查看此页面: http://processors.wiki.ti.com/index.php/TI-RTOS_Networking_Stack_Memory_Usage

    Todd

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

    您好 Todd、

    感谢您提供文档链接。

    在本文档和我的项目中、我可以看到任务有足够的堆栈内存可供使用、但我仍然在前面的帖子中提到的问题中运行。

    我是否缺少需要配置或更改的内容?

    -Deepak

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

    当我得到该误差时、这就是我在 ROV 中看到的结果

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

    Deepak 您好!

    您在"NDK 静态内部存储器管理器"中的内存不足。 这是 getaddrinfo 从获取的内存池。 有一个页面解释了内存管理器如何在前面发布的链接 Todd 中工作。 getaddrinfo 正在尝试分配512字节的 DNS 缓冲区、因此您需要配置内存管理器、以便在"存储区"中为您提供足够的"块"、以容纳512字节的缓冲区。  

    例如:

    global.memRawPageSize = 3584

    global.memRawPageCount = 6

    将在512字节存储桶中产生7个块

    您可以通过在 CCS 表达式视图中检查"ti_ndk_config_Global_pit"来查看当前正在使用的块数。

    此致、

    达尔顿