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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Все о ARM GCC4.3, Linker, ASM, C/C++, Windows/Linux.
Vitaliy_ARM
сообщение Dec 9 2008, 10:12
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Все больше прощаюсь с IAR.

Разбираюсь с компановщиком. Документация на него не впечатлила 07.gif . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
oll
сообщение Dec 9 2008, 16:28
Сообщение #2


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

Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463



Цитата(Vitaliy_ARM @ Dec 9 2008, 16:12) *
Все больше прощаюсь с IAR.

Разбираюсь с компановщиком. Документация на него не впечатлила 07.gif . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма?


может тут? http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 9 2008, 16:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vitaliy_ARM @ Dec 9 2008, 13:12) *
Все больше прощаюсь с IAR.

Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 9 2008, 18:35
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Dec 9 2008, 19:38) *
Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый....
А если это настроечные константы прибора хранящиеся в флеш и требуется возможность
их изменения/записи с помощью спец процедуры ? Как обойтись без абсолютных адресов ?
Как сделать кратность записи странице флеш ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 9 2008, 18:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Dec 9 2008, 21:35) *
А если это настроечные константы прибора хранящиеся в флеш и требуется возможность
их изменения/записи с помощью спец процедуры ? Как обойтись без абсолютных адресов ?
Как сделать кратность записи странице флеш ?

Если у Вас флеши слишком много, что Вы можете отдать целый сегмент, то и отдайте его в конце. И пишите и пользуйте на здоровье. А если нет, то по любому считать->отпатчитть-стереть->записать придется. Процедура занимающаяся этим изнутри и так знает где что лежит. А наружные патчеры и по сигнатуре найдут без проблем. А втыкать некий кусок в фиксированное место это значит платить кусками неиспользуемого Flash, ибо линкер не сможет идально заполнить зачем-то созданые по Вашей прихоти пустоты.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 9 2008, 19:28
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Dec 9 2008, 21:47) *
Если у Вас флеши слишком много, что Вы можете отдать целый сегмент, то и отдайте его в конце.
Флеши много не бывает.
Ну конечно в конце, но это не всегда конец флеши, иногда
это конец некоторого логического куска, ну там всякие бутлоадеры итд...
Цитата
А если нет, то по любому считать->отпатчитть-стереть->записать придется. Процедура занимающаяся этим изнутри и так знает где что лежит. А наружные патчеры и по сигнатуре найдут без проблем.
А вот это очень может быть ненадежно..., там ведь с кодом может пересекаться и при
аппаратном сбое умрет все...
Цитата
А втыкать некий кусок в фиксированное место это значит платить кусками неиспользуемого Flash, ибо линкер не сможет идально заполнить зачем-то созданые по Вашей прихоти пустоты.
Это плата за надежность, поэтому ИМХО, фиксированное размещение данных(для отделения
от всего остального) может быть очень даже оправданно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 9 2008, 22:57
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Dec 9 2008, 22:28) *
Флеши много не бывает.

Тогда зачем спрашивали о выравниванию на границу..
Цитата
А вот это очень может быть ненадежно..., там ведь с кодом может пересекаться и при
аппаратном сбое умрет все...

Вы уж как-то определитесь, либо отдельный сегмент,либо будет с чем-то пересекаться.
smile.gif. Но в любом случае нет ни малейшей необходимости заставлять линкер размещать Ваши данные по пришедшему Вам в голову произвольному адресу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 10 2008, 06:39
Сообщение #8


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



не надо думать узкими категориями только своей задачи. мне for ex. часто приходится размещать код и данные в определенных адресах - иначе таки да получится не приложение, а какая-то каша.
корректно это делается выделением отдельной секции (в моем случае .bootloader) и ее описанием в линкер-файле - имеем определенную гарантию, так как при налезании границ сегментов ругаться будет линкер, что много лучше вылетающего в неопределенный момент приложения
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 10 2008, 08:38
Сообщение #9


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Harbour @ Dec 10 2008, 08:39) *
корректно это делается выделением отдельной секции (в моем случае .bootloader) и ее описанием в линкер-файле - имеем определенную гарантию, так как при налезании границ сегментов ругаться будет линкер, что много лучше вылетающего в неопределенный момент приложения

