AVR Soft Reset
AVR Soft Reset
добрый день
AVR_Soft_Reset
вопрос: почему функция реализована как define а не как "обычная функция"? в чем фикус?
спасибо
AVR_Soft_Reset
вопрос: почему функция реализована как define а не как "обычная функция"? в чем фикус?
спасибо
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
p.s. держитесь обоими руками, а то прорвет...
- Реклама
Re: AVR Soft Reset
Похоже речь идет о добавках в *.init файлах
(Для этих новых AVRs, функция должна быть добавлена к .init3 секции )
вызванных изменениями алгоритма работы аппаратной части WDT и связанных с ним
систем обслуживания сброса по сработке WDT...
Это бы спецам надо глянуть... Особо замечания по поводу самого WDT в части наовх модификаций МК...

Собственно все в статье:
"...Вот некоторый код примера, который создает макро, которое может быть названо, чтобы выполнять мягкий сброс..."

(Для этих новых AVRs, функция должна быть добавлена к .init3 секции )
вызванных изменениями алгоритма работы аппаратной части WDT и связанных с ним
систем обслуживания сброса по сработке WDT...
Это бы спецам надо глянуть... Особо замечания по поводу самого WDT в части наовх модификаций МК...
Собственно все в статье:
"...Вот некоторый код примера, который создает макро, которое может быть названо, чтобы выполнять мягкий сброс..."
Re: AVR Soft Reset
статью я пробежал глазами :о)
не понятно почему именно макрос, не inline, да и вообще не обычная функция...
ради экономии памяти?
не понятно почему именно макрос, не inline, да и вообще не обычная функция...
ради экономии памяти?
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
p.s. держитесь обоими руками, а то прорвет...
Re: AVR Soft Reset
Вычитывать относительно новых свойств собаки надо...
Скорее всего оттуда все "нюёнсы"...

