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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите по АРМ7 - Keil
ivevg
сообщение Jul 3 2007, 18:19
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 22-06-04
Пользователь №: 125



Как в Keile записать таблицу во Flash?

пишу
volatile char const massiv[512] __at(0x30000)={.....};

При программировании не шьется.
Видимо как-то надо настраивать параметры линкера.
Как сделать?
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 4 2007, 03:14
Сообщение #2


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

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



как-то не вяжется volatile и const в применении к одной переменной...
а если так

Код
const massiv[512] = {.....};


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


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Получится массив INTов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 4 2007, 07:10
Сообщение #4


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

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



я char пропустил....


const char massiv[512] = {.....};


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
ivevg
сообщение Jul 4 2007, 09:57
Сообщение #5





Группа: Участник
Сообщений: 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

и ничего больше.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 4 2007, 11:25
Сообщение #6


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Хм. а может нужно 0x00130000 или где там у вашего камня флеш. Вобщем абсолютный адрес.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
VAI
сообщение Jul 4 2007, 11:33
Сообщение #7


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

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



А зачем для массива абсолютный адрес?
В map-файле посмотрите, где массив располагается..


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 4 2007, 12:07
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



ivevg, укажите какой камень шьёте.

И ещё прикрепите XCL-файл сюда

Сообщение отредактировал GetSmart - Jul 4 2007, 12:08


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 4 2007, 15:23
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 4 2007, 16:03
Сообщение #10


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Сергей Борщ)
А смысл?
Смысл в том, что отладчику по барабану где находится флэш и сколько её там. А есть ли по тому адресу флэш узнает только программатор когда будет шить. Мне что-то очень кажется что ситуация именно такая. Короче, можно скомпилить прогу для LPC2138 (512KB flash) и в отладчике будет работать идеально. А когда попытаться её прошить в LPC2132, у программатора желание куда-то улетучится.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ivevg
сообщение Jul 4 2007, 16:29
Сообщение #11





Группа: Участник
Сообщений: 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 говорю!
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 4 2007, 21:54
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 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 и в симуляторе?
Go to the top of the page
 
+Quote Post
iit
сообщение Jul 5 2007, 03:39
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 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, у отладчика и у флэш лоадера. Желательно чтобы они совпадали.
Не плохо было-бы дать выдержку из мап файла.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 5 2007, 05:44
Сообщение #14


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



стоп. Погодите-ка а компилер вы какой используете? Если реалвью, то ключевого слова __at там нет просто. Это относится к компилеру CARM.
А скаттеры - это как раз rv. Только там нельзя задавать адреса переменным, а можно только распихивать их по сегментам с помощью прагм, а уже сегментами управлять в скаттер-файле

Вполне возможно что ваш массив удален как unused variable, если вы к нему напрямую нигде не обращаетесь.

Да и еще. Вы абсолютно уверены, что массив не шьется? Что-то уж очень странно... массив-отдельно, прошивка -отдельно.

И еще вопрос.. а вы ремап не делаете случаем?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
ivevg
сообщение Jul 5 2007, 06:07
Сообщение #15





Группа: Участник
Сообщений: 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>
Масиив в мап-файле присутствует
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 14:24
Рейтинг@Mail.ru


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