Портирование кода прошивки на GCC (Porting firmware to GCC)

Обсуждение прошивок SECU-3. Discussion of SECU-3 firmware.

Moderator: STC

JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Портирование кода прошивки на GCC

Post by JOleg »

Зачем комментарии типа /** */ заменил на // или /**/ ?
Я не знал для чего это нужно. Редактор его подсвечивает и это отвлекает.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Насчет #pragma vector= я погорячился. В макрос засунуть нельзя, так как препроцессор недопускает вложенных директив.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

При портировании кода я откажусь от IDE и сделаю для IAR как и для GCC Makefile

У кого есть возможность проверить на ИАР-е 4.x или 5.x версиях попробуйте скомпилировать код:
заменив например
#pragma vector=TIMER2_COMP_vect
__interrupt void timer2_comp_isr(void)
на
ISR(TIMER2_COMP_vect)

Может в новых версиях ИАР-а можно использовать ISR() вместо дурацкого #pragma который мешает красиво код портировать.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Создал Makefile для IAR :lol:

Code: Select all

###############################################################################
# Maklefile for build firmware of SECU-3 project using IAR
# Created by Alexey A. Shabelnikov, Kiev 17 July 2011. 
# Note: It requires IAR compiler and linker

#include platform-specific options from another file
include platform_cfg

TARGET = secu-3_app.a90
OBJDIR = output
CC = $(IAR_HOME)/avr/bin/iccavr.exe
LD = $(IAR_HOME)/common/bin/xlink.exe

# Compile options common for all C compilation units.
CFLAGS = --cpu $(MCU) -ms -s9 -e --lock_regs 1 -D ENABLE_BIT_DEFINITIONS --eeprom_size $(EE_SIZE)

# Linker flags
LDFLAGS = -Fintel-standard -xs -f $(IAR_HOME)/avr/config/$(LNKXCL) -l $(OBJDIR)/secu3.map -s main -Z.boot_loader=$(BL_START) -Z.firmware_data=$(FWD_START)
LIBS = $(IAR_HOME)/avr/lib/dlib/dl3s-ec-sf.r90

# Include Directories
INCLUDES = -I $(IAR_HOME)/avr/inc/dlib -I $(IAR_HOME)/avr/inc

# Define all source files.
SRC = secu3.c knock.c jumper.c eeprom.c bootldr.c tables.c

# Define all object files.
OBJECTS = $(SRC:%.c=$(OBJDIR)/%.r90)

# Define all listing files.
LST = $(SRC:%.c=$(OBJDIR)/%.lst)

# Build
all: OBJ_DIRS $(TARGET)

#Create directory for object files
OBJ_DIRS :
	mkdir -p $(OBJDIR)

# Compile
$(OBJDIR)/%.r90 : sources/%.c 
	$(CC) $(INCLUDES) $(CFLAGS) $< -o $@ -lC $(OBJDIR:%.r90=$(OBJDIR)/%.lst)

#Link
$(TARGET): $(OBJECTS)
	 $(LD) $(LDFLAGS) $(OBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

# Clean target
.PHONY: distclean
distclean: clean
	@rm -f $(TARGET) $(OBJDIR)/*.lst $(OBJDIR)/*.map 

.PHONY: clean
clean:
	@rm -f $(OBJECTS)
Кроме этого решил проблему с портированием обработчиков прерываний. IAR поддерживает стандарт C99. В C99 есть _Pragma (аналог #pragma), ее можно использовать в макросах. Макрос для обработчика прерывания выклядит так:

Code: Select all

 #define PRAGMA_QUOTE(x) _Pragma( #x )
 #define ISR(vec) PRAGMA_QUOTE( vector=vec ) __interrupt void isr_##vec(void) 
Уже портировал часть кода для GCC
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Наибольшая проблема, с которой я столкнулся при портировании кода это то, что AVR-GCC не поддерживает гарвардскую архитектуру. Раположить переменную в памяти программ можно, а вот работать с ней средствами языка нельзя, только через функции из библиотеки pgmspace.h. Это просто дурацкая особенность компилятора которая создает кучу проблем и головной боли. Кроме этого текущие версии AVR-GCC некорректно работают с памятью программ выше 64кБайт (нужно использовать хитрые макросы и прочие хитрости).
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Прошивка собранная при помощи GCC уже заработала. Возможно что уже завтра портированная прошивка будет выложена в репозиторий.
Я сохранил совместимость с IAR, прошивку можно собирать и при помощи IAR и при помощи GCC.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Портирование кода завершено!
-Совместимость с IAR сохранена (можно компилировать с использованием и GCC и IAR).
-Теперь сборка происходит только с использованием Makefile-ов
Репозиторий содержит последние версии исходников. Для сборки нужно запустить configure.bat, при этом указать тип микроконтроллера и тип компилятора. Например:
configure.bat M32 GCC
или
configure.bat M32 IAR
и т.д.

Если используется IAR, то нужно установить значение переменной окружения IAR_HOME, например:
"C:\Program Files\IAR Systems\Embedded Workbench Evaluation version"

Пока еще не нашел ошибку связанную с зашкаливанием УОЗ (только при компиляции с ипользованием GCC).

Жду багов :-)

p.s. Кто любит Linux создайте пожалуйста аналогичный configure.sh для него
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Портирование кода прошивки на GCC

Post by Stranger21 »

блин .... только начал разбиратся по тихоньку .... опять тупик ... не делает ничего бат фаил этот ... просто закрывается и все ... файлы проекта IAR не появляются ...((((
ничего не понял кароче , но новые версии прошивки я понятия не имею как компилировать ((( файлов проекта нету ( что делает бат фаил ему только известно , ни один фаил не меняется ...

если просто папку sourse из новой прошивки скопировать в старые проекты , этого будет дотаточно ?
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Установи переменную окружения IAR_HOME.
если просто папку sourse из новой прошивки скопировать в старые проекты , этого будет дотаточно
Думаю этого будет достаточно. Вообще несмотря на то, что я выкинул файлы проекта, вам никто не запрещает создать проект и добавить туда файлы.
Я просто убрал файлы проекта из репозитория так как не хочу поддерживать одновременно и Makefile-ы и настройки проекта в IDE. Мне больше по душе командная строка :-)

Возможно еще нужно будет поставить nmake (входит в состав систем разработки/сборки и тулчейнов). Например поставь WinAvr

Вот это тоже проверь, так как у меня версия IAR может быть другой и если пути не совпадают, то поправь.

Code: Select all

CC = $(IAR_HOME)/avr/bin/iccavr.exe
LD = $(IAR_HOME)/common/bin/xlink.exe
Last edited by STC on Sun Jul 24, 2011 1:43 pm, edited 1 time in total.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Портирование кода прошивки на GCC

Post by Stranger21 »

пробовал ставить переменую в переменый пользователя ее поместил , указывал и
C:\Program Files\IAR Systems\Embedded Workbench 5.4
и
C:\Program Files\IAR Systems\Embedded Workbench 5.4\avr\bin

а что должно выйти после работы bat файла?

просто подкладываение в существующий старый проект папки sourse привело к
Fatal Error[e72]: Segment .boot_loader must be defined in a segment definition option (-Z, -b or -P)

(((( я в печали .... только начал изучать веть ((((

я не хочу переходить на другоу программу , я только только разобрался чуток с IAR , хочу и продолжить в нем же ...

командную строку , так как не линуксоид , не люблю))

что то в source поменялось значит что он не хочет его компилировать

а куда вставлять этот код ? .... в configure.bat?
Last edited by Stranger21 on Sun Jul 24, 2011 1:52 pm, edited 2 times in total.
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
Post Reply