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

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

Moderator: STC

Post Reply
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 »

Создал и добавил в репозиторий скрипт configure.sh для Linux :-)
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 »

Пытаюсь скомпилировать для меги16 и получаю:
/usr/lib/gcc/avr/4.5.3/../../../../avr/bin/ld: section .firmware_data loaded at [00003263,00003dff] overlaps section .text loaded at [00000000,000032e9]
/usr/lib/gcc/avr/4.5.3/../../../../avr/bin/ld: section .data loaded at [000032ea,000032f1] overlaps section .firmware_data loaded at [00003263,00003dff]

Недостаточно памяти.
Все дополнительные функции в маке файле выключены.
ender11
LQFP112 - Up with the play
Posts: 197
Joined: Sat Dec 11, 2010 4:05 pm

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

Post by ender11 »

кстати да, следует указать, какая версия GCC компилирует этот проект. под 4.5.3, думается, надо включить оптимизацию по объёму. хотя, она там и так включена.
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 не влазит в ATMega16. IAR оптимизирует лучше и код генерируемый им влазит, но это не критично так как сейчас поддерживается ATmega32.
Но я сильно не игрался с опциями оптимизации, может быть можно оптимизировать... Точно знаю (так как смотрел ассамблерный листинг) что GCC плохо оптимизирует работу с регистрами ввода-вывода (адреса 0-1F), в то время как IAR делает это нормально (в реальности нужна одна инструкция, а GCC ставит как минимум 3).

Вот пример (из ф. knock_set_integration_mode()):
14 0000 8170 andi r24,lo8(1)
15 0002 880F lsl r24
16 0004 880F lsl r24
17 0006 880F lsl r24
18 0008 92B3 in r25,50-32
19 000a 977F andi r25,lo8(-9)
20 000c 982B or r25,r24
21 000e 92BB out 50-32,r25

IAR:
00000000 FD00 SBRC R16,0
00000002 9A93 SBI 0x12,0x03
00000004 FF00 SBRS R16,0
00000006 9893 CBI 0x12,0x03

Разница - в 2 раза!
кстати да, следует указать, какая версия GCC компилирует этот проект. под 4.5.3, думается, надо включить оптимизацию по объёму. хотя, она там и так включена.
Target: avr
Configured with: ../gcc-4.3.3/configure --enable-win32-registry=WinAVR-20100110
--with-gmp=/usr/local --with-mpfr=/usr/local --prefix=/c/WinAVR --target=avr --e
nable-languages=c,c++,objc --with-dwarf2 --enable-doc --disable-shared --disable
-libada --disable-libssp --disable-nls --with-pkgversion='WinAVR 20100110' --wit
h-bugurl='URL:http://sourceforge.net/tracker/?atid=52 ... 08&func=br
owse'
Thread model: single
gcc version 4.3.3 (WinAVR 20100110)
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
ender11
LQFP112 - Up with the play
Posts: 197
Joined: Sat Dec 11, 2010 4:05 pm

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

Post by ender11 »

пойду, скачаю.
teuer
DIP8 - Involved
Posts: 27
Joined: Tue Jul 26, 2011 9:01 am

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

Post by teuer »

Линкер с завидным упорством выкидывает бутлоадер из выходного файла.

Сообщений об ошибках не выдает. Тихо считает, что если напрямую к бутлоадеру не обращаются, то и вставлять его не надо.

/usr/libexec/gcc/avr/4.5.3/collect2 -m avr5 -o secu-3_app.elf /usr/lib/gcc/avr/4.5.3/../../../../avr/lib/avr5/crtm16.o -L/usr/lib/gcc/avr/4.5.3/avr5 -L/usr/lib/gcc/avr/4.5.3/../../../../avr/lib/avr5 -L/usr/lib/gcc/avr/4.5.3 -L/usr/lib/gcc/avr/4.5.3/../../../../avr/lib --relax --gc-sections output/adc.o output/bootldr.o output/ce_errors.o output/ckps.o output/crc16.o output/eeprom.o output/fuelecon.o output/funconv.o output/idlecon.o output/ignlogic.o output/jumper.o output/knklogic.o output/knock.o output/measure.o output/params.o output/procuart.o output/secu3.o output/starter.o output/suspendop.o output/tables.o output/uart.o output/ventilator.o output/vstimer.o -Map=./output/secu-3_app.map --cref -section-start=.firmware_data=0x3263 -section-start=.boot_loader=0x3E00 -lm -lgcc -lc -lgcc
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 »

Линкер с завидным упорством выкидывает бутлоадер из выходного файла.
Да, я тоже повелся на одну из опций оптимизации, смотрю стало влазить в мегу16, а потом обнаружил что бутлоадера то нет :lol2:

teuer
Попробуй покопать в сторону оптимизации кода при обращении к памяти ввода-вывода. Я писал уже на этой странице что 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
teuer
DIP8 - Involved
Posts: 27
Joined: Tue Jul 26, 2011 9:01 am

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

Post by teuer »

To STS
А можно сделать компиляцию датчика детонации условной? У меня его нет и видимо не предвидется, а поиграться с накоплением энергии в катушках хочется.

Стандартную конфигурацию удалось собрать на GCC и уместить в MEGA16. Сейчас изучаю листинги на предмет уменьшения размеров.
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

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

Post by Stranger21 »

кто нибыть пробовал последнюю врсию прошивки собрать IAR и на живой машине проверить? ... просто вот эти пропуски меня волнуют ... до перехода на GCC прошивка норм работала , сечас заметил около 2000 и 3000 есть пропуски ... с чем свзяно пока не знаю ...
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 »

пробовал вчера еще раз , пропуски имеются . Думаю начать по блочно переписывать назат изменения или просто подменяя блоки , чтобы выяснить кто дает эти пропуски . Плохо что нет имитатора .
а есть какой нибуть виртуальный проект отладки ? в протеусе что то ничего не получилось
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
Post Reply