xvr 12 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 1 hour ago, jenya7 said: не вижу чтоб на стак легли 5 и 3 и операции между ними, Их компилятор убрал, и вместо них сразу положил результат Const 2 1 hour ago, jenya7 said: но я так понимаю что JumpF +2 (=> 0005) делает 5-3? Нет. Это отработка условия в if - в данном случае пустая операция. Оптимизацию по выбрасыванию таких условий я не делал 1 hour ago, jenya7 said: user_vars это массив переменных int user_vars[8] Ясно. То есть просто 8 произвольных переменных под хранение чего нибудь. Последий вопрос остался - есть ли наиболее используемые переменные (или все используются одинаково часто)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 1 hour ago, xvr said: Их компилятор убрал, и вместо них сразу положил результат Const 2 Нет. Это отработка условия в if - в данном случае пустая операция. Оптимизацию по выбрасыванию таких условий я не делал Ясно. То есть просто 8 произвольных переменных под хранение чего нибудь. Последий вопрос остался - И есть ли наиболее используемые переменные (или все используются одинаково часто)? наиболее используемые есть (COM, POS, DIR, PWM, VAR0-VAR3, FLSW, RLSW). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 6 minutes ago, jenya7 said: наиболее используемые есть (COM, POS, DIR, PWM, VAR0-VAR3, FLSW, RLSW). POS, DIR, PWM, FLSW и RLSW для всех каналов или для некоторых? И сколько полей в структуре с моторами? По сорцу я насчитал 7, а выше вы говорили 6. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 1 hour ago, xvr said: POS, DIR, PWM, FLSW и RLSW для всех каналов или для некоторых? И сколько полей в структуре с моторами? По сорцу я насчитал 7, а выше вы говорили 6. я не все использую в скрипте. POS, DIR, PWM, FLSW, RLSW, CUR это для всех моторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба Т.е. наиболее часто используются 5*8 (для моторов) + 4 (пользовательских переменных) + 1 (COM). Всего получается 45 штук. Это больше чем 31, для которых кодировка Var* занимает 1 байт. Предлагаю ограничится первыми пятью каналами моторов. Тогда всего получится 30 переменных. Обращение к остальным каналам и остальным переменным будет занимать 2 байта в байткоде. Устроит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 1 hour ago, xvr said: Т.е. наиболее часто используются 5*8 (для моторов) + 4 (пользовательских переменных) + 1 (COM). Всего получается 45 штук. Это больше чем 31, для которых кодировка Var* занимает 1 байт. Предлагаю ограничится первыми пятью каналами моторов. Тогда всего получится 30 переменных. Обращение к остальным каналам и остальным переменным будет занимать 2 байта в байткоде. Устроит? да. а что мы экономим? можно сразу сделать 2 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 мая, 2019 Опубликовано 29 мая, 2019 · Жалоба 7 minutes ago, jenya7 said: можно сразу сделать 2 байта. Ок, не будем экономить. Тогда можно первые 8 индексов отдать под скалярные переменные (COM как минимум, а возможно и ещё что то появится), далее 8 под пользовательские переменные (VAR0/1/2/3...), а затем по 8 штук под каждый элемент массива motor_rt_params. Завтра накидаю реализацию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 30 мая, 2019 Опубликовано 30 мая, 2019 · Жалоба Итак обновление. Индексы переменных сделал немного по другому: 0 - n - Все скалярные переменные (одиночные). Пока таких только одна - com n - n+8 - VAR переменные n+8 - ... - Управление моторами (последовательно все поля структуры, затем сами структуры) В грамматику добавил возможность написать просто присваивания переменных (без if / then) В оптимизатор обработку if <const> then ... Сорцы, бинарник и пример прикрепляю. Бинарник - script.exe Пример: code.txt - Исходник code.lst - Листинг от компиляции code.bin - Бинарный байткод Интерпретатор (для МК) - interpreter.c (так же нужны файлы из сорцов компилятора - var_defs.inc и var_ids.h) Чуть не забыл: в интерпретаторе (в строке 17) замените MotorRTParamsStructType на реальный тип структуры, описывающей состояние мотора Всё остальное - сорцы code.txt: if com == 0 && pwm0 > pwm1 then pwm0 += 1; pwm1 = (com-(3-4)) com = 2 if 1 then pwm7 = 256 if 0 then pwm3 = 10 code.lst: # if com == 0 && pwm0 > pwm1 then pwm0 += 1; pwm1 = (com-(3-4)) 0000: 80 ReadVar #0 (com) 0001: 00 Const 0 0002: E4 EQ 0003: 81 ReadVar #11 (pwm0) 0004: 90 ReadVar #18 (pwm1) 0005: E6 GT 0006: E8 And 0007: E2 06 JumpF +6 (=> 000F) 0009: 01 Const 1 000A: C1 AddVar #11 (pwm0) 000B: 80 ReadVar #0 (com) 000C: 7F Const -1 000D: EB Sub 000E: B0 SetVar #18 (pwm1) # com = 2 000F: 02 Const 2 0010: A0 SetVar #0 (com) # if 1 then pwm7 = 256 0011: E0 00 01 Const 256 0014: BF 1D SetVar #60 (pwm7) # if 0 then pwm3 = 10 0016: FF Stop script.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июня, 2019 Опубликовано 4 июня, 2019 (изменено) · Жалоба On 5/30/2019 at 4:54 PM, xvr said: Итак обновление. спасибо. а сам механизм? я текстовый файл пропускаю через script? а получившийся code.lst я куда заливаю? а. то есть из code.lst я должен получить code.bin. это script.exe выдаст? а как бинарник залить в контролер? Изменено 4 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 5 hours ago, jenya7 said: я текстовый файл пропускаю через script? Да. 5 hours ago, jenya7 said: а получившийся code.lst я куда заливаю? Никуда - это вам для справки (чисто посмотреть, что получилось). script.exe выдаст code.bin (это собственно бинарник), и опционально code.lst. Запуск: script.exe code.txt code.bin [code.lst] (квадратные скобки обозначают опциональный параметр). Файлы с текстом скрипта и с кодом могут называться как угодно. 5 hours ago, jenya7 said: а как бинарник залить в контролер? Это уже вам решать - бинарник представляет собой образ, который должен быть помещён туда, откуда его будет читать функция get_byte() внутри интерпретатора в МК. Например можно залить в МК через какой нибудь стандартный канал, например через терминал (через z-modem например), или через какой нибудь tftp сервер (если в МК есть Ethernet). У вас есть какая нибудь связь между МК и РС? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 1 hour ago, xvr said: Это уже вам решать - бинарник представляет собой образ, который должен быть помещён туда, откуда его будет читать функция get_byte() внутри интерпретатора в МК. Например можно залить в МК через какой нибудь стандартный канал, например через терминал (через z-modem например), или через какой нибудь tftp сервер (если в МК есть Ethernet). У вас есть какая нибудь связь между МК и РС? У меня связь UART. Я могу загрузить бинарник в байтовый массив. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 2 minutes ago, jenya7 said: Я могу загрузить бинарник в байтовый массив. Вполне подойдёт. (Только во FLASH из массива не забудьте скопировать, если вам нужно, что бы загруженный скрипт пережил выключение питания) 2 minutes ago, jenya7 said: У меня связь UART. У вас терминал, или свой протокол (и управляющая программа на РС)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 1 hour ago, xvr said: Вполне подойдёт. (Только во FLASH из массива не забудьте скопировать, если вам нужно, что бы загруженный скрипт пережил выключение питания) У вас терминал, или свой протокол (и управляющая программа на РС)? со стороны контролера есть парсер команд. он должен знать что я ему передал. передевать я могу в принципе через любой терминал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 5 minutes ago, jenya7 said: передевать я могу в принципе через любой терминал. Передавать через терминал бинарник (как текст) не хорошо - терминал (да и ваш парсер) может плохо отреагировать на коды, меньшие 32 (код пробела). Лучше преобразовать в текст (например в Intel Hex, или просто в многострочный hex). Это можно будет прямо через copy-paste в терминал отправить Могу сделать текстовый формат (для отправки в тестовом виде в терминал) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 июня, 2019 Опубликовано 4 июня, 2019 (изменено) · Жалоба 1 hour ago, xvr said: Передавать через терминал бинарник (как текст) не хорошо - терминал (да и ваш парсер) может плохо отреагировать на коды, меньшие 32 (код пробела). Лучше преобразовать в текст (например в Intel Hex, или просто в многострочный hex). Это можно будет прямо через copy-paste в терминал отправить Могу сделать текстовый формат (для отправки в тестовом виде в терминал) В С-шарп это просто byte[] raw_data = File.ReadAllBytes(burn_file_path); comport.Write(raw_data, 0, raw_data.Length); и байты приходят в нужном формате. Изменено 4 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться