Чувствую, что напутал что-то с переменными (long и int)

На Ардуино (AVR) это одно и то же.

Хотя бы один раз, да есть!

Друзья, пока вот эта сентенция нормально работает. Тем не менее, штудирую предложенные ссылки. Не все понимаю, но стараюсь.

Всем спасибо!

а что там непонятно? В С/С++ выражение вычисляется в типе операндов, а не в типе переменной результата

Я на работе пишу программу для панели HMI, от Delta Electronics.

Так вот там в качестве ЯП(помимо макросов), предлагается использовать Lua.

Вот где трэш и угар.

Переменную обьявляй где захочешь, для объявления достаточно в любом месте написать что то типа: myVal=2 или myVal2=”hello”, все переменные глобальные, тип компилятор сам определит. Все числа по умолчанию float.

Вот с этими числами прям засада.

Для вывода на панель нужны целые, а они все после умножения или деления дробные. Приходится округлять.

Скажем:

myVal может быть целым числом.

А

myVal=myVal*3
или
myVal=myVal/5

Уже дробное, (даже если первое значение было 10).

Но потом после

myVal=math.ceil(myVal) или myVal=math.floor(myVal)

Оно уже обратно целое.

Причем компилятору пофигу на этот момент, что бы понять что херню написал, надо загрузить все в панель и тогда она уже орать начинает, при чем только в том месте программы которое вызывается в данном окне.(Короче когда интерпретатор дойдет до этого места в программе)

Ужасный язык, лучше бы на С/С++ было.

На самом деле, всё ещё проще. Присваивание – это такая же операция, как все остальные. Т.е. присваивание это новая операция, а не “запоминание результата предыдущей”.

Не тот язык назвали брейнфаком :slight_smile:

1 лайк

Там ещё танцы и пляски с массивами.

Которые могут быть так же таблицами .

Программа сама решит, что ты хотел, массив или таблицу :slight_smile:

И вся эта шляпа только из-за того, что размер интерпретатора всего пара сотен килобайт. А стало быть его можно запихать в железяку. (Эта же херь используется в качестве языка в NodeMCU на базе ESP8266 я ей там ни разу не пользовался).

А на амперке один «товарищ» обожает Lua )))

Я всегда думал, что самый “мозголомный” это Forth.

Так и не смог в него “въехать”.

А где его сейчас применяют?

Везде, где нужна автоматизация

Наверное уместнее вопрос не “где”, а “кто”.

Так то Forth есть для чего угодно, для avr в том числе.

О как. Не знал…

Писать лень, ответ от ДипСик:

Спойлер

Если коротко, Forth применяется там, где нужен полный контроль над “железом” в условиях крайне ограниченных ресурсов.

Вот основные области его применения:

  1. Космонавтика и аэрокосмическая промышленность

Это, пожалуй, самый известный пример успеха Forth.

· Космический аппарат “Иннопорт” и “Иннопорт-2”: Разработанные в России, эти аппараты использовали Forth в качестве бортового языка программирования. Это позволило инженерам гибко управлять системами аппарата и даже обновлять ПО уже в полете.
· Спутники и МКС: Forth использовался для программирования бортовых компьютеров некоторых спутников и для управления экспериментами на Международной космической станции (например, эксперимент “Плазменный кристалл”).
· Шаттлы: Некоторые системы шаттлов NASA также были запрограммированы на Forth.

Почему здесь? Надежность, возможность отладки и изменения кода в реальном времени, а также крошечный размер интерпретатора.

  1. Встроенные системы (Embedded Systems)

Это самая обширная область применения Forth сегодня.

· Промышленная автоматизация: Программируемые логические контроллеры (ПЛК), управление станками, роботами и производственными линиями.
· Бытовые устройства: Прошивки для принтеров, жестких дисков (известный пример — контроллеры фирмы Seagate), модемов, маршрутизаторов.
· Медицинское оборудование: Для устройств, где требуется точное управление и обработка данных в реальном времени.
· Автомобильная электроника: Управление двигателем, антиблокировочной системой (ABS).

