Ви не увійшли.
взагалі не задумуючись. Правильні макроси спрощують життя.
Ну если всё записано в одну строчку, то в принципе нормально.
В принципе удобно записывать все биты регистра, т.к. визуально видно как они расположены в самом мк (по ДШ).
Я маю на увазі з точки зору стандарту мови програмування в загальному. Він нічого "не знає" про біти, флаги та інструкції.
Ну в целом логично, если число знаковое, то он не понимает как можно сдвинуть знак без самого, собственно, числа.
Саме так. А при зсуві signed:
Хм. Надо почитать, никогда не задавался этим вопросом. Всегда казалось, что сдвиг это команда LSL (LSR) с установкой флага переноса и этому флагу ваще побоку знаковое число или нет, просто ячейка, что выпадает переносится во флаг и по нему уже идет анализ установлен был бит или нет. Понятно что по этому же флагу (carry) определяется знак, но в случае "обычного" сдвига как бы зачем?
Поведінка (1 << 15) при 16-бітному int не визначена стандартом.
За стандарт не скажу, честно не знаю. Но помню книжка писала, что если не указано явно unsigned, то по умолчанию переменная всегда signed.
В gcc є підтримка named address spaces (ISO/IEC DTR 18037), так що в C __flash працює (для читання генерується lpm). В arduino, яке базується на C++, такого не буде.
Та блин, эти стандарты уже так разрослись и отличаются, что уже не уследишь. )) Например, под тот же esp32, если написал достаточно объемный проект на родном фреймворке esp-idf, то адаптировать, чтобы он собрался на фрейме arduino тот еще гемор, проще переписать заново.
Kino пише:Посмотрел. Раскладывается в тот же #define bit(b) (1UL << (b)).
1UL. В avr-libc просто 1.
та дурня. UL это просто unsigned long, т.е. захватывает 4 байта. Если я напишу 1ULL это будет восемь байт, то шо, я еще круче?
в сторонніх лібах може бути що завгодно.
Не в либах дело. Например, для размещения данных во флеш, у gcc используется PROGMEM, у IAR-а __flash, у CVAVR просто flash. Свои директивы. Это же касается и асм вставок, надо писать именно так, как хочет конкретный компилятор, и пофиг что у другого по другому, они никогда не будут совместимы в этом плане.
У ардуіни ще свій макрос bit() . Який, доречі, правильніший за (1 << x) та _BV() з точки зору стандарту.
Посмотрел. Раскладывается в тот же #define bit(b) (1UL << (b)).
Можна подумати під avr дофіга компіляторів і TCCR1B з CS11 є на дофіга архітектурах
дофига не дофига, но я, например, окромя gcc пользовался еще codevision и iar. и как то кумарило, что попадались такие макросы, что свойственны конкретному компилятору. особенно бесил разный стиль ассемблерных вставок.
Ось цей шматок таким залишив навмистно:
OCR1A = 40; // установка регистра совпадения TCCR1B |= (1 << WGM12); // включить CTC режим TCCR1B |= (0 << CS10); // Установить биты на коэффициент деления TCCR1B |= (1 << CS11); TCCR1B |= (0 << CS12);Це с"огодні в мене такі налаштування таймеру такі, а якщо завтра захочу встановити інші?
Так а в чем будет неудобство, если вы всё это запишите в одну строчку, как рекомендовали выше? В данном случае у вас идет четыре раза чтение и четыре раза запись, вместо одного чтения/записи. И в первом присваивании замените |= на просто =, тем самым обнулив остальные биты.
до ц"ого часу я обходився оператором if, і на комбінацію switch case прейшов щоб не пхати у код goto .
в вашем случае if будет выполняться быстрее, чем switch. не намного, но быстрее.
Зверніть увагу на макрос _BV, краще виглядає ніж (1 << CS11)
Этот макрос для конкретного компилятора, а 1 << CS11 работает везде.
TCCR1B |= (0 << CS10)
Мені здається що ця конструкція не має смислу. Можливо компілятор її навіть виріже.
Команды LDS и STS в любом случае выполнит.
у 32u4 (16u2) есть выход сброса на бутлоадер (возможно ота конпочка), по которой она на пару секунд становиться компортом, туда и шейте скетч, который потом будет шить центральную.
А не, не конпочка, два контакта (ресет+гнд) на 6-пин гребенке надо пинцетиком замкнуть.
Тактирование - внутренний генератор, 8мгц
Ок. Наверное достаточно будет переименовать регистры под avr, т.к. архитектура похожа.
У меня почта в профиле, можете туда вайбер написать, я отвечу
Не отображает. Если код не шибко большой и не секретный, давайте сюда его.
Актуально. Как с вами связаться?
А не знаю. Сюда писать свой телеграм или почту что-то нет желания. ))
Давайте я сначала найду что у меня есть, помню для 103 писал, если между им и 001 ничего сверхестественного нет, то там кода то на пару строк. для начала надо знать тактировние... частота?
В эпоху стм8 занимался, если еще актуально, то могу завтра глянуть.
Что мешает открыть функцию и посмотреть? Там много лишних телодвижений, понятно что прямая запись в регистр это самое быстрое что есть.
До речі, в кожному радіокерованому дроні є esp8265/esp8266/esp32. Таке життя..
Слышал, но не видел. В основном ardupilot на F411-473.
Хіба там якась закрита ОС? Я глибоко не копав, але наскільки знаю, там похідна від FreeRTOS чи щось подібне
RF часть (wifi и BT) точно закрыта, поставляется уже скомпилированными бинарниками, а так да, там freertos.
Причем пишут, что эта часть работает на ядре 0, то если свою прошивку запустить на втором ядре, всё равно когда никогда может тормозок проскочить. Так что, для управления ядерным реактором, я больше бы доверился стм, а не этой китайской фигне.
Therac-25? Як раз після того інциденту вимоги до сертифікації в мед.індустрії були переглянуті та суттєво посилені.
ага. Вот мне и стало интересно, каким образом нынче можно проверить безотказность действия электронной приблуды, если даже программист не знает как работает та ОС, если исходники закрыты и хрен его знает что она там вытворит.
да что далеко ходить, когда появились есп (а там без freertos никак) думаю дай проверю, действительно ли они так хороши. Записал на сд большой wav файл и поставил на проигрыш. И что? Когда никогда, да подвисон в проигрыше случался, видимо та ос что-то себе там придумала поработать... так что мое мнение, где нужны точные времянки - нафиг ту ос и пишем ручками.
Із теорії надійності, система може вважатись надійною лише коли доведена коректність взаємодії між її складовими компонентами, і кожний компонент системи є також надійним (рекурсивно).
Случайно, не Вы ли мне ТАУ в КПИ преподавали? )))
Такі проекти мають проходити незалежний аудит і сертифікацію.
Так отож. Помница на ютубе видел передачку, где аппарат лучевой терапии, из-за глюка в программе убил несколько пациентов. А ведь наверняка такой аппарат проходил все проверки.
Я про загальну тенденцію в індустрії, де "не влазить в STM32F103 - візми STM32F411", бо так виходить дешевше.
Ну тоже такое... помнится, в проекте для индустрии, меня просили пошагово в отладчике показывать как будет работать программа, чтобы нигде никаких глюков, иначе за "пр%еб" в программе, компании накладывались штрафные санкции. Представляю как сейчас такое можно показать, например, на есп32 со встроенной закрытой операционкой.
зы. я не про бытовые безделушки, а там, где глюк в программе может стоить человеку здоровья или жизни.
Зараз цінується, щоб без занурення в тему і через півдня якось запрацювало.
Хм. Чет у автора через полдня нифига не запрацювало... или это другое?
мдя. лет двадцать назад такие проекты умудрялись в тини13 впихивать, а нынче стм с 32кб не хватает.
Ну ось іде нормальне тактування, програма виконується. Тут приходить імпульс, який зриває генерацію, кварц починає "розкачуватись" заново. Ядро замість стабільних 16 МГц отримує хто зна шо в якому спектрі. При цьому відбувається читання/запис регістрів чи SRAM. Прочитатись чи записатись може зовсім не те, що мало би при нормальній роботі.
Вот это самый главный неиследованный вопрос. Почему должно что-то не то записаться? Если, например, подключить к выводу XTAL генератор импульсов и подавать по одному импульсу хоть раз в день, от этого программа не будет выполняться?
зы. то что "херовила" по уарт и остальным протоколам, где нужна выдержка времянки то понятно, но в целом то прога продолжает работать.