Пропуски зажигания при сборке GCC и новыми верс. IAR

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

Moderator: STC

nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

Post by nikll »

по адресу 0000002A и ниже (текстовый поиск в обоих листингах) явно заметны различия в работе оптимизатора, к примеру разворачивание функций.
Кстати вопрос для тех кто знает авр-ассемблер, что означают записи типа:
\ 0000001A REQUIRE _A_PORTD
\ 0000001A REQUIRE _A_PORTC
\ 0000001A REQUIRE _A_DDRD
\ 0000001A REQUIRE _A_DDRC

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

Вообще чисто субьективно четвертая версия компилятора выдает более чистый и более оптимизированный код

Еще вопрос по GCC, вы пробовали собирать с опцией -O0 ?
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

Post by Stranger21 »

а можно ли , в исходный тест , засунуть какойнибуть , макрос или что то , чтобы компилировалось только на 4.21 версии ИАР , ну и под вин авр также ? ну чтобы пользователи , пока не найдется в чем проблема, не мучались в неведении ?
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

Post by nikll »

хм, гугль и документация к компилятору в помощь.
с gcc подобное делается в make файле через определение версии gcc
skodafelicia
QFP80 - Contributor
Posts: 33
Joined: Thu Apr 12, 2012 5:32 am

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

Post by skodafelicia »

nikll wrote:Еще вопрос по GCC, вы пробовали собирать с опцией -O0 ?
У меня GCC под М16 не собирает - памяти контроллера не хватает.

Кстати, пошивка с IAR 4.21 работает без пропусков...
Мой след в истории: http://skodafelicia.ru/publ/secu_3/6-1-0-78
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

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 и новыми верс. IAR

Post by STC »

\ 0000001A REQUIRE _A_PORTD
\ 0000001A REQUIRE _A_PORTC
\ 0000001A REQUIRE _A_DDRD
\ 0000001A REQUIRE _A_DDRC
Это скорее всего перечисление внешних связей - переменных используемых в данной функции. В данном случае это ячейки памяти в ОЗУ соответствующие регистрам портов.
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 и новыми верс. IAR

Post by STC »

Мне удалось скомпилировать прошивку с GCC 3-й версии. Когда причешу код, то постараюсь выложить.
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 и новыми верс. IAR

Post by STC »

Прошивка в репозитории подрихтована для сборки с использованием более старых версий AVR-GCC (WinAVR).
Проверено на той версии WinAVR, на которую давал сслыку ender11.

Есть пара нюансов.
1. Если будет ругаться на опцию -fno-inline-small-functions, то соответствующую строчку в Makefile нужно закомментировать:
#CFLAGS += -fno-inline-small-functions
2. Я еще не разобрался со строчкой кода в bootldr.h:

Code: Select all

#define boot_loader_start() ((void (*)())((SECU3BOOTSTART+0xA)/2))()
Компилятор ругается на нечетный адрес, возникающий если не убрать /2. Или в новой версии компилятора GCC поведение отличается от более старых (в более новых нужно использовать адрес слова), или отличий нет (везде байтовый адрес), а просто /2 нужно убрать (тогда непонятно как оно работает с последней версией WinAVR).
Проверил что при использовании версии: gcc version 4.1.1 (WinAVR 20070122) компилятор уже не ругается.

Все. Разобрался и исправил проблему с boot_loader_start(). Проблема заключалась в разном поведении компиляторов GCC разных версий.
Страя версия использовала команду CALL, а новая ICALL. Использовал ассемблерную вставку чтобы навсегда отбить охоту компилятору заниматься творчеством. :lol:

Теперь код полностью пригоден для компиляции более старыми версиями 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
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Пропуски зажигания при сборке GCC и новыми верс. IAR

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 и новыми верс. IAR

Post by STC »

пропусков нет ?
Я не проверял на железе.
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
Post Reply