Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: From IAR to GCC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
nachinayuschiy
Прошу сильно не ругать, так как раздел я вроде бы выбрал правильно.
Все время писал под ARM7 на IAR. Но вот пришлось портировать код под GCC.
В своей программе я использую такие спецификаторы: "__ramfunc", "__arm" и "__irq".
Подскажите как использовать аналогичные спецификаторы в GCC? Если аналогичных спецификаторов нет, то как подменить их действие?

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

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

весь список на конкретные типы процов смотрите в документации на gcc
Сергей Борщ
Цитата(nachinayuschiy @ Oct 2 2009, 09:54) *
"__arm"
Аналогов нет. Выносить функцию в другой файл, и уже этот файл целиком компилить в режиме arm.
nachinayuschiy
Нужно будет прочитать документацию именно для gcc под ARM, а то что-то на gcc.gnu.org не могу найти флаги которые нужно передавать компилятору что бы скомпились под thumb или под ARM соответственно. Не подскажите?
_Pasha
Цитата(nachinayuschiy @ Oct 2 2009, 14:45) *
что-то на gcc.gnu.org не могу найти флаги которые нужно передавать компилятору что бы скомпились под thumb или под ARM соответственно. Не подскажите?

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

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

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

Тогда gcc сам вызовет линкер.
nachinayuschiy
Пожалуйста где можно почитать про heap? А то функция malloc постоянно 0 возвращает, как я понимаю нужно что-то в файл линковки дописать только вот что, подскажите пожалуйста.
AHTOXA
Для уменьшения размера используйте ключ -Os вместо -O3.
Для того, чтобы заработал malloc(), надо определить в своей программе функцию _sbrk().
Пример можете найти вот здесь.
nachinayuschiy
Эта функция есть в libc.a. Её никак задействовать нельзя?
AHTOXA
Естественно есть. Иначе бы не линковалось. Но она скорее всего лишь заглушка, и поэтому malloc() возвращает 0.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.