Среда разработки

Предыдущая  Содержание  Следующая  V*D*V

При работе под Windows потребуются утилиты GNU.

Они могут идти в составе средств разработки вместе с компилятором gcc.

Если их нет, установить их можно с сайта http://gnuwin32.sourceforge.net/.

Потребуется как минимум make и rm.

Добавить путь к утилитам в переменные окружения: Control Panel -> System -> Advanced -> Environment Variables -> Edit.

Убедиться, что всё нормально с помощью команды:

 

make -v

Компилятор

Для компиляции проще всего использовать тот же компилятор, которым собиралась файловая система. В этом случае необходимые библиотеки уже находятся в каталогах /lib/ и /usr/lib/.

Если по каким-то причинам приходится использовать другой компилятор, проще все решить проблему отсутствия необходимых библиотек используя статическую линковку. Отсутствие необходимых библиотек проявляется в невозможности запуска программы:

 

# ./<progname>

-sh: ./<progname>: not found

 

Для выполнения статической линковки компоновщику надо указать флаг -static.

Узнать зависимости файла от библиотек можно просто открыв файл в текстовом редакторе. В начальной секции будет что-то похожее на:

 

.   .   /lib/ld-linux.so.3  .   .   .   GNU     .   .   .   .   .

Компиляция из командной строки

Makefile для динамических библиотек

Шаблон:

 

PROGRAM_NAME = имя_библиотеки.so

# ****************************************

# COMPILATOR

# ****************************************

CC = $(CROSS_COMPILE)gcc

#CC = $(CROSS_COMPILE)с++

# ****************************************

# FLAGS

# ****************************************

CFLAGS = -fPIC -O2 -Wall

CFLAGS += -march=armv5te -mtune=arm926ej-s

CFLAGS += -msoft-float

#CFLAGS += -fshort_wchar

CFLAGS += -s

CFLAGS += -ffunction-sections -fdata-sections

# ****************************************

# INCLUDES

# ****************************************

INCLUDES = -Iпуть_к_заголовочным_файлам

# ****************************************

# SOURCES

# ****************************************

SOURCE_FILES = исходник1.cpp \

               исходник2.cpp

# ****************************************

# OBJECTS

# ****************************************

OBJECT_FILES = *.o

# ****************************************

# LINKER

# ****************************************

$(PROGRAM_NAME): $(OBJECT_FILES)

 $(CC) -shared -o $@ $^

#        $(CC) -shared -static -o $@ $^

# ****************************************

# COMPILE

# ****************************************

all: $(PROGRAM_NAME)

$(OBJECT_FILES): $(SOURCE_FILES)

 $(CC) $(INCLUDES) $(CFLAGS) -c $^

# ****************************************

# CLEAR

# ****************************************

clean:

 rm -f *.o

# ****************************************

# CLEAR ALL

# ****************************************

clean_all:

 rm -f *.o $(PROGRAM_NAME)

 

Makefile для статических библиотек

Шаблон:

 

LIB_NAME = имя_библиотеки.a

# ****************************************

# COMPILATOR

# ****************************************

CC = $(CROSS_COMPILE)gcc

#CC = $(CROSS_COMPILE)c++

# ****************************************

# FLAGS

# ****************************************

CFLAGS = -O2 -Wall

CFLAGS += -march=armv5te -mtune=arm926ej-s

CFLAGS += -msoft-float

#CFLAGS += -fshort_wchar

CFLAGS += -s

CFLAGS += -ffunction-sections -fdata-sections

# ****************************************

# INCLUDES

# ****************************************

INCLUDES = -Iпуть_к_заголовочным_файлам

# ****************************************

# SOURCES

# ****************************************

SOURCE_FILES = исходник1.cpp \

               исходник2.cpp

# ****************************************

# OBJECTS

# ****************************************

OBJECT_FILES = *.o

# ****************************************

# ARCHIVER

# ****************************************

$(LIB_NAME): $(OBJECT_FILES)

 $(CROSS_COMPILE)ar cr $@ $^

# ****************************************

# COMPILE

# ****************************************

all: $(LIB_NAME)

$(OBJECT_FILES): $(SOURCE_FILES)

 $(CC) $(INCLUDES) $(CFLAGS) -c $^

# ****************************************

# CLEAR

# ****************************************

clean:

 rm -f *.o

# ****************************************

# CLEAR ALL

# ****************************************

clean_all:

 rm -f *.o $(LIB_NAME)

 

Makefile для исполняемого файла

Шаблон:

 

PROGRAM_NAME = имя_программы

# ****************************************

# COMPILATOR

# ****************************************

CC = $(CROSS_COMPILE)gcc

#CC = $(CROSS_COMPILE)c++

# ****************************************

# FLAGS

# ****************************************

CFLAGS = -O2 -Wall

CFLAGS += -march=armv5te -mtune=arm926ej-s

CFLAGS += -msoft-float

#CFLAGS += -fshort_wchar

CFLAGS += -s

CFLAGS += -ffunction-sections -fdata-sections

 

LFLAGS = -Wl,-Map=$(PROGRAM_NAME).map,--cref,--gc-sections

#LFLAGS += -pthread

#LFLAGS += -lcrypt

#LFLAGS += -static

# ****************************************

# INCLUDES

# ****************************************

INCLUDES = -Iпуть_к_заголовочным_файлам

# ****************************************

# LIBRARIES

# ****************************************

LIB = <путь>/библиотека1.a <путь>/библиотека2.a

# ****************************************

# SOURCES

# ****************************************

SOURCE_FILES = исходник1.cpp \

               исходник2.cpp

# ****************************************

# OBJECTS

# ****************************************

OBJECT_FILES = *.o

