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/HALCOGEN:我在 rtiGetCurrentTick()中发现了一个错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/824281/ccs-halcogen-i-have-found-a-bug-in-rtigetcurrenttick

器件型号:HALCOGEN

工具/软件:Code Composer Studio

我不知道是否已经报告过这种情况,但我发现了一个导致 rtiGetCurrentTick()中溢出的错误。
此函数为:

uint32 rtiGetCurrentTick (uint32比较)
{
uint32 tick;
uint32计数器=((rtiREG1->COMPCTRL &(uint32)(uint32) 1U <<(比较<< 2U))!= 0U)? 1U:0U;
uint32 RTI_CNT_FRCx = rtiREG1->CNT[计数器].FRCx;
uint32 RTI_CMP_COMPx = rtiREG1->CMP[比较].Compx;
uint32 RTI_CMP_UDCPx = rtiREG1->CMP[比较].UDCPx;

//用户代码开始(27)*/*
用户代码结束*/

Tick = RTI_CNT_FRCx -(RTI_CMP_COMPx - RTI_CMP_UDCPx);

/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。
*/

*用户代码开始(28)*/
*用户代码结束*/

返回刻度;
}

问题在于同步、在将 FRC 寄存器读取到 RTI_CNT_FRCx 和将 COMP 寄存器读取到 RTI_CMP_COMPx 之间发生。 如果在这两个事件之间、寄存器 FRC 的值增加并达到 COMP、RTI_CMP_COMPx 的值将保持新的增加值。 但 RTI_CNT_FRCx 仍会在增加前保持 FRC 的值。 这会导致计算函数返回值时行中出现溢出。

感谢您的阅读!

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

    您好、Ferenc、

    rtiGetCurrentTick 之前(...) 必须 首先调用 rtiInit。 当前节拍数小于 RTICOMPx 寄存器的初始值。 如果您对 RTICOMPx 和 RTCUDCPx 进行了正确配置、则不会出现溢出。 但是、如果 RTICOMPx 初始 值和 RTCUDCPx 太小、则会发生溢出。

    如果初始比较值(RTICOMPx)和更新比较值(RTIUDCPx)在您的应用程序中是相同和恒定值,您可以使用另一种方法来获得节拍并且不会溢出:

    节拍数=(RTI_CNT_FRCx %初始比较值)