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

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

Moderator: STC

serge__5518
LQFP112 - Up with the play
Posts: 200
Joined: Sat Jun 09, 2012 11:12 am

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

Post by serge__5518 »

STC wrote:serge__5518
Спасибо за проведенные исследования, к сожалению у меня пока нет времени посмотреть. Но потом сяду за эту проблему серьезно.
Прошивка, скомпилированная IAR5.50 работает без пропусков зажигания. Покатался с прошивкой 3 дня - все нормально.
Для компиляции добавил в файл Makefile_iar флаг:
CFLAGS += --separate_cluster_for_initialized_variables
Результат - изменения в листинге незначительные, но мне показалось - так лучше.

Исправления в файле ckps.c для IAR 5.50 :
1)
/*
#define flags ( (volatile ckpsflags_t*)(&TWAR) ) //note: may be not effective on other MCUs
*/
__no_init volatile ckpsflags_t ckpsFlags@0x22;
#define flags ( &ckpsFlags)

2)
uint8_t ckps_is_cycle_cutover_r()
{
uint8_t result;
_BEGIN_ATOMIC_BLOCK();
//result = flags->ckps_new_engine_cycle_happen;
result = 0;
if(flags->ckps_new_engine_cycle_happen)
result = 1;
flags->ckps_new_engine_cycle_happen = 0;
_END_ATOMIC_BLOCK();
return result;
}
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010
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 »

serge__5518
Большое спасибо! Учту результаты твоих исследований при подготовке исходников к релизу.
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 »

Исправил прошивку в соответствии с рекомендациями serge__5518.
По поводу п.1. Достаточно было добавить ключевое слово __io (для IAR), в этом случае компилятор всегда будет знать что работает с указателем на память о области I/O. Оформил код с использованием следующих макросов:
//IAR
#define IOSPACEVAR(type, reg) ( (__io volatile type*)(&reg) )
//AVR-GCC
#define IOSPACEVAR(type, reg) ( (volatile type*)(_SFR_MEM_ADDR(reg)) )

По поводу п.2. Так как там прерывания запрещены то никаких проблем он вызывать не должен - оставил как есть. Пропуски исчезли при исправлении п.1
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 »

Могло ли это влиять на сборку ИАР 4.21а?
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 »

Если пропуски проявлялись и на 4.21а, то скорее всего это был один и тот же баг.
На GCC по-прежнему остались пропуски. Судя по коду GCC не везде генерирует атомарный код связанный флагами в TWAR (скорее всего это особенность его генератора кода). GCC генерирует код: чтение-модификация-запись, в то время как ИАР герерирует просто инструкции cbi/sbi всегда. Работаю над этим сейчас.
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 »

нет , пропусков не было . Имел ввиду на чтонибудь еще могло влиять ? есть у меня в глубине подсознания сомнение одно - кажется мне что Секу3 опаздывает переключать карты , при Очень резком наборе оборотов - 0.4 секунды с 800 до 6000
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
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 »

При работе с флагами размещенными в I/O регистре GCC генерирует неоптимальный код, который является неатомарным.
Пример.

void iocfg_s_ign_out2(uint8_t value)
{
PORTD_Bit5 = value;
}

700 0000 8170 andi r24,lo8(1)
701 0002 8295 swap r24
702 0004 880F lsl r24
703 0006 807E andi r24,0xe0
704 0008 92B3 in r25,50-32
705 000a 9F7D andi r25,lo8(-33)
706 000c 982B or r25,r24
707 000e 92BB out 50-32,r25
711 0010 0895 ret

Просто безобразие. ИАР делает это 4-мя командами!
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 и новыми верс. IAR

Post by ender11 »

тупая железяка может и не знать, как биту присвоить значение unsigned char. делает как умеет. с gcc всегда нужно смотреть, что оно там насобирало. может сделать функцию байт на 100, где нужен сдвиг влево, в может выбросить фрагмент программы.
благо, Insight может показывать сразу исходный код и как его собрало.
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