Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

AVRStudio косяк :(

Непрочитано 26.04.2010, 11:32  
Classic001
Временная регистрация
 
Регистрация: 13.10.2009
Сообщений: 81
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Classic001 на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от st_1 Посмотреть сообщение
Один компилятор не соптимизирует, а другой проглотит и сделает вид что там ничего и небыло.
Ну компилятор нам заведомо известен. О нём и говорим.

Сообщение от st_1 Посмотреть сообщение
Дык, volatile и static тоже не с бодуна же придумали, наверно не зря?
Честно ? Я в программировании на Си - полный дуб. Но как ни странно, первой моей программой был биллинг интернета написанный шесть лет назад. И поныне через него спокойно текут деньги. Без ошибок. Я больше привык к языкам без абстрактных указателей. Если объясните чем мне могут помочь volatile и static - буду признателен.

Сообщение от testerplus Посмотреть сообщение
Код:

sek = 1;
if (sek == 240) ...

и делает вывод, что условие никогда не выполняется.
Безусловно делает. Тут кто угодно, а не только компилятор, посчитает такой код бредом. Хотя у него тоже есть одно применение - но всё же корявое. А вот если между ними встретится while - то компилятор спокойно это прожуёт.

Сообщение от testerplus Посмотреть сообщение
Вот пример, где без volatile может возникнуть проблема.
Для неблокируещего ВВ через юарт всегда использовал кольцевые буфферы. Самодельные. Никаких проблем никогда не было. Но это не значит что их быть не может: главное правильно это писать/использовать.
Реклама:
Classic001 вне форума  
Сказали "Спасибо" Classic001
a1ex64 (26.04.2010)
Непрочитано 26.04.2010, 11:48  
Pavlike
Временная регистрация
 
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Pavlike на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от Classic001 Посмотреть сообщение
Вообщет выкидывать код он будет если с переменной не производится никаких действий по её изменению. В коде изменение в прерывании. На ум приходит только неподключенный модуль interrupt.h. Но тогда вроде бы и sei работать не должна.

Объясните. Я косяков не вижу. Кроме непонятных мне функций led_r_off() и led_r_on. При том, что вроде такие вещи правильнее решать define'ами.
Вот откуда led_on и off (стоят внвчале):
inline void led_r_off()
{
PORTB &= ~( 1 ‹‹ PB0 );
}

inline void led_r_on()
{
PORTB |= ( 1 ‹‹ PB0 );
}
Pavlike вне форума  
Сказали "Спасибо" Pavlike
a1ex64 (26.04.2010)
Непрочитано 26.04.2010, 11:53  
Pavlike
Временная регистрация
 
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Pavlike на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от testerplus Посмотреть сообщение
Автору топика: используйте тег CODE для оформления текста программы. У себя-то, небось, с отступами все видите?
Простите, первый раз оформлял тему, учту на будущее!
Pavlike вне форума  
Сказали "Спасибо" Pavlike
a1ex64 (26.04.2010)
Непрочитано 26.04.2010, 12:05  
Classic001
Временная регистрация
 
Регистрация: 13.10.2009
Сообщений: 81
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Classic001 на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от Pavlike Посмотреть сообщение
Вот откуда led_on и off (стоят внвчале)
Да я понял что они есть. Просто не понял почему так криво оформленны. Тут значительно удобочитаемее было бы использовать define'ы
Classic001 вне форума  
Непрочитано 26.04.2010, 12:10  
Pavlike
Временная регистрация
 
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Pavlike на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от testerplus Посмотреть сообщение
Сообщение от Classic001

Никогда не использовал volatile - всегда вроде и так работало.
В том и дело, я тоже раньше писал таким образом и все работало... (без volatile)
Pavlike вне форума  
Непрочитано 26.04.2010, 12:13  
Classic001
Временная регистрация
 
Регистрация: 13.10.2009
Сообщений: 81
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Classic001 на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от Pavlike Посмотреть сообщение
В том и дело, я тоже раньше писал таким образом и все работало...
Да я тоже Ваш код дополнил до компиляции и всё по прежнему работает. Ну кроме, конечно, задержек. Компилятор не выкидывает код со стандартным уровнем оптимизации.
Classic001 вне форума  
Непрочитано 26.04.2010, 12:22  
Classic001
Временная регистрация
 
Регистрация: 13.10.2009
Сообщений: 81
Сказал спасибо: 2
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Classic001 на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Тут стало скучно и решил проверить.
Сообщение от testerplus Посмотреть сообщение
Проверка sek==240 производится с интервалом 100 мс. За это время прерывание может успеть сработать несколько раз.
Каким именно образом прерывание, настроенное на возникновение раз в секунду может срабатывать несколько раз за 100 мс ?
Classic001 вне форума  
Непрочитано 26.04.2010, 12:24  
Pavlike
Временная регистрация
 
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Pavlike на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Действительно, с volatile - компилит правильно!

Возникло еще пару вопросов:
1. Варианты оптимизации стоят только в свойствах проекта? (- Os) И где можно почитать описание про это(раньше туда не залазил), я так понимаю - это не в описании AVRStudio а в компиляторе.
2. Возможно ли поместить глобальную переменную в регистр? без использования памяти.
Pavlike вне форума  
Непрочитано 26.04.2010, 12:26  
Pavlike
Временная регистрация
 
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Pavlike на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от Classic001 Посмотреть сообщение
Каким именно образом прерывание, настроенное на возникновение раз в секунду может срабатывать несколько раз за 100 мс ?
Прерывание - 1 сек. В теле цикла я хочу каждые 4 минуты (240 секунд) писать в EPROM. А задержка в цикле условная, возможно ее вообще там небудет( там работа с SPI).
Pavlike вне форума  
Непрочитано 26.04.2010, 12:27  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: AVRStudio косяк :(

Сообщение от Classic001 Посмотреть сообщение
Да я тоже Ваш код дополнил до компиляции и всё по прежнему работает. Ну кроме, конечно, задержек. Компилятор не выкидывает код со стандартным уровнем оптимизации.
Прикольно. И я дополнил код. Задержки работают, код сравнения:
1. При закомментированной sek=1 остается и работает через регистр (автору топика обратить внимание на дизассемблер входа в цикл while(1), сразу перед ним - копирование из ячейки 0x60 в регистр r18 )
2. При раскомментированном sek=1 код проверки условия и всего содержимого опреаторных скобок if {} выкидывается. Могу привести полный листинг.
3. При определении sek с квалификатором volatile код перестает выкидываться компилятором.

Кстати, что Вы имеете ввиду под "стандартным уровнем оптимизации"? Если -o0, то это "без оптимизации", в этом случае код, действительно, будет оставлен (оно и понятно). На всех остальных уровнях: -o1, -o2, -o3, -oS - код условия выкидывается, если не ставить volatile.

Цитата:
Но как ни странно, первой моей программой был биллинг интернета написанный шесть лет назад. И поныне через него спокойно текут деньги. Без ошибок.
Я по профессии занимаюсь поиском ошибок в чужих прораммах. И уже много раз разбирался с исходниками программ, которые несколько лет работали, как часы, а потом давали сбой (иногда необратимый), причины ошибок в которых были связаны с недопониманием программистом квалификатора volatile. Если хотите, могу объяснить подробнее на примере программы из этого топика.

Последний раз редактировалось testerplus; 26.04.2010 в 12:31.
testerplus вне форума  
Сказали "Спасибо" testerplus
Pavlike (26.04.2010)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с AVRstudio jafarkiller Микроконтроллеры, АЦП, память и т.д 9 08.04.2010 21:42


Часовой пояс GMT +4, время: 23:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.