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.

[参考译文] CC3220:POSIX 和 TI-RTOS 内存管理问题

Guru**** 2551110 points
Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/769940/cc3220-posix-and-ti-rtos-memory-mgmt-problems

器件型号:CC3220

您好!

我已将 CC3200第1代项目迁移到 CC3220第2代、但无法使第2代软件与 POSIX 保持稳定。

对于 CC3200第1代、我仅使用 TI-RTOS (修改 UDPech 示例)、一切运行顺利。

对于 CC3220 Gen2、虽然我想要一个仅限 TI-RTOS 的专用解决方案(即没有 POSIX)、但很遗憾、我找不到一个也包含 SimpleLinkNetAppEventHandler 的解决方案。 因此、我最终修改了'HttpGet'项目(TI-RTOS 派生品)。 这也使用 POSIX。 在项目中、我使用 TI-RTOS 静态配置器来创建任务、信号量和时钟函数。

简而言之、一旦系统获取了网络地址、当我开始运行任务时、我会遇到错误(并非所有时间和不同的时间)。 我已将在 platform.c 文件中创建的 POSIX 创建的 httptask 替换为对另一个文件中的主任务的 TI-RTOS 调用(正如我在某些文档中看到的,它说不在 POSIX 任务中使用 Task_setPri ()函数,为什么不使用?)。 我遇到的错误通常是在绑定或创建套接字时出现的,并且通常是错误代码-2005

我的问题目前是一个一般性问题:如何管理 POSIX 和 TI-RTOS 之间用于任务分配等的内存以及堆和堆栈。 我是否可以与 POSIX 和 TI-RTOS 内存管理重叠。 很明显、我必须重新访问 RTOS/System 分析器工具等、但同时我只想大致了解如何在 POSIX 和 TI-RTOS 之间划分存储器。

感谢您的任何输入。

此致、

Stuart

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

    如果需要、我将让 POSIX 专家为您提供更完整的答案、但我建议您查看 CC32xx SDK 中的第1代到第2代迁移指南。 它应回答您有关如何处理从第1代 osi.h 到第2代 POSIX 相关主机驱动程序的更改的大量问题: dev.ti.com/.../

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

    默认情况下、TI-RTOS 会创建一个"系统"堆。 堆实现支持变量大小分配。 实际使用的堆模块是 HeapMem。 要使用堆、可以使用 Memory_alloc (NULL、size、align、&EB)。 TI-RTOS 还提供驻留在这个系统堆之上的 malloc/free 的实现。 因此、任一分配 API 都会在系统堆上运行。 话虽如此、如果您使用 Memory_alloc、则应使用 Memory_free 来释放该块。 如果你使用 malloc、你应该用 free 来释放这个块。 原因是 malloc 分配了几个额外的字节来存储分配的大小、其中 Memory_alloc 不会(您在 Memory_free 中提供)。

    Tools->ROV->HeapMem 中的信息反映了 Memory_alloc 和 malloc 分配。 如果您正在使用调试内核项目或在系统堆上启用了 HeapTrack,则 Tools->ROV->HeapTrack 中的信息也会反映 Memory_alloc/malloc 分配。

    我不确定您对 Task/pthread 堆栈有什么要求。 每个任务和 pthread 都需要它自己的堆栈。 借助 TI-RTOS、可以在创建期间通过 Task_Params 结构提供堆栈。 如果未提供、创建将分配一个堆栈(基于参数结构中的大小)。 默认情况下、分配发生在系统堆之外。 对于 pthread、也可以通过 pthread_attr_t 结构提供栈。 如果未提供任何内容、则将从系统堆中分配一个(实际上分配将发生在 Task_create 中、因为 pthread_create 调用 Task_create (以及一些其他内容)。

    这是否涵盖了您有关内存管理的问题?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Todd、它帮助我理解! 显然、我必须更好地接受使用调试工具来找出可能出现的问题。 当我更快速地处理所有事情时、可能会再次遇到一个相关的问题。
    Rgds、
    Stuart
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    听起来不错!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sarah、

    感谢您再次参加本次会议。 我已经学习了迁移指南、确实觉得它运行良好、即进行了所有必要的更改、项目构建良好、但崩溃。 主要变化是包含了 POSIX 层。 老实说、我投入了相当多的时间来了解 TI-RTOS、而在第1代中、所有这些都进展顺利。 因此、我只想在第2代中使用同一个仅限 TI-RTOS 的解决方案、但我很难意识到这一点。 将会更好地了解 Todd 电子邮件中概述的调试工具、并从那里获取。
    Rgds、
    Stuart
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Stuart:

    我使用主器件从 CC3200移植的应用。 我不像您一样使用静态 TI-RTOS 配置、而是稍微更改了 CC3200 SDK 中的 OSI 层。 在移植代码期间、我记得有一个问题。 它提供了 SDK 版本2.20、其中更改了 SimpleLink 驱动程序的结构以支持重新进入。 也许您可以测试 SDK 版本2.10、以确保您没有相同的问题。 因为在版本2.10及更早版本中、用于 CC3220的 SimpleLink 驱动程序的结构更接近用于 CC3200的驱动程序。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您在今年1月的投入
    我的第一步是更好地熟悉调试工具(ROV/其他)、然后继续。
    此致
    Stuart
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以关闭这个线程吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,请做,谢谢!