一主十從,用了
lwns_uninetflood_example.c測試,只向一個(gè)目標(biāo)發(fā)數(shù)據(jù),正常,向多個(gè)目標(biāo)連續(xù)發(fā),出現(xiàn)丟包嚴(yán)重問題,我們的速度要求也比較高,20ms內(nèi)要向十個(gè)目標(biāo)發(fā)完數(shù)據(jù)
問題1:如果加快發(fā)送的速度?
? ? ? ?2:這個(gè)例程,如果向多個(gè)目標(biāo)發(fā)不同的數(shù)據(jù),要怎么發(fā)才盡量不會(huì)丟包?
發(fā)包函數(shù)
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]; //移位發(fā)送數(shù)據(jù),以便觀察效果
? ? ? ? }
? ? ? ? TX_DATA[9] = temp;
? ? ? ? */
/*試過,輪詢,目標(biāo)多的話,時(shí)間不夠快
? ? ? ? change_cnt++;
? ? ? ? if(change_cnt % 2 == 0){
? ? ? ? ? ? TX_DATA[0]++;
? ? ? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr2);
? ? ? ? } else {
? ? ? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr);? //單播網(wǎng)絡(luò)泛洪發(fā)送數(shù)據(jù)給目標(biāo)地址
? ? ? ? }
*/
/*連線發(fā),丟包嚴(yán)重
? ? ? ? ? ? TX_DATA[0]++;
? ? ? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr2);
? ? ? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr);? //單播網(wǎng)絡(luò)泛洪發(fā)送數(shù)據(jù)給目標(biāo)地址
? ? ? ? }
*/
//目標(biāo)多,也達(dá)不到要求
? ? ? ? TX_DATA[0]++;
? ? ? ? g_send_sucess_flag = 0;
? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr);? //單播網(wǎng)絡(luò)泛洪發(fā)送數(shù)據(jù)給目標(biāo)地址
? ? ? ? while(!g_send_sucess_flag);
? ? ? ? g_send_sucess_flag = 0;
? ? ? ? lwns_buffer_load_data(TX_DATA, sizeof(TX_DATA)); //載入需要發(fā)送的數(shù)據(jù)到緩沖區(qū)
? ? ? ? lwns_uninetflood_send(&uninetflood, &dst_addr2);
? ? ? ? tmos_start_task(uninetflood_taskID, UNINETFLOOD_EXAMPLE_TX_PERIOD_EVT,
? ? ? ? ? ? ? ? ? ? ? ? MS1_TO_SYSTEM_TIME(20)); //周期性發(fā)送
? ? ? ? return events ^ UNINETFLOOD_EXAMPLE_TX_PERIOD_EVT;
? ? }
有沒有更好的處理方案?或者我用錯(cuò)了例程?