Page 1 of 6
					
				Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 1:09 pm
				by STC
				Если собирать прошивку при помощи GCC и IAR-ом версии > 4.21, то наблюдаются пропуски зажигания.
Я тестировал на WinAVR 20100110. Более старые версии не проверял. Если у вас есть информация по более старым версиям GCC, то будет интересно.
Цель данной темы - выяснить и исправить причину описанного поведения.
Для начала нужно попытаться локализовать проблему. Наиболее вероятно что проблема в модуле ckps.c, так как этот модуль непосредственно отвечает за зажигание.
1. Нужно попробовать увеличить размер стека. В опциях компилятора;
2. Нужно убедиться что в момент пропусков микроконтроллер не перезагружается;
2. Убедиться что опции оптимизации кода не влияют на проявление проблемы;
3. Попробовать локализовать проблему путем компиляции выбранных модулей разными версиями компиляторов с последующей линковкой. Если такое возможно.
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 1:40 pm
				by skodafelicia
				STC wrote:2. Нужно убедиться что в момент пропусков микроконтроллер не перезагружается;
Как?
STC wrote:2. Убедиться что опции оптимизации кода не влияют на проявление проблемы;
Это покопаю...
 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 2:03 pm
				by STC
				Проверить перезагружался ли микроконтроллер можно используя биты регистра:
MCU Control and Status Register – MCUCSR
В даташите больше информации.
В принципе, если происходит перезагрузка, то загорается СЕ на пол секунды. Так что перезагрузку будет видно.
Но я хочу сказать что микроконтроллер необязательно может перезагружаться. Может просто происходить слетание программы (например, прыжок по некорректному адресу), а потом восстановление.
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 2:51 pm
				by nikll
				Попробуйте отключить оптимизацию (флаг -O0), более свежие версии gcc лудьше оптимизируют код, к примеру я сталкивался с тем что банальный цикл задержки типа:
for (uint16_t i = 0; i < 10000; i++);
превращался по сути в:
uint16_t i = 10000;
чтобы такого не происходило следует использовать volatile переменные в тех местах где требуется явное отключение оптимизации.
так же оптимизатор частенько разворачивает циклы и функции.
как вариант найти ближайшую предыдущую версию которая компилирует нормально и сравнить асемблерные листинги.
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 2:57 pm
				by STC
				Да, кстати насчет volatile nikll правильно заметил. Я мог забыть кое-где поставить его.
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 8:45 pm
				by CrAzYMaN
				хм, а может у меня с датчиком проблем нет? и перегружается МК?
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Fri May 11, 2012 10:48 pm
				by STC
				На тех бинарях прошивок что в релизе пропусков не должно быть.
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Sat May 12, 2012 4:10 am
				by Stranger21
				бинарники собранные STC без пропусков , проверено . 
когда у меня были пропуски от 5го ИАР , то перезагрузки процессора я не наблюдал , ни в живую , ни в протеусе .
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Sat May 12, 2012 6:42 pm
				by ender11
				http://sourceforge.net/projects/winavr/ ... /20060421/
-- тут winavr со старым добрым gcc 3-й версии.
и он таки не компилирует проект. может, кто допилит?
 
			 
			
					
				Re: Пропуски зажигания при сборке GCC и новыми верс. IAR
				Posted: Sat May 12, 2012 9:58 pm
				by skodafelicia
				nikll wrote:как вариант найти ближайшую предыдущую версию которая компилирует нормально и сравнить асемблерные листинги.
2 листинга файла ckps на версии 4.21 и 6.10 - отличия на лице, тока я в них не разбираюсь (( - может кто умный посмотрит... Там-же и опции компилятора видны - я ничего не менял (кроме путей), все по дефолту из релиза
Собранную прошивку на 4.21 еще не тестил, завтра залью...