-
- Кто нибудь делал такое на STM32 - для части исполняемого кода
возможность запускать его выполнения, останавливать (только
определенный участок кода, остальная часть кода продолжает
работать), по шагам выполнять функции - Как лучше это сделать? - Make_Pic(01.07.2024 14:29)
- Что значит "часть исполняемого кода"? Процессор одноядерный, он
либо работает, либо стоИт. Рискну предположить, что там
используется RTOS и надо остановить некоторые задачи. Это делается
средствами RTOS. - AlexBi(01.07.2024 14:54)
- Примеры есть такой "ахинеи" в инете, например под FreeRTOS - Loop с фукциями, функции индексированы (для возможности запуска с конкретной функции и отображения, какая последняя функция выполнялась ) возможность остановить, запустить, выполнить по шагам. - Make_Pic(01.07.2024 15:17)
- Часть кода - прикладная программа Make_Pic(262 знак., 01.07.2024 15:11)
- Функция - это что? Отдельная подпрограмма? Отдельная ассемблерная
инструкция? Если это подпрограмма, то почему ее не оформить как
отдельную задачу и запускать на выполнение? Исходники функции
доступны, т.е. можно туда добавить точек останова, или надо
отлаживать чужую функцию без доступа к исходникам? В принципе,
ставить точки останова "на лету" можно, но тогда "функция" должна
располагаться в ОЗУ. В общем, не понятно что надо. AlexBi(55 знак., 01.07.2024 15:25, ссылка)
- И на этом спасибо. PS выше писал, что мне не надо остановки всего железа. - Make_Pic(01.07.2024 15:36)
- По-моему, сахара тоже в недоумении. Что уж тут говорить о гугеле... - SciFi(01.07.2024 15:16)
- Полная фигня? - Make_Pic(01.07.2024 15:18)
- Вообще непонятно, о чём речь. А телепаты в отпуске. Лето же. - SciFi(01.07.2024 15:19)
- Ладно, обойдемся без телепатов и помощи зала. Наметки есть как сделать. Хотел не наступать на грабли. - Make_Pic(01.07.2024 15:21)
- Вообще непонятно, о чём речь. А телепаты в отпуске. Лето же. - SciFi(01.07.2024 15:19)
- Полная фигня? - Make_Pic(01.07.2024 15:18)
- Функция - это что? Отдельная подпрограмма? Отдельная ассемблерная
инструкция? Если это подпрограмма, то почему ее не оформить как
отдельную задачу и запускать на выполнение? Исходники функции
доступны, т.е. можно туда добавить точек останова, или надо
отлаживать чужую функцию без доступа к исходникам? В принципе,
ставить точки останова "на лету" можно, но тогда "функция" должна
располагаться в ОЗУ. В общем, не понятно что надо. AlexBi(55 знак., 01.07.2024 15:25, ссылка)
- Я делал. У меня внутрисхемный отладчик так работает. И это не шутка: в его работе нет никаких тайн. Регистры для точек останова описаны, формат отладочной информации тоже не секрет. - SciFi(01.07.2024 14:33)
- Что значит "часть исполняемого кода"? Процессор одноядерный, он
либо работает, либо стоИт. Рискну предположить, что там
используется RTOS и надо остановить некоторые задачи. Это делается
средствами RTOS. - AlexBi(01.07.2024 14:54)
- Обычно, если есть RTOS, то управление функциями делается средствами RTOS. Если есть иерархия автоматов, то RTOS вроде и не нужна. (Необходимость RTOS присутствуют если 1) длительные процессы и 2)готовые пакеты ПО) По теме: управление автоматами осуществляется путем изменения переменной состояния автомата. VLLV(27 знак., 01.05.2024 18:29)
- А выполнение этих функций может быть параллельным? Если да, то проще каждую из этих функций организовать как отдельный поток. Если накладно по ресурсам, то в "потоке-исполнителе" организовать эти ф-ции как протопотоки. В обоих случаях как будто имеется возможность штатного (средствами ОС или protothreads) останова/запуска ф-ций. - Argon(27.04.2024 11:52)
- Ау - гуру? Кто то может еще прокомментировать варианты решения
задачи? - Make_Pic(26.04.2024 06:44)
- Подобные задачи наиболее просто и чисто решаются в ООП парадигме.
Под запуск-останов-пошаговое выполнение пока что (до получения
более подробного описания) подходит Command, Chain of
Responsibility. При этом не знаю к чему упомянут RTOS, но Command
aka "функция" aka "звено цепи" вполне может быть активным, т.е.
представлять экземпляр потока. Про параллельную работу речи не шло,
но могут работать и параллельно, собирая конечные результаты. - RxTx(26.04.2024 14:55)
- С паттернами я на "Вы", но тем не менее, есть примеры аналогичного
использования по теме топика? - Make_Pic(26.04.2024 15:02)
- Примеры есть но без FreeRTOS. Если обязательно FreeRtos, я бы передавал между потоками через xQueue. - RxTx(27.04.2024 08:10)
- С паттернами я на "Вы", но тем не менее, есть примеры аналогичного
использования по теме топика? - Make_Pic(26.04.2024 15:02)
- гуру ртос'ами не пользуются - argus98(26.04.2024 12:04)
- Подобные задачи наиболее просто и чисто решаются в ООП парадигме.
Под запуск-останов-пошаговое выполнение пока что (до получения
более подробного описания) подходит Command, Chain of
Responsibility. При этом не знаю к чему упомянут RTOS, но Command
aka "функция" aka "звено цепи" вполне может быть активным, т.е.
представлять экземпляр потока. Про параллельную работу речи не шло,
но могут работать и параллельно, собирая конечные результаты. - RxTx(26.04.2024 14:55)
- Практически в всех проектах использую подобное. Одна (или
несколько) задача является автоматом состояний, управляемым
событиями. Вся логика работы автомата (режимы, состояния, эвенты,
переходы, действия) описана в таблицах. Неизменяемый движек ждет
события из очереди и парсит таблицы на предмет совпадения.
Остальные задачи накидывают события в очередь. Все под RTOS.
Принцип работы автомата здесь описан. Переписать отправку и
получение события, ну под себя попилить. Andrew_Q(1 знак., 25.04.2024 15:07, ссылка)
- Оригинально. Спасибо. - Mty1(27.05.2024 20:18)
- У меня автомат верхнего уровня всего из четырёх-пяти состояний. По сути, режимы работы. И от этих состояний зависит, как отработают другие автоматы и в каких режимах. Ну и некоторые из автоматов нижнего уровня, могут получать команды от линий связи и менять режим. Нельзя сказать, что есть централизованное управление. Хотя, пожалуй, как управление можно выделить переключатель команд в обработчике команд, полученных со стыка с контроллером выше по системе. - Nikolay_Po(25.04.2024 18:16)
- А логика останова автомата состояния, запуска, останова по метке? - Make_Pic(25.04.2024 15:52)
- Дак не корми его событиями, он и стоит. Или события Стоп, Ресет с
соответсвующими обработчиками. - Andrew_Q(25.04.2024 15:56)
- А как с условными переходами быть? - Make_Pic(27.04.2024 06:32)
- Дак не корми его событиями, он и стоит. Или события Стоп, Ресет с
соответсвующими обработчиками. - Andrew_Q(25.04.2024 15:56)
- Продолжаем изобретать интерпретатор? Посмотрите на микровасик,
может навести на интересные мысли: SciFi(1 знак., 25.04.2024 11:22, ссылка)
- Не совсем, но в этом направлении попроще. - Make_Pic(25.04.2024 11:25)
- Меня тут уже поправляли... Конечный автомат... Зависит от того,
может управляющий дать несколько команд быстрее, чем управляемый
исполняет? Требуется ли очередь команд? Делал подобное через флаги.
Делал подобное через прямое вмешательство управляющего кода в
состояние управляемого. И так, и так работает. Был даже вариант с
очередью, но то были транзакции для интерфейса связи. - Nikolay_Po(25.04.2024 10:17)
- Была аналогичная тема? - Make_Pic(25.04.2024 14:33)
- Просто прибор с обработкой данных в ракельном времени, с обменом с несколькими устройствами на нескольких шинах, с фоновым сохранением результатов работы во флэш, с вычиткой данных из флеш по запросу. Очереди использовались, в частности, для флеш и её подсистемы ввода/вывода, с резервированием данных и выравниванием износа, как для самого медленного устройства и самого сложного по требуемому порядку действий. Остальные обмены требовали просто конечных автоматов, без очередей, Nikolay_Po(93 знак., 25.04.2024 18:12)
- Управляющая задача работает быстрее намного, да и приоритет у не
более высокий. Насчет очереди вопрос пока открытый скорее
потребуется. Что то есть подсмотреть ;)? - Make_Pic(25.04.2024 11:15)
- Делайте кольцевой буфер задач. Указатели на начало и конец. Если
указатели совпадают при выгрузке - значит, задач нет. Если
совпадают при загрузке задачи - значит, переполнение.
Обрабатывайте. Nikolay_Po(404 знак., 25.04.2024 11:31)
- Николай вопрос - Есть условно большая программа управления
объектом, как лучше ее подгружать в буфер задач? Можно ли код
программы сделать независимым отдельно подгружаемым по каналам
связи внешним кодом? - Make_Pic(25.05.2024 08:27)
- Это вам интерпретатор нужно изобрести. Или использовать готовый. Посмотрите здесь, на Сахаре, было обсуждение (ссылка): Nikolay_Po(663 знак., 26.05.2024 02:34, ссылка)
- Как к этой модели привязать чтение данных с портов (DI, AI) в
конкретный квант времени, обработку данных, в том числе PID
регулирование, вывод данных в DI, AI опять же Make_Pic(54 знак., 01.05.2024 19:03)
- Кладите в очередь в нужном порядке. А привязку ко времени сами функции-команды делают. Или по таймерам, или по семафорам. Или всё вместе. Главное, чтобы управляющая программа, которая контролирует очередь, умела определять отклонения от нормального хода работы и устранять сбой. Nikolay_Po(746 знак., 26.05.2024 03:01)
- Николай вопрос - Есть условно большая программа управления
объектом, как лучше ее подгружать в буфер задач? Можно ли код
программы сделать независимым отдельно подгружаемым по каналам
связи внешним кодом? - Make_Pic(25.05.2024 08:27)
- Делайте кольцевой буфер задач. Указатели на начало и конец. Если
указатели совпадают при выгрузке - значит, задач нет. Если
совпадают при загрузке задачи - значит, переполнение.
Обрабатывайте. Nikolay_Po(404 знак., 25.04.2024 11:31)
- Была аналогичная тема? - Make_Pic(25.04.2024 14:33)
- Кто нибудь делал такое на STM32 - для части исполняемого кода
возможность запускать его выполнения, останавливать (только
определенный участок кода, остальная часть кода продолжает
работать), по шагам выполнять функции - Как лучше это сделать? - Make_Pic(01.07.2024 14:29)