当我使用调试器 std::time (NULL)直接加载 NORTOS 程序时、效果很好、 但是、当我将我的映像与 BIM 映像一起加载(基于 TI 参考 BIM)、然后跳转到我的固件时、std:::time (NULL)会在最初几次中为我提供一个垃圾值、然后在 此后一直保持在4177066232。 如果我从引导加载程序跳转到程序以使 RTC 正常工作、我是否需要在程序开始时执行特殊操作?
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.
当我使用调试器 std::time (NULL)直接加载 NORTOS 程序时、效果很好、 但是、当我将我的映像与 BIM 映像一起加载(基于 TI 参考 BIM)、然后跳转到我的固件时、std:::time (NULL)会在最初几次中为我提供一个垃圾值、然后在 此后一直保持在4177066232。 如果我从引导加载程序跳转到程序以使 RTC 正常工作、我是否需要在程序开始时执行特殊操作?
您好、Myles:
为了支持您解决此问题、我需要您提供更多信息、以了解您正在尝试做什么。
您使用的是哪个版本的 SDK? 如果您不使用最新版本(4.30)、您能否升级到最新版本并查看是否可以重现此问题? 您可以在此处下载最新版本: https://www.ti.com/tool/download/SIMPLELINK-CC13X2-26X2-SDK
您使用的是哪种堆栈?
您正在使用哪个项目、并且您是否对该项目进行了任何修改?
您按什么顺序加载文件? 您是否正在使用由 OAD 映像工具生成的 OAD 文件?
您使用的是 Launchpad 还是定制板?
谢谢、
ELIN
我使用的是最新的4.30.0.54。
不使用堆栈、我使用的是自定义板和自定义基础架构、因此很难准确地重新创建(因为我使用的是非 RTOS 设置)。 我基本上创建了一个与 TI OAD 映像交付工作方式类似的过程、但我确实启动了相同的 BIM onchip 项目。 通过将 bim 和我的标准映像合并到一个映像中、然后使用 SmartRF 闪存程序2加载这两个映像、可以看到这个问题(因此、即使没有预成形和 OAD 更新、我也可以看到这个问题)。 映像引导至 BIM、然后跳转到程序。 我可能可以使用示例项目创建类似的内容。 我只是不知道我做了什么错误。 在这个过程中、它看起来没有什么特别的发生。 Bim 启动并加载 ccfg、然后跳转到第二个映像的 ISR 矢量。 我是否缺少了一些关键步骤?
更新可能与以下问题相关的信息? 无论如何,我通过读取 AONRTCSecGet ()而不是 std:time (NULL)的时间找到了一个权变措施。 这似乎在从生物中跳出来后正常工作。
您好、Myles:
感谢您的分享。
当您同时拥有定制板和定制环境时、很难知道您是否错过了关键步骤、而且我不知道您实际执行的步骤是什么。 但我强烈建议您将 BIM 和应用程序映像分开。 这至少是 SDK 中的示例应该使用的方法。 图像分离时、您是否遇到相同的问题?
[报价用户="Myles Scott"]更新可能与此问题相关、链接如下? [/报价]
刚刚检查了我们的系统、似乎这个问题在今年年初得到了解决。 您使用的是哪个版本的 SDK?
谢谢、
ELIN
BIM 和应用程序映像是分开的、我使用 srecord 创建一个映像以一次性加载、例如、如 OAD 文档所述、用于生产。 正如我在第二篇文章中提到的、我使用的是最新的 SDK。 当我仅加载我的生产映像时、问题不会发生、但如果我同时加载 BIM 和我的生产映像(因此 bim 首先引导、然后跳转到生产映像)、则我有问题。 除非我调用寄存器来获取时间、而不是 std:time。
[引用 user="Myles SCott"]当我仅加载我的生产映像时、问题不会发生、但如果我同时加载 BIM 和我的生产映像(因此 bim 首先引导、然后跳转到生产映像)、那么我就会遇到问题。 除非我调用寄存器来获取时间、而不是 std::time。对于 TI ARM 编译器 std:::time ()、使用 CIO 从运行调试器的主机 PC 读取时间。 这涉及到设置 CIO 断点,当程序调用 std:time()时,程序将在调试器从主机 PC 获取当前时间时停止,然后程序将恢复。
如果未设置 CIO 断点,则 std:time()不会返回有效时间。
自定义时钟和时间函数 有一些有关这方面的更多信息。
[引用 user="Myles SCott)]无论如何,我通过读取 AONRTCSecGet ()而不是 std:计时(NULL)的时间找到了一个变通办法。 除非创建了自定义 time()函数,否则 std::time()仅在调试器下运行程序时才会返回值。 因此,使用 AONRTCSecGet ()应该是一个有效的修复。