提取共享库
ar x name.lib
ar cr dest.lib src1.o src2.o src3.o
找到关键位置
else if ( a2 & 0x40 )
clear_event((unsigned __int8)s_phy_layer_task_id, 4);
stop_timerEx((unsigned __int8)s_phy_layer_task_id, 4);
radio_raw_data = (unsigned __int8 *)msg_allocate(255);
if ( radio_raw_data )
{
*(_DWORD *)radio_raw_data_len = 0;
SX1280Hal::SetDirDisable((SX1280Hal *)&Radio);
clear_event((unsigned __int8)s_phy_layer_task_id, 76);
SX1280::GetPayload((SX1280 *)&Radio, radio_raw_data, radio_raw_data_len, 0xFFu);
SX1280::GetPacketStatus(&Radio, &PacketStatus);
SX1280Hal::SetDirEnable((SX1280Hal *)&Radio);
}
else if ( !s_PeriodBaseCount_flag )
{
SetRcMode();
send_cmd(9u); // RX_ERROR_CMD
}
else if ( a2 & 8 ) // SAMPLE_MSG_RX_TIMEOUT_EVNT
{
clear_event((unsigned __int8)s_phy_layer_task_id, 4);
stop_timerEx((unsigned __int8)s_phy_layer_task_id, 4);
if ( s_tx_confirm_flag == 1 )
{
s_tx_confirm_flag = 0;
v24 = msg_allocate(32);
if ( v24 )
{
*(_BYTE *)v24 = 2;
*(_BYTE *)(v24 + 2) = 6; // MAC_EVENT_TX_TIMEOUT_CMD
*(_BYTE *)(v24 + 3) = s_phy_layer_task_id;
*(_BYTE *)(v24 + 4) = Radio_packet_type;
*(_DWORD *)(v24 + 28) = 0;
*(_DWORD *)(v24 + 24) = 0;
msg_send((unsigned __int8)g_sample_task_id, v24);
}
}
else
{
v25 = msg_allocate(32);
if ( v25 )
{
*(_BYTE *)v25 = 2;
*(_BYTE *)(v25 + 2) = 9; // MAC_EVNT_RX_ERROR_CMD
*(_BYTE *)(v25 + 3) = s_phy_layer_task_id;
*(_BYTE *)(v25 + 4) = Radio_packet_type;
*(_DWORD *)(v25 + 28) = 0;
*(_DWORD *)(v25 + 24) = 0;
msg_send((unsigned __int8)g_sample_task_id, v25);
}
}
result = v4 ^ 8;
}
MOVS R1, #4
LDR R0, =s_phy_layer_task_id
LDRB R0, [R0]
BL osal_clear_event
MOVS R1, #4
LDR R0, =s_phy_layer_task_id
LDRB R0, [R0]
BL osal_stop_timerEx
MOVS R0, #0xFF
BL osal_msg_allocate
MOV R9, R0
CMP.W R9, #0
BEQ loc_123C
MOVS R0, #0
STR R0, [SP,#0x28+radio_raw_data_len]
LDR R0, =Radio ; this
BL _ZN9SX1280Hal13SetDirDisableEv ; SX1280Hal::SetDirDisable(void)
MOVS R1, #0x4C ; 'L'
LDR R0, =s_phy_layer_task_id
LDRB R0, [R0]
BL osal_clear_event
MOVS R3, #0xFF ; unsigned __int8
ADD R2, SP, #0x28+radio_raw_data_len ; unsigned __int8 *
MOV R1, R9 ; unsigned __int8 *
LDR R0, =Radio ; this
BL _ZN6SX128010GetPayloadEPhS0_h ; SX1280::GetPayload(uchar *,uchar *,uchar)
LDR R1, =PacketStatus
LDR R0, =Radio
BL _ZN6SX128015GetPacketStatusEP14PacketStatus_t ; SX1280::GetPacketStatus(PacketStatus_t *)
LDR R0, =Radio ; this
BL _ZN9SX1280Hal12SetDirEnableEv ; SX1280Hal::SetDirEnable(void)
if( ( irqRegs & IRQ_RX_DONE ) == IRQ_RX_DONE )
{
if( ( irqRegs & IRQ_CRC_ERROR ) == IRQ_CRC_ERROR )// 如果收到底层CRC不通过的ERROR,就向上层汇报IRQ_CRC_ERROR_CODE。那么MAC层就会根据这个error进行相应的处理,也即是上面看到的丢包处理。理论上,我们只要使得该语句永远为False就会一直跳转到下面的rxDone中,始终汇报数据包接收成功即可。
{
if( rxError != NULL )
{
rxError( IRQ_CRC_ERROR_CODE );
}
}
else
{
if( rxDone != NULL ) //这条基本都会true,因为rxDone是一个指针函数。
{
rxDone( );
}
}
}
最优方案的选择,修改测试
看雪ID:二当家a
https://bbs.pediy.com/user-554506.htm
推荐文章++++
好书推荐