-
- Напишите какой-нибудь бутлоадер (bootloader), и вам гоуто 0 не
избежать. :)) (Про ((void(*)(void)) 0)(); я в курсе, это то же
самое) - vpv.vpv(28.02.2023 06:54)
- но есть нюанс. В Вашем варианте будет call вместо jmp и в случае
бутлодера еще до перехода на надо бы поправить указатель стека(это
на сях не сделать) а то стартап код живущий на 0 может быть написан
в расчете на хардресет где указатель стека аппаратно
инициализируется. - Nikolay801_(28.02.2023 10:18)
- Разумеется, стартап-код пишется и компилируется для адреса 0, и
первое, что этот код делает - настраивает (заново!) стек и пр. Так
что состояние стека "в предыдущей жизни", в секции бутлоадера, уже
не играет никакой роли. А вот периферия - тут другое дело. Поэтому
в бутлоадерах перед переходом в аппликейшЫн, я использую аппаратный
вачдог ресет, чтобы проц полностью весь обнулился. - vpv.vpv(01.03.2023 07:47)
- стартап код из stdlib stm32 который почти ни кто не трогает. Nikolay801_(95 знак., 02.03.2023 10:23)
- Элементарно, Ватсон. Стек трогает таблица векторов прерываний, и
это тоже часть стартапа. - SciFi(02.03.2023 10:25)
- при хард ресете трогает, при жамп/колл на 0 таблица невозмутимо
лежит в сторонке. - Nikolay801_(02.03.2023 10:55)
- Виноват, влез, не глянув на контекст. Так-то да, обычно настраивают стек и прыгают. Причём я не устаю рекламировать свой способ прыжка (см. ниже). Но и без настройки стека можно. Просто убедиться, что стартап его настроит, и тогда нет проблем. Но такой вариант реже встречается, КМК. SciFi(201 знак., 02.03.2023 11:16)
- при хард ресете трогает, при жамп/колл на 0 таблица невозмутимо
лежит в сторонке. - Nikolay801_(02.03.2023 10:55)
- Элементарно, Ватсон. Стек трогает таблица векторов прерываний, и
это тоже часть стартапа. - SciFi(02.03.2023 10:25)
- стартап код из stdlib stm32 который почти ни кто не трогает. Nikolay801_(95 знак., 02.03.2023 10:23)
- Разумеется, стартап-код пишется и компилируется для адреса 0, и
первое, что этот код делает - настраивает (заново!) стек и пр. Так
что состояние стека "в предыдущей жизни", в секции бутлоадера, уже
не играет никакой роли. А вот периферия - тут другое дело. Поэтому
в бутлоадерах перед переходом в аппликейшЫн, я использую аппаратный
вачдог ресет, чтобы проц полностью весь обнулился. - vpv.vpv(01.03.2023 07:47)
- ресетнуть вотчдогом - Oman(28.02.2023 07:07)
- у кортексов, которые нынче везде, есть SYSRESETREQ Nikolay801_(1 знак., 28.02.2023 10:22, картинка)
- У AVR есть регистр MCUSR, в котором флажки указывают на то, как
закончилась предыдущая жизнь. Можно сделать выводы. :)) - vpv.vpv(01.03.2023 07:56)
- В msp430g пользую сброс при исполнении инструкции по запрещенному адресу. - Гyдвин(01.03.2023 08:04)
- ага, сам через него делаю, просто забыл) - Oman(28.02.2023 10:36)
- У AVR есть регистр MCUSR, в котором флажки указывают на то, как
закончилась предыдущая жизнь. Можно сделать выводы. :)) - vpv.vpv(01.03.2023 07:56)
- у кортексов, которые нынче везде, есть SYSRESETREQ Nikolay801_(1 знак., 28.02.2023 10:22, картинка)
- но есть нюанс. В Вашем варианте будет call вместо jmp и в случае
бутлодера еще до перехода на надо бы поправить указатель стека(это
на сях не сделать) а то стартап код живущий на 0 может быть написан
в расчете на хардресет где указатель стека аппаратно
инициализируется. - Nikolay801_(28.02.2023 10:18)
- выскочить из двух и более циклов - IBAH(22.02.2023 12:58)
- А можно припер алгоритма, где нужно экстренно десантироваться из
вложенных циклов? - VladislavS.(23.02.2023 07:53)
- Фатальная ошибка датчика или исполнительного устройства после которой продолжение работы вложенных циклов не просто невозможна но и вредна. - 3m(28.02.2023 12:42)
- Управление приточно-вытяжной вентсистемой, без рекуператора -
пойдет? %) - Cкpипaч(23.02.2023 09:49)
- Идеальный претендент на шаблонный класс "приточно-вытяжная система"
с параметром "наличие рекуператора". Без всякой гоуты. - VladislavS.(23.02.2023 11:28)
- Угу. Только алгоритм управления - упрощенный. Cкpипaч(433 знак., 23.02.2023 11:53)
- Так вся прелесть объекта, что в месте вызова его интерфейса пофиг
упрощённый он или нет. Надо включить - дёрнули метод On(), надо
считать телеметрию ReadTM(). Всё через интерфейс. А реализацию
делайте хоть упрощённую сферическую в вакууме. - VladislavS.(23.02.2023 12:05)
- "Телеметрию" и абстрактный-"On" мне не надо. Я через базу делаю.
Шаблон - "класс-бог". - Cкpипaч(23.02.2023 14:11)
- Прямо в базу без интерфейса? Ну, тут мои полномочия уже всё. Гоутухайтес, если нравится. - VladislavS.(23.02.2023 14:14)
- Дерните пожалуйста vlv1.preheat_in_necessary_or_standart_regulation_if_not_or_ended(), реализованное как указатель на виртуальный метод. - Cкpипaч(23.02.2023 14:09)
- ...до тех пор, пока он целостная сущность. Как только он просто
попытка нелокального перехода - очередной "спагетти-код". - Cкpипaч(23.02.2023 14:00)
- Если это ваш код, то и винить в написании г@кода надо себя, если
чужой, то соболезную. - VladislavS.(23.02.2023 14:11)
- Слив защитан. - Cкpипaч(23.02.2023 14:13)
- Вообще, это не я жалуюсь как трудно вам там программируется. :))) - VladislavS.(23.02.2023 14:17)
- Слив защитан. - Cкpипaч(23.02.2023 14:13)
- Если это ваш код, то и винить в написании г@кода надо себя, если
чужой, то соболезную. - VladislavS.(23.02.2023 14:11)
- "Телеметрию" и абстрактный-"On" мне не надо. Я через базу делаю.
Шаблон - "класс-бог". - Cкpипaч(23.02.2023 14:11)
- Так вся прелесть объекта, что в месте вызова его интерфейса пофиг
упрощённый он или нет. Надо включить - дёрнули метод On(), надо
считать телеметрию ReadTM(). Всё через интерфейс. А реализацию
делайте хоть упрощённую сферическую в вакууме. - VladislavS.(23.02.2023 12:05)
- Угу. Только алгоритм управления - упрощенный. Cкpипaч(433 знак., 23.02.2023 11:53)
- Идеальный претендент на шаблонный класс "приточно-вытяжная система"
с параметром "наличие рекуператора". Без всякой гоуты. - VladislavS.(23.02.2023 11:28)
- Обход 2+ мерных массивов с целью поиска элемента. - AlexBi(23.02.2023 08:06)
- А можно припер алгоритма, где нужно экстренно десантироваться из
вложенных циклов? - VladislavS.(23.02.2023 07:53)
- Почему именно "алгоритма"?... POV(282 знак., 22.02.2023 12:48, картинка, картинка)
- 1. Макросы - зло! 2. Код сильно читабельней так if(!i2cSoft_WaitAck()) { i2cSoft_Stop(); return ERROR; } 3.Вопросы оптимизации оставьте компилятору, он это сделает лучше. - VladislavS.(22.02.2023 17:52)
- я бы переименовал EXEC в CHECK или подобное. - лoгикaнayкa(22.02.2023 13:06)
- Ну типа как "запуск" того что передается в параметр макроса. У меня
это в десятке проектов, поздно менять привычки )) - POV(22.02.2023 13:10)
- Я бы не рискнул из контекста (из фигурных скобок, пусть из switch)
выходить через goto. Вы LTO пробовали включать при компиляции?
Обычно, такое сразу вылезает боком, если оптимизировать
по-максимуму. - Nikolay_Po(22.02.2023 14:14)
- Выход не проблема, проблемой может быть гото внутрь скобок. Однако switch-case с этим (входом внутрь скобок) как-то разбирается. - AlexBi(22.02.2023 15:36)
- С чего бы оно вылезало боком? Это ж не фантазия прогера, это
штатная задача компилятора. У меня были случаи, что не собиралось
если не там объявлены переменные. Но и только-то. - POV(22.02.2023 14:18)
- Пока останусть при своём. Скобки для компилятора могут означать, в
том числе, сохранение регистров при входе и восстановление при
выходе, если внутри делается что-то большое и сложное, на что не
хватает свободных регистров процессора. Уследит ли за этим
компилятор в случае goto? По идее, должнен. Но лучше перебдеть, чем
недобдеть. - Nikolay_Po(22.02.2023 14:25)
- Следить за областью видимости - основная задача компилятора, тут не нужно предположений, это базовый функционал. - =AlexD=(22.02.2023 14:42)
- Пока останусть при своём. Скобки для компилятора могут означать, в
том числе, сохранение регистров при входе и восстановление при
выходе, если внутри делается что-то большое и сложное, на что не
хватает свободных регистров процессора. Уследит ли за этим
компилятор в случае goto? По идее, должнен. Но лучше перебдеть, чем
недобдеть. - Nikolay_Po(22.02.2023 14:25)
- Я бы не рискнул из контекста (из фигурных скобок, пусть из switch)
выходить через goto. Вы LTO пробовали включать при компиляции?
Обычно, такое сразу вылезает боком, если оптимизировать
по-максимуму. - Nikolay_Po(22.02.2023 14:14)
- Ну типа как "запуск" того что передается в параметр макроса. У меня
это в десятке проектов, поздно менять привычки )) - POV(22.02.2023 13:10)
- А мог встретить? Хотя бы теоретически. - mr-x(22.02.2023 10:46)
- У вас для этого ексцепшин, ясен пень, и вы им пользуетесь очень
активно, я бы даже сказал чрезмерно активно. =AlexD=(376 знак., 22.02.2023 08:52)
- Конструкторы ещё ошибку возвращать не могут (а эксепшены кидать - легко) - а это куда важней операторов и всяко чаще бывает нужно. Ну и на множестве платформ эксепшны тупо запрещено юзать - даже сейчас. Раньше еще и компиляторы (или рантайм) их тупо не поддерживали кое-где. То есть было даже собрать бинарь невозможно. - xarcas(28.02.2023 08:35)
- гоута требуется не для простейших алгоритмов, а больше для
читабельности кода, поройся grep в ядре линуха. - гoyтaкoдep(22.02.2023 07:29,
)
- Напишите какой-нибудь бутлоадер (bootloader), и вам гоуто 0 не
избежать. :)) (Про ((void(*)(void)) 0)(); я в курсе, это то же
самое) - vpv.vpv(28.02.2023 06:54)