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

 
 
> скрипт Linkera
sergey sva
сообщение Jan 24 2009, 17:43
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Помогите разобраться с скриптами для linkera. Yagarto eclips at91sam7s256
После компиляции, создаются два объектных файла crt.o main.o сделал самый простейший скрипт,который должен
разместить секции text в ram и data в flash. После того как проходит компиляция компоновка, копирование получаю файл hex,
при попытки его загрузить с помощью h jtag выходит ошибка что память ухотит за пределы, пробовал адреса ставить 0ч0 и 0ч100000 такаже
проблема. Подозреваю что ошибка в скрипте.
CODE

OUTPUT_FORMAT("elf32-littlearm") /* формат памяти. прямой порядок байт (Little-endian). */
OUTPUT_ARCH(arm) /* архитектура АРМ */

_vec_reset = 0x0;

_stack_end = 0x20FA00; /* конец стека (верх стека) */


ENTRY(_vec_reset) /* вектор сброса */

/* Память микроконтроллера AT91SAM7S256 */
MEMORY
{
flash (rx) : ORIGIN = 0x100000, LENGTH = 256K /* FLASH EPROM */
ram (rw) : ORIGIN = 0x200000, LENGTH = 64K /* static RAM area */
}




SECTIONS
{

.text : { *crt.o (.text) }>flash
. = ALIGN(4);



.data : { *crt.o (.data) }> ram
. = ALIGN(4);



.bss : { *(.bss) *(COMMON) }>ram
. = ALIGN(4);


}


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение May 3 2009, 12:23
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Всем спасибо.

Отключил -mshort-calls проблема ушла. На том и остановился, поскольку почти влез в 60%  флеша
Go to the top of the page
 
+Quote Post
SysRq
сообщение May 3 2009, 13:20
Сообщение #3


Чайник, 1 литр
****

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



