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.

[FAQ] [参考译文] 【常见问题解答】AM6442:针对空载存储器段的 ROV 抛出异常

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1615140/faq-am6442-rov-throwing-exception-for-noload-memory-section

器件型号: AM6442

我是应用程序中的运行时对象视图、当我将 Heap 段保留到 NoLoad 内存区域中时、它会抛出 Expection。

image.png

注意:该问题特定于基于 CCS Eclipse 的 IDE (CCS v12.8.1)。

请参阅以下错误消息。

obrazek.png

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

    出现上述错误的原因是调试器无法读取位置 0x70100de0 处的存储器地址。 用于读取此存储器的 ROV 代码会使用 fetchArray 函数、该函数 无法 读取存储器内容、因为其未初始化或损坏。 请参阅上述错误消息。

    我们需要修改 ROV 的代码、以使用 fetchFromAddress API 而不是 fetchArray API。

    修改  getTaskFreeStackSize 传递函数 ${MCU+SDK}/source/kernel/freertos/rov/FreeRTOS.rov.js 包含以下提供的代码。

    function getTaskFreeStackSize(stackBase, currentTaskSP)
    {
        let skipSize = 128;
    
        /*
            * We don't know the size of the task stack, so look every n bytes :(
            */
    
        let stackData = Program.fetchFromAddr(stackBase, "uint32_t");
        let index = stackBase;
    
        /*
            * Find the first non-0xa5.
            */
        while ((stackData == 0xa5a5a5a5) &&
               (index < currentTaskSP)
            ) {
            index += skipSize;
            stackData = Program.fetchFromAddr(index, "uint32_t");
        }
    
        if (stackBase >= index)
        {
            return "STACK OVERFLOW";
        }
        else {
            return index - stackBase;
        }
    }
      

    完成上述修改后、重新打开 ROV 视图、然后它应按预期工作。