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/CC2538:定时器问题

Guru**** 2539740 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/702162/rtos-cc2538-timer-problem

器件型号:CC2538

工具/软件:TI-RTOS

您好!

我将 ZStack-3.0用于 ZigBee 通信。

在这里,我正面临  osal_start_timerEx()中的泡沫;

我使用此函数通过调用 osal_start_timerEx()来定期发送数据,每隔1分钟一次; 但每5分钟后、第5分钟数据发送两次。

即第5分钟数据发送两次

第10分钟数据两次

15分钟数据两次...


osal_start_timerEx()  一次每5分钟调用两次。

下面的代码显示了我的呼叫方式

if (事件和 Period_EVT)

  看门狗克莱尔;
  //设备处于网络中时的定期活动//
  if (bdb_isDeviceNonFactoryNew())
  {
   OSAL_START_timerEx (Kiko_Active_TaskID、Period_EVT、20000);
   Do Periode_Report();
   返回(事件^ Period_EVT);
  }

    }

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

    OSAL_START_timerEx (Kiko_Active_TaskID、Period_EVT、60000);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    检查您的应用程序是否调用 osal_start_timerEx (Kiko_Active_TaskID、periode_evT... 意外触发事件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yah、我没有检查我再次呼叫的位置
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的 period_EVT 的定义是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #define Period_EVT 0x0200
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有其他事件定义了与0x0200相同的值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奇怪。 我看不到为什么会来两次。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、chethan、

    再次确认没有其他周期性计时器事件调用、并且在第五分钟内首次正确清除了 periode_EVT。 如果您更改期间、是否会发生相同的情况? 如果您为 periode_EVT 使用不同的值会怎样?

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

    Yah、我当时检查了30秒、第10次数据发送两次、即第5分钟。 和以前一样。
    我在1处调用周期性事件、即我调用的周期性事件每1分钟调用一次。 但与其他事件类似、调用此周期性事件的时间间隔为300ms (即5分钟)。

    代码如下所示、
    /
    void touchpannel_Init(字节 task_id )

    Kiko TouchPannel_TaskID = task_id;
    CONFIG_TOUCH INT_INT ();

    BDB_StartCommissioning (BDB_commissioning_nexist_network_ON_STARTUP);
    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_FINDNWK_EVT,30);


    /
    if (事件和 Period_EVT)

    if (bdb_isDeviceNonFactoryNew())

    periodic_var = true;
    OSAL_START_timerEx (Kiko_Active_TaskID、Period_EVT、60000);
    Do Periode_Report();
    返回(事件^ Period_EVT);

    其他

    OSAL_START_timerEx (Kiko_Active_TaskID、Period_EVT、10000);
    返回(事件^ Period_EVT);

    返回(事件^ Period_EVT);


    // Kiko 网络事件与 Kiko 网络连接//
    if (事件和 KIKO_FINDNWK_EVT)

    看门狗克莱尔;
    if (_NIB.nwkDevAddress =0xFFFE){
    BDB_StartCommissioning (BDB_commissioning_mode_NWK_Steering);
    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_STAYNWK_EVT、10000);
    }否则

    if (bdb_isDeviceNonFactoryNew())

    if (!periodic_var){
    OSAL_START_timerEx (Kiko_Active_TaskID、Period_EVT,10);

    }否则

    BDB_StartCommissioning (BDB_commissioning_nexist_network_ON_STARTUP);


    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_STAYNWK_EVT、300000);

    返回(事件^ KIKO_FINDNWK_EVT);




    //在丢失时通过重新加入来保持网络中的设备//
    if (事件和 KIKO_STAYNWK_EVT)

    if (bdb_isDeviceNonFactoryNew())

    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_FINDNWK_EVT,30);
    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_STAYNWK_EVT、300000);

    }否则{
    OSAL_START_TIMEerEx (KIKI_Active_TaskID、KIKO_FINDNWK_EVT、30000);
    OSAL_START_timerEx (Kiko_Active_TaskID、KIKO_STAYNWK_EVT、300000);

    返回(事件^ KIKO_STAYNWK_EVT);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 KIKO_STAYNWK_EVT 和 period_EVT 共享相同的值、或者如果 KIKO_STAYNWK_EVT 立即升高 Period_EVT、则会解释此行为。 请进一步调试您的代码。

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

    您是否能够进一步调查此事?

    此致、
    Ryan