
Портирование кода прошивки на GCC (Porting firmware to GCC)
Moderator: STC
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
Создал и добавил в репозиторий скрипт 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Портирование кода прошивки на GCC
Пытаюсь скомпилировать для меги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]
Недостаточно памяти.
Все дополнительные функции в маке файле выключены.
/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]
Недостаточно памяти.
Все дополнительные функции в маке файле выключены.
Re: Портирование кода прошивки на GCC
кстати да, следует указать, какая версия GCC компилирует этот проект. под 4.5.3, думается, надо включить оптимизацию по объёму. хотя, она там и так включена.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
К сожалению, код генерируемый 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 раза!
Target: avrкстати да, следует указать, какая версия GCC компилирует этот проект. под 4.5.3, думается, надо включить оптимизацию по объёму. хотя, она там и так включена.
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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Портирование кода прошивки на GCC
пойду, скачаю.
Re: Портирование кода прошивки на GCC
Линкер с завидным упорством выкидывает бутлоадер из выходного файла.
Сообщений об ошибках не выдает. Тихо считает, что если напрямую к бутлоадеру не обращаются, то и вставлять его не надо.
/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
Сообщений об ошибках не выдает. Тихо считает, что если напрямую к бутлоадеру не обращаются, то и вставлять его не надо.
/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
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
Да, я тоже повелся на одну из опций оптимизации, смотрю стало влазить в мегу16, а потом обнаружил что бутлоадера то нетЛинкер с завидным упорством выкидывает бутлоадер из выходного файла.

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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Портирование кода прошивки на GCC
To STS
А можно сделать компиляцию датчика детонации условной? У меня его нет и видимо не предвидется, а поиграться с накоплением энергии в катушках хочется.
Стандартную конфигурацию удалось собрать на GCC и уместить в MEGA16. Сейчас изучаю листинги на предмет уменьшения размеров.
А можно сделать компиляцию датчика детонации условной? У меня его нет и видимо не предвидется, а поиграться с накоплением энергии в катушках хочется.
Стандартную конфигурацию удалось собрать на GCC и уместить в MEGA16. Сейчас изучаю листинги на предмет уменьшения размеров.
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Портирование кода прошивки на GCC
кто нибыть пробовал последнюю врсию прошивки собрать IAR и на живой машине проверить? ... просто вот эти пропуски меня волнуют ... до перехода на GCC прошивка норм работала , сечас заметил около 2000 и 3000 есть пропуски ... с чем свзяно пока не знаю ...
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Портирование кода прошивки на GCC
пробовал вчера еще раз , пропуски имеются . Думаю начать по блочно переписывать назат изменения или просто подменяя блоки , чтобы выяснить кто дает эти пропуски . Плохо что нет имитатора .
а есть какой нибуть виртуальный проект отладки ? в протеусе что то ничего не получилось
а есть какой нибуть виртуальный проект отладки ? в протеусе что то ничего не получилось
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г