Я использую GCC для приложения микроконтроллера STM32, и я столкнулся со странным явлением. У меня есть таблица постоянных значений во флэш-памяти, которые содержат адреса из символов линкера. Теперь я хочу добавить еще одно значение, которое содержит вычисление (во время сборки) из двух символов компоновщика, но, похоже, оно не работает.
Это выглядит так:
extern uint32_t _ls1; // Linker symbol 1
extern uint32_t _ls2; // Linker symbol 2
const volatile uint32_t table[4] =
{
(uint32_t)(&_ls1), // 1. Correct value
(uint32_t)(&_ls2), // 2. Correct value
(uint32_t)(&_ls1) + 1, // 3. Correct value
(uint32_t)(&_ls1) + (uint32_t)(&_ls2) // 4. Wrong value, always 0
}
Первые три значения в таблице совершенно верны.
Всякий раз, когда я добавляю два (или более) символа компоновщика в вычисление, результат равен 0. Никаких ошибок или предупреждений не выдается.
Есть идеи?