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

 
 
> From IAR to GCC
nachinayuschiy
сообщение Oct 2 2009, 06:54
Сообщение #1


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

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Прошу сильно не ругать, так как раздел я вроде бы выбрал правильно.
Все время писал под ARM7 на IAR. Но вот пришлось портировать код под GCC.
В своей программе я использую такие спецификаторы: "__ramfunc", "__arm" и "__irq".
Подскажите как использовать аналогичные спецификаторы в GCC? Если аналогичных спецификаторов нет, то как подменить их действие?

Заранее всем спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
singlskv
сообщение Oct 2 2009, 07:37
Сообщение #2


дятел
*****

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



Цитата(nachinayuschiy @ Oct 2 2009, 10:54) *
В своей программе я использую такие спецификаторы: "__ramfunc", "__arm" и "__irq".
Подскажите как использовать аналогичные спецификаторы в GCC? Если аналогичных спецификаторов нет, то как подменить их действие?

__attribute__((section(".fast")))
__attribute__ ((interrupt ("IRQ")))
__attribute__ ((interrupt ("FIQ")))
итд.

весь список на конкретные типы процов смотрите в документации на gcc
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 2 2009, 08:28
Сообщение #3


Гуру
******

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



Цитата(nachinayuschiy @ Oct 2 2009, 09:54) *
"__arm"
Аналогов нет. Выносить функцию в другой файл, и уже этот файл целиком компилить в режиме arm.


--------------------
На любой вопрос даю любой ответ
"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
nachinayuschiy
сообщение Oct 2 2009, 11:45
Сообщение #4


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

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Нужно будет прочитать документацию именно для gcc под ARM, а то что-то на gcc.gnu.org не могу найти флаги которые нужно передавать компилятору что бы скомпились под thumb или под ARM соответственно. Не подскажите?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 2 2009, 15:33
Сообщение #5


;
******

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



Цитата(nachinayuschiy @ Oct 2 2009, 14:45) *
что-то на gcc.gnu.org не могу найти флаги которые нужно передавать компилятору что бы скомпились под thumb или под ARM соответственно. Не подскажите?

Для начала загляните страница 26, а потом ищите пояснения на странице 155
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Oct 4 2009, 10:00
Сообщение #6


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

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Подскажите по какой причине при линковке возникает данная ошибка? Эти параметры я читал используются что бы неиспользуеммые функции не попадали в выходной файл. В чем ошибка?

Код
GNU ld (GNU Binutils) 2.19.1
arm-elf-ld: unrecognized option '-Wl,--gc-sections'
arm-elf-ld: use the --help option for usage information


ключи
Код
CC      = arm-elf-gcc
LD      = arm-elf-ld -v
AR      = arm-elf-ar
AS      = arm-elf-as
CP      = arm-elf-objcopy
OD        = arm-elf-objdump

CFLAGS  = -I./ -I"." ***некие пути*** -c -fno-common -O3
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections
AFLAGS  = -ahs -mapcs-32
LFLAGS  = -Map main.map -Tdemo_at91sam7_blink_flash.cmd
LFLAGS += -Wl,--gc-sections -Wl,--relax
CPFLAGS = --output-target=binary
ODFLAGS    = -x --syms

OBJECTS = ******* куча обьектных файлов

# make target called by Eclipse (Project -> Clean ...)
clean:
    -rm $(OBJECTS) crt.lst main.lst main.out main.bin main.hex main.map main.dmp

        
#make target called by Eclipse  (Project -> Build Project)
all:  main.out
    @ echo "...copying"
    $(CP) $(CPFLAGS) main.out main.bin
    $(OD) $(ODFLAGS) main.out > main.dmp
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 4 2009, 10:42
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Когда вы пишете "-Wl,какой_то_параметр" - это указание gcc передать параметр "какой_то_параметр" линкеру. Если вы вызываете линкер напрямую, то уберите "-Wl,". А лучше замените строчку
Код
LD      = arm-elf-ld -v

на
Код
LD      = arm-elf-gcc

Тогда gcc сам вызовет линкер.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Oct 4 2009, 11:12
Сообщение #8


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

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Пожалуйста где можно почитать про heap? А то функция malloc постоянно 0 возвращает, как я понимаю нужно что-то в файл линковки дописать только вот что, подскажите пожалуйста.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 4 2009, 11:55
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Для уменьшения размера используйте ключ -Os вместо -O3.
Для того, чтобы заработал malloc(), надо определить в своей программе функцию _sbrk().
Пример можете найти вот здесь.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
nachinayuschiy
сообщение Oct 4 2009, 12:43
Сообщение #10


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

Группа: Свой
Сообщений: 82
Регистрация: 11-09-08
Пользователь №: 40 123



Эта функция есть в libc.a. Её никак задействовать нельзя?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 4 2009, 13:02
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Естественно есть. Иначе бы не линковалось. Но она скорее всего лишь заглушка, и поэтому malloc() возвращает 0.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:57
Рейтинг@Mail.ru


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