Сообщение от mr.DIMAS
Кстати о коде. Это просто п*здец ребята! Микрик повисал через 4-5 минут после запуска. Сначала думал что USART глючит, переписал - потестил в Протее( Proteus ) - все пучком - USART работает нормально( и до этого нормально работал ). Но зависания остались. Оказалось что счетчик шагов ( объявленный как short ) повреждался при вызове прерываний( таймер и USART ), мега32 то 8-битный контроллер поэтому любое действие с переменной больше 8бит занимает несколько операций. Атомарность( если не понятно, погуглите ) операций отняла у меня 4 дня на отладку. В итоге как только изменение stepsCount( и других short'ов ) взял под ATOMIC_BLOCK( ATOMIC_FORCEON )( типа мьютекса ) все стало работать как часы. Это просто EPIC FAIL. Довольно сумбурно написал, но думаю суть понятна.
|
Так ясное дело, надо перед атомарными операциями прерывания запрещать,
cli и никаких проблем.