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?
avatar
Не стоит путать красное с пресным:
C++ это не только абстракция и наследование, но еще и как минимум(краткий список полезных для эмбеддера фич):
0. Пространства имен! Нет, правда, создавая большой проект на С я затрахиваюсь перед каждой функцией добавлять префикс. В С++ это решается с помощью namespace и классов. И когда ты ставишь точку, автодополнение дает тебе список ТОЛЬКО того, что тебе можно.
1. Разделение уровней доступа — если у меня и есть какая-то внутренняя переменная, то в С иногда сложно избежать соблазна не поставить костыль. В C++ внутри класса я просто делаю ее private. Отсюда — приходится продумывать архитектуру приложения — на поддержке кода это очень пригодится.
2. Перегрузка функций и шаблоны. Правда, просто обожаю в С продумывать функции для всех возможных типов данных. И для uint8_t и для int8_t и 16_t и 32_t и float и т.д. и т.п.
3. Безопасное кастование! Сравните static_cast и reinterpret_cast(аналог С-шных скобочек (type_t)var). Мне иногда попадаются просто фееричные преобразования типов в разгребаемом коде, когда они неявно перегоняются из знакового в беззнаковый, из short в long да по нескольку раз… static_cast в отличие от reinterpret_cast в неподобающих случаях вызовет ошибку компиляции и заставит хорошенько подумать. Причем в С ошибка может быть обнаружена только с помощью статического анализа кода(PVS Studio справляется, Clang и cppcheck — как правило нет). Ну может быть он ругнется на сравнение знаковой и беззнаковой переменной в if или в переходе от double к float… или вы скормили const в не cosnt…
4.Перечисляемые типы. Дефайны — зло. Есть тысяча и один кейсов, когда они могут привести к некоторым проблемам, ОСОБЕННО!!! при отсутствии пространства имен. Вы уверены, что своим дефайном вы ничего не переопределили? Или, например, не включили какую-нибудь опцию вида #if defined(FOO)? В том или ином виде enum есть со времен ANSI C, Classname.enum таки гораздо функциональнее.

Список можно продолжать до бесконечности. Самое главное — все что я описал не требует мегабайтов памяти ни в коде ни в оперативке, реализуется абсолютно всеми компиляторами C++ (в отличие от специфичных функций современных стандартов) и реально экономит время и силы.

Стек и память вообще очень просто контролируются.