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

 
 
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
Leen
сообщение Jul 5 2007, 10:37
Сообщение #16


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Цитата(ivevg @ Jul 5 2007, 17:07) *
Масиив в мап-файле присутствует

А в hex, значит, не присутствует?.. Странно... Создал проект для SAM7 с компилером RVCC, объявил массив как const char array[512] = {0,1,2,3,4,5,6/*и так далее до 0x0F и по новой*/};
Все 0x200 инициализировал на месте, ессно.
Скомпилил, перелил из эльфа в хекс...
Смотрю мапу:
__fplib_config_pureend_doubles 0x001004c0 ARM Code 0 fpinit.o(x$fpl$fpinit)
array 0x001004c8 Data 512 main.o(.constdata)
Region$$Table$$Base 0x001006c8 Number 0 anon$$obj.o(Region$$Table)
Смотрю хекс:
:1004B00010402DE9F3FFFFEB0010A0E3001080E5F2
:1004C0001040BDE81EFF2FE10001020304050607EE
:1004D00008090A0B0C0D0E0F0001020304050607A4
:1004E00008090A0B0C0D0E0F000102030405060794
:1004F00008090A0B0C0D0E0F000102030405060784
|
|тут такая же лабуда по всем вырезанным адресам...
|
:1006A00008090A0B0C0D0E0F0001020304050607D2
:1006B00008090A0B0C0D0E0F0001020304050607C2
:1006C00008090A0B0C0D0E0FD806100000002000C0
:0806D000E804000068011000BD

Для подтверждения прикладываю полностью скомпиленный проект, со всем объектным филе.

ИМХО, единственное, для чего надо абсолютное расположение - это хранение данных на флэше вместо еепрома - чтоб по старице уравнять. Но мне проще еепром прикрутить, если, конечно, тока на него не жалкоsmile.gif А бывало и такоеsmile.gif
Прикрепленные файлы
Прикрепленный файл  abs_acc.zip ( 33.36 килобайт ) Кол-во скачиваний: 40
 
Go to the top of the page
 
+Quote Post
ivevg
сообщение Jul 5 2007, 15:18
Сообщение #17





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



В общем вот чем закончились мои опыты:
В программе пишу const char ttt[...] __at(0x...)={...}

Эта хрень должна писаться по указанному адресу, но не пишется ни в какую.
Решил попробовать на другом процессоре.
Беру плату с LPC2103 включаю - все работает прекрасно, пишется на раз.
Беру другую плату с 2103 - то же самое что и раньше - не пишется.

Разница между платами: первая от Keila (синяя маска, золоченые контакты).
вторая от microem.

Плата с которой начинал - LPC2138 от Olimex.(то же не работает)

В чем фишка - непонятно. Буду разбираться.
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 - 15:58
Рейтинг@Mail.ru


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