Обдумывал идею, описанную мню в сообщении номер 2.
Вот ее переработаны вариант, как мне кажется вполне
реализуемый, с минимальными затратами со стороны автора.
Сразу оговорюсь, у меня цель отличается от rw6cm.
rw6cm, хочет сделать возможны слияние кода одноименных функций из блоков Мастер и Слейв. При работе с прерываниями идея очень интересная.
У меня идея сделать возможным использование функций и переменных объявленных, в разных блоках. И
тем самым сделать легко масштабируемые блоки, т.е. вместо одного монстра и
избыточным функционалом, несколько блоков, а в каждом своя функция. Так можно
получить более оптимизированный код и более понятные и наглядные платы.
Необходимые дополнения для ее реализации:
- В закладки параметров :
* На вкладке Основные параметры добавить «Глобальный идентификатор»;
* Добавить вкладку «Глобальные параметры».
-В закладках секций кода добавить:
*Добавить GlobalDeclare ;
*Добавить GlobalFunction.
Сейчас при генерации кода всем переменным и функциям добавляется уникальный идентификатор (уникальный для блока).
После дополнений, описанных выше, в существующих областях весть текущий функционал сохраняется.
В поле «Глобальный идентификатор» задаем уникальный идентификатор. При генерации кода, он будет добавляться вместо того, что
добавляется сейчас к :
- Переменным, генерируемым из вкладки «Глобальные параметры»;
- Переменным, объявленным в GlobalDeclare;
- Функциям, объявленным в GlobalFunction;
Как это может выглядеть
В Связанных блоках в полях «Глобальный идентификатор» прописываем один и тот же идентификаторы.
Добавлено (02.09.2016, 09:18)
---------------------------------------------
Тут возможна два варианта реализации механизма определения куда надо подставлять глобальный идентификатор :
-Первый вариант, самый простой.
Тут будет важнапоследовательность добавления блоков в проект, т.е. Первый блок должен размещаться в проект раньше Второго, второй раньше третьего и т.д.
В Первом объявляем все нужные глобальные параметры, переменные и функции.
Во Втором и последующих блоках повторно объявляем с тем же именами глобальные параметры, переменные и функции (можно пустыми), которые там понадобятся. Можно
так же объявлять и новые глобальные параметры, переменные и функции.
При генерации кода из Первого блока в код переносятся все глобальные параметры,переменные и функции. Из последующих блоков, с идентичными Первому «Глобальным идентификатором», добавляются только новые уникальные (если токовые есть), а все повторяющиеся глобальные параметры, переменные и функции отбрасываются.
- Второй, менее удобный при написании кода, так как не будет работать подстановка имен по ПКМ. И как не кажется более сложный к реализации.
В тех блоках, где надо использовать объявленные в другом блоке глобальные параметры, переменные и функции, в коде используется их названия без объявления.
При генерации кода «Глобальный идентификатор» добавляется ко всем объявленным глобальным параметрам, переменным и функциям, во всех блока.
В других блоках (с указанным идентификатором) всем переменным и функциям, которые не объявлены в этом блоке, также добавляется «Глобальный идентификатор»
При любом из вариантов в одном блоке будет использоваться два вида разных идентификаторов, существующий сейчас, уникальный для каждого блока и второй «Глобальный идентификатор», уникальный для нескольких блоков, объединенных одним функционалом, задаваемый автором блока.
Такой подход, требует особого контроля со стороны разработчика блоков,но позволить разрабатывать боле гибкий код.
Добавлено (20.09.2016, 10:47)
---------------------------------------------
Слимпер писал(а):А вообще сейчас подумал, что таким скриптовым языком ( развив идею) можно очень сильно расширить возможности при написании блока. Вплоть до включения/исключения участков кода и/или входов/выходов блока. Но это в перспективе, если это реализуем.
А вообще оказывается есть
Директивы условной компиляции
Вида
#define MAX 10
#if MAX>99
printf("Компилирует для массива, размер которого больше 99.\n");
#else
printf("Компилирует для небольшого массива.\n");
#endif
Использую его можно сделать много интересного например, аппаратно зависимый код.
#if defined (__AVR_ATmega1280__) || defined (__AVR_ATmega2560__)
код только для меги
#endif
#if defined (__AVR_ATmega328P__)
Код только для уны
#endif
Но к сожалению, пока после каждой строчки добавляется уникальный идентификатор.
Что то в это роде еще бы добавить для настройки входов выходов блока, и вообще будет сказка.