Цитата(_Pasha @ May 3 2009, 16:23) *
Отключил -mshort-calls проблема ушла. На том и остановился...
Я аналогично сделал (m128 забита на 80%) :(
Но чуть позднее в TODO добавил посмотрть эффект ключей оптимизации:
Цитата
-freorder-blocks
-freorder-blocks-and-partition
-freorder-functions
-ftoplevel-reorder
однако пока так и не добрался проверить, помогут ли они сохранить отсутствие jmp.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 7 2009, 13:04
Сообщение #4


Знающий
****

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



Можно ли как-нибудь создать один регион памяти из двух кусков,
например что-то вроде:

Код
MFlash512 (rx)     : (ORIGIN = 0x20000, LENGTH = 0x1000) OR (ORIGIN = 0x40000, LENGTH = 0x1000)

help.gif????


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 10 2009, 10:52
Сообщение #5


Знающий
****

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



Цитата(Vitaliy_ARM @ Sep 7 2009, 17:04) *
Можно ли как-нибудь создать один регион памяти из двух кусков,
например что-то вроде:

Код
MFlash512 (rx)     : (ORIGIN = 0x20000, LENGTH = 0x1000) OR (ORIGIN = 0x40000, LENGTH = 0x1000)

help.gif????


Написал этот вопрос в поддержку. Посмотрим, что ответят.

Получил ответ smile.gif
Цитата
Hi,

You just need to change ".boot" to ".text" in your linker script.

Full details on linker scripts can be found in the documentation at:
Help->Help Contents
Code Red Technologies Documentation
Tools Documentation
GNU Linker
Section 3 "Linker Scripts"

Best regards,


Попробовал поменять:

Код
    .text : /* .boot*/
    {
        KEEP(*(.isr_vector));
        KEEP(*(.crp_key));
        KEEP(*(.macaddr));
        KEEP(*(.ipaddr));
            
    } > BOOTMEM

    .text :
    {
        *(.text*)
        *(.rodata*)
    } > MFlash512


Не работает.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Sep 14 2009, 08:17
Сообщение #6


Знающий
****

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



После длительной переписки со службой поддержки выяснилось, что надо было делать совсем подругому, нежели в IAR5.x.
Код
MEMORY
{
  /* Define each memory region */
  CODE_MEM (rx)       : ORIGIN = 0x0,         LENGTH = 0x00003000
  MAC_IP_MEM(rx)    : ORIGIN = 0x00003000,     LENGTH = 0x00002000
  Ram32 (rwx)         : ORIGIN = 0x40000000,     LENGTH = 0x8000     /* 32k */
  RAM_ETH_16 (rwx)     : ORIGIN = 0x7fe00000,     LENGTH = 0x4000     /* 16k */
  RAM_USB_8 (rwx)     : ORIGIN = 0x7fd00000,     LENGTH = 0x2000     /* 8k */
  RAM_RTC_2 (rwx)     : ORIGIN = 0xe0084000,     LENGTH = 0x800     /* 2k */
}

.text :
{
     KEEP(*(.isr_vector));   /*вектора прерываний*/
     . = 0x000001FC;         /*смещение указателя на адрес CRP*/
    KEEP(*(.crp_key));      /*секция CRP*/
    *(.text*)                     /*код программы*/
    *(.rodata*)                 /*константы*/
} > CODE_MEM

.MacIpMem :   /*. = 0x00003000;*/
{
  
    KEEP(*(.macaddr))      /*размещаем по адресу 0x00003000*/
        . = 0x00001000;          /*переход на адрес 0x00001000;*/
        KEEP(*(.ipaddr))    /*размещаем по адресу 0x00004000*/
} > MAC_IP_MEM


Вот так почти правильно размещать свой код в разные областя памяти.
Теперь про почти:
Инициализируемая константа находится в исходнике, задается следующим образом:
const BYTE OurMacAddr[6] __attribute__ ((section(".macaddr"))) = {0x00,0x01,0x02,0x03,0x04,0x06};
Инициализируется мусором!!! Почему???


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 14 2009, 08:54
Сообщение #7


Гуру
******

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



Цитата(Vitaliy_ARM @ Sep 14 2009, 11:17) *
После длительной переписки со службой поддержки выяснилось, что надо было делать совсем подругому, нежели в IAR5.x.
Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос.

По поводу мусора - надо смотреть листинг и .map


--------------------
На любой вопрос даю любой ответ
"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
Vitaliy_ARM
сообщение Sep 14 2009, 09:42
Сообщение #8


Знающий
****

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



Цитата(Сергей Борщ @ Sep 14 2009, 12:54) *
Вы конечно извините, но то, что вы показали и исходный ваш вопрос "Можно ли как-нибудь создать один регион памяти из двух кусков" имеют мало общего. Ибо вопрос подразумевает, что задаются два региона и одно описание выходной секции, а линкер впихивает сколько влезет в первый регион и остаток во второй. Вам же нужно было разместить секцию по конкретному адресу, а это совсем другой вопрос.
По поводу мусора - надо смотреть листинг и .map


Как я понял, вектора прерываний и код должны сидеть в одной секции. У меня в проекте Iar, секции располагались следующим образом:
- Вектора прерываний
- CRP ключ
- Основной код
- MAC адрес
- IP адрес
В IAR каждая секция у меня сидела в своем регионе памяти. Между векторами и основным кодом сидела секция CRP. Но в GNU Linker вроде бы как нельзя разделять их по разным регионам. Поэтому я решил что можно выйти из этой ситуации, создав секцию .text из двух кусков (поэтому так и задал этот вопрос. laughing.gif, про операцию = ADDR. не догадывался ). Один кусок расположить в свободной области между векторами и CRP, а второй после CRP. Однако так тут так тоже нельзя делать.
А надо было выделить один регион памяти и напихать туда по очереди все секции, а адреса смещать при помощи операции .= ADDR.
Собственно как тут и сделано:
Код
    .text :
    {
    KEEP(*(.isr_vector));
    . = 0x000001FC;
        KEEP(*(.crp_key));
        *(.text*)
        *(.rodata*)
    } > CODE_MEM


Цитата(Сергей Борщ @ Sep 14 2009, 12:54) *
По поводу мусора - надо смотреть листинг и .map

Про map смотреть сюда?:
Код
.MacIpMem       0x00003000     0x1004
*(.macaddr)
.macaddr       0x00003000        0x6 ./src/Emac.o
                0x00003000                OurMacAddr

Как можно листинг посмотреть?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   скрипт Linkera   Jan 24 2009, 17:43
- - Сергей Борщ   Цитата(sergey sva @ Jan 24 2009, 19:43) П...   Jan 24 2009, 19:23
- - sergey sva   фот файл map, не чего неправильного не вижу, конеч...   Jan 25 2009, 17:23
- - alx2   Цитата(sergey sva @ Jan 24 2009, 22:43) п...   Jan 25 2009, 18:19
- - sergey sva   ЦитатаПрямо так и выходит? Как это "память ух...   Jan 25 2009, 18:35
|- - alx2   Цитата(sergey sva @ Jan 25 2009, 23:35) О...   Jan 26 2009, 10:37
|- - Vitaliy_ARM   Как здесь разместить вектора перерывания по указан...   Jan 27 2009, 13:26
|- - alx2   Цитата(Vitaliy_ARM @ Jan 27 2009, 18:26) ...   Jan 28 2009, 10:45
|- - Vitaliy_ARM   Цитата(alx2 @ Jan 28 2009, 13:45) КодSECT...   Jan 28 2009, 15:04
|- - Vitaliy_ARM   Задам еще, наверное глупый вопрос. Может ли кто-ни...   Jan 29 2009, 10:52
|- - alx2   Цитата(Vitaliy_ARM @ Jan 28 2009, 20:04) ...   Jan 29 2009, 14:03
- - sergey sva   Уже какой день разбираюсь, но все еще не могу полу...   Jan 30 2009, 17:16
|- - amw   Цитата(sergey sva @ Jan 30 2009, 19:16) У...   Jan 30 2009, 18:19
- - sergey sva   Помогло хотел попробовать запустить отладчик ...   Jan 30 2009, 19:23
|- - Vitaliy_ARM   Цитата(sergey sva @ Jan 30 2009, 22:23) П...   Feb 2 2009, 08:28
- - sergey sva   Пробую запустить openocd , не запускается пишет ош...   Feb 2 2009, 21:21
|- - gotty   судя по всему Вы используете довольно свежую верси...   Feb 3 2009, 08:23
||- - sergey sva   Цитата(gotty @ Feb 3 2009, 11:23) судя по...   Feb 3 2009, 13:52
||- - gotty   Цитата(sergey sva @ Feb 3 2009, 15:52) со...   Feb 3 2009, 14:02
||- - sergey sva   Цитата(gotty @ Feb 3 2009, 17:02) Ответ с...   Feb 3 2009, 14:07
||- - gotty   Цитата(sergey sva @ Feb 3 2009, 16:07) я ...   Feb 3 2009, 14:21
||- - sergey sva   Цитата(gotty @ Feb 3 2009, 17:21) Всё вер...   Feb 3 2009, 15:33
||- - gotty   Цитата(sergey sva @ Feb 3 2009, 17:33) Ус...   Feb 3 2009, 15:47
||- - sergey sva   Цитата(gotty @ Feb 3 2009, 18:47) А чего ...   Feb 3 2009, 16:13
||- - sergey sva   ошибки были это сам не правильно запуска(повторно)...   Feb 3 2009, 19:36
||- - Vitaliy_ARM   Цитата(sergey sva @ Feb 3 2009, 22:36) од...   Feb 4 2009, 10:43
||- - amw   Цитата(Vitaliy_ARM @ Feb 4 2009, 12:43) А...   Feb 4 2009, 12:13
||- - Vitaliy_ARM   Цитата(amw @ Feb 4 2009, 15:13) Хм. Я тож...   Feb 4 2009, 12:54
||- - sergey sva   Цитата(Vitaliy_ARM @ Feb 4 2009, 15:54) П...   Feb 4 2009, 13:26
|||- - Vitaliy_ARM   Цитата(sergey sva @ Feb 4 2009, 16:26) по...   Feb 4 2009, 13:36
||- - amw   Цитата(Vitaliy_ARM @ Feb 4 2009, 14:54) П...   Feb 4 2009, 19:11
||- - Vitaliy_ARM   Цитата(amw @ Feb 4 2009, 22:11) 0xe01fc04...   Feb 5 2009, 08:51
||- - Vitaliy_ARM   Заметил такую штуку. Когда использовал GDB сервер...   Feb 6 2009, 12:24
|- - alx2   Цитата(sergey sva @ Feb 3 2009, 02:21) Во...   Feb 3 2009, 13:03
- - sergey sva   Еще есть одна непонятная ситуация, может что подск...   Feb 3 2009, 20:38
|- - gotty   Цитата(sergey sva @ Feb 3 2009, 22:38) Ещ...   Feb 4 2009, 14:32
|- - sergey sva   Цитата(gotty @ Feb 4 2009, 17:32) Возможн...   Feb 4 2009, 15:04
- - sergey sva   У меня обратная проблема,пока wigller подключен пр...   Feb 4 2009, 12:13
|- - alx2   Цитата(sergey sva @ Feb 4 2009, 17:13) но...   Feb 5 2009, 10:48
|- - sergey sva   Цитата(alx2 @ Feb 5 2009, 13:48) По повод...   Feb 5 2009, 17:52
|- - amw   Цитата(sergey sva @ Feb 5 2009, 19:52) По...   Feb 5 2009, 18:58
- - sergey sva   компиляция линкование и ассемблирование проходит б...   Feb 4 2009, 16:29
- - sergey sva   Спасибо теперь все работает. причина была : секци...   Feb 5 2009, 19:43
|- - amw   Цитата(sergey sva @ Feb 5 2009, 21:43) Сп...   Feb 5 2009, 19:48
- - _Pasha   Подскажите, уважаемые, как бороться с такой чепухо...   Apr 30 2009, 08:54
|- - amw   Цитата(_Pasha @ Apr 30 2009, 11:54) Подск...   Apr 30 2009, 15:33
|- - Сергей Борщ   Цитата(_Pasha @ Apr 30 2009, 11:54) Пишу ...   Apr 30 2009, 20:33
|- - Vitaliy_ARM   После разговора со службой поддержики. И после тог...   Sep 15 2009, 11:16
- - alx2   Цитата(Vitaliy_ARM @ Sep 14 2009, 13:17) ...   Sep 17 2009, 13:14
- - Vitaliy_ARM   Цитата(alx2 @ Sep 17 2009, 17:14) Наверно...   Sep 21 2009, 08:17


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:25
Рейтинг@Mail.ru


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