F4107Usart資料處理程式,f4107usart資料處理
解決: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] = {0};二:記錄每個usart口,當前接收到的資料條數。uint8_t data_count[4] = {0};三:記錄當前接受到的資料數。uint8_t data_len[4] = {0};四:用來記錄出錯的次數。uint8_t error_count = 0;void UART_DATA_handle(uint8_t route){if(data_count[route]<5){if((usart_data[route][data_count[route]][data_len[route]-3]==0xFF) &&(usart_data[route][data_count[route]][data_len[route]-2]==0xFF)&&(usart_data[route][data_count[route]][data_len[route]-1]==0xFF)){if(usart_data[route][data_count[route]][0]==data_len[route]){data_count[route]++;data_len[route] = 0;if(data_count[route]>5){data_count[route]=0;}else{error_count++;}}}}}void USART1_IRQHANDLER(void){if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){USART_ClearITPendingBit(USART1, USART_IT_RXNE); usart_data[0][data_cout[0]][data_len[0]++] = USART_Rece_Data(USART1);if(data_len[0]>2){usart_data_route(0);}}return;}void USART2_IRQHANDLER(void){if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){USART_ClearITPendingBit(USART2, USART_IT_RXNE); usart_data[1][data_cout[1]][data_len[1]++] = USART_Rece_Data(USART2);if(data_len[1]>2){ usart_data_route(1);}}return;}void USART3_IRQHANDLER(void){if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){USART_ClearITPendingBit(USART3, USART_IT_RXNE); usart_data[2][data_cout[2]][data_len[2]++] = USART_Rece_Data(USART3);if(data_len[2]>2){ usart_data_route(2);}}return;}void USART4_IRQHANDLER(void){if(USART_GetITStatus(USART4, USART_IT_RXNE) != RESET){USART_ClearITPendingBit(USART4, USART_IT_RXNE); usart_data[3][data_cout[3]][data_len[3]++] = USART_Rece_Data(USART4);if(data_len[3]>2){ usart_data_route(3);}}return;}/****main*******/uint8_t tmp[512] = {0};static __INLINE void process_usartdata(uint8_t *tmpdata, uint8_t *usartdata, char *usart_format, int flag){int tmp =0,count=0,i=0;memset(tmpdata,0x00,512);printf(usart_format,flag);for(i=0;i<usartdata[0]+1;i++){tmp = sprintf(&tmpdata[count],"%02X", *(usartdata+i));count += tmp; } memset(usartdata,0x00,256);printf(tmpdata);}int main(void){.........uint8_t i = 0;while(1){for(i=0;i<4;i++){while(data_count[i]>0){process_usartdata(tmp,usart_data[i][data_count[i]],"usart:%d",i);data_count[i]--;}if(data_count[i]>5) {data_count[i] = 0;}}}........}
一般數值處理常式與資料庫資料處理程式的差別是什?
一般數值處理常式是數值計算,屬於單值計算,而資料庫資料處理程式是對一個集合的處理,屬於集合的概念,前者是後者的基礎,後者是前者的拓展。
1 電腦會計系統的資料處理工具是電子電腦在資料處理過程中,除資料的輸入與必要的操作控制外
1、B. 由電腦快速自動完成資料處理
9、C. 函數
33、A. 非直觀
2、A. 由輔助核算科目期初餘額錄入
10、B. 正確