| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Сдвиг битов в WinAvr |
| Автор: kiLLProg 26.2.2011, 07:18 | ||
| Здравствуйте. При написании программы столкнулся с незапланированной проблемой. В языке Си есть операция сдвига битов (>>, <<). Вот код:
Отладчик показывает tmp1 = 0x0000 (после tmp1 = tmp1 << 8) а когда tmp1 = tmp1 << 4; // tmp1 = 0x0050 Я в шоке, мне нужен сдвиг на один байт влево. Я уже перерыл форумы, книги, справочники. Писал этот кусок на "Большом" компиляторе C++BuilderXE, в нем работает как надо. Подскажите пожалуйста как решить проблему. Может у вас есть свой способ сдвига битов в переменной? |
| Автор: xvr 26.2.2011, 10:48 | ||
| Код правильный. Возможно и значение tmp1 правильное, проблема может быть в том, что отладчик показывает не то, что есть на самом деле из за оптимизаций в WinAVR. Не далее как вчера собственноручно (точнее собственноножно) наступил на подобные грабли в gcc на x86-64. Была включена какая то оптимизация и генерация отладочной информации. В отладчике смотрел код:
PS. Попробуйте обновить WinAvr и отладчик на последние версии, может заработать |
| Автор: kiLLProg 26.2.2011, 14:07 |
| Оптимизацию я сразу отрубил, при оптимизации у меня программа ведёт себя просто дьявольски. Я уже скачал новый WinAvr. Хотя сейчас у меня самый новый. Но на офф. сайте вроде чуток обновлённый выложили компилятор, и я его скачал. Скоро попробую, отпишусь. П.С. Компилятор WinAvr, он какой-то подлючий..... |
| Автор: kiLLProg 26.2.2011, 15:33 |
| Как об стенку горох. Проверьте этот код в вашем WinAvr пожалуйста. Что он пишет? |
| Автор: UniBomb 26.2.2011, 19:45 |
| kiLLProg, попробуйте в объявление добавить volatile. |
| Автор: kiLLProg 27.2.2011, 06:08 |
| Спасибо за советы, volatile добавлял не помогло. Потом решил с нуля новый прект создать. Писал я сначала прогу по ATXmega32, решил создать новый проект под простую мегу32. И Вуа ля! Всё заработало как надо! Думаю вопрос решен, сбегаю в атмел.ком за новой студией. C компилятором WinAvr нужно держать ухо в острог. У меня при включенной оптимизации, программа делает всё что она хочет. Только это чего стоит. А тут еще этот глюк. |