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/CC3200SDK:RTC 问题 CC3200

Guru**** 2589265 points
Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/861496/ccs-cc3200sdk-rtc-problem-cc3200

器件型号:CC3200SDK
Thread 中讨论的其他器件:CC3200

工具/软件:Code Composer Studio

你(们)好  

我的 RTC 有问题。

我正在使用 CC3200,我配置了 RTC 以每次 间隔生成中断,首先我从 NTP 服务器实时更新,我配置了 RTC 以第二秒+0毫秒唤醒 ,然后当前秒+500毫秒,然后第二秒+0毫秒, 然后当前秒+500ms ........ 等等 、它运行良好。  问题在于在所需时间之后或之前、RTC 将在大约10小时(一段时间更短或更长时间)后唤醒。 例如,我将 RTC 配置为在当前秒+ 500毫秒时唤醒,但不幸的是,他在当前秒+ 400毫秒时唤醒。

请提供任何帮助

此致。

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

    您好!

    您是否已检查以确保不会出现任何溢出或绕回问题? RTC 寄存器为32位宽、因此在大约10小时后、您将接近有符号32位整数的最大值。

    此外、您如何设置和使用 RTC? 您是使用 SimpleLink API 来设置 RTC、还是直接通过 PRCM driverlib 函数访问 RTC? 如果您可以包含用于 RTC 功能的代码、这对于了解您的用例非常有用。

    此致、

    Michael

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

    你(们)好,Michael  

    感谢 您的快速回答。

    我已经检查好了是否有任何溢出,此外,这个问题不需要10个小时,在2小时或6个小时后的一段时间,所以我认为我不会达到 RTC 寄存器的最大值。

    我无法为您提供所有代码、因为他已集成到我们的项目中、并且由于 我们使用 RTC 在足够的时间(每秒)内对传感器进行测量、因此他会变得很长且有点复杂。

    但这是 RTC 配置的恢复以及我们在项目中如何使用它。

    /*-------------------------------- 初始化 RTC------------------------------------------------------------------------- *  

    bool bTimeOk;

    bTimeOk_= MAP_PRCMRTCInUseGet ();
    IntPrioritySet (INT_PRCM、2);//设置中断优先级  

    uint32_t PRCMIntStatusV = MAP_PRCMIntStatus ();//清除中断  
    MAP_PRCMIntRegister (PRCM_INT_Handler);

    /*---------------------- 设置 RTC 当前时间------------------------------------------------------- *

    //首先从 NTP 服务器获取当前时间  

    //将 NTP 服务器指定的时间设置为 RTC  

    MAP_PRCMRTCInUseSet();

    MAP_PRCMRTCSet (NTP.second1970、ntp.subsecond);

    /*------------------------------------ 现在,我们开始使用 RTC ---------------------------------- *

    //首先,我们使用 fonction 获取当前时间 :vVcGetUnixTime (UnixTime_t* pxTime)。  注意: pxTime 是包含秒和毫秒的结构。

    void vvcGetUnixTime (UnixTime_t* pxTime)

    MAP_PRCMRTCGet ((unsigned long*)&(pxTime->second1970)、&(pxTime->subsecond));
    while (pxTime->subsecond >999)

    pxTime->second1970++;
    pxTime->subsecond-= 1000;

    //然后我们配置 RTC 以生成下一秒+0毫秒的中断,并启用: vVcTimerStart (xVcTimer_t *pxTimer)

    void vcTimerStart (xVcTimer_t * pxTimer)

    MAP_PRCMRTCMMatchSet (pxVcTimer->u32StartSec1970、pxVcTimer->u32StartMilis);
    uint32_t PRCMIntStatusV = MAP_PRCMIntStatus ();//clear int
    MAP_PRCMIntEnable (PRCM_INT_SLOW_CLK_CTR);

    //然后,我们配置 RTC 以生成第二个+500毫秒的中断电流,并启用功能: vVcTimerStart (xVcTimer_t *pxTimer  )在唤醒时 ,我们初始化传感器的硬配置。

    // 然后我们配置 RTC 以生成下一秒+ 0毫秒的中断,唤醒 时,我们开始 对传感器进行一次测量,然后硬关闭。

    // 然后,我们配置 RTC 以生成第二个+500毫秒的中断电流,并使用字体: vVcTimerStart (xVcTimer_t *pxTimer)  当我们唤醒时,我们初始化传感器的硬配置。

    // 然后我们配置 RTC 以生成下一秒+ 0毫秒的中断,在唤醒时 ,我们开始  对传感器进行测量,然后我们硬关闭。

    等等  

    在函数中断处理程序中,我们只读取中断状态,该状态将通过 API 清除: MAP_PRCMIntStatus(); 我们执行一些配置。

    这种情况很好、但在几个小时后、RTC 会以假时间唤醒。 一段时间后需要一段时间。 我在中进行了良好的测试、RTC 配置中有任何溢出可用于下一次唤醒、但一切都正常。 我检查了使用以下字体生成中断的时间: vVcGetUnixTime (UnixTime_t* pxTime)

    我发现了这一点:有时来回的时间!!!

    重要说明: 我仅测试了 RTC (不在我们的项目中),在3天内使用相同的算法:我没有发现这个问题,所以 在我们的项目中使用它时出现了什么问题   

    很抱歉我知道它太长了。 但是,任何建议或想法  都是非常值得赞赏的。

    此致。

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

    您好!

    有趣的是、如果您独立运行 RTC 代码、则它可以正常工作、但如果您将其集成到项目的其余部分、则会得到所述的行为。

    您是否正在使用 RTOS? 如果是、RTC 可能由 IT 管理、并会解释您看到的问题。

    您是否已确保堆栈空间和堆足以满足您的 RTC +应用需求?

    此外、"硬关闭"是什么意思? 您是指进入休眠状态吗?

    如果您尚未完成此操作、请浏览 prcm 模块 的此 wiki 页面:http://processors.wiki.ti.com/index.php/CC3200_Power_Management_Framework

    其中包含有关 CC3200 RTC 和中间件 API 的详细说明、可供您在应用中参考。


    此致、
    Michael

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

    你(们)好,Michael  

    请再次思考这些细节

    是的、我使用的是 FreeRTOS。 您是否认为 FreeRTOS 对 RTC 有影响? 。  如果是的话,我真的很好奇知道怎么做!! 您是否有任何解决此问题的建议。  

    我知道 FreeRTOS 基本上使用堆(malloc) 、 每个任务 都从堆栈中占用空间、但我不知道 RTC 需要堆栈长时间运行。  您是否认为在运行一段时间后它可能会发生堆栈溢出。

    我的意思是 “关机硬关机”进入低功耗深度睡眠模式(不是休眠模式),但我停用睡眠模式,此问题仍然存在。

     此致。

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

    您好!

    FreeRTOS 是第三方软件平台、因此我们对它不是很熟悉、因此无法在该论坛上直接提供支持。 我建议您查看 FreeRTOS 文档和源代码、了解有关 RTC 使用的详细信息。 我怀疑它需要 RTC、以便能够在休眠期间跟踪墙壁时间。

    至于存储器溢出、每个任务都有从堆中获取的堆栈空间。 假定 RTC 确实由 FreeRTOS 控制和监控、则根本不应使用太多堆栈。 但是、可能还有一些其他存储器问题、例如另一个任务中的堆栈溢出或导致 RTC 偏移的错误指针访问。 我建议您也看看这个。

    此致、

    Michael

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

    您好!

    我假设您已经解决了您的问题、因为我没有听到您的反馈。 如果没有、请随时发布对此主题的响应、或打开有关此问题的新主题。

    此致、
    Michael