-
- Если в прерывание вставить вызов другой функции, самой простейшей,
то компилятор уже НЕ видит, какие регистры используются, и пихает в стек вобще всё.
Поэтому я уже много лет использую __raw - vpv.vpv(Сегодня, 07:30)
- Вот как это выглядит в листинге. В регисторовой паре R15:R14 лежит
текущий указатель на нужную функцию. Функция "портит"только пару
регистров. Её вызов происходит мгновено (команда MOVW - 1 такт). А
вот преамбулы и послеамбулы прерывания из-за косвенного вызова
длятся невыносимо долго и бестолково. vpv.vpv(1 знак., Сегодня, 07:42, картинка)
- Так тут у вас функция вызывается по указателю. Конечно, компилятор не может знать, куда в данный момент указывает указатель. Если функцию вызывать напрямую, то компилятор не будет сохранять неиспользуемые регистры. - Ale3000(Сегодня, 09:09)
- А вот примерно то же самое, но с "__raw" и зарезервированными
регистрами под т.н. "аппаратный стек" :)) Прерывание отрабатывает в разы быстрее: vpv.vpv(1 знак., Сегодня, 07:54, картинка)
- ХЗ, конешно, но само понятие прерывания подразумевает, что нужно
быстро вычитать куда-то или, наоборот, записать и поднять флаг, что
было такое. И всё. Когда в прерывании надо сохранять кучу
регистров, это чота в консерватории надо менять. - mse homjak(Сегодня, 10:55)
- Когда начинаешь решать реальные задачи, с ужасом осознаёшь, что мир прерываний оказывается черевычайно велик и разнообразен. :-)))) - vpv.vpv(Сегодня, 13:25)
- Если важно выполнить действия по прерыванию, например, выполнить
расчёт параметров реального времени и это приоритетно, то почему бы
не делать это в прерывании? Я даже куски кода из main() выношу в
программные прерывания, чтобы поднять приоритет над фоном. Бывает,
из прерывания периферии, вызываю программное прерывание ниже
приоритетом, чтобы дать возможность для прерываний другой
приоритетной периферии, но, при этом обработать данные до возврата
в main(). - Nikolay_Po(Сегодня, 11:02)
- В моем случае, в фоне не выполняется ваще ничего, пустой цикл
for(;;). Все делается исключительно в прерываниях. Но зато можно
писать в сишнике, то что иначе пришлось бы на асме лабать. - Codavr(Сегодня, 11:23)
- Именно так. Поэтому вызовы функции изнутри прерываний - не харам, а
одно из решений. - Nikolay_Po(Сегодня, 11:25)
- Дык. Головой думать надо и делать так чтобы работало наилучшим
образом в данной конкретной задаче, а не устанавливать для себя не
нужных запретов. - Codavr(Сегодня, 11:29)
- Совершенно, на 100% согласен! - vpv.vpv(Сегодня, 13:27)
- Ничоси. Тут один шаг до призыва "систему менять". Астанавитесь! :-) - SciFi(Сегодня, 11:33)
- Я всегда был за идеологию первых хакеров (не взломщиков, а былинных
программистов), это так романтично. Но так-как в институте меня
плотно обучали теории надежности, я с грустью понмаю, что в
применении к Большим Системам это порочная практика. А так-как я
всю дорогу делаю Маленькие, то позволяю себе эти небольшие шалости,
но про надежность помню всегда :) - Codavr(Сегодня, 12:35)
- Анархист-охранитель. Гибрид, выведенный лучшими селекционерами :-) - SciFi(Сегодня, 12:58)
- :))) - Codavr(Сегодня, 12:58)
- Анархист-охранитель. Гибрид, выведенный лучшими селекционерами :-) - SciFi(Сегодня, 12:58)
- Я всегда был за идеологию первых хакеров (не взломщиков, а былинных
программистов), это так романтично. Но так-как в институте меня
плотно обучали теории надежности, я с грустью понмаю, что в
применении к Большим Системам это порочная практика. А так-как я
всю дорогу делаю Маленькие, то позволяю себе эти небольшие шалости,
но про надежность помню всегда :) - Codavr(Сегодня, 12:35)
- Дык. Головой думать надо и делать так чтобы работало наилучшим
образом в данной конкретной задаче, а не устанавливать для себя не
нужных запретов. - Codavr(Сегодня, 11:29)
- Именно так. Поэтому вызовы функции изнутри прерываний - не харам, а
одно из решений. - Nikolay_Po(Сегодня, 11:25)
- В моем случае, в фоне не выполняется ваще ничего, пустой цикл
for(;;). Все делается исключительно в прерываниях. Но зато можно
писать в сишнике, то что иначе пришлось бы на асме лабать. - Codavr(Сегодня, 11:23)
- "Быстро", "куча" - это пустой звук, если нет цифр. А цифры бывают оч. разные, такшта консерватория ещё поработает... - SciFi(Сегодня, 10:59)
- ХЗ, конешно, но само понятие прерывания подразумевает, что нужно
быстро вычитать куда-то или, наоборот, записать и поднять флаг, что
было такое. И всё. Когда в прерывании надо сохранять кучу
регистров, это чота в консерватории надо менять. - mse homjak(Сегодня, 10:55)
- Вот как это выглядит в листинге. В регисторовой паре R15:R14 лежит
текущий указатель на нужную функцию. Функция "портит"только пару
регистров. Её вызов происходит мгновено (команда MOVW - 1 такт). А
вот преамбулы и послеамбулы прерывания из-за косвенного вызова
длятся невыносимо долго и бестолково. vpv.vpv(1 знак., Сегодня, 07:42, картинка)
- У меня с одного древнего проекта не пошедшего в серию осталась прорва tiny15. Вот я их периодически расходую на всякую мелочевку. А у нее стек аппаратный на 3 байта. Вот и чудю. Почти все уже срасходовал. - Codavr(30.05.2025 12:54)
- Если в прерывание вставить вызов другой функции, самой простейшей,
то компилятор уже НЕ видит, какие регистры используются, и пихает в стек вобще всё.
Поэтому я уже много лет использую __raw - vpv.vpv(Сегодня, 07:30)