一主十从,用了
lwns_uninetflood_example.c测试,只向一个目标发数据,正常,向多个目标连续发,出现丢包严重问题,我们的速度要求也比较高,20ms内要向十个目标发完数据
问题1:如果加快发送的速度?
2:这个例程,如果向多个目标发不同的数据,要怎么发才尽量不会丢包?
发包函数
uint16_t lwns_uninetflood_ProcessEvent(uint8_t task_id, uint16_t events)
{
static uint8_t change_cnt = 0;
if(events & UNINETFLOOD_EXAMPLE_TX_PERIOD_EVT)
{
/*
uint8_t temp;
temp = TX_DATA[0];
for(uint8_t i = 0; i < 9; i++)
{
TX_DATA[i] = TX_DATA[i + 1]; //移位发送数据,以便观察效果
}
TX_DATA[9] = temp;
*/
/*试过,轮询,目标多的话,时间不够快
change_cnt++;
if(change_cnt % 2 == 0){
TX_DATA[0]++;
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr2);
} else {
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr); //单播网络泛洪发送数据给目标地址
}
*/
/*连线发,丢包严重
TX_DATA[0]++;
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr2);
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr); //单播网络泛洪发送数据给目标地址
}
*/
//目标多,也达不到要求
TX_DATA[0]++;
g_send_sucess_flag = 0;
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr); //单播网络泛洪发送数据给目标地址
while(!g_send_sucess_flag);
g_send_sucess_flag = 0;
lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //载入需要发送的数据到缓冲区
lwns_uninetflood_send(&uninetflood, &dst_addr2);
tmos_start_task(uninetflood_taskID, UNINETFLOOD_EXAMPLE_TX_PERIOD_EVT,
MS1_TO_SYSTEM_TIME(20)); //周期性发送
return events ^ UNINETFLOOD_EXAMPLE_TX_PERIOD_EVT;
}
有没有更好的处理方案?或者我用错了例程?