#c #for-loop #eeprom
Вопрос:
Я хочу изменить адрес в цикле for :
for (int i = 0, a = kali.CalibNo; i <= (kali.CalibNo-1) amp;amp; mess.j > 0; i , a--) {
mess.stc[i] = ((-mess.Acal[a][0]) (mess.Acal[a - 1][0]))
/ (-val.Value[a] val.Value[a - 1]);
mess.tcal[i] = (mess.Acal[a][1] 273.1 mess.Acal[a - 1][1] 273.1)
/ 2;
mess.Stcal[i] = (double) -mess.stc[i] / mess.tcal[i];
mess.Stcal[i] = EEPROM_WRITE(EEPROM_ADRESS_cal(i), amp;mess.Stcal[i], 4);
}
Stcal[i] — это массив из 5 двойников, а EEPROM_ADRESS_cal-мой адрес, но я не могу определить такой адрес с помощью (i)… К сожалению, я могу определить их только по одному:
#define EEPROM_ADDRESS_cal0 0x1E
#define EEPROM_ADDRESS_cal1 0x22
#define EEPROM_ADDRESS_cal2 0x26
у кого-нибудь есть какие-нибудь идеи, как я мог бы изменить индекс адреса, чтобы он учитывался в цикле for?
Комментарии:
1. В стороне: вообще говоря,
i <= (kali.CalibNo-1)
это вполне может привести к ошибке во время выполнения. Пожалуйста, используйтеi < kali.CalibNo
2. Ты можешь
#define EEPROM_ADDRESS_cal(i) (0x1E ((i) * 4))
? Таким образом, вы можете использовать его какEEPROM_ADDRESS_cal(0)
и т. Д.
Ответ №1:
Отбросьте макросы. Пусть все будет просто.
const uint8_t eeprom_address [n] =
{
0x1E,
...
};
EEPROM_WRITE(eeprom_address[i], amp;mess.Stcal[i], 4);
Хотя в реальном приложении для встраиваемых систем с встроенным eeprom double
массив уже был бы сопоставлен с памятью, поэтому вам не понадобится эта таблица, а только адрес каждого элемента. В случае, если это для внешнего последовательного eeprom, тогда это другая история.
Комментарии:
1. Я получаю несколько определений каким-то образом, вы знаете, что может вызвать это?
2. c:ststm32cubeide_1.7.0stm32cubeidepluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346toolsarm-none-eabibinld.exe: ./Messung/Messung.o:C:/Projekt/Messgeraet/TouchGFXProject/Отладка/../Настройки/Настройки.h:45: множественное определение «EEPROM_ADRESS_AD»;. /Core/Src/main.o:C:/Projekt/Messgeraet/TouchGFXProject/Отладка/../Настройки/Настройки. h:45: впервые определено здесь
3. @MarcHammer Это означает: не используйте одно и то же имя для разных вещей. Часто вы получаете эту ошибку компоновщика, когда у вас есть дерьмово написанные заголовки без защиты от включения и/или с определениями переменных или функций внутри них.