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.

[参考译文] RTOS/CC2650:时钟对象运行不正常。

Guru**** 2595780 points
Other Parts Discussed in Thread: CC2650, CC1350

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/602067/rtos-cc2650-clock-object-not-behaving-properly

器件型号:CC2650
主题中讨论的其他器件: CC1350

工具/软件:TI-RTOS

您好!

在我的应用中、我将使用 CC2650示例代码来标记传感器。在我的应用中、我需要在12小时重启后定期重置传感器标记。我正在使用  

Util_constructClock (ResetClock、Reset_clockHandler、RESET_PERIOD_EVT_PERIOD、0、true、0);  此功能用于创建12小时重启的时钟。在时钟超时时时、我调用系统重启功能。但它仅在4分钟内重启、而不是12小时。我无法了解问题的根本原因。

以下是代码片段的一部分:

#define RESET_RECEARY_ON1_MINUTE 60000
#define RESET_RECEIVE_TED_MINUTE 600000
#define RESET_RECEIVE_15_MINUTE 900000
#define RESET_RECEARY_ONE HOUR 3600000
#define RESET_RECEIVE_TWELEVE_HOUR 43200000
//执行周期性事件的频率(以毫秒为单位)
#define RESET_PERIOD_EVT_PERIOD RESET_PERIOD_TWELEVE_Hour

/*********
*@fn Reset_clockHandler
*
*@用于时钟超时的简短处理函数。
*
*@param arg -事件类型
*
*@返回无。
*
静态空 Reset_clockHandler (UARg 参数)

SysCtrlSystemReset();

/*********
*本地
*
/*********
*
*@fn Main
*
*@简要应用程序主页
*
*输入参数
*
*@param 无。
*
*输出参数
*
*@param 无。
*
*@返回无。
*
int main()

uint32_t Random_number;
/*注册应用程序回调到堆栈中发出的 TRAP 断言*/
RegisterAssertCback (AssertHandler);

PIN_init (BoardGpioInitTable);

#ifdef CC1350_LAUNCHXL
//启用2.4GHz 无线电
radCtrlHandle = PIN_OPEN (&radCtrlState、radCtrlCfg);

#ifdef power_saving
power_registerNotify (&rFSwitchPowerNotifyObj、
PowerCC26XX_entering_standby | PowerCC26XX_awarK_STANDBY、
(POWER_NotifyFxn) rFSwitchNotifyCb、NULL);
#endif //power_saving
#endif // CC1350_LAUNCHXL

#ifndef power_saving
/*设置待机和空闲模式的约束*/
power_setConstraint (PowerCC26XX_SB_disallow);
power_setConstraint (PowerCC26XX_IDLE_PD_Disallow);
#endif // power_saving

/*初始化 iCall 模块*/
iCall_init();

/*启动外部映像的任务-优先级5 */
iCall_createRemoteTasks();

/*启动配置文件-优先级3 */
GAPRole_createTask();

/*启动应用程序-优先级1 */
SensorTag_createTask();
SensorTagTmp_createTask();
SensorTagHum_createTask();
SensorTagBar_createTask();
/*启动应用程序安全装置*/

// watchdog_initlize();

/*初始化随机数生成器*/
time_t foo =时间(空);
(foo);
rand()%10000;
random_number +=reset_period_evT_period;
//启动时钟对象
//为内部周期事件创建一次性时钟。
Util_constructClock (ResetClock、Reset_clockHandler、RESET_PERIOD_EVT_PERIOD、0、true、0);
// Util_startClock (ResetClock);
BIOS_start();//启用中断并启动 SYS/BIOS */

返回0;

根据计算结果,我将其设置为一次性计时器,超时时间为=1000*60*12=43200000 。 因此应该是12小时。但这种情况很奇怪,只需4分钟即可重新启动。如果有任何帮助,我们将不胜感激。

此致、

Deepak

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

    您好!

    当我给出10分钟的超时时间时、我已经经历过代码运行正常。 即值  #define RESET_RECEIVE_TED_MINUTE 600000

    当我将周期增加到12小时时、会出现错误行为。由于值 #define RESET_PERIOD_TWELEVE_HOUR 43200000完全在32位范围内、因此不应存在溢出问题。

    这个问题让我变得疯狂。请帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我将时钟设置为10分钟、如果我增加计数器并以这种方式工作、则在超时时。 这是否是重新启动传感器的好方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    复位原因是什么? 如果从任务而不是主任务进行初始化、您是否会看到差异? 您是否检查了堆栈溢出?

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

    [引用 user="Deepak Kumar25"]/*初始化随机数生成器*/
    time_t foo =时间(空);
    (foo);
    rand()%10000;
    random_number +=reset_period_evT_period;
    //启动时钟对象
    //为内部周期事件创建一次性时钟。
    Util_constructClock (ResetClock、Reset_clockHandler、RESET_PERIOD_EVT_PERIOD、0、true、0);
    // Util_startClock (ResetClock);
    BIOS_start();//启用中断并启动 SYS/BIOS *// quote]

    Deepak Kumar25、您好!

    我建议您查看 SimpleBLEPeripheral 项目。 您可以尝试更改 SimpleBLEPeripheral .C 中的计时器周期

      如果没有 RTOS 任务、则不能使用 Util_constructClock

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我仅在主循环中构建了时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、JXS、
    否、从主函数或任务调用时、两者之间没有任何区别。如果是10分钟时钟计时器、则正常工作、但当我增大计时器值时、行为错误。我仅关注 SimpleBLEPeripheral 工程中的示例。 它会造成问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Deepak Kumar25、您好!
    您可以在 SimpleBLEPeripheral 中生成第二个计时器、如计时器。 当定时器处于活动状态时、它将激活一个事件。 并等待 SimpleBLEPeripheral 任务空闲时处理它。 event 的函数为 SysCtrlSystemReset();
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vy Luu、您好、根据您的指示、我在任务中执行了时钟结构、但它的行为仍然相同。我认为它与计时器的值有关。当我最多给10分钟的时间但增加计时器值时、它可以正常工作、 它开始运行异常。但据我所知、它不是变量溢出问题、因为该值通常可以是一个32位的值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    据我所知、我已经构建了10分钟的时钟、在时钟事件中、我将递增计数器、当计数器达到特定事件时、我将器件复位。但器件会在第一个计数器本身上被复位。