Цитата
2 Puzan: не могли бы вы выложить рекомендации по настройке среды с нуля
В принципе ничего сложного нет. Компилируем binutils, gcc (с опцией --without-headers, нужен для того, чтобы им скомпилить newlib), newlib и снова gcc (уже полностью, с поддержкой newlib). При этом ставим необходимые опции для целевой платформы (для ARM это --target=arm-elf --enable-interwork --enable-multilib).
Всё, можно компилировать программки.
Чтобы компилятор не использовал инициализацию от newlib (например crt0), в опциях линкера ставим -nostartfiles -nostdlib и пишем свой инициализирующий код. Чтобы при этом использовать функции из newlib, добавляем с список объектных файлов libc.a.
Вот как сделал я (кусок Makefile'a):
Код
CFLAGS = $(FLAGS) -mcpu=$(MCU) -mtune=$(MCU) -march=$(CPUARCH) $(DEBUG) $(THUMB_IW) \
-Wall -std=gnu99 -O$(OPTLEVEL) $(INCLUDES)
LDFLAGS = -nostartfiles -nostdlib -T lpc2148_rom.ld
LIBGCC = `$(CC) $(CFLAGS) $(THUMB) -print-libgcc-file-name`
LIBDIR = /opt/armgcc/arm-elf/lib/`$(CC) $(CFLAGS) -print-multi-directory`
LIBC = $(LIBDIR)/libc.a
...
$(ELF) : $(OBJS) $(OBJS32) $(OBJSAS)
@echo $(MSG_LINKING) $@
$(LD) -Map $(MAP) --cref $(LDFLAGS) -o $@ $(OBJALL) $(LIBGCC) $(LIBC)
@echo $(MSG_SIZE)
$(OBJSIZE) $@
$(OBJS) : %.o : %.c
@echo $(MSG_COMPILING) $<
$(CC) -c $(CFLAGS) $(THUMB) -o $@ $<
...
а вообще, в интернете масса примеров и готовых тулчейнов, в которых можно посмотреть, как это делается.
Эклипс настраивается, как и на системный gcc. Все-таки gcc - он и в африке gcc.
Использую и отладчик (OpenOCD) и симулятор (skyeye), правда для nxp21xx переферию он не эмулирует, по этому применение довольно ограниченное.
Кстати, Zylin Embedded CDT не использовал. Надо попробовать.
А вообще, говорят, что gcc во многих случаях делает более быстрый и компактный код, чем keil или iar.
Я сам не проверял, но вот люди, типа проверили:
ftp://www.raisonance.com/STR7/Benchmark/A...C-Benchmark.pdf (обсуждалось когда-то на этом форуме).