выдает ошибку 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 ,может быть, дефолтное значение
Что за каша из регистров (адресов) и их значений? Если Вы передаете указатель на порт и маску порта (номер пина подлежащего анализу), то функция будет ожидать в реальном времени активного состояния ноги. Если речь идет о передаче еще и значения пассивного уровня и его Вы называете дефолтным, то передавайте его прямо как константу, а не пытайтесь присвоить это значение порту.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения