avatar
Вообще на практике у меня задача инвертирования бита встречается крайне редко. Всегда требуется установка в определённое состояние, но не инверсия. Но даже в случае необходимости инверсии мне кажется есть смысл использовать кеширование, менять состояние переменной в ОЗУ и выводить в порт, без чтения состояния порта. Потокобезопасность предпочитаю организовывать насколько это возможно путём выбора соответствующих решений, а не обвешивания всех подозрительных мест запретами прерываний.

HINT1: Регистр BSRR позволяет одновременно устанавливать и сбрасывать биты.

HINT2: Иногда применение Bit Banding может оказаться весьма полезным. Например, Ваше инвертирование одного бита порта через ODR делается намного безопаснее (в плане случайного изменения не тех битов при многопоточности) как раз с его помощью.
avatar
Переключение нельзя сделать атомарно, потокобезопасность нужно организовывать в другом месте. Поэтому особо не важно ODR or BSRR / BRR. Решение о состоянии бита зафиксировалось в момент считывания ODR в аргументах if. Но мне Ваше решение нравится больше, оно однозначно будет быстрее. И, кстати, нужно ввести ограничения на второй аргумент, в маске может быть установлен только один бит.
avatar
Не совсем понятно зачем делать манипуляции с ODR, которые совсем не атомарные, если специально для этого существуют BSRR и BRR
avatar
Я тоже заказал, но прейдет ой как не скоро((
avatar
Я только что заказал себе бесплатный бумажный каталог??

У них есть что-то что нельзя купить в другом месте?

ЗЫ: У нас тут на рубль 33% скидка к черной пятнице), поэтому скидка в 10% — вообще несерьезно :)
avatar
Приехал BeMicro MAX 10 FPGA Evaluation Kit от Arrow. Забавная весьма железяка, однако индастриал ждать аж до июля следующего года. Тоска-печаль. Отложил до лучших времён.
avatar
UFM действительно имеет частоту клока 116МГц, но это никак не указывает на скорость работы флэша — это клок контроллера. По диаграммам работы команды Read видно, что после строба чтения контроллер висит неопределенное время в ожидании строба готовности. Я перерыл даташиты, но соответствующей времянки не нашел. Из опыта чтения даташита на MAX II знаю, что это время позорно огромное и ни о какой выборке микрокода и речи быть не может (у макс2 это 10МГц что ли). Вангую, что и здесь это в лучшем случае мегагерц 30, хорошо если не 20.
Время загрузки действительно впечатляет, но это и неудивительно: ширина флэша 32 бита.
Насчет поддержки старых чипов. У альтеры скорее есть традиция обламывать поддержку в версии х.1 — поддержка асекса оборвана в 9.1 (в 9.0 она еще есть, ее и пользую для этих чипов), в 13.1 уже забыли про цыцлон 2 (в 13.0.1 еще есть), а в 14 версии (единственной, где поддержан макс 10) уже нету даже ц3.
avatar
Как я и написал, что магазин дорогой, но есть интересные штучки.
Как вариант уменьшения стоимости доставки использовать компанию посредника, вот пример стоимости доставки из магазина посреднику, но это исключительно как пример, если вдруг там найдется то, чего нельзя найти где-то еще и стоимость услуг посредника будет оправдана. А для наших соотечественников в штатах может даже и не столь дорого получится :)
avatar
Да, дорогой магазин!!!
avatar
Просто интересно, из Украины кто-то покупает там?
Ради интереса бросил невесомую мелочевку в корзину и посмотрел сколько стоит доставка. Вот варианты:
screencast.com/t/0QMLZkLCz
Это даже не смешно :)
avatar
Судя по письму от 18 ноября, Closed Beta у них уже вовсю идет, но нас туда не позвали :)

Ждем открытой беты)
avatar
Очень похожие макросы для кучи разных stm-ок есть у ziblog'га только их там найти нужно.
avatar
Когда попробуешь, обязательно напиши!
avatar
Я со старыми версией еще толком не разобрался :((
У меня кажысь 9 стоит :(
avatar
хорош он тем, что за счет смещения считывателей каналов на четверть сектора, гарантированно не будет случая, когда светодиод считываемого канала будет наполовину закрыт шторкой, и не понятно, это еще единица, или уже нуль.
т.е. код Баркера в таких граничных случаях позволяет однозначно считать данные.
avatar
Я так и не понял, чем этот «код Баркера» так хорош? Пишут, что он «даёт шумоподобный сигнал». Ну и что в этом полезного?
avatar
Попробовать ее пока нельзя — толку то рассказывать :)
Я тоже записывался.
avatar
Но не только это. Они, наконец, сделали бесплатную софтинку: CircuitMaker. Пока она в закрытой бетте, я записался, может дадут попробовать :)
avatar
Не встречал. Да и что embedded что не embedded — я лишь перечислил малую долю инструментов С++, которые улучшают качество кода. Об этом можно почитать у Макконекела «Совершенный код» — толстенный и полезный талмуд. Конкретно по С++ рекомендую прочесть статьи блога PVS Stduio на хабре и на сайте — там что ни статья — разбирается огромное число примеров простых но серьезных ошибок.

Для Embedded, ИМХО, достаточно не использовать дорогие операции. STL немножко можно, но аккуратно.
Если ARM и в запасе ОЗУ больше 64к — ни в чем себе не отказывайте :)
Сейчас пилю проект на 16МГц ARM Cortex-M3 и 8кбайт ОЗУ (из которых 6 съедают буферы для UART) — вот где боль :)

Для матерых С-шников вроде меня рекомендую книгу Ira Pohl C++ for C programmers. Все перечисленное выше — там подробно разбирается. Но конкретно перечисленное выше — то что реально облегчает мой эмбед-кодинг.
До сих пор эту книгу никак не закажу, но я проходил курс на Coursera в начале года.

А так, наиболее полный источник — это практика :) Практика разгребания чужого кода конечно же :)
avatar
Ого сколько интересного! Может есть книга вроде С++ для embedded?