Ассемблерная вставка в FLProg

Создаем свой блок. Вопросы, помощь знатоков.
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Одни земляки :)
ecoins
Полковник
Сообщения: 3992
Зарегистрирован: 12 фев 2016, 11:40
Откуда: Шатура
Имя: Энвер
Благодарил (а): 136 раз
Поблагодарили: 148 раз

Re: Ассемблерная вставка в FLProg

Сообщение ecoins »

Ander писал(а): 30 май 2025, 13:24 а я на затулинке
Новосибирцев набралась цела группа!
Всем успехов!
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Приступил к написанию Мастера РТУ и столкнулся с проблемой. Предполагал сделать его по аналогии со слейвом, т.е. собственно блок Мастера с заданием скорости и блоки переменных для коилов, инпутов и т.д. с заданием адреса слейва и адреса переменной.
Но т.к. слейвов может быть до 32, а мастер должен содержать зеркала всех таблиц всех слейвов, то если объявить массивы переменных с некоторым запасом ОЗУ в меге328 не хватает. Т.е. нужно объявлять реальное количество переменных в проекте.
Но адреса переменных у меня задаются через вход блока переменной как константа и появляется эта константа только в лупе, а объявить переменные надо в секции декларирования, чтобы они стали глобальными и были видимы для всех блоков.
Собственно вопрос: можно ли как-то объявить глобальную переменную (массив) в лупе уже после того, как я посчитаю все переменные?

ПС: Или наоборот, в секции декларирования сделать опрос задействованных в проекте переменных?

Второй вариант больше нравится. Фактически вопрос в том, могут ли блоки в секции декларирования сделать простую операцию инкремента некой переменной, которая будет определять количество задействованных в проекте переменных?
И следом вопрос: можно ли создать массив размерностью некой переменной?

ППС: Ответ на последний вопрос - нет, ругается компилятор, требует константу при объявлении массива :smile37:
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

Re: Ассемблерная вставка в FLProg

Сообщение Naladchik »

dstrufanov писал(а): 03 июн 2025, 09:04 Но адреса переменных у меня задаются через вход блока
А что мешает их задать как параметр блока?
Последний раз редактировалось Naladchik 03 июн 2025, 16:26, всего редактировалось 3 раза.
Win10-64. FLProg Portable.
Изображение
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

Re: Ассемблерная вставка в FLProg

Сообщение Naladchik »

Naladchik писал(а): 03 июн 2025, 16:11
dstrufanov писал(а): 03 июн 2025, 09:04 можно ли создать массив размерностью некой переменной?
Можно создать массив переменной длины, называется динамический массив, правда гемор еще тот.
Win10-64. FLProg Portable.
Изображение
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Naladchik писал(а): 03 июн 2025, 16:13 Можно создать массив переменной длины, называется динамический массив, правда гемор еще тот.
Ага, почитал немного. Решил все-таки ввести ограничения по размеру таблиц слейвов, чтобы все переменные уместились в 2кБ, в принципе хватит с головой. Да, не универсально, зато надежно
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

Re: Ассемблерная вставка в FLProg

Сообщение Naladchik »

dstrufanov писал(а): 03 июн 2025, 09:04 ... в секции декларирования сделать опрос задействованных в проекте переменных...
Использовать макрос препроцессора ArduinoIDE __COUNTER__

Код: Выделить всё

    //перечисление переменных
int val_1 = __COUNTER__;    // переменной val_1 присваивается значение 0
int val_2 = __COUNTER__;    // переменной val_1 присваивается значение 1
int val_3 = __COUNTER__;    // переменной val_1 присваивается значение 2
int val_4 = __COUNTER__;    // переменной val_1 присваивается значение 3
   // объявление массива
int val_array [__COUNTER__];   // объявление массива из 4х элементов

void setup() {   }
void loop()  {   }
пробуйте.
Win10-64. FLProg Portable.
Изображение
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Naladchik писал(а): 03 июн 2025, 16:11 А что мешает их задать как параметр блока?
Не знаю, как это сделать. Это в профредакторе? Я в обычном редакторе пробовал - параметр не появляется в скетче, так и не понял, для чего он вообще
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

Re: Ассемблерная вставка в FLProg

Сообщение Naladchik »

dstrufanov писал(а): 03 июн 2025, 17:06
Naladchik писал(а): 03 июн 2025, 16:11 А что мешает их задать как параметр блока?
Не знаю, как это сделать. Это в профредакторе? Я в обычном редакторе пробовал - параметр не появляется в скетче, так и не понял, для чего он вообще
В обоих редакторах есть Параметры.
Предназначены для определения констант в коде блока на этапе создания программы.
Для себя уже давно определил простое правило при создании блоков.
Все величины, которые можно/нужно менять во время выполнения программы - входы блока
Все величины, которые задаются на этапе создания программы и по мере ее выполнения меняться не должны - параметры блока.

P.S.
Никак не могу понять логику тех, кто задает номера пинов через входы блока
Win10-64. FLProg Portable.
Изображение
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Naladchik писал(а): 03 июн 2025, 17:12 В обоих редакторах есть Параметры.
Ну вот, например, есть блок, у которого задан параметр "Константа" со значением 4. Я не вижу в скетче появления этого параметра:
Параметр.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Phazz
Полковник
Сообщения: 3087
Зарегистрирован: 17 окт 2016, 15:38
Откуда: Сургут
Имя: Анатолий
Благодарил (а): 226 раз
Поблагодарили: 106 раз

Re: Ассемблерная вставка в FLProg

Сообщение Phazz »

dstrufanov писал(а): 04 июн 2025, 12:06
Naladchik писал(а): 03 июн 2025, 17:12 В обоих редакторах есть Параметры.
Ну вот, например, есть блок, у которого задан параметр "Константа" со значением 4. Я не вижу в скетче появления этого параметра:
Параметр.png
А вы его в блоке применили?
Аватара пользователя
dstrufanov
Сержант
Сообщения: 193
Зарегистрирован: 07 янв 2024, 12:43
Имя: Дмитрий
Благодарил (а): 23 раза
Поблагодарили: 35 раз

Re: Ассемблерная вставка в FLProg

Сообщение dstrufanov »

Phazz писал(а): 04 июн 2025, 12:32 А вы его в блоке применили?
Нет конечно, я думал, он и так должен как-то проявиться. Ясно, спасибо! :D
Ответить

Вернуться в «Разработка пользовательских блоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot], tol123 и 2 гостя