Скорее всего оттуда все "нюёнсы"...
Re: AVR Soft Reset
На другом форуме уже ответил я и другие. Не жрать флэш и тратить время на сохранение регистров, переход к функции. inline не обязательно так работает, а __attribute__((always_inline)) - не стандарт. Поэтому вот макрос. Просто и стандартно. И не жрет ничего лишнее ради 1 записи в регистр и бесконечного цикла. Логично и оптимально.
- Реклама
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: AVR Soft Reset
1 - #define это определение, макрос. Текстовая замена.
2 - программисты люди, могут ошибаться. Поэтому нужно всегда придирчиво относиться к чужому тексту.
3 - программисты люди, это может быть аутист, "психи" с вывернутыми наизнанку мозгами. Наркоманы наконец. Также программист который программирует МК AVR пришёл с другой сферы деятельности. И он не будет учитывать аппаратные особенности.
Для кого то мои слова могут показаться шокирующими, у меня не было цели кого то оскорбить. Просто нужно всегда учитывать, что программисты люди. И рамки предпосылки почему он сделал так или эдак могут быть очень широкими.
2 - программисты люди, могут ошибаться. Поэтому нужно всегда придирчиво относиться к чужому тексту.
3 - программисты люди, это может быть аутист, "психи" с вывернутыми наизнанку мозгами. Наркоманы наконец. Также программист который программирует МК AVR пришёл с другой сферы деятельности. И он не будет учитывать аппаратные особенности.
Для кого то мои слова могут показаться шокирующими, у меня не было цели кого то оскорбить. Просто нужно всегда учитывать, что программисты люди. И рамки предпосылки почему он сделал так или эдак могут быть очень широкими.
Re: AVR Soft Reset
Здесь прекрасно прослеживается логика. По ссылке видно, что такие функции на ~4 инструкции лучше реализовать макросом, меньше будет занимать при вызове в большинстве случаев.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: AVR Soft Reset
Более подходящей темы не нашел.
ATtiny13A с MicroCore к Arduino IDE. "Сон" по кнопку "power on/off" ("глубокий сон": все остановлено
).
При "пробуждении" хотел "сброса МК" (из-за возможного долгого стояния sleep (дни, месяцы) не могу рассчитывать на корректно сохраненные данные в RAM-памяти. Предпочитаю получать их из EEEPROM с первоначальным установлением периферии). Долгий поиск для методов софт-ресета, со множеством проб.
Этот начин сработал (rjam до начало).
Другие возможные пути?
---
Пробовал другой вариант: с реальной ресетом:
и в начале:
Работает. МК и периферия не потребляют ток в состоянии покоя.
ATtiny13A с MicroCore к Arduino IDE. "Сон" по кнопку "power on/off" ("глубокий сон": все остановлено
При "пробуждении" хотел "сброса МК" (из-за возможного долгого стояния sleep (дни, месяцы) не могу рассчитывать на корректно сохраненные данные в RAM-памяти. Предпочитаю получать их из EEEPROM с первоначальным установлением периферии). Долгий поиск для методов софт-ресета, со множеством проб.
Этот начин сработал (rjam до начало).
Код: Выделить всё
sei();
WDTCR &= ~(1 << WDTIE); // disable watchdog timer interrupt
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep
sleep_enable();
sleep_cpu();
//----------
sleep_disable(); // wake up
WDTCR |= (1 << WDTIE); // enable watchdog timer interrupt
asm volatile ("rjmp 0"); // soft reset---
Пробовал другой вариант: с реальной ресетом:
Код: Выделить всё
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep
sleep_enable();
sleep_cpu();
//----------
sleep_disable(); // wake up
wdt_enable(WDTO_60MS);Код: Выделить всё
MCUSR = 0;
wdt_disable();Re: AVR Soft Reset
Для полного соответствия после перехода на адрес 0х0000 (для АВРок стандартный запуск программы "по reset") надо пройти по всем РСФ (используемым в программе) и выставить их в "состояние по аппаратному сбросу". А затем уже выполнить "стандартную шапку".
Обычно "шапка" начальных установок программы такими задачами не утруждается - делается лишь очистка ОЗУ и настройка РСФ на требуемый режим. Тем более в "стандартной" ардуинке... Остальные "незадействованные" РСФ остаются в произвольном (на момент останова) состоянии - не факт, что их также нужно будет привести в "состояние по reset", но бывают и "казусы".
Как вариант - задействовать один из выводов для генерации внешнего аппаратного сброса при "пробуждении" - но то уже возможно потребуется внешняя схемотехника.

Пы.Сы...
У "улучшенной среднемладшей" ПИКовых имеется специальная команда на такой случай - RESET...

Обычно "шапка" начальных установок программы такими задачами не утруждается - делается лишь очистка ОЗУ и настройка РСФ на требуемый режим. Тем более в "стандартной" ардуинке... Остальные "незадействованные" РСФ остаются в произвольном (на момент останова) состоянии - не факт, что их также нужно будет привести в "состояние по reset", но бывают и "казусы".
Как вариант - задействовать один из выводов для генерации внешнего аппаратного сброса при "пробуждении" - но то уже возможно потребуется внешняя схемотехника.
Пы.Сы...
У "улучшенной среднемладшей" ПИКовых имеется специальная команда на такой случай - RESET...
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: AVR Soft Reset
Да, значения переменных присваиваются в начале, и они не случайные (неинициализированные).
Из периферии: есть одна ИС на I2c, только инициализирую ее, и она готова к работе. Потом: возможно зарядка текущей частотой и т.д. параметры из EEPROM.
Пока работают оба способа. На раб. стол МК и ИС стоят несколько дней в покое для испытаний. Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.
(А для PIC - да, там легко - вот откуда и я пришлел
, от PIC до AVR с неизбежными трудностями на пути, но интересно).
Из периферии: есть одна ИС на I2c, только инициализирую ее, и она готова к работе. Потом: возможно зарядка текущей частотой и т.д. параметры из EEPROM.
Пока работают оба способа. На раб. стол МК и ИС стоят несколько дней в покое для испытаний. Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.
(А для PIC - да, там легко - вот откуда и я пришлел
Re: AVR Soft Reset
Почему "неверный"?veso74 писал(а):...Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.
...
Вполне возможный и оправданный вариант.
Внешняя цепочка сброса использовалась в том числе и у ПИКовых - схемы защиты от отказа основного тактового генератора (пока их во внутрь кристалла ставить не стали).
У АВРок той проблемы вроде не возникало, но решение имеет место для существования/применения.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: AVR Soft Reset
Классифицируем желание сделать сброс на напр. внешнее, аппаратное и внутреннее, программное. Внешний сброс понятно - при перепрограммировании, при полной потере управления и т.п. Для внутренней нужды используем программный сброс (пока он мне не понадобился, думаю его всегда можно избежать). А в "бедным" Atiny13A, под конкретное приложение, строка/и легко добавляется и не занимает кода (вместо новой инициализации периферии напр. после "глубокого сна"). Сам процесс интересен с точки зрения возможностей.
- Вложения
-
- avr_reset.png
- (97.55 КБ) 55 скачиваний


