В моем файле сценария компоновщика я определил два символа
define symbol _region_RAM_start__ = 0xC0000000;
define symbol _region_RAM_end__ = 0xC00fffff;
, а затем экспортировал их, как показано ниже
export symbol _region_RAM_start__;
export symbol _region_RAM_end__;
Из кода приложения я пытаюсь получить доступ к этим символам
extern const unsigned int _region_RAM_start__;
extern const unsigned int _region_RAM_end__;
....
int GetRAMSize()
{
int size = 0;
unsigned int address_1 = _region_RAM_start__;
unsigned int address_2 = _region_RAM_end__;
size = address_2 - address_1 + 1U;
return size;
}
Теперь я ожидал, что Возвращаемое значение - 0x00100000, однако все, что я получаю, - 0. Итак, когда я обратился к отладчику, я заметил, что _region_RAM_start__ и _region_RAM_end__ имеют значения 0xC0000000 и 0xC00fffff соответственно, но address_1 и address_2 имеют значение 0.
Оптимизация компилятора установлена на «None». Это меня уже давно беспокоит. Есть ли что-то очень очевидное, чего мне здесь не хватает (кроме того, что я не должен делать это в первую очередь) ?
Решение Благодаря n.m. для ответа
unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
В противном случае адрес_1 и адрес_2 содержат значения мусора (т.е. значения, доступные по адресу 0xC0000000 и 0xC00fffff соответственно, но мусор с точки зрения этого кода)