реклама на сайте
подробности

 
 
> Непонятное расположения массива в памяти, Keil+RealView
zuy
сообщение May 28 2007, 06:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Используется 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 - May 28 2007, 06:58
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VAI
сообщение May 28 2007, 16:49
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



чуть не по теме, вы пишете, обновились до 3.05, так в следующий раз и пишите, использую mdk3.05, а не
Цитата
Используется uVision3 v3.34 с компилятором RVCT3.0 [Build 947]

Ведю скачивали и устанавливали Вы не " uVision3 v3.34 с компилятором RVCT3.0", а какой-то из mdk.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.0177 секунд с 7
ELECTRONIX ©2004-2016