在 macMcuInit 函数上 、我们执行 MAC_RADIO_TLE_ON_AUTO_ACK ();
在 rxStartIsr 函数上、它们下面会做什么?
MAC_RADIO_TX_ACK_PEND ();
MAC_RADIO_TX_ACK ();
MAC_RADIO_REQUEST_ACK_TX_DONE_CALLY();
如果我们需要处理射频 ISR 上的 ACK 问题、如果我们有其他 ISR、是否会发生未处理的问题?
mac_internal_API void macMcuInit (void)
{
……μ A
/*打开 autocack */
mac_radio_to_in_Auto_ACK ();
……μ A
}
静态空 rxStartIsr (空)
……μ A
/*------------------
*处理任何 ACK 请求。
*
IF (macRxOutgoingAckFlag)
{
halIntState_t s;
/*
*此关键部分可确保及时启动回调 ISR
*以确保与频闪灯相关。
*
HAL_enter_critical 段;
/*不能通过挂起的更多数据来获取数据包*/
if (MAC_FRAME_TYPE (&rxBuf[1])== MAC_FRAME_TYPE_COMMAND)
{
……μ A
}
if (预扣= MAC_RX_FLAG_ACK_PENDING)
{
MAC_RADIO_TX_ACK_PEND ();
}
其他
{
MAC_RADIO_TX_ACK ();
}
/*在 ACK 传输完成后请求对 macRxAckTxDoneCallback()进行回调*/
MAC_RADIO_REQUEST_ACK_TX_DONE_CALLY();
HAL_EXIT_CRITICAL_SECTION;
}
}