Обсуждаем контроллеры компании Atmel.
Ответить

AVR Soft Reset

Чт дек 26, 2019 08:05:48

добрый день

AVR_Soft_Reset

вопрос: почему функция реализована как define а не как "обычная функция"? в чем фикус?

спасибо

Re: AVR Soft Reset

Чт дек 26, 2019 10:38:13

Похоже речь идет о добавках в *.init файлах
(Для этих новых AVRs, функция должна быть добавлена к .init3 секции )
вызванных изменениями алгоритма работы аппаратной части WDT и связанных с ним
систем обслуживания сброса по сработке WDT...
Это бы спецам надо глянуть... Особо замечания по поводу самого WDT в части наовх модификаций МК...
:roll:
Собственно все в статье:
"...Вот некоторый код примера, который создает макро, которое может быть названо, чтобы выполнять мягкий сброс..."
:roll:

Re: AVR Soft Reset

Чт дек 26, 2019 11:09:04

статью я пробежал глазами :о)

не понятно почему именно макрос, не inline, да и вообще не обычная функция...
ради экономии памяти?

Re: AVR Soft Reset

Чт дек 26, 2019 13:01:39

Вычитывать относительно новых свойств собаки надо...
Скорее всего оттуда все "нюёнсы"...
:dont_know:

Re: AVR Soft Reset

Чт дек 26, 2019 13:35:34

На другом форуме уже ответил я и другие. Не жрать флэш и тратить время на сохранение регистров, переход к функции. inline не обязательно так работает, а __attribute__((always_inline)) - не стандарт. Поэтому вот макрос. Просто и стандартно. И не жрет ничего лишнее ради 1 записи в регистр и бесконечного цикла. Логично и оптимально.

Re: AVR Soft Reset

Чт дек 26, 2019 14:23:07

1 - #define это определение, макрос. Текстовая замена.
2 - программисты люди, могут ошибаться. Поэтому нужно всегда придирчиво относиться к чужому тексту.
3 - программисты люди, это может быть аутист, "психи" с вывернутыми наизнанку мозгами. Наркоманы наконец. Также программист который программирует МК AVR пришёл с другой сферы деятельности. И он не будет учитывать аппаратные особенности.

Для кого то мои слова могут показаться шокирующими, у меня не было цели кого то оскорбить. Просто нужно всегда учитывать, что программисты люди. И рамки предпосылки почему он сделал так или эдак могут быть очень широкими.

Re: AVR Soft Reset

Чт дек 26, 2019 15:43:25

Здесь прекрасно прослеживается логика. По ссылке видно, что такие функции на ~4 инструкции лучше реализовать макросом, меньше будет занимать при вызове в большинстве случаев.

Re: AVR Soft Reset

Вт фев 14, 2023 19:23:55

Более подходящей темы не нашел.

ATtiny13A с MicroCore к Arduino IDE. "Сон" по кнопку "power on/off" ("глубокий сон": все остановлено :P).

При "пробуждении" хотел "сброса МК" (из-за возможного долгого стояния 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

Ср фев 15, 2023 11:17:21

Для полного соответствия после перехода на адрес 0х0000 (для АВРок стандартный запуск программы "по reset") надо пройти по всем РСФ (используемым в программе) и выставить их в "состояние по аппаратному сбросу". А затем уже выполнить "стандартную шапку".
Обычно "шапка" начальных установок программы такими задачами не утруждается - делается лишь очистка ОЗУ и настройка РСФ на требуемый режим. Тем более в "стандартной" ардуинке... Остальные "незадействованные" РСФ остаются в произвольном (на момент останова) состоянии - не факт, что их также нужно будет привести в "состояние по reset", но бывают и "казусы".
Как вариант - задействовать один из выводов для генерации внешнего аппаратного сброса при "пробуждении" - но то уже возможно потребуется внешняя схемотехника.
8)

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

Re: AVR Soft Reset

Ср фев 15, 2023 11:46:04

Да, значения переменных присваиваются в начале, и они не случайные (неинициализированные).

Из периферии: есть одна ИС на I2c, только инициализирую ее, и она готова к работе. Потом: возможно зарядка текущей частотой и т.д. параметры из EEPROM.

Пока работают оба способа. На раб. стол МК и ИС стоят несколько дней в покое для испытаний. Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.

(А для PIC - да, там легко - вот откуда и я пришлел :), от PIC до AVR с неизбежными трудностями на пути, но интересно).

Re: AVR Soft Reset

Чт фев 16, 2023 11:04:42

veso74 писал(а):...Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.
...

Почему "неверный"?
Вполне возможный и оправданный вариант.
Внешняя цепочка сброса использовалась в том числе и у ПИКовых - схемы защиты от отказа основного тактового генератора (пока их во внутрь кристалла ставить не стали).
У АВРок той проблемы вроде не возникало, но решение имеет место для существования/применения.
:roll:

Re: AVR Soft Reset

Чт фев 16, 2023 11:50:36

Классифицируем желание сделать сброс на напр. внешнее, аппаратное и внутреннее, программное. Внешний сброс понятно - при перепрограммировании, при полной потере управления и т.п. Для внутренней нужды используем программный сброс (пока он мне не понадобился, думаю его всегда можно избежать). А в "бедным" Atiny13A, под конкретное приложение, строка/и легко добавляется и не занимает кода (вместо новой инициализации периферии напр. после "глубокого сна"). Сам процесс интересен с точки зрения возможностей.
Вложения
avr_reset.png
(97.55 KiB) Скачиваний: 31
Ответить