Символы доступа, определенные в сценарии компоновщика приложением

В моем файле сценария компоновщика я определил два символа

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 соответственно, но мусор с точки зрения этого кода)

19
задан ka05 6 December 2011 в 11:54
поделиться