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

 
 
> Помогите разобраться с RVMDK
vesago
сообщение Apr 4 2006, 11:31
Сообщение #1


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Писал проект в карме решил перебраться на RVMDK. В моем устройстве на LPC2214 две внешние микросхемы памяти. Одна статика для буфера, вторая - флешка. В карме я их прописывал в опциях проекта и объявлял как массивы по конкретным адресам, дабы линкер не пытался в них какие переменные запихнуть. Ну еще пред ними ставил но инит, чтоб при запуске не инициализировало.
В RMDK вообще не возможно массив поместить по поределенному адресу. По крайней мере __at не работатет. Как сделать, чтоб не инициализировало - тоже не знаю. Память в опциях диалога прописываю, а она в отладчике не пашет. Пишет, что запись не возможна. Стартап я поправил. Как мне прописать этувнешнюю память? Не хочется назад в карм возвращаться. Помогите.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Apr 5 2006, 09:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(vesago @ Apr 5 2006, 12:59) *
Я вообще представлял, что создаешь любые переменные, прописываешь в опциях модуля память и линкер автоматом их размещает. А тут он как-то избирательно подходит. Если массив - в инициализируемой памяти, если переменная, то во внешней. Таким образом не могу придумать главное - как мне помещать и считывать данные из внешней SRAM.

Как Вы просили, так он и сделал - если нужно разместить массив во внешней памяти, то
линкеру нкжно было писать:
Код
LR_IROM1 0x00000000 0x00040000  {; load region
  ER_IROM1 0x00000000  {    ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IRAM1 0x40000000 0x00004000  {; RW data
   * (+RW +ZI)
  }
  RW_RAM1 0x80000000 UNINIT 0x00004000  {
    2.o (+ZI)
  }
}


Цитата(vesago @ Apr 5 2006, 12:59) *
Вообще реалвью показался мне недружественным. С указателями требует крайней точности. unsigned char *blabla = 0x80000 не пройдет. Обязательно надо поставить unsigned char *blabla = (unsigned long*)0x80000. В функцию передаю аргумент, внутри функции он каким-то макаром передает левое значение. Я и volatile писал - не помогает. Короче не пойму - чего его народ хвалит?

И правильно, что ругается - прямое присвоение указателю числового значения недопустимо.
А ставить надо не unsigned char *blabla = (unsigned long*)0x80000, а unsigned char *blabla = (unsigned char*)0x80000.
Просто с типами надо работать аккуратнее.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:09
Рейтинг@Mail.ru


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