Сап, программач. Обстоятельства вынудили меня выйти из забвения (длившегося почти год) и молить о помощи.Есть один AVR - Atmega32. Код пишется на С в обычном блокноте и собирается AVR_GCC. МК шьётся индусским eXtreme Burner AVR. Код состоит из примерно 700 строк, на МК используются два таймера, прерывания по INT0, и почти постоянное чтение из eeprom, UART, тактируется от кварца 8МГц. К сожалению, не могу полностью запилить исходник сюда пока. На данном этапе все работает более-менее корректно, но стоит добавить еще пару строк в switch case, и начинает происходить неведомая хуйня - МК выполняет произвольные куски кода, отсылает в UART разной степени дичь, в общем жопа. Иногда дичь начинает происходить после первого прерывания по таймеру - через пять секунд после запуска. Если убрать добавленные кейсы - все становится как надо. Подобная чушь уже происходила на восьмой атмеге, вылечилось переносом переменной в другое место. Пробовал разные уровни оптимизации s, 1, 2, 3 - почти не меняется ничего. Пробовал разное тактирование - от внешнего, от внутреннего, limited swing и full swing на внешнем. Подскажите, куда копать хоть. Или это косяк уже самой 32-й - в таком случае не вижу ничего более лучшего, чем переходить на stm32 (хотя желательно, все же, остаться на атмеге).
>>863308 (OP)как обычно, выключай любую оптимизацию, создавай ассемблерный дамп и ковыряйся в свитче
>>863315Немного неправильно указал - дичь начинается практически от любого действия с переменной, не обязательно свитч.
>>863308 (OP)break нигде не забыл?
тут много ньюансов, нужно знать архитектуру железа. может пишется в какую нибудь память только для чтения, нарушается сегментация, превышается макс. размер и т.д. и т.п. сделай два асм дампа, один из которых крашится и сравнивай.
Расходимся, посоны.Размер самой программки был в норме, а вот SRAM при переполнении начинает творить подобную хуйню. А его в атмеге мало.Может, кому пригодится мой опыт
>>863308 (OP)> и начинает происходить неведомая хуйняУ тебя кончился RAM. С атмегами такое случается постоянно. Засунь часть неизменяемых данных в ROM с помощью ключевого слова. Это может помочь