189 похожих чатов

Почему никто не реализовал HAL для кортексов с использованием bitbanding?

25 ответов

21 просмотр

Мне тут кто-то отвечал, что не на всех ядрах он есть

даже не во всех М3 и М4 он есть, В М0 и М7 его нет

А как его реализуют, чтоб оно не за три операции работало? Это аппаратная фишка у кортексов должна быть?

Х
А как его реализуют, чтоб оно не за три операции р...

Это расширение Cortex, которое отображает биты регистров и оперативной памяти на байты в адресном пространстве. Вместо чтение-модификация-запись можно писать или читать напрямую. HAL на Bitbanding'е никто не делает потому что львиная доля битовых полей в регистрах многобитовые, а атомарность может быть реализована другими механизмами.

Alexander
Это расширение Cortex, которое отображает биты рег...

Ещё раз, отображение битов на байты аппаратная штука?

Х
Ещё раз, отображение битов на байты аппаратная шту...

Да. Есть формулы, которые позволяют пересчитать "адрес" бита в RAM и Flash в адрес байта с 32-битной адресацией.

Alexander
Да. Есть формулы, которые позволяют пересчитать "а...

А, ок. т.е. все кортексы это теоретически умеют. А всякие risc-v процы тоже?

Х
А, ок. т.е. все кортексы это теоретически умеют. А...

Не все. Это фишка ARM v7m и новее. Младшие камешки (типа F0/G0) насколько я помню таким не располагают. За RISC V не скажу.

Alexander
Не все. Это фишка ARM v7m и новее. Младшие камешки...

А, ну ок, вот это и пытался понять, что не все такую магию умеют.

Х
А, ну ок, вот это и пытался понять, что не все так...

Да. Насколько я помню реализация зависит от вендора. В RISC V есть рабочая группа по битовым манипуляциям, там есть что-то похожее без ненужной магии с адресами.

Alexander
Это расширение Cortex, которое отображает биты рег...

Непонятно, зачем? большинство значимых регистров идут парами, отдельно на чтение и отдельно на запись. Я имею ввиду младшие кортексы и V7

Aleksandr Zharov
Непонятно, зачем? большинство значимых регистров и...

Из потенциальных кейсов я видел только простую возможность атомарно опрашивать/устанавливать флажки в оперативной памяти, адреса которых жестко залинкованы. А при настройке периферии скорость как правило значения не имеет. И да, регистры отсылки/приема данных периферии как правило дополнены до машинного слова и вынесены отдельно - чтобы не химичить с битовыми полями.

Alexander
Из потенциальных кейсов я видел только простую воз...

да, наверное. но как-то слишком узко, для того чтобы впиливать в ядро. видимо что-то есть еще

Dr Zlo- Автор вопроса
Alexander
Это расширение Cortex, которое отображает биты рег...

Какие ещё механизмы позволяют сделать потокобезопасный атомарный RMW?

Dr Zlo- Автор вопроса
Andrew
запрет прерываний

ну вот да, разве что

Dr Zlo
ну вот да, разве что

А как же LDREX/STREX? Да, у реализации свои ограничения, но иногда он прям спасает: бывают ситуации в которых запрет прерываний ну прям совсем не вариант.

Kirill Kotyagin
А как же LDREX/STREX? Да, у реализации свои огран...

одна проблема этого подхода в том, что если ты LDREX сделал, а потом в другом месте еще раз LDREX то STREX только для второй отработает, насколько я помню. Да и в Cortex-M0 их нет в системе команд.

Leonid Zaliubovskyi
одна проблема этого подхода в том, что если ты LDR...

Да, это так, но AFAIK проблема сильно преувеличена: прерывания автоматически делают CLREX, поэтому если из пары LDREX / STREX нас посередине выдернули в прерывание, которое к примеру переключило контекст, потом там в новом контексте случился тоже LDREX, и нас опять перекинуло к первому STREX, то он завершиться ошибочно. Поскольку типичный паттерн использования этого хозяйства - это цикл, то проблем не будет, просто случится еще одна итерация. https://stackoverflow.com/questions/51043489/ldrex-strex-with-cortex-m3-and-m4

Kirill Kotyagin
Да, это так, но AFAIK проблема сильно преувеличена...

Именно, я к тому, что нужно понимать что есть нюансы и когда и как можно использовать, а когда не стоит

Leonid Zaliubovskyi
Именно, я к тому, что нужно понимать что есть нюан...

Это правило неплохо применять и в других, не связанных с этим, случаях)))

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта