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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Yagarto Eclipse+GCC4.2.1/4.2.2 - в хидерах компилятся все функции!, Это такая "особенность" или я ... ?
Сергей Борщ
сообщение Jan 13 2008, 12:12
Сообщение #16


Гуру
******

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



Цитата(injen-d @ Jan 13 2008, 13:47) *
Выходные файлы пусты, а объектные созданы правильно.
Люкс! Теперь осталось в вашем скрипте сделать KEEP() для сегмента, в котором располагаются вектора. Т.е. надо вектора (в crt.s) поместить в отдельную секцию, обозвав ее, скажем, vectors:
Код
/* GNU assembler controls  */
.vectors                                    /* all assembler code that follows will go into .vectors section     */
.arm                                    /* compile for 32-bit ARM instruction set                         */
.align                                    /* align section on 32-bit boundary                                 */

/* ============================================================ */
/*                         VECTOR TABLE                              */
/*                                                                */
/*    Must be located in FLASH at address 0x00000000                */
/*                                                                */
/*    Easy to do if this file crt.s is first in the list             */
/*    for the linker step in the makefile, e.g.                    */
/*                                                                */
/*        $(LD) $(LFLAGS) -o main.out  crt.o main.o                */
/*                                                                */
/* ============================================================ */

_vec_reset:        b           _init_reset                /* RESET vector - must be at 0x00000000    */
_vec_undef:        b           AT91F_Undef_Handler        /* Undefined Instruction vector            */
_vec_swi:        b           _vec_swi                /* Software Interrupt vector            */
_vec_pabt:        b           AT91F_Pabt_Handler        /* Prefetch abort vector                */
_vec_dabt:        b           AT91F_Dabt_Handler        /* Data abort vector                    */
_vec_rsv:        nop                                 /* Reserved vector                        */
_vec_irq:        b           AT91F_Irq_Handler        /* Interrupt Request (IRQ) vector        */
_vec_fiq:        b            AT91F_Default_FIQ_handler    /*Fast interrupt request (FIQ) vector    */

.text     /* place remaining code to .text section */
и в скрипте линкера сделать
Код
SECTIONS
{
    . = 0;                                /* set location counter to address zero  */
    
    .text :                                /* collect all sections that should go into FLASH after startup  */
    {
        KEEP(*(.vectors))
        *(.text)                        /* all .text sections (code)  */



Цитата(injen-d @ Jan 13 2008, 13:47) *
Вобще-то, насколько я понял из документации (в школе учил французский biggrin.gif ), -Wl, - означает "передать следующий флаг линкеру".
Да, вы поняли правильно. Так линкер должен эту -Wl получить, т.е. она должна быть передана gcc при линковке (в цели main.out), а у вас ее получал компилятор в целях *.o


--------------------
На любой вопрос даю любой ответ
"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
injen-d
сообщение Jan 13 2008, 12:44
Сообщение #17


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Добавил:
Код
. = 0x0000000;
         .text : { KEEP(*crt.o (.text)) }>CODE =0
         .text :
         ...
(скрипт уже не тот, что в представленном проэкте)
О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! 08.gif
Даже из созданной библиотеки libicpsr.a линкуется только используемая функция, хотя я ее (библиотеку) сделал из одного файла!
Истина восторжествовала!
Огромное спасибо zltigo, но особенное вам, Сергей!
ЗЫ: был бы в Риге - поставил бы пиво и, возможно даже, расцеловал бы от счастья! biggrin.gif


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 13 2008, 19:03
Сообщение #18


Гуру
******

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



Цитата(injen-d @ Jan 13 2008, 14:44) *
О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! 08.gif
ЗдОрово. Когда будете переходить на С++, не забудьте сделать KEEP() для секций конструкторов и деструкторов статических объектов *(ctors.*) и *(dtors.*). Вы можете уже сейчас добавить эти строчки в скрипт линкера - пока конструкторов и деструкторов нет, они ни на что влиять не будут. Зато потом можно будет избежать лишней головной боли.


--------------------
На любой вопрос даю любой ответ
"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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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