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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Scatter файл для Кeil., Как правильно и лучше сделать..
M@RS
сообщение Jun 30 2010, 07:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



В общем проблема как мир старая. Хочу часть флеши SAM7S использовать для хранения настроек. В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант. Штудируя форум по примерам в стандартный скаттер добавил свой регион.
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00100000 0x00040000  { ; load region
  ER_IROM1 0x00100000  0x0003F800{      ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IROM7 0x0013F800  0x00000800{      ; load address = execution address
   flash.o(+RO)
  }
  RW_IRAM1 0x00200000 0x00010000  { ; RW data
   * (+RW +ZI)
  }
}

В результате скомпилировал проект, смотрю мап файл. Мои константы лежат в нужном месте.

Код

Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000004, Max: 0x00000800, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x0013f800   0x00000003   Data   RO          516    .constdata          flash.o


    Execution Region RW_IRAM1 (Base: 0x00200000, Size: 0x00001320, Max: 0x00010000, ABSOLUTE)


Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 08:46
Сообщение #2


Гуру
******

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



Цитата(M@RS @ Jun 30 2010, 11:57) *
В общем выделяю в конце регион RW_IROM7 и засовываю туда все, что будет в файле flash.c (по идеи в этом файле будет еше функция для записи в флеш сегмента), а пока там есть массив констант.

Замечательно, только как вы собираетесь потом с этой кашей работать? ИМХО, гораздо удобнее просто скрыть от линкера участок флеш, и работать с ним через структуры и указатели.

Цитата(M@RS @ Jun 30 2010, 11:57) *
Загоняю в отладчик через JetLink 5 и вижу что по данному адресу во флеши лежат одни FF. Вопрос как-то можно заставить линкер чтобы по этому адресу эти константы были сразу инициализированы?

А какие константы объявлены в flash.c? Судя по map-файлу, 3 байта должно быть.
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 08:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Можно и так, но в принципе скажем для отладки было бы неплохо чтобы константы там уже лежали...
А вобще так и будет как вы писали, там вместо массива будут структуры данных. На этом примере пока учусь. В общем хотелось бы их там увидеть во флеши.

Сами константы в файле flash.c.
Код
const unsigned char Mass[3] = {0x00, 0x01, 0x02};


Сообщение отредактировал M@RS - Jun 30 2010, 08:58
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 09:15
Сообщение #4


Гуру
******

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



Тогда так:
Код
RW_IROM7 0x0013F800  FIXED 0x00000800

Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 09:30
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Спасибо, сделал но все равно в дебагере по адресу 0x0013f88c лежат одни FF. Может дебагер врет?
После пересоздания проекта константы сместились на новый адрес а линкер добавил код функции записи в флаш. Но пока это не важно.
Код
Execution Region RW_IROM7 (Base: 0x0013f800, Size: 0x00000090, Max: 0x00000800, ABSOLUTE, FIXED)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x0013f800   0x0000008c   Code   RO          516    .text               flash.o
    0x0013f88c   0x00000003   Data   RO          517    .constdata          flash.o


Сообщение отредактировал M@RS - Jun 30 2010, 09:32
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 09:35
Сообщение #6


Гуру
******

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



Цитата(M@RS @ Jun 30 2010, 13:30) *
Спасибо, сделал но все равно в дебагере по адресу 0x0013f88c лежат одни FF. Может дебагер врет?

А размер бинарника вырос до 0x3f88c+?
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 10:31
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Бинарник получился всего 64к.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 10:41
Сообщение #8


Гуру
******

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



Цитата(M@RS @ Jun 30 2010, 14:31) *
Бинарник получился всего 64к.

Ровно?
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 10:49
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Ну если винда не врет то:

Размер: 63,9 КБ (65 520 байт)
На диске : 64,0 КБ (65 536 байт)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 11:13
Сообщение #10


Гуру
******

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



Подозрительно похоже на ограничение по размеру кода. Полностью map-файл приведите.
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 11:16
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Вот.
Прикрепленные файлы
Прикрепленный файл  test2.rar ( 6.9 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 30 2010, 11:40
Сообщение #12


Гуру
******

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



Цитата(aaarrr @ Jun 30 2010, 15:13) *
Подозрительно похоже на ограничение по размеру кода.

Теперь подозрение практически переросло в уверенность.
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jun 30 2010, 12:24
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



Блин, так вроде лечил Keil, давно правда было может лекарство не подействовало...
Как можно ограничение снять?

Сообщение отредактировал M@RS - Jun 30 2010, 12:50
Go to the top of the page
 
+Quote Post
M@RS
сообщение Jul 1 2010, 10:11
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 27-05-05
Из: г. Киев
Пользователь №: 5 468



aaarrr спасибо за помощь. Сегодня с утра на свежую голову обновил версию и "подшаманил" Кеil. Дебаггер показал константы на нужном месте по указному адресу.
Вопрос еще, а можно линкер заставить ложить в мой сегмент только константы, а тело функции в общий для кода и констант?

Сообщение отредактировал M@RS - Jul 1 2010, 10:16
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 1 2010, 10:28
Сообщение #15


Гуру
******

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



Цитата(M@RS @ Jul 1 2010, 14:11) *
Вопрос еще, а можно линкер заставить ложить в мой сегмент только константы, а тело функции в общий для кода и констант?

Можно:
Код
*************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00100000 0x00040000  {; load region
  ER_IROM1 0x00100000  0x0003F800{     ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IROM7 0x0013F800  0x00000800{     ; load address = execution address
   flash.o (ro_vars)
  }
  RW_IRAM1 0x00200000 0x00010000  {; RW data
   * (+RW +ZI)
  }
}


Код
#pragma arm section rodata = "ro_vars"
const int bla_bla;
#pragma arm section rodata

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:31
Рейтинг@Mail.ru


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