AVR Soft Reset

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
sunjob
Вымогатель припоя
Сообщения: 619
Зарегистрирован: Ср дек 08, 2010 19:03:17

AVR Soft Reset

Сообщение sunjob »

добрый день

AVR_Soft_Reset

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

спасибо
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: AVR Soft Reset

Сообщение BOB51 »

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

Re: AVR Soft Reset

Сообщение sunjob »

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

не понятно почему именно макрос, не inline, да и вообще не обычная функция...
ради экономии памяти?
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: AVR Soft Reset

Сообщение BOB51 »

Вычитывать относительно новых свойств собаки надо...
Скорее всего оттуда все "нюёнсы"...
:dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: AVR Soft Reset

Сообщение NStorm »

На другом форуме уже ответил я и другие. Не жрать флэш и тратить время на сохранение регистров, переход к функции. inline не обязательно так работает, а __attribute__((always_inline)) - не стандарт. Поэтому вот макрос. Просто и стандартно. И не жрет ничего лишнее ради 1 записи в регистр и бесконечного цикла. Логично и оптимально.
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: AVR Soft Reset

Сообщение Demiurg »

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

Для кого то мои слова могут показаться шокирующими, у меня не было цели кого то оскорбить. Просто нужно всегда учитывать, что программисты люди. И рамки предпосылки почему он сделал так или эдак могут быть очень широкими.
Реклама
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: AVR Soft Reset

Сообщение NStorm »

Здесь прекрасно прослеживается логика. По ссылке видно, что такие функции на ~4 инструкции лучше реализовать макросом, меньше будет занимать при вызове в большинстве случаев.
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: AVR Soft Reset

Сообщение veso74 »

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

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();
Работает. МК и периферия не потребляют ток в состоянии покоя.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: AVR Soft Reset

Сообщение BOB51 »

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

Пы.Сы...
У "улучшенной среднемладшей" ПИКовых имеется специальная команда на такой случай - RESET...
:roll:
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: AVR Soft Reset

Сообщение veso74 »

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

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

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

(А для PIC - да, там легко - вот откуда и я пришлел :), от PIC до AVR с неизбежными трудностями на пути, но интересно).
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: AVR Soft Reset

Сообщение BOB51 »

veso74 писал(а):...Пин для внешнего аппаратного сброса не использую, думаю неправильный путь.
...
Почему "неверный"?
Вполне возможный и оправданный вариант.
Внешняя цепочка сброса использовалась в том числе и у ПИКовых - схемы защиты от отказа основного тактового генератора (пока их во внутрь кристалла ставить не стали).
У АВРок той проблемы вроде не возникало, но решение имеет место для существования/применения.
:roll:
veso74
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: AVR Soft Reset

Сообщение veso74 »

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

Вернуться в «AVR»