В моем файле компоновщика script я определил два символа
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 соответственно, но адрес_1 и address_2 имеют значение 0.
Оптимизация компилятора установлена на "Нет". Это уже давно подтачивало меня. Есть ли что-то очень очевидное, что я здесь отсутствует (кроме того, что я не должен делать это в первую очередь)?
Решение Благодаря н.м. для ответа
unsigned int address_1 = (unsigned int) (&_region_RAM_start__);
В противном случае адреса_1 и address_2 оба содержат значения мусора (т.е. значения, доступные по адресу 0xC0000000 и 0xC00fffff, но мусор с точки зрения этого кода)