+10
Еще дополнительно полезно при старте изделия "об-assert-ить" нужные адреса/смещения - у меня окончательную сборку проекта проводят коллеги и иногда ухитряются криво это сделать даже по предоставленным готовым скриптам.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 10 2008, 10:56
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Harbour @ Dec 10 2008, 09:39) *
не надо думать узкими категориями только своей задачи

Это Вы кому?
Цитата
корректно это делается...

Когда это НУЖНО, типа bootloader-a, то это несомненнно ДЕЛАЕТСЯ. Вопрос в том, что этого незачем делать без всякой на то надобности, как в заявленном случае.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Dec 10 2008, 13:43
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Dec 9 2008, 19:38) *
Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый....


В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах. И то и то должно иметь доступ к этим ячейкам. Прощание с "дурной привычкой" не позволить сделать программу и бутлодер независымыми sad.gif .

Сообщение отредактировал Vitaliy_ARM - Dec 10 2008, 13:44


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 10 2008, 13:53
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vitaliy_ARM @ Dec 10 2008, 16:43) *
Прощание с "дурной привычкой" не позволить сделать программу и бутлодер независымыми sad.gif .

Примерно в аналогичных случаях в фиксированном месте boot (сразу после векторов) размещаю УКАЗАТЕЛЬ на находящийся в произвольном месте блок общих данных. Boot, естественно, линкуется в конкретное место, но это единственная по любому необходимая привязка к адресам - сущности более не плодятся.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Dec 10 2008, 14:10
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Dec 10 2008, 16:53) *
Примерно в аналогичных случаях в фиксированном месте boot (сразу после векторов) размещаю УКАЗАТЕЛЬ на находящийся в произвольном месте блок общих данных. Boot, естественно, линкуется в конкретное место, но это единственная по любому необходимая привязка к адресам - сущности более не плодятся.


Ага, а как тогда с ай пи адресами и маками? Вместе с загрузчиком зашиваются адреса по умолчанию. Программа должна перешивать и то и другое. А загрузчик должен это использовать, так как абгрейд должен осуществляться по одним и тем же адресам.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 10 2008, 14:15
Сообщение #14


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



вот примерчик из моего проекта под atmel :

scripts.ld:
.....
MEMORY
{
FLASH (rxx) : ORIGIN = 0x00100000, LENGTH = 0x00005F80
BOARD ® : ORIGIN = 0x00105F80, LENGTH = 0x80
DATA (rw) : ORIGIN = 0x00200000, LENGTH = 0x00007000
STACK (rw) : ORIGIN = 0x00207000, LENGTH = 0x00001000
}
.....
.board : {

*(.board)

} > BOARD

. = ALIGN(4);

_etext = . ;
PROVIDE (etext = .);
......

Использование, например серийный номер устройства, файл sn.c:

....
u32 sn __attribute__ ((section(".board"))) = 12345678;
....

отдавать под обновляемые данные придется целый сектор или страничку, в зависимости от того как стирается флеш
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 10 2008, 14:16
Сообщение #15


Гуру
******

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



Цитата(Vitaliy_ARM @ Dec 10 2008, 15:43) *
В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах.
Как-то так. Выделяете регион памяти(CONFIG), потом складываете в него нужные сегменты (*.config)
Код
/* memory layout */
MEMORY
{
  REMAP (rx)   : ORIGIN = 0x00000000, LENGTH = 0x00000040
  ROM (rx)     : ORIGIN = 0x00000000, LENGTH = 128K - 8K
  CONFIG (rx)     : ORIGIN = 128K - 8K, LENGTH = 8K
  RAM (rw)     : ORIGIN = 0x40000000, LENGTH = 16K
}

SECTIONS
{
.............
  .config :
  {
    KEEP(*(.config))
  } > CONFIG
...........

Harbour: стоило подождать сутки, чтобы выложить одновременно smile.gif Но у меня оформлено тегами [ code ], [ /code ] biggrin.gif


--------------------
На любой вопрос даю любой ответ
"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

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

 


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


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