-
- Споткнуться очень получится. Например, я выгреб из буфера 10 байт,
и хочу уменьшить счётчик. Он равен 15. Читаю его, отнимаю 10,
получаю 5, и... В этот момент, проц отвлекается на прерывание, в
котором принимается байт и счётчик увеличивается на 1, становится
16. После возврата из П/П я пишу в него 5. Или двухбайтная голова,
к примеру, равна 0x00FF. Читаю младший байт, 0xFF. В этот момент
летит прерывание, и голова становится равной 0x0100. Читаю старший
байт, он уже 0x01. В vpv.vpv(119 знак., 31.01.2023 12:11)
- Не надо использовать счетчик, и двухбайтные индексы head/tail на
8-битнике не надо использовать. И все получится. - LightElf(31.01.2023 13:56 - 15:39)
- Это значит буфер не более 256 байт и тот в начале страницы
размещать. Тут у автора 500 байт. - Costic(31.01.2023 18:02)
- Пусть использует 10-битник - LightElf(01.02.2023 13:57)
- Если знать аппаратную часть процессора, как он устроен, и как
работает, то получится всё, что угодно. )) - vpv.vpv(31.01.2023 14:18)
- Все описанные вами проблемы имеют многократно проверенные решения
без критических секций. Но вольному - воля. - LightElf(31.01.2023 15:39)
- Многократно проверенные решения - это какие конкретно? Примеры
есть? Или это "Не использовать 8-ми битники"? :))) - vpv.vpv(01.02.2023 07:01)
- вот, образовывайтесь >>> SciFi(1 знак., 01.02.2023 08:46, ссылка)
- А, это... )) Да, известный трюк. Тут есть накладные расходы,
операции сравнивания, при КАЖДОМ обращении к переменной. Прерывание
внутрь атомарной операции может попасть в вероятностью 1/1000,
скажем. Здесь же будут постоянные тормоза, в 100% случаев. - vpv.vpv(01.02.2023 13:41)
- Тормоза? Вы куда-то опаздываете? - SciFi(01.02.2023 13:46)
- When how. Иногда от куска программы требуется и быстродействие
тоже. - vpv.vpv(02.02.2023 09:48)
- Бывает и такое. Но крайне редко. - SciFi(02.02.2023 09:52)
- When how. Иногда от куска программы требуется и быстродействие
тоже. - vpv.vpv(02.02.2023 09:48)
- Тормоза? Вы куда-то опаздываете? - SciFi(01.02.2023 13:46)
- А, это... )) Да, известный трюк. Тут есть накладные расходы,
операции сравнивания, при КАЖДОМ обращении к переменной. Прерывание
внутрь атомарной операции может попасть в вероятностью 1/1000,
скажем. Здесь же будут постоянные тормоза, в 100% случаев. - vpv.vpv(01.02.2023 13:41)
- многобитники тоже не гарантируют атомарность доступа к памяти,
например если переменная не выровнена. - вacяпpocтo(01.02.2023 08:36, )
- Есть множество способов выстрелить себе в ногу. Один из них - вмешиваться в выравнивание переменных. - LightElf(01.02.2023 13:59)
- вот, образовывайтесь >>> SciFi(1 знак., 01.02.2023 08:46, ссылка)
- Многократно проверенные решения - это какие конкретно? Примеры
есть? Или это "Не использовать 8-ми битники"? :))) - vpv.vpv(01.02.2023 07:01)
- Да, но жизнь скучна без риска! - SciFi(31.01.2023 14:19)
- Все описанные вами проблемы имеют многократно проверенные решения
без критических секций. Но вольному - воля. - LightElf(31.01.2023 15:39)
- Это значит буфер не более 256 байт и тот в начале страницы
размещать. Тут у автора 500 байт. - Costic(31.01.2023 18:02)
- Не надо использовать счетчик, и двухбайтные индексы head/tail на
8-битнике не надо использовать. И все получится. - LightElf(31.01.2023 13:56 - 15:39)
- Споткнуться очень получится. Например, я выгреб из буфера 10 байт,
и хочу уменьшить счётчик. Он равен 15. Читаю его, отнимаю 10,
получаю 5, и... В этот момент, проц отвлекается на прерывание, в
котором принимается байт и счётчик увеличивается на 1, становится
16. После возврата из П/П я пишу в него 5. Или двухбайтная голова,
к примеру, равна 0x00FF. Читаю младший байт, 0xFF. В этот момент
летит прерывание, и голова становится равной 0x0100. Читаю старший
байт, он уже 0x01. В vpv.vpv(119 знак., 31.01.2023 12:11)