F4107單程序處理多個usart中斷接收到的資料

2021-06-25 20:54:16 字數 1392 閱讀 5185

解決:cortex-m4上,usart自動傳送資料方案。

1. usart中斷太快。資料還沒有處理完。usart中斷就會把沒處理完的資料上該覆蓋掉。導致資料丟失。

2.這程式需要在main中處理4個usart口的資料,這樣出錯的概率會更大。

提出如下解決方案:

第一:規定每條完成的資料長度,步會超過256位元組。

第二:我們規定資料的結束表標誌為資料的後三位為,ffffff

第三:定義乙個全域性的資料,他是乙個三維陣列該資料用來存放4個usart口發上來的資料。

uint8_t usart_data[4][5][256];

下面解析為什麼要定義乙個三維陣列:

第乙個下標4:它分別用來接受不同的usart口的資料。

第二個下標5:它表示每個usart最多能快取的資料條數是5.

第三個下標256:它用來表示最多一條資料能存256個位元組。

下面是程式如果實現。

定義如下變數:

一:接受usart資料緩衝器的定義。它是乙個全域性的三維資料

uint8_t usart_data[4][5][256] = ;

二:記錄每個usart口,當前接收到的資料條數。

uint8_t data_in_count[4]=;

三:記錄當前接受到的資料數。

uint8_t data_len[4] = ;

四:用來記錄出錯的次數。

uint8_t error_count = 0;

五:記錄每個usart口,當前處理完的資料。

uint8_t data_out_count[4];

void uart_data_handle(uint8_t route)

else

}} }

}void usart1_irqhandler(void)

} return;

}void usart2_irqhandler(void)

} return;

}void usart3_irqhandler(void)

} return;

}void usart4_irqhandler(void)

} return;

}/****main*******/

uint8_t tmp[512] = ;

static __inline void process_usartdata(uint8_t *tmpdata, uint8_t *usartdata, char *usart_format, int flag)

data_in_count[i]--;

data_out_count[i]++;

if(data_out_count[i]>5)

}} ........

}

F4107Usart資料處理程式

解決 cortex m4上,usart自動傳送資料方案。1.usart中斷太快。資料還沒有處理完。usart中斷就會把沒處理完的資料上該覆蓋掉。導致資料丟失。2.這程式需要在main中處理4個usart口的資料,這樣出錯的概率會更大。提出如下解決方案 第一 規定每條完成的資料長度,步會超過256位元...

多程序 如何使用多程序處理多個任務

以下 用以建立兩個子程序處理任務,通過基本的 框架講解如何使用fork建立很明確的子程序處理任務。int groupcount 2 char ptaskgroup 2 pid t pid 1 for int i 0 i groupcount i else parent process if pid ...

Python 多程序處理多個資料檔案

問題描述 有多個資料檔案,採用相同的處理函式進行處理。如果採用序列的思想對檔案進行處理,那就需要分別處理每乙個檔案,所需要的時間非常長。所以,需要採用多程序的方法,對多個資料檔案採用並行的方式進行處理,處理時間縮短明顯。實現方法 主函式 import multiprocessing pool mul...