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/am3359:无法理解为什么 RTOS 的运行速度比 Starterware 快3倍

Guru**** 2556880 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/624092/rtos-am3359-cannot-understand-why-rtos-runs-3x-faster-than-starterware

器件型号:AM3359

工具/软件:TI-RTOS

尊敬的 TI:

            AM335x 入门套件、starterware 2.0.07、Processor RTOS 04.00.04 (BIOS 6.46.05.55)

最近、我将我自己的 DSP 程序在 AM335x 入门套件上的时间消耗与 Starterware 与 RTOS 进行了比较、发现 RTOS 的运行速度实际上比 Starterware 快3倍、这让我感到困惑。 请帮助找出故障。 下面是我的过程。

在 starterware 中、我从 dmtimerCounter.c 借用了一个计时器、我假设它以24MHz 运行。 我甚至尝试将不同的 DVFS 设置分别设置为720MHz/600Mhz / 500MHz。 (处理时间与 CPU 频率成反比)

在 RTOS 中、我使用 时间戳、我假设节拍周期为550MHz (等于 CPU 频率)

       ui32_t0 = Timestamp_get32 ();                       //计算时间戳()开销(ui32_T2)
       ui32_T1 = Timestamp_get32 ();
       ui32_t2 = ui32_t1 - ui32_t0;

       ui32start = Timestamp_get32();
       myDSP ();
       ui32stop = Timestamp_get32();
       ui32delta = ui32stop - ui32start - ui32_t2;

请帮助解决这一难题。 提前感谢。

Mike

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

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

    Michael、

    您能否说明如何在器件上配置 DPLL。 使用 GEL 文件或使用 ROM 引导加载程序或辅助引导加载程序/CARD_INIT? 您的 CPU 频率实际上设置为550MHz。

    GEL/板库将 ARM PLL 设置为 ARM_OPP100、即 ARM PLL = 500MHz、内核 PLL 设置为1GHz。 为了获得准确的时间戳、用于计算时钟节拍的 CPU 频率应与使用 GEL/初始化代码完成的实际 PLL 设置相匹配。

    要与此匹配、您可以将以下内容添加到配置中。

    VAR Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
    bios.cpufreq.hi = 0;
    bios.cpufreq.lo = 600000000;//根据需要更改以匹配初始化
    Timer.intFreqs[0].hi = 0;
    Timer.intFreqs[0].lo = 24000000;//根据主板 osc 配置根据需要更改。
    Clock.timerId = 0;// DMTimer2 (BIOS_6_4x_xx_xx/docs/cdoC/ti/sysBIOS/timers/dmtimer/doc-files/TimerTables.html) 


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Starterware 代码运行缓慢的原因可能是代码未执行指令和数据高速缓存启用等 ARM 内核初始化、并且未设置 MMU 以优化性能。

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

    您好 Rahul Prabhu、

    感谢你的答复。

    要在 starterware 上测试 DVFS,我只需将代码插入 demDvfs.c,然后重建示例演示项目。 猜测演示项目已处理 MMU/Cache 等...

    1. /*
    2. **选择 SR Turbo 时要采取的步骤
    3. *
    4. void ActionDVFSSrTurbo (void)
    5.    DynamicVoltFreqChange (SR_Turbo);
    6.    mpuOpp = SR_Turbo;
    7.    UARTPuts ("\r\nSR Turbo Selected (VDD_MPU、1.26V、720MHz)\r\n"、-1);
    8.    updatePage (click_IDX_DVFS);
    9.    mydsp 和_dmtimercounter();
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 RTOS 中、app.cfg -> SYS/BIOS -基本运行时选项-->平台设置--> CPU 时钟频率--> 550,000,000
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael、

    您能不能指出什么是 MPU 和系统 PLL 的 GEL/引导加载程序设置。 另外,这两个代码是否都从 DDR 运行?

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

    您好、Rahul、

    linker.cmd 将所有内容都放入 DDR3中。 我使用默认的 SK_AM338.ccxml、并且通过 UART/USB 电缆将 CCS7连接到电路板。 我猜我没有在 RTOS 中使用 GEL/bootloader。

    今天,我使用 Clock()扩展了 Linux 系统上的测试 ,/sys/devices/system/cpu/cpu0/cpufreq 显示为@ 720MHz。 结果、RTOS 的开销增加了20%、但仍然比 StarterWare 快2.5倍。

    最好

    Mike