Извлёк из нафталина ИАР, и он за 2 дня меня окончательно извлёк...
Код
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

Ну и какого х.. чёрта?
По 2.8 байта на лонг?
Короче, во время работы буфер пересекается с переменными-флагами и получаем забавный набор глюков...
Самое забавное, портится флаг, до которого этот буфер никак не дотянется, даже удлинённый

Ещё был забавный глючок: во флеши был забит набор инициализированных констант. При этом в прошивке присутствовали все константы, кроме нулевых. Вместо нулевых, естественно, получаем 0хff.

IAR C/C++ Compiler for MSP430
V3.40A/W32 [Evaluation] (3.40.1.1)
Знаю, что старый, но всё-таки...

########

Запостил, глянул...
Ну блин я тормоз! smile3046.gif maniac.gif
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
};


Да... Пора в отпуск...