Страница 1 из 1

Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Пн янв 25, 2016 20:01:06
gessor
Не могу понять, почему компилятор пропускает некоторые команды в зацикливании while(1) в основном цикле программы. Вот текст на Си в процессе отладки:
СпойлерИзображение
При пошаговом выполнении программы, после желтой строчки компилятор сначала прыгает на n++ и только потом на sei().
Это видно в дизассемблере, что компилятор засунул команды именно в таком порядке:
СпойлерИзображение
Пробовал пересоздавать проект, закомментировать разные строчки, в том числе n++. Но в цикл while(1) он все равно заходит как-то в середину, а не с первой строчки.

Есть еще ряд проблем. Например, компилятор не сбрасывает флаг прерывания и поэтому его приходится сбрасывать вручную в основном цикле. Иначе прерывание выполняется один раз, а потом таймер считает, а флаг висит.

И в основном цикле, когда программа заходит в функцию задержки _delay_ms() внутри нее сбрасывается флаг глобального разрешения прерываний. Из-за чего опять все работает через одно место.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Пн янв 25, 2016 20:57:59
bob1
все правильно работает. компилятор оптимизировал код. sei у вас написано до установки портов и в начале цикла. логика работы не изменилась!!! хотите чтоб скакало по вашему коду....выключайте оптимизацию!!!

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Пн янв 25, 2016 21:09:55
gessor
Черт побери, вы гений! Но это не отменяет двух других проблем тогда.

Завтра на работе посмотрю где эта оптимизация. Но днем тоже была проблема когда лазил в настройки и думал в чем может быть проблема.
СпойлерИзображение
Toolchains почему-то указан 32-бит. Когда выбирал 8 бит и сохранял, значение не менялось и потом в этой вкладке все равно было 32 бита. Это принципиально или нет?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Сб янв 30, 2016 22:03:23
yaotzin
gessor может в этом проблема?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 19:27:43
artemik32
Почему у меня компилятор игнорирует условие if в конце программы, оптимизация на минимуме, если её отключить совсем, то размер кода вырастает в 20 раз и программа не влазит на флэш память МК. Работаю в AVR Studio 6.2. Подскажите куда грести, если кто сталкивался.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 21:06:49
ARV
очевидно, потому что результат проверки условия предсказуем заранее и известен еще на этапе компиляции.
вангую, что всегда выполняется PORTD &= ~(1<<0); - верно?

P.S. вообще-то код принято в соответствующий тег оформлять и сворачивать в спойлер при необходимости, а не картинкой

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 21:12:56
yaotzin
artemik32 может из-за этого
СпойлерИзображение

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 21:29:00
artemik32
Это из книги Прокопенко, я по ней и делаю. Я проверяю младший бит переменной knopki и если он равен 1 - подаю на пин PORTD - 1, если равен 0, то - 0. А как тег оформлять - текст вставлять вместо картинки?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 21:47:26
ARV
Так я угадал, что вместо проверки всегда сразу выводится 0 в порт?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Вт фев 16, 2016 21:48:22
yaotzin
там таких ошибок нету =) да и циклов таких =) это что в цикле 8 раз проверка кнопки О_о
на 303 странице там телефонная клавиатура, если у вас дофига кнопок.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Ср фев 17, 2016 21:19:27
artemik32
ARV писал(а):Так я угадал, что вместо проверки всегда сразу выводится 0 в порт?
Да, верно.
yaotzin писал(а):там таких ошибок нету =) да и циклов таких =) это что в цикле 8 раз проверка кнопки О_о
Да, я написал как в книге, и теперь работает как надо - немного лишнего написал - перестраховался.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Ср фев 17, 2016 21:37:29
yaotzin
artemik32 ааа понял, написали как в книге и теперь заработало =)

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Ср фев 17, 2016 22:56:04
ARV
А разве не интересно, как я угадал? Или уже сами разобрались, где именно была проблемка?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Ср фев 17, 2016 23:39:25
yaotzin
ARVпотому что он один раз условие проверил а потом второй раз его проверяет =) да и проверка по 8 раз в цикле или нажалась кнопка это жесть.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Чт фев 18, 2016 06:59:12
ARV
увы, причина не в том. проверка стопицот раз условия - это неоптимальность алгоритма, но если проверка корректная, это не ошибка. ошибка в другом: имелось непонимание того, как работает то, что написано.

вот на этой картинке http://radiokot.ru/forum/download/file.php?id=242657 показан кусочек кода - обратите внимание на место, где выделено красным: оператор knopki = knopki << 1; сдвигает влево содержимое переменной, а справа дополняет НУЛЯМИ. поэтому после первого же сдвига в младшем бите будет 0 - хоть миллиард раз потом проверяй, этот бит будет ВСЕГДА равен 0. поэтому следующий оператор проверки ВСЕГДА пойдет по одной ветке, компилятор это видит и вообще может выкинуть все последующие использования knopki, особенно если учесть, что сдвиги делаются в цикле 8 раз, т.е. после выхода из цикла переменная knopki ВСЕГДА будет обнулена.

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Чт фев 18, 2016 11:04:11
yaotzin
ARV
вообще если уж на то пошло там после else скобок блока кода нету. {}

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Чт фев 18, 2016 11:19:38
ARV
yaotzin, вы что, мое сообщение не внимательно прочли? к чему ваши слова, что они меняют?

Re: Проскакивает инструкции в отладчике AVR Studio.

Добавлено: Чт фев 18, 2016 11:33:08
yaotzin
ARV всё верно вы написали, я просто еще скобок заметил что нет :)))