ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
137848
mavpsk (07.11.2008 12:15, просмотров: 12211)
Непонятный глюк возник вчера у меня с мегой48... Добрый день. А может быть такое, что по некой причине (брак?) код программы попадающий на определенное место памяти исполняется неверно? Два дня ломал голову... Разработка вроде не сложная, но одна из моих первых. Суть в двух словах - атмега48, используется один канал АЦП, динамическая ЖК-индикация, один таймер/счетчик в качестве ШИМ, второй переключает индикацию (меняет разряд на индикаторе) и здесь-же опрашивает матричную клавиатуру (4х3)... Всё работало за исключением клавиатуры - над опросом клавиатуры пробился два вечера. В итоге - получается, если я комментарю какой-нибудь код написанный ранее (выше) опроса клавиатуры, клавиатура начинает нормально опрашиваться и по портам определяется нажатая кнопка, по кнопке определяется шаблон для индикатора, индикатор светит номер нажатой кнопки. Возвращаю код в полный вид - с клавиатуры получается нормально три кнопки (т.е. при нажатии одной из трех кнопок на дисплее загорается её номер, по остальным - кракозябры, как буд-то "шаблон" какие сегменты индикатора светить получается изнеоткуда/хаотично). Внутрисхемного отладчика у меня нет, в итоге, после мучительно долгой отладки отрезанием кусков кода командой безусловного перехода, нашел место в коде где сбоит: ... sbis PINB,COL1 ;find column of keypress ldi tmp,0 sbis PINB,COL2 ldi tmp,1 sbis PINB,COL3 ldi tmp,2 sbis PINB,COL4 ldi tmp,3 add key,tmp dec key out EEARL,key ;address EEPROM sbi EECR,EERE ;strobe EEPROM in tmp,EEDR ; здесь сбоит lsl tmp rcall get_symbol mov dig1,tmp ... Вот здесь в tmp получается мусор. Подумал проблемы с чтением из еепром, закомментировал, заменил на mov tmp,key. Мусор остался... Вылечилось всё "как рукой", после того как вставил 10 nopов в место где комментарий "здесь сбоит". Всё заработало как часы. Поменял 10 нопов на цикл из 10 нопов - сбои вернулись... Это реально, что сбой зависит просто от места команд в результирующем хексе, или в памяти, не знаю как назвать :) ? Прошивка в МК шьется и проверяется нормально, если перепрошить раз пять одним хексом - глюк повторяется в точности, т.е. это не плавающая по времени/случайности проблема... Или второе предположение - при компиляции, AVR Studio не может глючить и в определенном месте кода при неких обстоятельствах давать ошибку? Никто не сталкивался?