Чт окт 07, 2021 15:42:53
те конвенции придумали для взаимодействия между Си и ассемблером.COKPOWEHEU писал(а):Для кого конвенции придумали?
Чт окт 07, 2021 16:06:25
Чт окт 07, 2021 16:17:43
правильноDimon456 писал(а):все зависит от программиста.
Чт окт 07, 2021 16:49:38
uint32_t size() const
{
if constexpr (pot)
{
return (TI&)tail - (TI&)head;
}
else
{
int32_t sz = (TI&)tail - (TI&)head;
return (sz < 0) ? sz + Capacity + 1 : sz;
}
}
private:
static constexpr bool pot = std::has_single_bit(Capacity);
using TI = std::conditional_t<ThreadSafe, volatile uint32_t, uint32_t>;
T buf[Capacity + !pot];
uint32_t head, tail;
COKPOWEHEU писал(а):Пока что я вижу только явный недостаток с тем, что к полю размера нужен доступ и при записи, и при чтении. Но вы говорите, что такие реализации есть. Чем именно они настолько хороши, что перевешивают этот недостаток?
COKPOWEHEU писал(а):Ну так вариант с размером эту проблему не решает.
Чт окт 07, 2021 17:12:29
те конвенции придумали для взаимодействия между Си и ассемблером.
На STM32 у меня так:
Мы о разных вещах говорим, ты пытаешься доказать превосходство одного из подходов
Вариант с размером предполагает отключение прерываний которое решает практически все проблемы, в том числе и вышеописанную.