Код
long Vph_buf[10];
Смотрим мап:
Код
DATA16_Z
Relative segment, address: 03E2 - 0409 (0x28 bytes), align: 1
Segment part 49. Intra module refs: ProcessADC
ENTRY ADDRESS REF BY
===== ======= ======
Vph_buf 03E2
Relative segment, address: 03E2 - 0409 (0x28 bytes), align: 1
Segment part 49. Intra module refs: ProcessADC
ENTRY ADDRESS REF BY
===== ======= ======
Vph_buf 03E2
Ну и какого х.. чёрта?
По 2.8 байта на лонг?
Короче, во время работы буфер пересекается с переменными-флагами и получаем забавный набор глюков...
Самое забавное, портится флаг, до которого этот буфер никак не дотянется, даже удлинённый
Ещё был забавный глючок: во флеши был забит набор инициализированных констант. При этом в прошивке присутствовали все константы, кроме нулевых. Вместо нулевых, естественно, получаем 0хff.
IAR C/C++ Compiler for MSP430
V3.40A/W32 [Evaluation] (3.40.1.1)
Знаю, что старый, но всё-таки...
########
Запостил, глянул...
Ну блин я тормоз!


0x28 bytes это же не 28, а 40!
То есть всё правильно... Но с константами всё равно глюк был.
Вылечился упаковкой в структуру
Код
//-----------------------------------------------------------------------------
// Значения параметров при прошивке
//-----------------------------------------------------------------------------
const struct PARAMS SavedParams @ Flash_Start = {
.E_i = -35,
.Slope = -0.1984,
.Op_Amp0 = 0,
.termo_coef = 0.0005,
.U_coef = 2.44e-4,
.pHmeter_coef = 1,
.AvgPeriod = 0
};
// Значения параметров при прошивке
//-----------------------------------------------------------------------------
const struct PARAMS SavedParams @ Flash_Start = {
.E_i = -35,
.Slope = -0.1984,
.Op_Amp0 = 0,
.termo_coef = 0.0005,
.U_coef = 2.44e-4,
.pHmeter_coef = 1,
.AvgPeriod = 0
};
Да... Пора в отпуск...