Например TDA7294

Форум РадиоКот • Просмотр темы - Сложный вопрос AVR на С про volatile to const
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 16:31:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 75 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пт апр 19, 2019 18:19:05 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
Код:
#include <avr/wdt.h>

volatile uint8_t &portd = PIND;      //interrupts port
const uint8_t pinint0 = 1 << INT0;   //pin INT0

void soft_reset(const uint8_t wdt_prescale, const uint8_t &port = 1, const uint8_t pin = 1){
   wdt_enable(wdt_prescale);
   while(port & pin);
   wdt_reset();
   wdt_disable();
}

void isPIRHigh(const uint8_t &port, const uint8_t pin){
   soft_reset(WDTO_8S, ~port, pin);               //finish when PD0 high
}

void isPIRLow(const uint8_t &port, const uint8_t pin){
   soft_reset(WDTO_8S, port, pin);                  //finish when PD0 low
}

void isPIRAlive(){
   isPIRHigh(portd, pinint0);
   isPIRLow(portd, pinint0);
}

void setup(){isPIRAlive();}


выдает ошибку binding 'volatile uint8_t {aka volatile unsigned char}' to reference of type 'const uint8_t& {aka const unsigned char&}' discards qualifiers

если убираю uint8_t &port = 1 то выдает ошибку invalid initialization of non-const reference of type 'uint8_t& {aka unsigned char&}' from an rvalue of type 'uint8_t {aka unsigned char}'

есть идеи?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пт апр 19, 2019 19:21:38 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
volatile uint8_t &portd
const uint8_t &port

Как это понимать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пт апр 19, 2019 19:29:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
вы, наверное, хотели указатель на порт объявить... так это делается не так:
volatile uint8_t *portd = &PORTD;

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пт апр 19, 2019 21:48:43 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
uk8amk, без const не присваивает дефолтное значение.
ARV, нет, я хотел референс на порт.pass-by-reference


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пт апр 19, 2019 22:29:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Но в Си нет ссылок!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Сб апр 20, 2019 06:17:35 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
точно! спасибо в чисто С нету. но в ардуино иде есть :) я компилю там так что подойдут и ссылки . только не понимаю как пройти компиляцию без ошибок испоьзуя ссылки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Сб апр 20, 2019 06:32:58 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вы лучше скажите, что хотите сделать. А то одни догадки только...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Сб апр 20, 2019 09:19:52 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
alex68md писал(а):
точно! спасибо в чисто С нету. но в ардуино иде есть :)
В ней C++.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Сб апр 20, 2019 22:51:22 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
Хочу передать значение порта в функцию soft _ reset. И там сравнить его рилтайм так сказать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 05:12:23 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21836
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
без const не присваивает дефолтное значение.

Смешные они, программисты... :)))
Как можно присвоить дефолтное значение переменной, которая имеет смысл входного сигнала и при этом является оригиналом, а не копией?
:dont_know:
Вы бы хотя бы иногда задумались о том, какой код может сгенерировать компилятор на планируемый Вами в исходнике анекдот....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 08:28:32 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Если объявили в volatile, то volatile и должны передавать.
Теперь посмотрим на ассемблер:
Изображение
LD R24,Z В Z будет адрес volatile uint8_t &portd = PIND;
LD сами посмотрите кому надо.
ST Y+1,R24 далее загрузка значения (не адреса) из R24 по какому-то адресу Y+1, к примеру 08F4 (не важно)
CALL все ушли в soft_reset, но там еще куда-то переход (не важно)
И так soft_reset
Изображение
И так адрес из Y+1, к примеру 08F4 (не важно), попадает в Z
LD R24,Z В Z будет наше значение, грузим в R24
AND R20,R24 что будет в R20 сами догадаетесь

А далее интересно
CPSE R20,R1
RJMP $-0002 будем здесь крутиться пока WDT не отработает 8 секунд, ТС так что там в рилтайм хотите?

Хотя может я не верно собрал, и задумка программиста была совсем другая.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 10:51:00 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21836
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
так что там в рилтайм хотите?

Под реалтаймом ЧТЕНИЯ ПОРТА понимается именно чтение порта, а не передача его значения в функцию...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 15:48:56 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
точно! спасибо в чисто С нету. но в ардуино иде есть :) я компилю там так что подойдут и ссылки . только не понимаю как пройти компиляцию без ошибок испоьзуя ссылки?


В адурине необходимо хотя-бы на начальном этапе воздержаться от прямого управления портами (хотя данный функционал вполне возможен).
Это как крайний случай выполняется опционное примитив-управление, но не факт, что не войдет в конфликт при использовании иных базовых функций - того же analogWrite(), tone() и кой-чего иного, ориентированного на использовании портов.
В ассемблере/чистом Си/ используется чтение-модификация-запись и/или маски для "неиспользуемых" в прикладной подпрограмме линий.
Альтернатива - полное монопольное использование порта на ввод или на вывод единственной задачей, использование временных буферов данных с которыми работает программа обработки при последующем вводе/выводе в порт.
:roll:
И какой там soft_reset через ногодрыг??
Иное дело программный JMP на 0х0000, а попытка дернуть вывод reset в принципе есть весьма сомнительный садомазохизм.
Линия reset конфигурируется как вход только через фузы (теряя при том функционал линии сброса и получая шанс убить МК до статуса реанимации фузе-доктором). Какой смысл тогда в "ногодрыжном" сбросе?
Другое дело какой-нить внешний триггер т.к. при сбросе вывод, его вызвавший может досрочно "отвалиться" в Z-состояние...
:dont_know:
Передача параметра по указателю или как переменной в адурине допускается только для функций не касающихся обработки прерываний. Ежли функция обрабатывает прерывание - то ничего не принимает и ничего не возвращает.
Это АДУРИНА.
Там иной принцип обмена должен использоваться.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 16:44:13 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Скорее автор хочет отловить последовательность 101, короткий импульс. Все остальное WDT перезагрузит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Вс апр 21, 2019 20:28:04 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
На все вопросы смогу ответить позже, сейчас отвечу на главный возникший в последних постах
(плиз не надо язвить и передергивать.)
В soft reset мы через while проверяем состояние пина. Точнее ожидаем заданное состояние пина. Если оно не распознается за 8 с то МК правильно перезагрузиться (а не через JMP 0). И процесс инициализации начнется заного. Неспорю кто-то логику организует красивее правильнее проще. Я смог так. Поверка пина нам нужна рил тайм , т.е. состояние порта может измениться же в любую мс, поэтому я не могу проверять статичное значение некой переменной. Дефолтное значение нужно т.к. не всегда передается порт но при этом while должен отработать как задумано а не крешнуться.

Другими словами логика очень простая. Но вот орфаграфия Си с её ссылками законами наследсвеностью не принимает такой простой и логичный кмк код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пн апр 22, 2019 01:30:22 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21836
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Дефолтное значение нужно т.к. не всегда передается порт

Ерунда какая то....
А что еще может быть вместо порта?
Вы либо открывайте ВЕСЬ СПЕКТР своих задумок, либо не задавайте вопросов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пн апр 22, 2019 08:48:36 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Для такого варианта достаточно внешних прерываний - их у адуринки минимум два.
Зачем программный опрос ставить?
По старт - моменту активируем внешнее прерывание и работаем дальше. А уж по прерыванию творим чего хотим.
Или функцию pulseIn() используем.
Для анализа отдельной лапки (или бита в байте переменной) есть набор функций работы с битами, в частности bitRead()...
Хоть с референсом ознакомиться надо (минимум тем, что в составе IDE в папке установки находится).
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пн апр 22, 2019 10:45:31 
Грызет канифоль

Зарегистрирован: Сб янв 03, 2015 21:03:24
Сообщений: 266
Рейтинг сообщения: 0
@"А что еще может быть вместо порта?"
так 1 ,может быть, дефолтное значение :)

@"Для такого варианта достаточно внешних прерываний"
они и стоят на прервывание, но оно инициализируеться позже. прежде чем его инициализировать надо убедиться что на входе и 0 и 1 а не только 1 :) иначе можно не проснуться ожидая 0 например.

для анализа лапки я как раз и делаю bitread в while через pass-by-reference

друзья , так как же ошибку исправить в коде ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пн апр 22, 2019 11:14:32 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
я не понимаю, нафига там ссылки?
Код:
void wait_reset(volatile uint8_t *port){
   if(port == NULL) {
      // обрабатываем "дефолтное" значение
   } else {
      // обрабатываем состояние порта
      while(*port == 0){
         // ждем, пока не установится какой-то там уровень
      } 
   }
}

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Сложный вопрос AVR на С про volatile to const
СообщениеДобавлено: Пн апр 22, 2019 13:09:53 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21836
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
@"А что еще может быть вместо порта?"
так 1 ,может быть, дефолтное значение :)

Что за каша из регистров (адресов) и их значений?
Если Вы передаете указатель на порт и маску порта (номер пина подлежащего анализу), то функция будет ожидать в реальном времени активного состояния ноги. Если речь идет о передаче еще и значения пассивного уровня и его Вы называете дефолтным, то передавайте его прямо как константу, а не пытайтесь присвоить это значение порту.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 75 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: OKF и гости: 33


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y