![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| kiLLProg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Здравствуйте. При написании программы столкнулся с незапланированной проблемой. В языке Си есть операция сдвига битов (>>, <<).
Вот код:
Отладчик показывает tmp1 = 0x0000 (после tmp1 = tmp1 << 8) а когда tmp1 = tmp1 << 4; // tmp1 = 0x0050 Я в шоке, мне нужен сдвиг на один байт влево. Я уже перерыл форумы, книги, справочники. Писал этот кусок на "Большом" компиляторе C++BuilderXE, в нем работает как надо. Подскажите пожалуйста как решить проблему. Может у вас есть свой способ сдвига битов в переменной? Это сообщение отредактировал(а) kiLLProg - 26.2.2011, 10:26 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Код правильный. Возможно и значение tmp1 правильное, проблема может быть в том, что отладчик показывает не то, что есть на самом деле из за оптимизаций в WinAVR.
Не далее как вчера собственноручно (точнее собственноножно) наступил на подобные грабли в gcc на x86-64. Была включена какая то оптимизация и генерация отладочной информации. В отладчике смотрел код:
PS. Попробуйте обновить WinAvr и отладчик на последние версии, может заработать |
|||
|
||||
| kiLLProg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Оптимизацию я сразу отрубил, при оптимизации у меня программа ведёт себя просто дьявольски. Я уже скачал новый WinAvr. Хотя сейчас у меня самый новый. Но на офф. сайте вроде чуток обновлённый выложили компилятор, и я его скачал. Скоро попробую, отпишусь.
П.С. Компилятор WinAvr, он какой-то подлючий..... |
|||
|
||||
| kiLLProg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Как об стенку горох.
Проверьте этот код в вашем WinAvr пожалуйста. Что он пишет? |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
kiLLProg, попробуйте в объявление добавить volatile.
|
|||
|
||||
| kiLLProg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Спасибо за советы, volatile добавлял не помогло.
Потом решил с нуля новый прект создать. Писал я сначала прогу по ATXmega32, решил создать новый проект под простую мегу32. И Вуа ля! Всё заработало как надо! Думаю вопрос решен, сбегаю в атмел.ком за новой студией. C компилятором WinAvr нужно держать ухо в острог. У меня при включенной оптимизации, программа делает всё что она хочет. Только это чего стоит. А тут еще этот глюк. Это сообщение отредактировал(а) kiLLProg - 27.2.2011, 15:48 |
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |