выдает ошибку 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}'
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
точно! спасибо в чисто С нету. но в ардуино иде есть я компилю там так что подойдут и ссылки . только не понимаю как пройти компиляцию без ошибок испоьзуя ссылки?
Смешные они, программисты... Как можно присвоить дефолтное значение переменной, которая имеет смысл входного сигнала и при этом является оригиналом, а не копией?
Вы бы хотя бы иногда задумались о том, какой код может сгенерировать компилятор на планируемый Вами в исходнике анекдот....
Если объявили в 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 секунд, ТС так что там в рилтайм хотите?
Хотя может я не верно собрал, и задумка программиста была совсем другая.
точно! спасибо в чисто С нету. но в ардуино иде есть я компилю там так что подойдут и ссылки . только не понимаю как пройти компиляцию без ошибок испоьзуя ссылки?
В адурине необходимо хотя-бы на начальном этапе воздержаться от прямого управления портами (хотя данный функционал вполне возможен). Это как крайний случай выполняется опционное примитив-управление, но не факт, что не войдет в конфликт при использовании иных базовых функций - того же analogWrite(), tone() и кой-чего иного, ориентированного на использовании портов. В ассемблере/чистом Си/ используется чтение-модификация-запись и/или маски для "неиспользуемых" в прикладной подпрограмме линий. Альтернатива - полное монопольное использование порта на ввод или на вывод единственной задачей, использование временных буферов данных с которыми работает программа обработки при последующем вводе/выводе в порт.
И какой там soft_reset через ногодрыг?? Иное дело программный JMP на 0х0000, а попытка дернуть вывод reset в принципе есть весьма сомнительный садомазохизм. Линия reset конфигурируется как вход только через фузы (теряя при том функционал линии сброса и получая шанс убить МК до статуса реанимации фузе-доктором). Какой смысл тогда в "ногодрыжном" сбросе? Другое дело какой-нить внешний триггер т.к. при сбросе вывод, его вызвавший может досрочно "отвалиться" в Z-состояние...
Передача параметра по указателю или как переменной в адурине допускается только для функций не касающихся обработки прерываний. Ежли функция обрабатывает прерывание - то ничего не принимает и ничего не возвращает. Это АДУРИНА. Там иной принцип обмена должен использоваться.
На все вопросы смогу ответить позже, сейчас отвечу на главный возникший в последних постах (плиз не надо язвить и передергивать.) В soft reset мы через while проверяем состояние пина. Точнее ожидаем заданное состояние пина. Если оно не распознается за 8 с то МК правильно перезагрузиться (а не через JMP 0). И процесс инициализации начнется заного. Неспорю кто-то логику организует красивее правильнее проще. Я смог так. Поверка пина нам нужна рил тайм , т.е. состояние порта может измениться же в любую мс, поэтому я не могу проверять статичное значение некой переменной. Дефолтное значение нужно т.к. не всегда передается порт но при этом while должен отработать как задумано а не крешнуться.
Другими словами логика очень простая. Но вот орфаграфия Си с её ссылками законами наследсвеностью не принимает такой простой и логичный кмк код.
Для такого варианта достаточно внешних прерываний - их у адуринки минимум два. Зачем программный опрос ставить? По старт - моменту активируем внешнее прерывание и работаем дальше. А уж по прерыванию творим чего хотим. Или функцию pulseIn() используем. Для анализа отдельной лапки (или бита в байте переменной) есть набор функций работы с битами, в частности bitRead()... Хоть с референсом ознакомиться надо (минимум тем, что в составе IDE в папке установки находится).
@"А что еще может быть вместо порта?" так 1 ,может быть, дефолтное значение
@"Для такого варианта достаточно внешних прерываний" они и стоят на прервывание, но оно инициализируеться позже. прежде чем его инициализировать надо убедиться что на входе и 0 и 1 а не только 1 иначе можно не проснуться ожидая 0 например.
для анализа лапки я как раз и делаю bitread в while через pass-by-reference
void wait_reset(volatile uint8_t *port){ if(port == NULL) { // обрабатываем "дефолтное" значение } else { // обрабатываем состояние порта while(*port == 0){ // ждем, пока не установится какой-то там уровень } } }
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
@"А что еще может быть вместо порта?" так 1 ,может быть, дефолтное значение
Что за каша из регистров (адресов) и их значений? Если Вы передаете указатель на порт и маску порта (номер пина подлежащего анализу), то функция будет ожидать в реальном времени активного состояния ноги. Если речь идет о передаче еще и значения пассивного уровня и его Вы называете дефолтным, то передавайте его прямо как константу, а не пытайтесь присвоить это значение порту.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения