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.

[参考译文] LAUNCHLL-CC26X2R1:如何调用函数zspbProcessEvent?

Guru**** 2468460 points
Other Parts Discussed in Thread: Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1086275/launchxl-cc26x2r1-how-the-function-zspbprocessevent-be-called

部件号:LAUNCHTXL-CC26X2R1
主题中讨论的其他部件:Z-stack

我正在将TI Z-Stack Linux网关移植到ARM平台,但有一些问题。

我想知道如何调用zspbProcessEvent()函数,以及在哪里添加调试信息代码。 谢谢。

此致,

彼得。

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

    您好,Peter,

    您可以从建立此函数的zstackpb.c中调试此函数。

    /*********************************************************************
     * @fn      zspbProcessEvent
     *
     * @brief   ZStack Protobuf Task event processor.  This function
     *          is called to process all events for the task.  Events
     *          include timers, messages and any other user defined events.
     *
     * @param   task_id  - The OSAL assigned task ID.
     * @param   events - events to process.  This is a bit map and can
     *                   contain more than one event.
     *
     * @return  none
     */

    它在osal_ZStack_server_Znp.c中使用,后者 为每个任务调用初始化函数。  在使用 osal_msg_send传输之前,Znp_misc.c中设置了多个相关事件。  示例包括 ZDO_CB_MSG, AF_DATA_CONFIRM_CMD和 AF_INNEING_MSG_CMD。

    此致,
    Ryan

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

    未调用的zspbProcessEvent()可能是由Hal_ProcessPoll()引发的,在调用带 SYS_EVENT_MSG的osal_msg_send和osal_msg_enqueue_push和osal_set_event后,该调用在osal_run_system()中无法返回。  我通过在 Hal_ProcessPoll()之前和之后添加调试信息进行调试。 在 Hal_ProcessPoll()中,任何原因都可以被阻止,即使osal_set_event DID调用?

    OSAL,c代码使用密集 的HAL_ENTER_critical_section和HAL_EXIT_critical_section。 但是我不明白为什么这些API 可以工作,因为它使用使用halInterupts的HAL_DISABLE_Interrupts? 我在移植到ARM平台时没有修改OSAL相关代码,因为它编译正常。

    彼得。

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

    HAL_ProcessPoll应该在轮询函数中等待,直到 给出有效的SetPollTimeOut,这应该发生在osal_set_event中。  否则可能表示轮询功能存在问题。

    hal_mcu.h显示关键部分对于此平台大多数是良性的,因为它们只影响  HAL_Interrups_are启用使用的本地halInterupts变量,但不会在项目中的任何其他位置引用。

    此致,
    Ryan

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

    您好,Ryan:

    感谢您的反馈。 我将检查我的ARM平台上的轮询功能。

    对于hal_mcu.h,您的意思是 HAL_ENTER_critical_section和HAL_EXIT_critical_section不具有REAL函数吗?  我只是奇怪,当任务事件得不到很好的保护时,是否会发生麻烦。 我认为应该保护taskEvents。 我对吗?

    此致,

    彼得。

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

    HAL_[ENTER/EXIT]_critical_section 在此示例中未实现任何实际功能。  它们代表一个占位符,供开发人员根据其平台要求添加自己的用途。

    此致,
    Ryan

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

    您好,Ryan:

    您说:"它们代表着一个占位符,供开发人员根据其平台要求添加自己的用途。" 我认为 应该保护任务,否则可能会出现一些竞争情况。 我还有三个问题。

    1.它是否意味着"x86 PC platform"应该具有此占位符的实现? 当前的TI源未实现它。 它怎么会起作用?

    2.您是否意味着在移植到ARM平台时必须实施OSAL功能?

    3.如何知道此源代码中与平台相关的占位符?

    此致,

    彼得。

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

    1.如示例所示,此功能不是操作的要求。  在MCU上的Z-Stack实施过程中,在执行关键操作时禁用/恢复硬件中断非常有用。

    2. 此API允许独立于操作系统,内核或任务环境(包括控制环路或连接到中断系统)的具体信息来编写Z-stack中的软件组件。  从理论上讲,可能会删除此层,但这将是一项很大的任务,因为项目资源对它的使用非常频繁。

    3.这是一个好问题,但本示例的缺点之一是,这些依赖性尚未完全明确。  您可以按照package_builder target_platform定义和Makefile编译标志获取更多信息。

    此致,
    Ryan

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

    您好,Ryan:

    感谢您对(1)和(2)的解释和确认。 我记下(3),并在稍后有时间时进行调查。

    我找到了当存在osal_set_event时Hal_ProcessPoll()函数被阻止的原因,但我不知道为什么在我的ARM平台上发生了这种情况。

    原因是:使用sigqueue()来表示poly()不工作。 当我用kill() API替换时,这是正常的。

    这两个API之间的区别是没有为kill() API传递参数。 但它是有效的。

    此致,

    彼得。