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/TCI6630K2L:DSP 和 ARM 内核之间的 Task_sleep 精度不同。

Guru**** 2560320 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610965/rtos-tci6630k2l-task_sleep-accuracy-is-different-between-dsp-and-arm-core

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

工具/软件:TI-RTOS

您好!

在 CCS6.2中、DSP 和 ARM 内核之间的 Task_sleep 时间不同。

在 ARM (GNU)目标 SYS/BIOS 上、Task_sleep (1000)不是1秒延迟。

但 对于 DSP 目标、这是1秒。

evmK2L

BIOS 版本:BIOS_6_46_04_53

XDC 版本:xdctools_3_32_00_06_core

ARM 编译器版本:GNU v4.9.3(Ninaro)

cfg 中的相同时钟配置

为什么 Task_sleep 精度不同?

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

    我已通知 TCI66x 团队。 他们的反馈将在此处发布。

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

    我的第一个猜测是定义的时钟速度。 我咨询了 BIOS 团队,他们也考虑到了这一点,即配置文件中指定的 CPU 频率与主板的实际频率不匹配。

    bios.cpufreq.lo = x;
    bios.cpufreq.hi = y;

    请注意,此设置实际上不会更改 CPU 频率。 通过给定板上的 PLL 和晶体进行设置。 此设置必须与电路板设置相匹配。

    /*!
    *==== cpufreq =====
    *以 Hz 为单位的 CPU 频率
    *
    *此配置参数允许 SYS/BIOS 转换各种参数
    定时器节拍(或指令周期)和实时之间的*个周期
    *单位。 例如、需要以微秒表示的计时器周期
    *转换为计时器节拍、以便对进行正确编程
    计时器。
    *
    *此参数的默认值是从平台获取的
    *({@link xdc.cfg.Program#CPU Program.CPU}的 clockrate 属性)
    *这是处理器复位时的 CPU 时钟速率。
    *
    *@A (示例)
    *如果 CPU 频率为720MHz,则使用以下配置脚本
    *使用正确的时钟频率配置 SYS/BIOS:
    *@p (代码)
    * VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    * bios.cpufreq.hi = 0;
    * bios.cpufreq.lo = 720000000;
    *@p
    *
    config types.FreqHz cpufreq;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    db_Woodall、您好!

    我在配置文件中添加了 CPU 频率作为您的意见。

    bios.cpufreq.hi = 0;
    bios.cpufreq.lo = 983039978;

    此频率是 EVM 板上在 K2L GEL 文件中初始化的 ARM PLL。

    但是、Task_sleep 的精度不会改变、并且快于1秒。

    在 ARM 和 DSP 之间的 SYS/BIOS 版本中、时钟设置是否不同?

    谢谢、

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

    它听起来好像没有正确配置某个内核、或者其中一个内核没有以您期望的频率运行。  请看 BIOS 用户指南、第5.2节末尾的示例。  您可以使用 BIOS_getCpuFreq 和 BIOS_setCpuFreq 进行调整、并使用 Clock_getTicks 和 Task_sleep 进行测试。

     Dave

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

    您好,

    在 ARM BIOS 中 BIOS_getCpuFreq()的结果被设定为1000000000

     在 DSP BIOS 中、时钟频率为1200000000。

    BIOS_setCpuFreq (&cpufreq)不会更改时钟频率。


    我认为 ARM BIOS 库不会更改时钟。

    是否有任何建议?

    此致。

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

    您是否尝试过以下示例:

    BIOS_getCpuFreq (&cpufreq);
    cpufreq.lo = cpufreq.lo / 2;
    BIOS_setCpuFreq (&cpufreq);
    KEY = Hwi_disable();
    Clock_tickStop();
    Clock_tickReconfig();
    clock_tickStart();
    Hwi_restore (key);

    setCpuFreq 函数不会修改硬件时钟频率、只会修改计时器在给定超时到期的速率。  此外(从 BIOS 用户指南中):

    所有时钟函数在一个 Swi 的运行环境中运行。 也就是说、时钟模块自动为创建一个 Swi
    它在该 Swi 内使用并运行时钟函数。 时钟使用的 Swi 的优先级可被改变
    配置 Clock.swiPriority。

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

    我的解释似乎不正确。

    BIOS_getCpuFreq (&cpufreq);
    cpufreq.lo = cpufreq.lo / 2;
    BIOS_setCpuFreq (&cpufreq);
    KEY = Hwi_disable();
    Clock_tickStop();
    Clock_tickReconfig();
    clock_tickStart();
    Hwi_restore (key);

    正如您所说的、cpufreq 的值发生了变化。

    Ex) 1000000000 -> 12000000000

    但是、Task_sleep 的精度不会改变。

    也就是说、Task_sleep 1秒延迟的节拍为10000而不是1000。

    为什么 DSP 和 ARM BIOS 之间的精度差异?

    即使硬件时钟是相同的。

    如果是、我们是否必须在应用中以不同的方式使用 Task_sleep 的节拍?

    谢谢。