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:当 SYSBIOS 包含在 DSP 中时、无法为 OMAP-L138 (ARM/DSP)创建 DSP 可引导映像。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/578858/rtos-can-not-create-a-dsp-bootable-image-for-omap-l138-arm-dsp-when-sysbios-is-included-within-the-dsp

Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我使用的是定制板。

我使用的是 code composer 5.5.5.5...

我使用的是 RTSC/XDCtools (目标运行时支持) 3.25.3.72

我正在使用 SYSBIOS 6.35.4.50

我使用的是 AISGen 1.13版

我在创建 NOR 闪存可引导映像时遇到了困难、该映像包含一个裸机 ARM 负载、该负载只需设置 DSP 入口点并释放 DSP 以解除复位状态、而 DSP 负载仅包含一个直接 进入 while (1)循环 的主程序 包括一个实数下调用的 SYSBIOS。 当此系统引导时、通过仿真连接到 DSP 目标、而不会干扰 DSP 的状态(未加载 GEL 文件、未复位处理器、仅加载符号)、DSP 正在退出。 当我从共享存储器中运行 ARM 并且从共享存储器或 DDR 存储器中运行 DSP 代码时、会出现此问题。 当 DDR 耗尽时、当我连接到 DSP 而不干扰其当前状态时、DDR 会按预期包含 DSP 代码。 这让我相信、处理器时钟与 DDR 时钟一起已正确设置。

如果我将 DSP 编译更改为裸机编译以及上述 ARM 工程、则在通过仿真 器连接到 DSP 时、同样不会扰乱 DSP 的当前状态、DSP 是其主要功能 while (1)循环。 引导成功。

如果我创建一个包含裸机 DSP 和 ARM 构建的可引导映像、其主循环包含一个 while (1)循环以及一个缩小的 SYSBIOS、则该映像的引导过程就很顺利。 当连接到 ARM 而不干扰其当前状态时、ARM 在  其主 while (1)循环中旋转。 同样、引导成功。

为了查看 c_int00是否被正确调用、我添加了自己的可引导入口点。 在此代码中、我将存储器位置设置为特定值、然后调用 c_int00。 在我感兴趣的主处理器内、我用唯一的值设置了另一个内存位置。 这是在 while (1)循环之前完成的。 这让我相信处理器是从 NOR 闪存启动的。 在检查存储器时、我可以看到预期的唯一值。 即使对于在退出时结束旋转的引导映像也会发生这种情况。

我不明白处理器是如何退出的。 调用 main 后、c_int00会调用 exit。 如果 main 未返回、则处理器不应在退出时旋转、而应在 main 内旋转。

在引导退出时的映像时、我会连接到目标、而不会干扰目标的当前状态。  如果我将 PC 设置为启动条目的开始并运行处理器、则当处理器暂停时、主 while (1)循环正在执行。 这是我在启动时预期的结果。

我所有用于创建不同引导映像、AISgen cfg 文件、平台定义等的工程都包含在随附的 zip 文件中。 有三种不同的可引导映像:用于 ARM 和 DSP 的裸机;用于 DSP 的 ARM 和 SYSBIOS 的裸机;以及用于 ARM 的 SYSBIOS 和用于 DSP 的裸机。

如果您想了解裸机 ARM 和 SYSBIOS DSP 组合在最初从 NOR 闪存引导时最终退出的原因、我们将不胜感激!e2e.ti.com/.../5428.BootableOMAP.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将看一下您的项目文件、但在平均时间内、如果您在退出时使用 CCS 从 DSP 映像.out 文件中"添加符号"、则您可能会在调试器窗口中获得有意义的完整调用栈。 此外、您应该能够使用 ROV 收集有关事物状态的信息。 具体地浏览 Hwi 模块的异常视图、查看是否发生了硬件异常、并查看异常调用栈是否可用。

    通常情况下、GEL 文件的"OnConnect"或"on program load"函数会执行一些基本的 PRCM 初始化、为应用程序成功读取和写入通常无法通过其他方式访问的寄存器铺平了道路。 这可能会误导用户、使用户认为从 CCS 加载时运行的应用程序在没有 CCS 的情况下引导时将正确运行。

    在到达 main()之前,一个 SYS/BIOS 项目将为项目内使用的每个模块调用模块启动代码。 我过去遇到过一些问题、其中 MMU 未配置为允许 CPU 访问计时器外设寄存器(由时钟模块使用)、 或者、在引导过程中、到定时器外设寄存器的时钟在被读取或写入之前没有被启用。 这会导致总线错误。

    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Alan 的回应。 我将尝试查看您提到的项目。

    当我连接到处理器时、我不使用 GEL 文件、并且任何处理器都不执行任何任务。 SYSBIOS 已被剥离为裸骨头。 我没有启动调度程序、因为我没有任务处理。 MMU 不是 BIOS 的一部分、我认为我也不使用时钟模块。 如果打开 DSPwSYSBIOS 项目的.cfg 文件、您将了解 SYSBIOS 中包含的内容。

    Elwood
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您已经完全解除了 BIOS 的武装:

    BIOS.taskEnabled = false;
    BIOS.swiEnabled = false;
    BIOS.clockEnabled = false;
    BIOS.logsEnabled = false;

    应该在 main()之前没有进行硬件初始化。

    您可以尝试注释掉日志记录的内容、以确保记录器使用的时间戳计时器不会初始化:

    //var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    /var logerBufParams = new LoggerBuf.Params();
    //logerBufParams.numEntry = 16;
    /var logger0 = LoggerBuf.create (logerBufParams);
    //Defaults.common$.logger = logger0;


    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于原始海报最近没有活动、我将关闭此主题。

    Todd
x 出现错误。请重试或与管理员联系。