Почему здесь? Прямой доступ к портам ввода-вывода, очень малое потребление памяти (как RAM, так и ROM), высокая производительность.

  1. Аппаратное обеспечение и разработка прошивок

Forth часто используется на самых ранних этапах разработки нового “железа”.

· Прошивки (Firmware): Forth может быть прошит в ПЗУ микроконтроллера и служить основой для дальнейшей разработки.
· Тестирование оборудования: Инженеры используют Forth для быстрого создания тестовых программ, проверяющих работу новых чипов и плат.
· Bootloader’ы: Некоторые загрузчики операционных систем написаны на Forth из-за их компактности.

  1. Научное и исследовательское оборудование

· Радиоастрономия: Например, Forth использовался для управления большими радиотелескопами.
· Экспериментальная физика: Для сбора данных и управления сложными установками в реальном времени.
· Океанография: На бортовых компьютерах исследовательских зондов и буев.

Почему здесь? Возможность быстрого прототипирования и взаимодействия с нестандартным лабораторным оборудованием.

  1. Образование и хобби

· Изучение компьютерной архитектуры: Forth — прекрасный инструмент для понимания того, как работают компьютеры на низком уровне. Его можно запустить на простейшем микроконтроллере (например, Arduino или ESP32).
· Самодельные компьютеры: Энтузиасты, создающие компьютеры “с нуля” (например, на базе процессоров 6502 или Z80), часто выбирают Forth в качестве своей первой операционной системы и языка программирования из-за его простоты и мощи.
· Retrocomputing: Forth был популярен на домашних компьютерах 80-х (например, Sinclair ZX Spectrum, BBC Micro), и до сих пор используется энтузиастами этой эпохи.

Ключевые преимущества, определяющие области применения:

  1. Экстремальная компактность: Интерпретатор Forth может занимать всего несколько килобайт.
  2. Высокая производительность: Код, написанный на Forth, компилируется в компактный байт-код, который выполняется очень быстро.
  3. Интерактивность: Forth — это интерактивная среда. Вы можете общаться с оборудованием “на лету”, посылая команды и сразу видя результат, что невероятно удобно для отладки.
  4. Низкоуровневый доступ: Программист имеет почти прямой доступ к памяти и аппаратным регистрам.
  5. Расширяемость: Язык можно легко адаптировать под конкретную задачу, создавая новые слова (функции).

Не всё так однозначно. Forth использует “шитый” код, когда из нескольких исполняемых конструкций (слов), создается другое слово, запоминается в “словаре” и потом может использоваться для составления других исполняемых слов. В классической гарвардской архитектуре, где в ОЗУ нельзя хранить исполняемый код, это делать несколько проблематично. Вернее, хранить то что угодно можно, выполнять нельзя.

Кстати, в деццтве я думал, что “шитый” код - это от слова “shit”. И был недалёк от истинов.

3 лайка

КМК, всё тоже делается на макроассемблере, с которым значительно проще и нагляднее.

Да ё-моё! Это вам, гуру, все понятно! А я на каждой итерации или вспоминаю, что делал (“по совету друзей“) или лезу сюда на сайт или в справочники. Слава Богу, хоть с логикой у меня прилично. И то не всегда помогает. У нас разные “весовые категории”. Я знаю, как человека правильно разрезать, а потом правильно сшить. А как “сшить“ простейший скетч - приходится напружинивать мозги. Иногда без толку… Так что, не бейте по больному.

1 лайк

Нельзя, это чрезвычайно опасно.

Вы ведь лучше меня знаете, что боль – это защитный механизм предотвращения повреждения тканей или психологического неблагополучия.

Так что бьём по больному исключительно из заботы о Вас! :slight_smile:

2 лайка

Я запихивал его в железяку, как замену PHP . У нас был веб сервер на железке, а скриптового языка - не было. Вкорячили Lua. Отлично справился с задачей :slight_smile:

запросы отрабатывал не PHP а LUA?