|
Помогите по АРМ7 - Keil |
|
|
|
Jul 3 2007, 18:19
|
Группа: Участник
Сообщений: 14
Регистрация: 22-06-04
Пользователь №: 125

|
Как в Keile записать таблицу во Flash?
пишу volatile char const massiv[512] __at(0x30000)={.....};
При программировании не шьется. Видимо как-то надо настраивать параметры линкера. Как сделать?
|
|
|
|
|
Jul 4 2007, 03:14
|

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

|
как-то не вяжется volatile и const в применении к одной переменной... а если так Код const massiv[512] = {.....};
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
|
Jul 4 2007, 09:57
|
Группа: Участник
Сообщений: 14
Регистрация: 22-06-04
Пользователь №: 125

|
Цитата(VAI @ Jul 4 2007, 11:10)  я char пропустил.... const char massiv[512] = {.....}; Дело не в этом. Все компилируется и под симулятором работает, а при отладке U-Link'om массив не ложится во flash. В IARе ,кстати, все работает. Надо, видимо, правильно написать Scatter-файл. В Хелпе по этому поводу написано: // Locate Variables to Specific Addresses //Using the __at macro that is defined in the header file absacc.h allows you to locate variables to absolute //addresses as shown below: C Example: #include <absacc.h> const char MyText[] __at (0x1F00) = "TEXT AT ADDRESS 0x1F00"; int x __at (0x40003000); // variable at address 0x40003000 и ничего больше.
|
|
|
|
|
Jul 4 2007, 15:23
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(GetSmart @ Jul 4 2007, 15:07)  И ещё прикрепите XCL-файл сюда А смысл? Цитата(ivevg @ Jul 4 2007, 12:57)  В IARе ,кстати, все работает. Надо растить местных спецов по кейлу.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 4 2007, 16:29
|
Группа: Участник
Сообщений: 14
Регистрация: 22-06-04
Пользователь №: 125

|
Цитата(VAI @ Jul 4 2007, 15:33)  А зачем для массива абсолютный адрес? В map-файле посмотрите, где массив располагается.. Адрес затем, чтобы потом IAPом переписать таблицу, если понадобится. Кроме того, если не указывать абсолютный адрес, то const все равно располагается в ОЗУ. Цитата(GetSmart @ Jul 4 2007, 16:07)  ivevg, укажите какой камень шьёте.
И ещё прикрепите XCL-файл сюда Камень LPC2138 XCL-фаил в ИАРЕ, а я про KEIL говорю!
|
|
|
|
|
Jul 4 2007, 21:54
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(ivevg @ Jul 4 2007, 19:29)  Адрес затем, чтобы потом IAPом переписать таблицу, если понадобится. Кроме того, если не указывать абсолютный адрес, то const все равно располагается в ОЗУ. Совсем не понятно что вы имеете в виду. для доступа из-вне можно посмотреть расположение массива в map файле. Для доступа внутри достаточно просто обратиться к массиву. Так в чем же заключается глубокий смысл фразы "чтобы потом IAPом переписать таблицу". Ну не понимаю я каким боком тут IAR если программа пишется под keil. Цитата Цитата const char massiv[512] =...
Дело не в этом. Все компилируется и под симулятором работает, а при отладке U-Link'om массив не ложится во flash. А почему у меня ложится во флеш и ULink'ом и через RDI и в симуляторе?
|
|
|
|
|
Jul 5 2007, 03:39
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 8-11-04
Из: Томск
Пользователь №: 1 070

|
Цитата(ivevg @ Jul 3 2007, 21:19)  Как в Keile записать таблицу во Flash?
пишу volatile char const massiv[512] __at(0x30000)={.....};
При программировании не шьется. Видимо как-то надо настраивать параметры линкера. Как сделать? Послушайте, то что вам говорят. const char massiv[512]; и без указания абсолютного адреса ляжет во флэш. Scatter файл надо писать, если вы в options for target на закладке Linker укажите путь до Scatter file. Хотя в большинстве случаев этого делать не надо, достаточно правильно выставить галочки на закладке таргет. Проверьте идентичность процессоров на закладке Device, у отладчика и у флэш лоадера. Желательно чтобы они совпадали. Не плохо было-бы дать выдержку из мап файла.
|
|
|
|
|
Jul 5 2007, 06:07
|
Группа: Участник
Сообщений: 14
Регистрация: 22-06-04
Пользователь №: 125

|
Цитата(defunct @ Jul 5 2007, 01:54)  Совсем не понятно что вы имеете в виду. для доступа из-вне можно посмотреть расположение массива в map файле. Для доступа внутри достаточно просто обратиться к массиву.
Так в чем же заключается глубокий смысл фразы "чтобы потом IAPом переписать таблицу". Ну не понимаю я каким боком тут IAR если программа пишется под keil. Дело не в этом. Все компилируется и под симулятором работает, а при отладке U-Link'om массив не ложится во flash. А почему у меня ложится во флеш и ULink'ом и через RDI и в симуляторе? Вы путаете IAR и IAP. Таблицу во Flash нужно изменять. IAP- ин аппликешн программинг Цитата(SpiritDance @ Jul 5 2007, 09:44)  стоп. Погодите-ка а компилер вы какой используете? Если реалвью, то ключевого слова __at там нет просто. Это относится к компилеру CARM. А скаттеры - это как раз rv. Только там нельзя задавать адреса переменным, а можно только распихивать их по сегментам с помощью прагм, а уже сегментами управлять в скаттер-файле
Вполне возможно что ваш массив удален как unused variable, если вы к нему напрямую нигде не обращаетесь.
Да и еще. Вы абсолютно уверены, что массив не шьется? Что-то уж очень странно... массив-отдельно, прошивка -отдельно.
И еще вопрос.. а вы ремап не делаете случаем? __at это не ключевое слово, а макрос в rv. Описан в <absacc.h> Масиив в мап-файле присутствует
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|