Заменил пример на классическую макросовскую залипуху.
Заменил пример на классическую макросовскую залипуху.
Во-первых, для таких простых задач без разницы на чем писать, тут отсутствие C++ не мешает, можно взять любой мк и спокойно писать на С. Во-вторых, если у меня есть дешевый, значительно более производительный и при этом мало потребляющий STM32 с которым я привык работать и для которого написано множество либ, то на нем можно делать практически что угодно, от таких простейших проектов и до таких которые 8-ми битки просто не вытягивают. Скоро еще STM32C0 появится, самая простая серия, встроенный генератор на 48MHz и никаких страшных PLLOKF писал(а):Понятно, что лучше/современнее STM, но задачи то разные. Иной раз нужно задержку выключения света сделать (жена вслепую по лестнице не может). И чо?)))
Может, просто язык сменить на нормальный, а? Потому что штопание глючного С++ ничего более уже не дает.ждут нововведений
Код: Выделить всё
constexpr auto val = 0b1001'1100;Код: Выделить всё
#define dataCondStoreTG(P, E, D) \
do { \
auto* _pr_p = (P); \
auto _pr_expected = (E); \
auto _pr_desired = (D); \
bool _pr_c; \
do { \
mtx_lock(&_pr_p->mtx); \
_pr_c = (_pr_p->data == _pr_expected); \
if (_pr_c) _pr_p->data = _pr_desired; \
mtx_unlock(&_pr_p->mtx); \
} while(!_pr_c); \
} while (false) Код: Выделить всё
void dataCondStoreTG(auto* P, auto E, auto D)
{
bool _pr_c;
do {
mtx_lock(&P->mtx);
_pr_c = (P->data == E);
if (_pr_c) P->data = D;
mtx_unlock(&P->mtx);
} while (!_pr_c);
}