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

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

Moderator: STC

Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

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

Post by Stranger21 »

кое как нашел .. сейчас буду ставить пробовать .. 4.21a меньше не нашел

получаемый код все равно отличается от версии STC но он отличается и от версии 5.50 ...

но мне кажется такие танцы с бубном , это не дело , раньше веть все равно было какая версия

кстати вопрос почему не использовать МикроСи Для АВР фирмы микроелектроника , он вроде как бесплатный и очень удобный с точки зрения IDE ? блин не бесплатный ((( но я его поставлю все равно так как в нем учить язык очень удобно
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

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

Post by Stranger21 »

ну что - докладываю!
версия IAR 4.21a - компиляция в IDE - все работает , никаких пропусков не обнаружено! , завтра поеду на работу на ней , посмотрим .
так что или нужно писать большими буквами на сайте что версии 5 не работают , или искать причину...

кстати для 4.21 в makefike нужно LD поменять местами с тем что закоментарен , так как xlink теперь в папке common

докладываю - доехал на работу , без проблемм на собраной IDE IAR 4.21a новой прошивке , с выключенными , ЭМР ЭПХХ стартер ограничитель УОЗ , 5 зубов пропуск до начала ловли синхры , 0.2 вольт СЕ ДАД .
проблемм нет

гдето надо написать всеж что версии 5 не потдерживаються , так как весь форум новички читать не будут , и грабли будут продолжатся
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 »

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

Дело в том, что в разных версиях IAR следующие пути разные:
LD = $(IAR_HOME)/avr/bin/xlink.exe и LD = $(IAR_HOME)/common/bin/xlink.exe
LIBS = $(IAR_HOME)/avr/lib/dlib/dlAVR-3s-ec_mul-sf-n.r90 и LIBS = $(IAR_HOME)/avr/lib/dlib/dl3s-ec-sf.r90
Пока известно только два варианта, возможно их больше.

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

Еще замечу. Если вы хотите компилировать IAR-ом, то кроме него вам нужно поставить WinAvr (несмотря на то, что вы компилируете IAR-ом). Дело в том, что в составе IAR-а нет утилиты nmake, которая обрабатывает Makefile-ы. Наверное может подойти и от VisualStudio, но я не проверял.
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 »

от майкрософта не подошла .
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 »

От СBuilder тоже. Значит рекомендуем пару WinAvr + IAR
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
Serj_K
LQFP144 - On Top Of The Game
Posts: 330
Joined: Thu Dec 09, 2010 12:55 pm
Location: Kyiv, Ukraine

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

Post by Serj_K »

Повносил изменения за 2 месяца из основной ветки в свой проект - выплыла проблема сборки, которую не могу побороть. Всё собирается нормально кроме таблиц. Выдаёт следующую ошибку:
Error[Pe147]: declaration is incompatible with "fw_data_t __farflash fw_data" (declared at line 215 of "E:\IAR_AVR\secu-64\tables.h") E:\IAR_AVR\secu-64\tables.c 61
После портирования под GCC все параметры и таблицы были объединены в одну структуру и видно из за этого у меня и происходит, но почему не понимаю. Адрес начала данных я вычисляю как и раньше. Мои исходники таблиц прилагаю.

П.С. Использую только ИАР 4.21А.
Attachments
tables.rar
(7.32 KiB) Downloaded 403 times
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 »

Посмотри файлы в каталоге port, возможно тебе нужно подправить некоторые места под мега128. А вообще, судя по приведенной тобой ошибке, у тебя по-разному определена переенная в .h и .с файлах.
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
Serj_K
LQFP144 - On Top Of The Game
Posts: 330
Joined: Thu Dec 09, 2010 12:55 pm
Location: Kyiv, Ukraine

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

Post by Serj_K »

Проверил - проблема из-за указания "@FIRMWARE_DATA_START". Если это убрать - сборка проходит без ошибок. То есть реагирует на прямое указание адреса. Причём указывал для проверки адрес и в шестнадцатеричном виде 0х1000 - не воспринимает. Попробую разделить структуру, как было раньше.
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 не имеет возможности указать адрес прямо из исходников (что в принципе правильно - это дело линкера), но и тот и другой компиляторы и линковщики позволяют создавать именованные секции в объектном файле и затем линковать их по указанным адресам.
А вообще ничего сложного там нет. Все настройки что были в IDE просто переехали в Makefile. Смотри Makefile-ы
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
teuer
DIP8 - Involved
Posts: 27
Joined: Tue Jul 26, 2011 9:01 am

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

Post by teuer »

Мой опыт борьбы с GCC
У него проблема с promotion. Константа, описанная
#define CKPS_ON_START_SKIP_COGS 30
будет везде считаться как int т.е. 2 байта. Что может повлиять на скорость вычисления.
Нужно обязательно указывать явно
#define CKPS_ON_START_SKIP_COGS (uint8_t)30
Из этой же оперы строка 156 из adc.c
uint8_t dummy = ADMUX & (uint8_t) 7;
switch(dummy)
...
Иначе switch работает с 2 байтами. Использовать опцию компилятора mint8 не рекомендуется.

Иными словами кастуем все константы. Это несложно и на совместимость с IAR не повлияет

Еще, как показывает практика, собирать нужно целиком весь проект с опцией --combine. Размер получается гораздо меньше.
avr-gcc -Wall -mmcu=atmega16 -Os -DLITTLE_ENDIAN_DATA_FORMAT -DCOIL_REGULATION --combine -fwhole-program -gdwarf-2 *.c \
-Wl,-section-start=.boot_loader=0x3e00 -Wl,-section-start=.firmware_data=0x3263 \
-mcall-prologues -funsigned-char -funsigned-bitfields \
-fpack-struct -fshort-enums -fno-inline-small-functions -fno-split-wide-types -fno-tree-scev-cprop -fdelete-null-pointer-checks

avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock a.out secu-3_app.a90
Post Reply