Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятное расположения массива в памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
zuy
Используется uVision3 v3.34 с компилятором RVCT3.0 [Build 947] LPC2148

простой код:
Код
int main (void)
{
    int rrr[4]={1,2,3,4};

    rrr[0] = IO0PIN;

    IO0SET = rrr[0]+rrr[1];

    while(rrr[1] != 0x0000FFFF) rrr[1]++;

    return 0;
}


Код не делает ничего полезного, просо обьявляет массив и немного с ним работает, чтобы оптимизатор обьявление не удалил.
В режиме отладки наблюдается странность. Я в Watch слежу за rrr. При входе в main оно имеет значение 0x40000450. След. шаг, на строке
int rrr[4]={1,2,3,4}; rrr=0x40000430

При этом в окне Watch развернув массив я не вижу его начальной инициализации. Там не 1,2,3,4 а что-то совсем не понятное. Вторая строка кода rrr[0] = IO0PIN; меняет первый элемент массива, но по адресу 0x400000450, и следовательно в Watch этого не показывает т.к. он смотрит за массивом по адресу 0x40000430.

Далее я переслючаюсь на CARM и проверяю тоже самое после компиляции в нем. В этом случае работает все понятно. Массив сразу проинициализирован. Его адрес в Watch не меняется и все изменения сразу отображаются.

Вот хочу спросить, что это за особенность такая и как с ней бороться.

В более сложных проектах, это вылилось в то, что обьявив массив
BYTE cvr[4];
Я получаю cvr = 0x3FFFFF8E, и симулятор uVision пишет, что позиция 0x3FFFFF8E не доступна для записи.
zuy
Похоже вопрос решился.
Обновился до 3.05
VAI
чуть не по теме, вы пишете, обновились до 3.05, так в следующий раз и пишите, использую mdk3.05, а не
Цитата
Используется uVision3 v3.34 с компилятором RVCT3.0 [Build 947]

Ведю скачивали и устанавливали Вы не " uVision3 v3.34 с компилятором RVCT3.0", а какой-то из mdk.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.