Пропуски зажигания при сборке GCC и новыми верс. IAR
Moderator: STC
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Пропуски зажигания при сборке GCC и новыми верс. IAR
Если собирать прошивку при помощи GCC и IAR-ом версии > 4.21, то наблюдаются пропуски зажигания.
Я тестировал на WinAVR 20100110. Более старые версии не проверял. Если у вас есть информация по более старым версиям GCC, то будет интересно.
Цель данной темы - выяснить и исправить причину описанного поведения.
Для начала нужно попытаться локализовать проблему. Наиболее вероятно что проблема в модуле ckps.c, так как этот модуль непосредственно отвечает за зажигание.
1. Нужно попробовать увеличить размер стека. В опциях компилятора;
2. Нужно убедиться что в момент пропусков микроконтроллер не перезагружается;
2. Убедиться что опции оптимизации кода не влияют на проявление проблемы;
3. Попробовать локализовать проблему путем компиляции выбранных модулей разными версиями компиляторов с последующей линковкой. Если такое возможно.
Я тестировал на WinAVR 20100110. Более старые версии не проверял. Если у вас есть информация по более старым версиям GCC, то будет интересно.
Цель данной темы - выяснить и исправить причину описанного поведения.
Для начала нужно попытаться локализовать проблему. Наиболее вероятно что проблема в модуле ckps.c, так как этот модуль непосредственно отвечает за зажигание.
1. Нужно попробовать увеличить размер стека. В опциях компилятора;
2. Нужно убедиться что в момент пропусков микроконтроллер не перезагружается;
2. Убедиться что опции оптимизации кода не влияют на проявление проблемы;
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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- QFP80 - Contributor
- Posts: 33
- Joined: Thu Apr 12, 2012 5:32 am
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
Как?STC wrote:2. Нужно убедиться что в момент пропусков микроконтроллер не перезагружается;
Это покопаю...STC wrote:2. Убедиться что опции оптимизации кода не влияют на проявление проблемы;
Мой след в истории: http://skodafelicia.ru/publ/secu_3/6-1-0-78
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
Проверить перезагружался ли микроконтроллер можно используя биты регистра:
MCU Control and Status Register – MCUCSR
В даташите больше информации.
В принципе, если происходит перезагрузка, то загорается СЕ на пол секунды. Так что перезагрузку будет видно.
Но я хочу сказать что микроконтроллер необязательно может перезагружаться. Может просто происходить слетание программы (например, прыжок по некорректному адресу), а потом восстановление.
MCU Control and Status Register – MCUCSR
В даташите больше информации.
В принципе, если происходит перезагрузка, то загорается СЕ на пол секунды. Так что перезагрузку будет видно.
Но я хочу сказать что микроконтроллер необязательно может перезагружаться. Может просто происходить слетание программы (например, прыжок по некорректному адресу), а потом восстановление.
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
-
- LQFP144 - On Top Of The Game
- Posts: 553
- Joined: Sun Nov 06, 2011 9:20 pm
- Location: Russia, Yekaterinburg
- Contact:
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
Попробуйте отключить оптимизацию (флаг -O0), более свежие версии gcc лудьше оптимизируют код, к примеру я сталкивался с тем что банальный цикл задержки типа:
for (uint16_t i = 0; i < 10000; i++);
превращался по сути в:
uint16_t i = 10000;
чтобы такого не происходило следует использовать volatile переменные в тех местах где требуется явное отключение оптимизации.
так же оптимизатор частенько разворачивает циклы и функции.
как вариант найти ближайшую предыдущую версию которая компилирует нормально и сравнить асемблерные листинги.
for (uint16_t i = 0; i < 10000; i++);
превращался по сути в:
uint16_t i = 10000;
чтобы такого не происходило следует использовать volatile переменные в тех местах где требуется явное отключение оптимизации.
так же оптимизатор частенько разворачивает циклы и функции.
как вариант найти ближайшую предыдущую версию которая компилирует нормально и сравнить асемблерные листинги.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
Да, кстати насчет volatile nikll правильно заметил. Я мог забыть кое-где поставить его.
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 и новыми верс. IAR
хм, а может у меня с датчиком проблем нет? и перегружается МК?
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
На тех бинарях прошивок что в релизе пропусков не должно быть.
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
-
- LQFP144 - On Top Of The Game
- Posts: 1664
- Joined: Fri Jul 01, 2011 2:10 pm
- Location: г Уфа
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
бинарники собранные STC без пропусков , проверено .
когда у меня были пропуски от 5го ИАР , то перезагрузки процессора я не наблюдал , ни в живую , ни в протеусе .
когда у меня были пропуски от 5го ИАР , то перезагрузки процессора я не наблюдал , ни в живую , ни в протеусе .
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
ВАЗ21310 1.7i Я7.2 2001г
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
http://sourceforge.net/projects/winavr/ ... /20060421/
-- тут winavr со старым добрым gcc 3-й версии.
и он таки не компилирует проект. может, кто допилит?
-- тут winavr со старым добрым gcc 3-й версии.
и он таки не компилирует проект. может, кто допилит?
-
- QFP80 - Contributor
- Posts: 33
- Joined: Thu Apr 12, 2012 5:32 am
Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
2 листинга файла ckps на версии 4.21 и 6.10 - отличия на лице, тока я в них не разбираюсь (( - может кто умный посмотрит... Там-же и опции компилятора видны - я ничего не менял (кроме путей), все по дефолту из релизаnikll wrote:как вариант найти ближайшую предыдущую версию которая компилирует нормально и сравнить асемблерные листинги.
Собранную прошивку на 4.21 еще не тестил, завтра залью...
- Attachments
-
- ckps_421A.zip
- версия 4.21А
- (25.18 KiB) Downloaded 1044 times
-
- ckps_610.zip
- версия 6.10
- (26.19 KiB) Downloaded 1001 times
Мой след в истории: http://skodafelicia.ru/publ/secu_3/6-1-0-78