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 10.0.0.00010
/C2000Ware 3.01.00.00
/BIOS_6_82_00_16
/controlSUITE 3.4.9
我已经在上述环境中创建了软件、但两个计时器之一会在运行过程中停止。
您能否告知原因?
您好!
能否提供有关您的应用的更多详细信息? 是否尝试从 C2000ware 运行示例? 您如何验证计时器是否已停止? 您使用的是哪个计时器实例和周期/预分频器配置?
此致、
Delaney
感谢您的答复。
计时器设置如下所示。
----------------------------------------------------------------------------------------------------------------------------------
var ti_sysbios_family_c28_Timer0Params = new ti_sysbios_family_c28_Timer.params ();
ti_sysbios_family_c28_Timer0Params.instance.name ="ti_sysbios_family_c28_Timer0";
TI_SysBIOS_family_c28_Timer0Params.period = 20;
program.global.ti_sysbios_family_c28_Timer0 = ti_sysbios_family_c28_timer.create (null、"&Timer20us"、ti_sysbios_family_c28_Timer0Params);
var ti_sysbios_family_c28_Timer1Params = new ti_sysbios_family_c28_Timer.params ();
ti_sysbios_family_c28_Timer1Params.instance.name ="ti_sysbios_family_c28_Timer1";
TI_SysBIOS_family_c28_Timer1Params.period = 1000;
program.global.ti_sysbios_family_c28_Timer1 = ti_sysbios_family_c28_timer.create (1、"&Timer1ms"、ti_sysbios_family_c28_Timer1Params);
----------------------------------------------------------------------------------------------------------------------------------------
通过将停止计时器中断的过程输出到外部器件并在示波器上观察来观察计时器停止这一事实。
20us 计时器执行主过程、而1ms 计时器则执行微不足道的处理。
停止时始终是1ms 计时器、而20us 计时器继续运行。
没有关于发生频率的规则。 平均每13小时发生一次。
很抱歉,但我需要你的建议。
您好!
感谢您的澄清。 我将会让 SYSBIOS 专家听取他们的意见。
此致、
Delaney
您是否能够查看 CPU 计时器和 PIE 以及 IER / IFR 寄存器以更好地了解可能发生的情况?
20us ISR 的执行时间是多少? CPU 的负载是否很大、或者计时器 ISR 是否有足够的时间执行?
惠特尼
我曾尝试观察 IER、但当我更改代码时、Timer1停止的事件不再发生。
使用20us 计时器的任务的最大处理时间为11.2us。 所以我们认为需要留出一定的处理时间。
作为附加信息、将堆栈大小从2048字节更改为512字节会增加计时器停止的频率。
但是、在检查 CCS 栈使用情况时、2048字节和512字节的栈大小都绰绰有余。
目前、堆栈大小从2048更改为512字节、20us 计时器由 RTOS 唤醒、并且1ms 计时器更改为中断处理、以查看事件是否重新发生。
如果有任何其他细节需要确认、请告知我们。
我知道您说过、该问题在很长一段时间内发生的可能性是不可预测的、但您可以进行一些调试吗? 您是否可以在计时器停止后连接调试探针、并使用 CCS 查看寄存器状态、查看 ROV 以查看 RTOS 状态等??
如果您不知道如何在不执行复位和干扰器件状态的情况下连接到器件、您可以按照 本视频中的步骤操作 、或创建新的.ccxml 文件并编辑设置以删除.gel 文件并使用该文件进行连接。
惠特尼
连接到调试、以查看复位时会发生什么情况。
作为额外信息、我已经确认当 Timer1停止时、INT13的 IER 设置为0且没有移动。
连接到调试以查看复位时发生的情况。
您是否已采取措施避免重置? 正如我在上一帖子中提到的那样、实现此目标的一种快速方法是创建一个新的.ccxml 文件并删除.gel 文件。 看下面的屏幕截图——看看"初始化脚本"字段是如何清除的?
能够进行连接、那么您可以使用 ROV (经典)来检查 Hwi 的状态、检查堆栈错误等将会很有帮助。
惠特尼
我已经按照您的建议设置了调试器并尝试对其进行连接、但发生了以下错误。
调试器使用 XDS200。
是否存在任何情况、例如需要使用 XDS560查看?
如图所示、初始化脚本为空白。
如果还有其他需要尝试的地方、请告诉我。
感谢您的合作。
您是否在可能阻止调试器连接的器件上启用了任何安全功能? 您是否也可以尝试切换实时模式设置(请参阅下面的链接帖子)以查看这是否有任何区别?
惠特尼
尽管尝试了不同的配置、但我无法在调试器运行时将其连接到器件。
您之前是如何确认 IER 位已被清零的? 切换 IO? 您提到、更改栈大小似乎对代码行为有一些影响。 你能尝试调用 Hwi_getStackInfo 函数、并查看它是否报告了任何问题吗?
惠特尼