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.

[参考译文] CCS/TMS320F28335:SYSBIOS 中的时钟模块不能可靠地与定时器2配合使用

Guru**** 2756835 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/860700/ccs-tms320f28335-clock-module-in-the-sysbios-does-not-reliable-work-with-timer-2

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

工具/软件:Code Composer Studio

大家好

系统 BIOS 中的时钟模块有问题。 我使用的是系统 BIOS_6_76_00_08和 CCS Studio 版本:9.0.0.00018。

我的应用中需要计时器0和1。 对于我在 cfg 文件中配置的时钟模块、如下所示:  

clock.tickSource = Clock.tickSource_timer;
clock.tickPeriod = 100;

VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
clock.timerId = 2;

然后我配置了两个实例


var clock0Params = new Clock.Params();
clock0Params.instance.name ="ADC";
clock0Params.period = 4;
clock0Params.startFlag = true;
program.global.adc = Clock.create ("&vRunInternalAdcAndFilterInputs"、1、clock0Params);
var clock1Params = new Clock.Params();
var clock2Params = new Clock.Params();
clock2Params.instance.name ="main";
clock2Params.period = 50;
clock2Params.startFlag = true;
program.global.main = Clock.create ("&vSoftWatchDogHandler"、1、clock2Params);

我使用 示波器跟踪了硬件上的 vRunInternalAdcAndFilterInputs。

它可以进行接缝处理。 但是、在经过一段特定的时间(1..3小时)后、时钟模块会停止并再次启动。

查看缓存的图片。

我需要帮助。 我试过几件事,但没有什么帮助。   有人有一个理想、我的配置有什么问题?

非常感谢!

Herbert

   

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

    赫伯特、您好!

    您能否使用默认计时器尝试它(只需将 Clock.timerId 保留为默认值)? 它的工作方式是否不同(我不会期望它、但希望它可以轻松地排除 Timer2的任何问题)。  

    我看到您的时钟周期为100us。 这有点快、但我不会期望看到关闭10ms。 您能否添加一个每滴答声运行的时钟函数、并仅切换 GPIO。 我想看看单个周期是延迟的还是多个周期。 此外,您是否可以暂停目标并查看 Tools->ROV->Clock->Module->ticks。 然后让目标运行5秒钟并停止它。 再次查看节拍数。 有什么区别(它应该是~50、000个周期)?

    您是否可以在应用中长时间禁用中断?  

    Todd

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

    你(们)好

    感谢您的快速重播。 我非常感谢! -

    我测量了节拍、结果正常。 我现在的问题是:为什么100us 的速度快? 系统 BIOS 是否可能达到某些限制?

    我还将 BIOS 库类型从"Debug"更改为"Custom"。 当我这么做时、系统在12h 以上运行、没有任何故障!

    这是实现更佳性能的原因吗?

    另一项测试在每次节拍时启用切换 GPIO、我将在下一步执行该测试。

    此致

    Herbert

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

    赫伯特、您好!

    在一个节拍上、内核会进行处理(例如、查看是否应唤醒任何任务、调用应用程序时钟函数等)。 自定义内核的性能优于调试、因此可能是每隔一段时间、在节拍内完成的时钟模块工作就会超过100us (例如、它具有由应用程序创建的几个长时钟函数)。  

    为什么您需要时钟模块以100us 的速度运行? 请看这篇文章 :http://processors.wiki.ti.com/images/5/54/C28_zero_latency.pdf 它介绍了 TI-RTOS 的时钟和计时器使用情况(以及何时切换到零延迟中断...我不一定会在这里推荐这种情况、但这是一个很好的信息。)。

    Todd

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

    你(们)好

    感谢您的宝贵意见。

    但是、如果不 是真的必要、我不想更改时钟配置。

    事实上、我的系统在超过5天的时间内稳定运行。 这是因为 我之前说过的主要变化:

    在"基本运行时选项"中、我将库类型从"调试"更改为"自定义"。 为了验证、我将时钟模块节拍从100us 更改为50us。

    这样、系统仍然可以正常运行。 但时钟周期从大约30us 到75us 不等。

    我想、如果我现在将时钟周期更改为200us、那么我就在安全方面。 你怎么看?

    我可以问您有关堆栈大小的问题吗?

    在"运行时内存选项"上、可以设置系统堆栈大小和堆大小。

    如何正确设置这些参数?

    -是否有准则?

    -如果我不使用堆,我可以将空间设置为0吗?  

    非常感谢你的帮助。

    此致

    Herbert

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

    Herbert、

    如果200us 粒度适合您、我会使用它。

    关于堆栈大小、您是否可以为此打开另一个线程? 我们尝试每个线程保留一个主题/问题。

    Todd

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

    感谢您的大力支持。

    系统现在可以正常工作、没有任何问题

    此致

    Herbert