
Ассемблерная вставка в FLProg
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
-
- Полковник
- Сообщения: 3992
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 136 раз
- Поблагодарили: 148 раз
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Приступил к написанию Мастера РТУ и столкнулся с проблемой. Предполагал сделать его по аналогии со слейвом, т.е. собственно блок Мастера с заданием скорости и блоки переменных для коилов, инпутов и т.д. с заданием адреса слейва и адреса переменной.
Но т.к. слейвов может быть до 32, а мастер должен содержать зеркала всех таблиц всех слейвов, то если объявить массивы переменных с некоторым запасом ОЗУ в меге328 не хватает. Т.е. нужно объявлять реальное количество переменных в проекте.
Но адреса переменных у меня задаются через вход блока переменной как константа и появляется эта константа только в лупе, а объявить переменные надо в секции декларирования, чтобы они стали глобальными и были видимы для всех блоков.
Собственно вопрос: можно ли как-то объявить глобальную переменную (массив) в лупе уже после того, как я посчитаю все переменные?
ПС: Или наоборот, в секции декларирования сделать опрос задействованных в проекте переменных?
Второй вариант больше нравится. Фактически вопрос в том, могут ли блоки в секции декларирования сделать простую операцию инкремента некой переменной, которая будет определять количество задействованных в проекте переменных?
И следом вопрос: можно ли создать массив размерностью некой переменной?
ППС: Ответ на последний вопрос - нет, ругается компилятор, требует константу при объявлении массива
Но т.к. слейвов может быть до 32, а мастер должен содержать зеркала всех таблиц всех слейвов, то если объявить массивы переменных с некоторым запасом ОЗУ в меге328 не хватает. Т.е. нужно объявлять реальное количество переменных в проекте.
Но адреса переменных у меня задаются через вход блока переменной как константа и появляется эта константа только в лупе, а объявить переменные надо в секции декларирования, чтобы они стали глобальными и были видимы для всех блоков.
Собственно вопрос: можно ли как-то объявить глобальную переменную (массив) в лупе уже после того, как я посчитаю все переменные?
ПС: Или наоборот, в секции декларирования сделать опрос задействованных в проекте переменных?
Второй вариант больше нравится. Фактически вопрос в том, могут ли блоки в секции декларирования сделать простую операцию инкремента некой переменной, которая будет определять количество задействованных в проекте переменных?
И следом вопрос: можно ли создать массив размерностью некой переменной?
ППС: Ответ на последний вопрос - нет, ругается компилятор, требует константу при объявлении массива

-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Re: Ассемблерная вставка в FLProg
А что мешает их задать как параметр блока?
Последний раз редактировалось Naladchik 03 июн 2025, 16:26, всего редактировалось 3 раза.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Re: Ассемблерная вставка в FLProg
Naladchik писал(а): 03 июн 2025, 16:11Можно создать массив переменной длины, называется динамический массив, правда гемор еще тот.
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Ага, почитал немного. Решил все-таки ввести ограничения по размеру таблиц слейвов, чтобы все переменные уместились в 2кБ, в принципе хватит с головой. Да, не универсально, зато надежноNaladchik писал(а): 03 июн 2025, 16:13 Можно создать массив переменной длины, называется динамический массив, правда гемор еще тот.
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Re: Ассемблерная вставка в FLProg
Использовать макрос препроцессора ArduinoIDE __COUNTER__dstrufanov писал(а): 03 июн 2025, 09:04 ... в секции декларирования сделать опрос задействованных в проекте переменных...
Код: Выделить всё
//перечисление переменных
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() { }
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Не знаю, как это сделать. Это в профредакторе? Я в обычном редакторе пробовал - параметр не появляется в скетче, так и не понял, для чего он вообще
-
- Капитан
- Сообщения: 908
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 20 раз
- Поблагодарили: 22 раза
Re: Ассемблерная вставка в FLProg
В обоих редакторах есть Параметры.dstrufanov писал(а): 03 июн 2025, 17:06Не знаю, как это сделать. Это в профредакторе? Я в обычном редакторе пробовал - параметр не появляется в скетче, так и не понял, для чего он вообще
Предназначены для определения констант в коде блока на этапе создания программы.
Для себя уже давно определил простое правило при создании блоков.
Все величины, которые можно/нужно менять во время выполнения программы - входы блока
Все величины, которые задаются на этапе создания программы и по мере ее выполнения меняться не должны - параметры блока.
P.S.
Никак не могу понять логику тех, кто задает номера пинов через входы блока
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Ну вот, например, есть блок, у которого задан параметр "Константа" со значением 4. Я не вижу в скетче появления этого параметра:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Phazz
- Полковник
- Сообщения: 3087
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 226 раз
- Поблагодарили: 106 раз
Re: Ассемблерная вставка в FLProg
А вы его в блоке применили?dstrufanov писал(а): 04 июн 2025, 12:06Ну вот, например, есть блок, у которого задан параметр "Константа" со значением 4. Я не вижу в скетче появления этого параметра:
Параметр.png
- dstrufanov
- Сержант
- Сообщения: 193
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Нет конечно, я думал, он и так должен как-то проявиться. Ясно, спасибо!

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