-
- reentrant функции нужны для другого, для случаев когда функции
могут вызываться из биглупа и из прерываний одновременно, например.
Делать все функции подряд reentrant из-за коллбэков не стоит, т.к.
reentrant функции используют симулированный стек, который ограничен
в размерах, работают медленно, генерируется большой объём кода и
т.п. И вызов любой не-reentrant функции из reentrant функции
вызывает рекурсивно те же проблемы. А всё подряд reentrant не
сделаешь. reentrant это fk0(140 знак., 13.12.2020 16:12, ссылка)
- Ну я вот реентрантными сделал 5 колбеков. Все вызываются из прерываний... POV_(198 знак., 13.12.2020 21:19, )
- А теперь отвечай - почему? - il-2(13.12.2020 14:11)
- Проще говоря - компилятор не знал что это - колбэк, который будет
вызван из прерывания. Потому локальные переменные перекрывались с
другими функциями, якобы по причине невозможности их перекрестного
вызова. - POV_(13.12.2020 14:44, )
- У тебя набор слов, как у студента, который сдает зачет и "плавает" в теме. Непонятно только, кто препод, и для кого строятся эти словесные нагромождения. il-2(882 знак., 13.12.2020 16:02)
- Потому как адрес локальной переменной был жестко задан на этапе
компиляции. И перекрывался с чем не надо. Так видимо. - POV_(13.12.2020 14:23, )
- Не морочь голову. Список функций в директиве OVERLAY ничем не лучше
switch-case прямо в коде. На который и нужно заменить указатели на
функции. И всё само и волшебно заработает оптимальным образом.
Просто вместо установки указателя, ты в переменной, где был раньше
указатель, должен будешь держать enum позволяющий выбор из одного
из N вариантов. А в обработчике прерываний сделать switch
(enum-var) { case Variant1: f1(); break; case Variant2: f2();
break... }... - fk0(13.12.2020 16:15)
- Нет, эти колбеки могут быть перезначены. - POV_(13.12.2020 16:18, )
- Ну вот вместо адреса функции для коллбэка будешь менять число в enum'е. Разницы никакой. - fk0(13.12.2020 16:19)
- Нет, эти колбеки могут быть перезначены. - POV_(13.12.2020 16:18, )
- Не морочь голову. Список функций в директиве OVERLAY ничем не лучше
switch-case прямо в коде. На который и нужно заменить указатели на
функции. И всё само и волшебно заработает оптимальным образом.
Просто вместо установки указателя, ты в переменной, где был раньше
указатель, должен будешь держать enum позволяющий выбор из одного
из N вариантов. А в обработчике прерываний сделать switch
(enum-var) { case Variant1: f1(); break; case Variant2: f2();
break... }... - fk0(13.12.2020 16:15)
- Проще говоря - компилятор не знал что это - колбэк, который будет
вызван из прерывания. Потому локальные переменные перекрывались с
другими функциями, якобы по причине невозможности их перекрестного
вызова. - POV_(13.12.2020 14:44, )
- reentrant функции нужны для другого, для случаев когда функции
могут вызываться из биглупа и из прерываний одновременно, например.
Делать все функции подряд reentrant из-за коллбэков не стоит, т.к.
reentrant функции используют симулированный стек, который ограничен
в размерах, работают медленно, генерируется большой объём кода и
т.п. И вызов любой не-reentrant функции из reentrant функции
вызывает рекурсивно те же проблемы. А всё подряд reentrant не
сделаешь. reentrant это fk0(140 знак., 13.12.2020 16:12, ссылка)