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.

[参考译文] RTOS/CC3200:Simplelink 任务似乎正在写入 Heapmem

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSBIOS, CC3200

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/578432/rtos-cc3200-simplelink-task-seems-to-be-writing-into-heapmem

器件型号:CC3200
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我开始注意到一个问题、即我在配置中设置的 heapmem 中的某些存储器被看似垃圾的数据覆盖。 最初我以为我在代码中的其他位置覆盖它、但在受影响区域的某个地址放置硬件观察点后、我注意到它在发生错误(最初指向此问题)之前触发。  

函数堆栈如下所示:

cc_pal.c:183 0x200112C2处的 SPI_READ_CPU (unsigned char *、int)()
cc_pal.c:595 0x2000DA58处的 SPI_read (int、unsigned char *、int)()
driver.c:1、037 0x200056CE 处的_SlDrvMsgRead ()
_slDrvMsgReadSpawnCtx (void *)() at driver.c:1、302 0x2000FEBE
vSimpleLinkSpawnTask (void *)() at OSI_tirtos.c:504 0x20005CB2
TI_SYSBIOS_KNL_Task_EXIT___E ()位于 Task.c:414 0x2000DD00 (下一个帧与现有帧相同)

硬件观察点被设定为观察地址:0x2001BC10  

我确定这种情况是因为我设置了 heapmem 缓冲区或 simplelink sawn 任务时不正确。  

以下是我对 simplelink 的呼吁:

VStartSimpleLinkSpawnTask (9);

以下是配置文件对于缓冲区的外观:

var heapMem1Params = new HeapMem.Params();
heapMem1Params.instance.name ="generalHeap";
heapMem1Params.size = 1024;
program.global.generalHeap = HeapMem.create (heapMem1Params);

感谢你的帮助

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

    您创建的堆正在用作应用程序的通用堆。 您无需显式创建堆。

    如果你这么做、你必须确保这个堆足够大以满足你的应用。

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

    我很积极、我不是在任何地方都接近使用该堆。
    您确定我无法确定 simplink 和 TI-RTOS 是否正在映射到相同的存储器映射?

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

    通过在配置文件中将 heap.size 设置为1024、内核只知道1024字节的堆存储器。

    您应该将其增大到更大的值。

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

    Derrick、

    我按照你的要求完成了、问题似乎不再出现。

    您能向我解释一下原因吗?

    我的困惑是、从我所读出的内容中、任务从堆借用来用作堆栈。 这与创建的堆不一样、因为它们从整个堆中借用来用作缓冲器吗?

    如果是这种情况、我不明白如何使我创建的堆更大一点来解决这个问题。 simplelink 任务应该有自己的存储器来使用、堆应该有自己的缓冲区。

    我担心、在某个地方、我会做出错误的假设、这会从长远看使我感到一团糟。

    再次感谢您的帮助。、
    肖恩

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

    你是对的。 动态创建任务时、它会在内部为其堆栈分配堆中的内存。

    也可以构造一个任务、并且静态创建任务堆栈。

    您创建的堆是操作系统知道的整个堆。 因此、无论何时分配内存、都试图使用您为操作系统创建的1024字节堆。

    您正在尝试在需要1024字节的应用中执行什么操作? 您可以静态创建一个 uint8_t buffer[1024]来完成此操作。

    Derrick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我认为这里存在一些困惑。 "通用堆"只是我在配置的"HeapMem"部分中创建的一个小堆。 它肯定不应该是主程序堆、因为我将它命名为 generalHeap。 我之所以将其命名为 generalHeap、是因为我在 TI-RTOS 视频中对静态创建的堆进行了测试。

    之所以使用1024字节、是因为我在使用自定义协议时希望使用一个小缓冲区来放置临时内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    肖恩、

    您能否分享您提到的视频?

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

    我所提到的视频如下:  

    https://training.ti.com/ti-rtos-workshop-series-10-10-using-dynamic-memory?cu=7475

    他们没有把自己的 heapMem 命名为“通用堆”,但我在视频中按照他们的设置方式进行了跟踪。  

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

    肖恩、

    我在本主题前面与您分享了错误信息。

    默认情况下,会创建一个 HeapMem,由 Memory_alloc()中的 NULL 指定。 您创建的 HeapMem 不应用作系统默认值。

    您是否能够单步执行代码以在 VStartSimpleLinkSpawnTask()内调用 Memory_alloc()?

    Derrick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 VStartSimpleLinkSpawnTask 的 OSI_tirtos.c 中查看了代码。 我注意到、它在用于生成任务的任务参数中设置2048的堆栈大小。

    我不知道在 CC3200 SDK 中提供的 oslib 库中调用 Memory_alloc()的位置(如果调用它的话)。

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

    您可以与我共享.cfg 文件吗?

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

    /cfs-file/__key/communityserver-discussions-components-files/355/5344.empty.cfg

    我附加了该文件。 出于某种原因、当我创建一个新的 TI-RTOS 文件时、配置文件和主文件的名称为空。 但它们并不是空的。  

    谢谢、

    肖恩

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

    运行示例时、您是否还可以共享 ROV 的堆模块中显示的内容?

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

    这是否得到了解决?

    Todd