|
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
|
|
Возможность изменять программу во время выполнения.26.08.2016, 21:17. Показов 8881. Ответов 25
Метки нет (Все метки)
И всем доброго времени суток.
Есть "безумная идея", но необходини коллективная помощь, думаю данная задачка была бы интересна многим. Как сделать возможность менять программу во время выполнения, без остановки работы МК? Т.е к примеру имеем массив переменных и нужно как бы "долить" в процессе еще переменных, или поменять что нибудь в основном цикле программы, но без остановки и перезапуска МК. Такое реализовано к примеру к ПЛК Шнайдеров, там можно сделать небольшие изменения в самой программе Unity и "дозалить", глобальные изменения конечно не поддерживают "доливку", а мелкие да и это очень удобно. Есть какие нибудь идеи? Или что посоветуете, куда копать?
0
|
|
| 26.08.2016, 21:17 | |
|
Ответы с готовыми решениями:
25
Компонент, который дает возможность размещать компоненты прямо на форме во время ее выполнения Написать программу, позволяющую считывать и изменять локальное время |
|
Oxford
|
|
| 26.08.2016, 21:22 | |
|
А что считать с карты файл с настройками в ОЗУ уже никак?
|
|
|
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
|
|
| 26.08.2016, 21:42 | |
|
Будет в любом случае пере инициализация, всех регистров и портов В/В, а необходимо этого избежать.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
|
|
| 26.08.2016, 23:21 | |
|
Можно через порт передавать (USORT, CAN, I2C).
Но без программирования никак не получится.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 26.08.2016, 23:56 | |
|
Во время программирования (точнее стирания) страница выводится из доступа. При попытке исполнения кода из этой страницы будет известно что. Так что - как минимум надо ставить на паузу. IMHO
0
|
|
|
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
|
||
| 27.08.2016, 00:01 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 27.08.2016, 00:36 | |
|
В общем случае (и в частности - при написании на Си) - очень сложная задача, лучше не связываться. Характерный пример: Apple в своём XCode прекратил поддержку Edit omd Continue. (А вот Microsoft ничего, держится).
А вот для частных случаев вроде написания интерпретируемого кода на своём языке (как в тех же ПЛК) - довольно просто. Промежуточный вариант - деление программы на модули вроде dll (с таблицей функций) и подмена одной dll на другую на ходу (добавили код в память и перезаписали таблицу функций).
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 886
|
|
| 27.08.2016, 01:30 | |
|
Начиная примерно с 1975 года компиляторы поддерживают функцию overlay.
Грузите их хоть в ROM, хоть из флэш и исполняйте. Не хотите overlay - делайте position independ (PI) код и выполняйте. Не хотите PI код - грузите в то место, которое при линковке указали, и выполняйте. Для слабо сформулированной задачи - будут слабо понятные ответы.
0
|
|
|
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
|
|
| 27.08.2016, 08:47 | |
|
Завтра разберу какой нибудь 140CPU67160 шнайдеровский, посмотрю как внутрях все организованно, может прольет свет на организацию. Если разбирать общую структуру выполнения в шнайдере, то у них как я понимаю, все поделено по-блочно.
Т.к к примеру если остановить контроллер, то массив регистров входов все равно будет записывать данные извне в контроллер, хоть контроллер и остановлен, значить этот массив отделен от основной программы (сделан блоком). Так вот, если "по идеи" отделить инициализацию, прерывания и т.п от основного кода программы, и сделать два блока с основной программой, т.е имеем 4 блока: 1) Блок с переменными. 2) Блок с инициализацией, прерываниями и т.п. 3) Основной блок самой программы и логики. 4) Еще один основной блок для "горячего переключения". При первой "полной" заливки программы в контроллер два основных блока одинаковы и программа стартует из первого. Если есть необходимость "дозалить" ПО, то доливка происходит во второй блок контроллера и по окончании "дозаливки" происходит переключение точки выполнения с основного на "резервный" блок. У шнайдеров функция "дозаливки" сделана только для мелких изменений, если необходимо сделать изменение конфигурации или что-то глобальное, то конечно эта функция недоступна и нужно целиком переписывать ПО, что в принципе и подтверждает выше описанную мною теорию. Но это только теория. Так вот, как по вашему мнению, можно что-либо подобное организовать на STM32 ?
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 27.08.2016, 09:33 | |
|
Гм. Вообще-то, есть JTAG, и этим всё сказано.
Если вам надо рандмно менять код программы и данные, возьмите TI-шный DSP, подключите его элементарной 8-битной шиной и делайте с ним что угодно.
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 27.08.2016, 09:43 | |
|
Mot0y, вы понимаете смысл слов, которые oomomstir написал?
Если хоть немного понимаете, то можно продолжить эту тему, если совсем не понимаете, то наверно нет смысла продолжать
0
|
|
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
||
| 27.08.2016, 09:59 | ||
Завершить нить, и создать новый таск - с новыми параметрами, который в свою очередь создаст собственное окружение. В зависимости от скорости реакции ос, и от сложности перезапуска - получается от 1мс до 50мс. В определённых условиях возможно частичное замещение новым таском с перенаправлением потоков, в этом случае задержки вообще нет. А удаление происходит позже, это когда памяти много. Второй вариант - запуск копий в памяти с новыми параметрами окружения. Для этого необходимо менять настройки gcc, чтобы функция могла запускаться в любом участке памяти. Можно, но муторно и глючно.
0
|
||
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
|
|||
| 27.08.2016, 14:38 | |||
http://s7detoty.narod.ru/Schneider/Schneider.html <Изображение удалено> Внешняя память позволяет заливать новые версии пользовательских функций в свободную память, а затем просто изменять адрес вызова этой функции в основной пользовательской программе... поэтому для пользователя это происходит "незаметно". В самых крутых ПЛК Сименс S7-400 программы пользователя выполняются из ОЗУ (куда копируются с внешней флешкарты во время включения ПЛК)
При этом сам процессор контроллера будет выполнять программу операционной системы, в том числе выполнять и функции коммуникации и обмена данными с внешними устройствами пересылать по запросу Программатора или ЧМО.
0
|
|||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 27.08.2016, 17:48 | |
|
В наикрутейшем квантуме топик-стартера нет "программ пользователя", есть только данные пользователя - байткод для интерпретатора. Теоретически возможно добавлять туда свои ф-ции, которые надо будет писать на си, а компилировать их там будет - сюрприз-сюрприз - "специальная версия gcc" )
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
|
|||
| 27.08.2016, 19:41 | |||
http://schneider.nt-rt.ru/imag... 3879RU.pdf
0
|
|||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 27.08.2016, 21:54 | |
|
pytrpts, честно говоря, мне лениво мануалы шерстить ради того чтоб вам чего-то доказывать. Если интересно, то в гугле поищите что-нибудь вроде modicon unity c++, ну или оставайтесь при своих убеждениях )
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 721
|
||
| 28.08.2016, 10:52 | ||
Пиши конкретно с копипастой из док для конкретных моделей с ссылками на документацию и фотками внутренностей... Сейчас в промышленности используются сотни разновидностей ПЛК разной аппаратной сложности - одни можно программировать только на языках МЭК, у других и винда может быть в качестве ОС :) Мои настольные "убеждения" реальны... в отличии от "одна_баба_в_гугле_написала" https://www.cyberforum.ru/savedimages/2016/08/28/vrke7spzfcpsbbavgqj.jpg https://www.cyberforum.ru/savedimages/2016/08/28/xrmpddqtqkl2mvnrh.jpg *сам удивился - вместо +... но тоже лень перепаивать :)
0
|
||
|
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 38
|
||
| 28.08.2016, 14:06 | ||
1) На unity пишется программа пользователя "с функциями, если надо" на любом МЭК языке, но можно и на нескольких (ST, FBD и пр.). 2) Заливается в квантум и выполняется, то что там есть своя ОС это да. Квантум я привел к качестве примера, то что у него есть полезная фишка дозаливки, и узнаю общее мнение можно ли такое реализовать на STM32. P/S Перечитайте пожалуйста тему с начала, может вы неправильно понимаете, что требуется.
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|||||||||||||||||||||||||||
| 28.08.2016, 14:19 | |||||||||||||||||||||||||||
|
Можно так сделать на C++ через виртуальные/абстрактные классы.
С последующем переопределением классов. Не пугайтесь терминологии, не так все и страшно. Хотя я сам только пытаюсь разобраться.
Суть такова: есть интерфейс, в котором не определены функции
Теперь, где-то в сменяемой части мы пишем:
0
|
|||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 28.08.2016, 14:26 | |
|
Но реализация нашего класса с функциями должна лежать по определённому адресу.
Если надо - просто перезаписываем туда новую реализацию, не трогая "основной" код.
0
|
|
| 28.08.2016, 14:26 | |
|
Помогаю со студенческими работами здесь
20
Написать программу, позволяющую считывать и изменять системное время Посоветуйте программу, которая может изменять дату и время создания файла Запустить программу и подсчитать время ее выполнения
Вычислить время выполнения программы, исправить программу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|