Пропуски зажигания при сборке 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:
\ 0000001A REQUIRE _A_PORTD
\ 0000001A REQUIRE _A_PORTC
\ 0000001A REQUIRE _A_DDRD
\ 0000001A REQUIRE _A_DDRC
Это скорее всего перечисление внешних связей - переменных используемых в данной функции. В данном случае это ячейки памяти в ОЗУ соответствующие регистрам портов.
Посмотрел листинги от skodafelicia (ckps_421A.zip и ckps_610.zip).
В файле ckps.с есть отределение:
#define flags ( (volatile ckpsflags_t*)(&TWAR) )

IAR 4.21 работает со структурой ckpsflags_t как с I/O регистром, т.е. например :
flags->ckps_need_to_set_channel = 0;
CBI 0x02, 0x05

IAR 6.10 (5.50) работает со структурой ckpsflags_t как с областью памяти(данными), например:
flags->ckps_is_valid_half_turn_period = 0;
LDI R26, LOW(34)
LDI R27, (34) >> 8
LD R16, X
ANDI R16, 0xFD
ST X, R16
При этом, в некоторых случаях, вставляет и вызовы функций...

Думаю, это может увеличить время выполнения операций с ckpsflags_t. Насколько критично время выполнения операций со структурой ckpsflags_t - не знаю. Хотя мне больше нравится подход компилятора V4.21.

PS
У меня IAR 5.50, скомпилировал - появляются пропуски.
Как заставить IAR 5.50 работать с ckpsflags_t как с I/O регистром, пока не придумал....
Есть какие нибудь мысли на этот счет?
ВАЗ 2103 , Secu-3 (m32),
ДАД GM Daewoo, ДТОЖ 23.3828,
Катушка 2111-3705010
serge__5518
LQFP112 - Up with the play
Posts: 200
Joined: Sat Jun 09, 2012 11:12 am

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

Post by serge__5518 »

Думаю, что проблема пропусков при компиляции в IAR версии выше 4.21 (далее IAR 5.50), в более строгом следовании последних версий стандартам языка С.
Сруктура ckpsflags_t располагается в регистре TWAR для быстрого к ней доступа. IAR 5.50 обращается к области памяти, где находится регистр используя не простые ассемблерные команды CBI и SBI, а связку нескольких команд. Что увеличивает время выполнения.
В общем, если в файле ckps.c сделать следующие изменения:
/*
#define flags ( (volatile ckpsflags_t*)(&TWAR) ) //note: may be not effective on other MCUs
*/
__no_init volatile ckpsflags_t ckpsFlags@0x22;
#define flags ( &ckpsFlags)

то листинг фала после компиляции IAR5.50 , будет мало чем отличаться от листинга генерируемого IAR4.21 (во всяком случае , что касается работы с flags)
Правда, для точного соответствия, :) в функции
uint8_t ckps_is_cycle_cutover_r() надо сделать следующие изменения:
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;
}

Еще не успел проверить на машине....

PS
Если использовать не: #define flags ( &ckpsFlags)
а, создавать ссылку на объект :
ckpsflags_t* tFlags = &ckpsFlags;
то опять включается механизм доступа через область памяти....
При непосредственном доступе к объекту: ckpsFlags.ckps_need_to_set_channel
генерируется нормальный листинг.

А в общем, IAR5.50 поступает правильно, а прошивка работает не очень правильно :) . Более того, сам _объект_ структуры ckpsflags_t в файле ckps.c не создается, а назначается в #define...
В файле ckps.c (ревизии secu-3_software_release_02022011)
объект структуры ckpsflags_t создается строкой:
__no_init volatile ckpsflags_t flags@0x22)
и IAR5.50 генерирует "правильный" листинг.
Если кто-то пробовал в 2011 году собирать прошивку secu-3_software_release_02022011 с IAR5.50 (или IAR > 4.21) и пропуски остались - то я "немножко неправ" :), и надо копать глубже... или искать IAR 4.21 :)
ВАЗ 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
SvatSV
QFP80 - Contributor
Posts: 30
Joined: Sun Apr 01, 2012 6:17 pm

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

Post by SvatSV »

Не могу нагуглить IAR версии 4.21а. В нете есть версии 5 и 6, но как я понял они некорректно компилят прошивку.
Кто может дать рабочую ссылку на версию 4.21а.
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г
SvatSV
QFP80 - Contributor
Posts: 30
Joined: Sun Apr 01, 2012 6:17 pm

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

Post by SvatSV »

он есть .... он все еще есть ...
Stranger21, спасибо за "реальную" помощь. Он жил, жив и будет жить.

Вопрос остается открытым.
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г
dimonfish
LQFP144 - On Top Of The Game
Posts: 365
Joined: Fri Aug 19, 2011 4:34 am
Location: Севастополь, UA

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

Post by dimonfish »

а найти иво еще тот гемор... подтверждаю :-)
SvatSV, смотри личку ;-)
сюда (и никуда) линк не выкладывать!!!
через пару дней файл - бахну
ПС. кстати и внимательно читаем "ридми" с самого начала ;-)
SvatSV
QFP80 - Contributor
Posts: 30
Joined: Sun Apr 01, 2012 6:17 pm

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

Post by SvatSV »

dimonfish, тебе большое спасибо. Конкретный вопрос, конкретное дело. Ещё раз спасибо.
dimonfish
LQFP144 - On Top Of The Game
Posts: 365
Joined: Fri Aug 19, 2011 4:34 am
Location: Севастополь, UA

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

Post by dimonfish »

да че там :) правильно заданный вопрос - 80% ответа :)
Post Reply