# ****************************************

# LINKER

# ****************************************

$(PROGRAM_NAME): $(OBJECT_FILES)

 $(CC) -o $@ $^ -L. $(LIB) $(LFLAGS)

# ****************************************

# COMPILE

# ****************************************

all: $(PROGRAM_NAME)

$(OBJECT_FILES): $(SOURCE_FILES)

 $(CC) $(INCLUDES) $(CFLAGS) -c $^

# ****************************************

# CLEAR

# ****************************************

clean:

 rm -f *.o

# ****************************************

# CLEAR

# ****************************************

clean_all:

 rm -f *.o $(PROGRAM_NAME).map $(PROGRAM_NAME)

 

Сборка

Для запуска в Windows используется cross.cmd:

 

set CROSS_COMPILE=arm-none-linux-gnueabi-

 

make clean_all

make

make clean

 

Для запуска в Linux используется cross:

 

#!/bin/sh

 

#export PATH=/<path>/arm-2007q1/bin:${PATH}

#export CROSS_COMPILE=arm-none-linux-gnueabi-

 

#export PATH=/<path>/buildroot-2009.08/build_arm/staging_dir/usr/bin:${PATH}

#export CROSS_COMPILE=arm-linux-uclibcgnueabi-

 

export PATH=/<path>/buildroot-2010.05/output/staging/usr/bin:${PATH}

export CROSS_COMPILE=arm-unknown-linux-uclibcgnueabi-

 

make clean_all

make

make clean

Использование графической среда разработки

Установка

В качестве среды разработки используем Eclipse.

Для работы eclipse понадобиться JRE или JDK для Java SE последней версии с http://java.sun.com/javase/downloads/index.jsp.

 

Устанавливаем:

Eclipse IDE for C/C++ Developers с http://www.eclipse.org/downloads/;

Eclipse C/C++ Development Tools с http://www.eclipse.org/cdt/;

Zylin Embedded CDT (поддержка GDB для CDT при разработке встраиваемых приложений) с http://opensource.zylin.com/embeddedcdt.html;

 

Установка Zylin Embedded CDT:

Запустить eclipse;

Help -> Install New Software, Add;

В поле Name ввести zylincdt, в поле Location ввести http://opensource.zylin.com/zylincdt, OK;

Установить флаг на Zylin Embedde CDT, Next, ещё раз Next;

Согласиться с лицензионным соглашением, нажать Finish;

Согласиться с загрузкой, по окончании перегрузить eclipse;

Настройка

Снять флажок Project -> Build Automatically.

 

Настроить подсветку синтаксиса:

Войти в меню Windows -> Preferences -> C/C++ -> Editor -> Syntax Coloring;

В разделе Code -> Typedefs установить параметры текста: цвет - 194.7.7, bold;

В разделе Code -> Macro Definitions установить параметры текста: цвет - 0.0.192;

В разделе Code -> Functions установить параметры текста: цвет - 0.0.0, bold;

 

Если работа ведётся без внешней системы контроля версий, полезно использовать локальную историю. Настройка производится в меню Window -> Preferences -> General -> Workspace -> Local History. Сами файлы истории хранятся в каталоге <проект>\.metadata\.plugins\org.eclipse.core.resources\.history\.

 

Смотри также

GNU-Based Software Development on AT91SAM Microcontrollers

http://atmel.com/dyn/resources/prod_documents/doc6310.pdf

YAGARTO and Eclipse

http://yagarto.de/howto/yagarto2/index.html

Development with Eclipse

http://www.armbedded.eu/node/208

T2 System Development Environment

http://www.t2-project.org/

Руководство по установке, настройке и использованию GNU Tools/Eclipse IDE в среде Windows для разработки программного обеспечения микроконтроллеров ARM

http://www.terraelectronica.ru/files/modules/disc_v02/user_guide_eclipce_v2.pdf

Настройка проекта

При создании проекта выбрать Other Toolchain. Таким образом, eclipse будет ожидать в директории проекта написанного вручную Makefile.

 

Настроить параметры проекта, доступные через меню Project -> Properties:

Установить кодировку текста в файлах в UTF-8. Resource -> Text file encoding -> UTF-8;

C/C++ Build -> Settings -> Binary Parsers, включить Elf Parsers и GNU Elf Parsers;

На вкладке C/C++ Build -> Settings -> Discovery Options установить Compiler Invocation Command, ввести название компилятора (arm-none-linux-gnueabi-gcc, например). Если компилятор указывается в Makefile, это делать необязательно;

На той же вкладке проверить, что установлен флаг Automate discovery of paths and symbols для автоматического добавления путей к подключаемым файлам при сборке проекта (обнаружение происходит, видимо, только при первой компиляции);

Установить Discovery profile как GCC per project scanner info profile;

Если в Makefile используется указание компилятора через переменную CROSS_COMPILE, определить её значение в C/C++ Build -> Environment, например, Name = CROSS_COMPILE, Value = arm-none-linux-gnueabi-;

Включить генерацию документации, C/C++ General, включить Enable project specific settings, указать Documentation tool как Doxygen;

Указать пути для внешних подключаемых файлов (которые не относятся к стандартным библиотекам и не будут обнаружены автоматически или если программа сама почему-то не может их найти) на вкладке C/C++ General -> Paths and Symbols -> Includes;

В Makefile должны присутствовать цели all и clean. Имена целей указаны в C/C++ Build, вкладка Behaviour, разделы Build и Clean. Если для сборки используется Makefile без какой-либо из эти целей, снять соответствующий флаг.

Сборка

Используются Makefile того же содержания, что и при сборке из командной строки.

 

Предыдущая  Содержание  Следующая