在實際開發(fā)中使用了如下數(shù)組定義:
#define?MAX_PINS = 8
uint8_t count_8bit[MAX_PINS] = {0};
原本打算用來作為緩存,發(fā)現(xiàn)在串口接收正確數(shù)據后將需要的值寫入該數(shù)組
在程序其他地方調用時有修改了它的值,在接收數(shù)據循環(huán)處理后該值會自動重置為0x00,數(shù)據丟失了,具體調用如下:
? ? for (int i = 0; i < 8; i++) {
? ? ? ? if (pwm_pins[i] == pin) {
? ? ? ? ? ? count_8bit[i] += increment;?
? ? ? ? ? ? UpdatePWM(count_8bit[i], pin);// 可選:發(fā)送當前計數(shù)值
? ? ? ? ? ? break; // 找到對應引腳后退出循環(huán)
? ? ? ? }
? ? }
? ? UART0_SendString(count_8bit, 8);
于是另起爐灶使用其他變量就可以正常所需功能(不會在第二次串口接收數(shù)據時重置為0x00),具體修改如下:
? ? for (int i = 0; i < 8; i++) {
? ? ? ? if (pwm_pins[i] == pin) {
? ? ? ? ? ? cmd[i] += increment;?
? ? ? ? ? ? // 更新 PWM 輸出
? ? ? ? ? ? UpdatePWM(cmd[i]-0x64, pin);
? ? ? ? ? ? // UART0_SendByte(count_8bit[i]);?
? ? ? ? ? ? break;?
? ? ? ? }
? ? }
? ? UART0_SendString(count_8bit, 8);
但是如果注釋掉”UART0_SendString(count_8bit, 8);“,不打印count_8bit,串口只能接收到第一次的數(shù)據,串口第二次發(fā)送不會有任何打印,也沒有任何傳參。
并且,只能打印count_8bit,換成其他相同長度的數(shù)組、元素數(shù)值相等也會不正常,且修改為等效運行時間的DELAY延時也會不正常,只能UART0_SendString(count_8bit, 8)才能正常運行,但是這樣運行速度就太慢了,遂修改為UART0_SendString(count_8bit, 1)也可以正常運行
count_8bit是否定義到了微妙的地址?程序運行時會對該地址有操作?在操作時都關閉了中斷,操作完再打開中斷的,并且數(shù)組未越界,而且中斷也只是置標志位和把接收的數(shù)據存到buff里,并沒有延時或者長時間操作。
我不對count_8bit進行其他任何操作,只是定義并在這里UART0_SendString(count_8bit,8);才正常運行,去掉程序中及定義中的count_8bit,串口就只能收到第一次的數(shù)據,第二次收不到