Реализация Графического Языка Программирования
- Реклама
- НАПАЛМ
- Это не хвост, это антенна
- Сообщения: 1314
- Зарегистрирован: Пт ноя 27, 2009 19:47:13
- Откуда: Казань
Re: Реализация Графического Языка Программирования
Не думали подобное для ПЛИС запилить? Там будет более актуально, думаю.
Re: Реализация Графического Языка Программирования
Попробовал, раскритиковали.НАПАЛМ писал(а):Не думали подобное для ПЛИС запилить? Там будет более актуально, думаю.
Добавил возможность контроля оперативной памяти.
Re: Реализация Графического Языка Программирования
Доработал программу, а именно библиотеку сборки проектов для AVR контроллеров "EvAVRbuilder.dll". При сборки проекта создаются всего два файла это ассемблерный файл полученной программы и непосредственна сама прошивка.
- Реклама
Re: Реализация Графического Языка Программирования
Добрый день, есть желание продолжить проект.
Ищу увлеченных людей со знанием AVR assembler для совместной работы над проектом,
Ищу увлеченных людей со знанием AVR assembler для совместной работы над проектом,
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Реализация Графического Языка Программирования
Скажите, как у вас добавляются новые кристаллы в систему: путем перекомпиляции пакета, путем добалвения DLL или путем добавления какого-то файла описания кристалла в текстовом или другом человеко-читаемом формате?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Реализация Графического Языка Программирования
Ядро программы, кода всех FBDблоков и описание кристалла представлены текстовыми файлами.
Во время сборки программа формирует файл конфигурации, далее соответствующая dll собирает из всех файлов единый исходный файл, затем он компилируется.
Если добавлять кристалл семейства AVR, то необходимо корректировать только текстовые файлы, а если другого типа, то создавать новую библиотеку сборки проекта.
В следующем видео я подробней расскажу как собирается проект и обрисую идею оптимизации.
Во время сборки программа формирует файл конфигурации, далее соответствующая dll собирает из всех файлов единый исходный файл, затем он компилируется.
Если добавлять кристалл семейства AVR, то необходимо корректировать только текстовые файлы, а если другого типа, то создавать новую библиотеку сборки проекта.
В следующем видео я подробней расскажу как собирается проект и обрисую идею оптимизации.
Re: Реализация Графического Языка Программирования
Добавление кристалла:
Добавлено after 1 minute 44 seconds: Имеетя 7 блоков, причем кода PinD4 и PinD7, а ткже PinB6 и PinB7- идентичны.
В результате сборки программа вложит 5 исполнительных подпрограмм:
FBD0_run (для PinD4 и PinD7)
FBD1_run (для RS триггер)
FBD2_run (для NOT)
FBD3_run (для AND)
FBD4_run (для PinB6 и PinB7)
Подпрограммы завершаются командой ret. Подпрограммы используют указатели X на оперативную память и Y- на флеш память.
В цикле программы необходимо вызвать семь функций:
rcall FBD0_run (для PinD4)
rcall FBD0_run (для PinD7)
rcall FBD1_run (для RS)
rcall FBD2_run (для NOT)
rcall FBD3_run (для AND)
rcall FBD4_run (для PinB6)
rcall FBD4_run (для PinB7)
При этом, у каждого блока имеется свои данные оперативной и флэш памяти, эти адресазаведомо известны.
Для флеш:
FBD0_flash: db 00, 00, .. (данные PinD4)
FBD1_flash: db 00, 00, .. (данные PinD7)
FBD2_flash: db 00, 00, .. (данные RS)
FBD3_flash: db 00, 00, .. (данные NOT)
FBD4_flash: db 00, 00, .. (данные AND)
FBD5_flash: db 00, 00, .. (данные PinB6)
FBD6_flash: db 00, 00, .. (данные PinB7)
Для оперативной:
FBD0_ram (адрес на данные в оперативной памяти для PinD4)
FBD1_ram (адрес на данные в оперативной памяти для PinD7)
FBD2_ram (адрес на данные в оперативной памяти для RS)
FBD3_ram (адрес на данные в оперативной памяти для NOT)
FBD4_ram (адрес на данные в оперативной памяти для AND)
FBD5_ram (адрес на данные в оперативной памяти для PinB6)
FBD6_ram (адрес на данные в оперативной памяти для PinB7)
По факту не все блоки используют оперативную память, в приведенном примере только RS триггер использует 1 байт.
С учетом предварительной установки адреса, получаю:
ldi xl, low(FBD0_ram)
ldi xh, high(FBD0_ram)
ldi yl, low(FBD0_flash*2)
ldi yh, high(FBD0_flash*2)
rcall FBD0_run (для PinD4)
ldi xl, low(FBD1_ram)
ldi xh, high(FBD1_ram)
ldi yl, low(FBD1_flash*2)
ldi yh, high(FBD1_flash*2)
rcall FBD0_run (для PinD7)
...
В итоге расходую по 5 комнд (10 байт памяти) для исполнения одного блока.
Как сделать оптимальней?
Добавлено after 1 minute 44 seconds: Имеетя 7 блоков, причем кода PinD4 и PinD7, а ткже PinB6 и PinB7- идентичны.
В результате сборки программа вложит 5 исполнительных подпрограмм:
FBD0_run (для PinD4 и PinD7)
FBD1_run (для RS триггер)
FBD2_run (для NOT)
FBD3_run (для AND)
FBD4_run (для PinB6 и PinB7)
Подпрограммы завершаются командой ret. Подпрограммы используют указатели X на оперативную память и Y- на флеш память.
В цикле программы необходимо вызвать семь функций:
rcall FBD0_run (для PinD4)
rcall FBD0_run (для PinD7)
rcall FBD1_run (для RS)
rcall FBD2_run (для NOT)
rcall FBD3_run (для AND)
rcall FBD4_run (для PinB6)
rcall FBD4_run (для PinB7)
При этом, у каждого блока имеется свои данные оперативной и флэш памяти, эти адресазаведомо известны.
Для флеш:
FBD0_flash: db 00, 00, .. (данные PinD4)
FBD1_flash: db 00, 00, .. (данные PinD7)
FBD2_flash: db 00, 00, .. (данные RS)
FBD3_flash: db 00, 00, .. (данные NOT)
FBD4_flash: db 00, 00, .. (данные AND)
FBD5_flash: db 00, 00, .. (данные PinB6)
FBD6_flash: db 00, 00, .. (данные PinB7)
Для оперативной:
FBD0_ram (адрес на данные в оперативной памяти для PinD4)
FBD1_ram (адрес на данные в оперативной памяти для PinD7)
FBD2_ram (адрес на данные в оперативной памяти для RS)
FBD3_ram (адрес на данные в оперативной памяти для NOT)
FBD4_ram (адрес на данные в оперативной памяти для AND)
FBD5_ram (адрес на данные в оперативной памяти для PinB6)
FBD6_ram (адрес на данные в оперативной памяти для PinB7)
По факту не все блоки используют оперативную память, в приведенном примере только RS триггер использует 1 байт.
С учетом предварительной установки адреса, получаю:
ldi xl, low(FBD0_ram)
ldi xh, high(FBD0_ram)
ldi yl, low(FBD0_flash*2)
ldi yh, high(FBD0_flash*2)
rcall FBD0_run (для PinD4)
ldi xl, low(FBD1_ram)
ldi xh, high(FBD1_ram)
ldi yl, low(FBD1_flash*2)
ldi yh, high(FBD1_flash*2)
rcall FBD0_run (для PinD7)
...
В итоге расходую по 5 комнд (10 байт памяти) для исполнения одного блока.
Как сделать оптимальней?
Re: Реализация Графического Языка Программирования
Если функция использует оперативную память, то будет так:
а если не использует, то первые две команды не нужны... Вопрос то в чем? Как написать программу которая сама решает добавлять эти команды или нет? 
Код: Выделить всё
ldi xl, low(FBD0_ram)
ldi xh, high(FBD0_ram)
ldi yl, low(FBD0_flash*2)
ldi yh, high(FBD0_flash*2)
rcall FBD0_run (для PinD4) Re: Реализация Графического Языка Программирования
Программу напишу, по сути еще на этапе компиляции известны все адреса.
Может как то поможет чередование:
FBD0_flash: db 00, 00, .. (данные PinD4)
rcall FBD0_run (для PinD4)
FBD1_flash: db 00, 00, .. (данные PinD7)
rcall FBD0_run (для PinD7)
...
или
rcall FBD0_run (для PinD4)
FBD0_flash: db 00, 00, .. (данные PinD4)
rcall FBD0_run (для PinD7)
FBD1_flash: db 00, 00, .. (данные PinD7)
тогда в стеке уже хранится указатель на данные, опять же необходимы ресурсы для излечения?
Может как то поможет чередование:
FBD0_flash: db 00, 00, .. (данные PinD4)
rcall FBD0_run (для PinD4)
FBD1_flash: db 00, 00, .. (данные PinD7)
rcall FBD0_run (для PinD7)
...
или
rcall FBD0_run (для PinD4)
FBD0_flash: db 00, 00, .. (данные PinD4)
rcall FBD0_run (для PinD7)
FBD1_flash: db 00, 00, .. (данные PinD7)
тогда в стеке уже хранится указатель на данные, опять же необходимы ресурсы для излечения?
Re: Реализация Графического Языка Программирования
Предварительный итог:
- raspi-config
- Встал на лапы
- Сообщения: 129
- Зарегистрирован: Вс авг 26, 2018 12:28:26
Re: Реализация Графического Языка Программирования
Ребят кто то знает как реализовать в этой программе простую логику!?
При нажатии тактовой кнопки включается нагрузка, при повторном нажатии выключается.
Ведь ТТ триггера нету, как реализовать?
При нажатии тактовой кнопки включается нагрузка, при повторном нажатии выключается.
Ведь ТТ триггера нету, как реализовать?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Реализация Графического Языка Программирования
Дребезг контактов (гугл) учитываем? Вашу задачу можно оформить в виде конечного автомата. Даже в этом случае есть варианты.
Код: Выделить всё
if (Get_Event (EV_KEYS_PRESSED))
{
if (! (LED_PORT & (1<<LED)))
led_on ();
else
led_off ();
}


