請教下各位,如下的結構體和結構體數組用法正確嗎?
就是需要保存數據到EEPROM,數據每改動一次,就往EEPROM寫一次,現(xiàn)在功能是沒問題的,可以正常寫入數據,但是數碼管顯示出問題了,每次設置min_change時,數碼管會變暗。
整個程序有一萬行,非常長,其他沒有貼出來,只貼了結構體這部分,因為這部分以前不是用結構體寫的,沒問題,現(xiàn)在突發(fā)奇想,用結構體寫了下,功能是實現(xiàn)了,但數碼管變暗了,不知道為啥,看了好久也不知道為啥。
但我個人估計是結構體用法的問題,麻煩大家?guī)臀铱纯矗缦碌慕Y構體數組的用法是否正確,謝謝了
C語言源程序如下:
- unsigned char min_change0=0, //要保存的變量值第一組,每一次改變都會保存
- unsigned char min_change_backup0=0; //該變量為中間變量,用于與min_change做對比,下同
- unsigned char min_change1=0, //要保存的變量值第二組,每一次改變都會保存
- unsigned char min_change_backup1=0;
- unsigned char min_change2=0, //要保存的變量值第三組,每一次改變都會保存
- unsigned char min_change_backup2=0;
- void EEPROM_Write(timeset*, unsigned char, unsigned char) ; //數據保存并寫入EEPROM
- EEPROM_write(unsigned char, unsigned char, ); //內部EEPROM寫入函數
- typedef struct EEPROM_Save
- {
- unsigned char* min_set;
- unsigned char* min_set_backup;
- } timeset;
- timeset EEPROM_SAVE[3] ={ //定義并初始化一個結構體數組,數組元素是指針,數組元素為三組需要保存的數據
- {&min_change0, &min_change_backup0},
- {&min_change1, &min_change_backup1},
- {&min_change2, &min_change_backup2}
- };
- int main(void)
- {
- while(1)
- {
- for(int j=0; j <3; j++)
- {
- EEPROM_Write(EEPROM_SAVE, j, (j+1)) ;
- }
- }
- }
- void EEPROM_Write(timeset* table, unsigned char i, unsigned char addr)
- {
- if (*(table[i].min_set) != *(table[i].min_set_backup)) //如果min_change和min_change_backup不相等,則開始保存
- {
- *(table[i].min_set_backup) = *(table[i].min_set) ; //保存數據
- EEPROM_write(addr, *(table[i].min_set_backup)); //寫入EEPROM
- }
- }
復制代碼
|