События в real time системе в принципе зло. Они мешают точному расчету времени реакции. Они могут зацикливаться. Они могут переполняться. У них могут быть гонки. Словом отладка систем с событиями очень сложна. Но как раз про это ни слова в статье.
Создатели IEC 61131-3 были не дураки, и были в курсе о событиях. Однако их не реализовали.
Я так понимаю, что события притянули для необходимости рисования SM выполняющихся распределенно на медленных недетерминированных шинах типа MODBUS по TCP. Если бы был EtherCAT, TSN, Profinet IRT и т.п. события бы не понадобились.
Т.е. по сути вот такая реализаци IEC 61499 - это декларация технологической отсталости.
Простенькое приложение с событиями где еще нет рисков запутаться может и ChatGPT нагенерить в VS Code. Для этого не нужны специальные IDE.
По статьям разработчиков можно только понять что они рассматривают ИИ в первую очередь как оружие в борьбе за их ценности и их только волнует чтобы у ИИ не появилась мораль. Потому что никто не знает существует ли универсальная мораль.
Поробовал сейчас ChatGPT дать это задание из статьи. Отлично все решает. Если нужно использовать заданные подблоки из wally_fpu, то и это делает отлично. Если нужно статейку прочитать и разобрать, то и это без проблем. Тут надо учесть, что на прошлой неделе ChatGPT стал сильно мощнее. Листниги выдает объемные.
Скрытый текст
module formula_pipeline_f64 (
input logic clk, // Тактовый сигнал: синхронизирует все операции в системе
input logic rst, // Сброс системы: при активации сбрасывает внутренние состояния и регистры
input logic valid_in, // Сигнал, указывающий, что входные данные (a_in, b_in, c_in) действительны и могут быть приняты
input logic [63:0] a_in, // Входной аргумент 'a' в формате double precision (IEEE-754 64-бит)
input logic [63:0] b_in, // Входной аргумент 'b' в формате double
input logic [63:0] c_in, // Входной аргумент 'c' в формате double
output logic valid_out, // Сигнал, указывающий, что результат готов к использованию
output logic [63:0] result // Выходной результат вычисления формулы: (b - c) * (5 - c - a) + a
);
// Задаем константу 5.0 в формате IEEE-754 double precision
logic [63:0] const_5 = 64'h4014000000000000;
// Стадия 1: b - c
logic [63:0] sub1_result; // Результат вычисления b - c
logic sub1_valid; // Флаг готовности результата от блока вычитания
f_sub #(.FPU_FMT(1)) f_sub1 ( // Блок вычитания: работает с double (FPU_FMT=1)
.clk(clk), // Синхронизация операций внутри блока
.a(b_in), // Первый операнд (b)
.b(c_in), // Второй операнд (c)
.result(sub1_result), // Результат вычитания b - c
.valid_out(sub1_valid) // Флаг, что результат готов
);
// Стадия 2a: 5 - c
logic [63:0] sub2a_result; // Результат вычисления 5 - c
logic sub2a_valid; // Флаг готовности результата
f_sub #(.FPU_FMT(1)) f_sub2a ( // Еще один блок вычитания: 5.0 - c
.clk(clk),
.a(const_5), // Первый операнд — константа 5.0
.b(c_in), // Второй операнд — c
.result(sub2a_result), // Результат 5 - c
.valid_out(sub2a_valid) // Флаг валидности
);
// Стадия 2b: (5 - c) - a
logic [63:0] sub2_result; // Результат (5 - c - a)
logic sub2_valid; // Флаг готовности результата
f_sub #(.FPU_FMT(1)) f_sub2b ( // Блок вычитания: выполняет (5 - c) - a
.clk(clk),
.a(sub2a_result), // Первый операнд — результат предыдущего этапа (5 - c)
.b(a_in), // Второй операнд — a
.result(sub2_result), // Результат (5 - c - a)
.valid_out(sub2_valid) // Флаг валидности
);
// Стадия 3: (b - c) * (5 - c - a)
logic [63:0] mult_result; // Результат произведения
logic mult_valid; // Флаг готовности результата
f_mult #(.FPU_FMT(1)) f_mult1 ( // Блок умножения double
.clk(clk),
.a(sub1_result), // Первый множитель — (b - c)
.b(sub2_result), // Второй множитель — (5 - c - a)
.result(mult_result), // Результат умножения
.valid_out(mult_valid) // Флаг валидности
);
// Стадия 4: + a
logic [63:0] add_result; // Итоговое значение выражения
logic add_valid; // Флаг валидности финального результата
f_add #(.FPU_FMT(1)) f_add1 ( // Блок сложения double
.clk(clk),
.a(mult_result), // Первый операнд — результат умножения
.b(a_in), // Второй операнд — a
.result(add_result), // Финальный результат: ((b - c) * (5 - c - a)) + a
.valid_out(add_valid) // Флаг готовности результата
);
assign result = add_result; // Присваиваем итоговое значение на выход
assign valid_out = add_valid; // Устанавливаем флаг валидности результата
endmodule
Как программист микроконтроллеров скажу, что ChatGPT влегкую умеет работать с чужим API и перенимать микроархитектурные подходы.
Словом чувстую, проффесора, как носители статуса непревзойденных экспертов - первые кандидаты на увольнение. Их экспертиза теряет ценность на глазах. Нужно привыкать жить в новом мире.
Похоже, это Пассажирский порт Таллинна (Old City Harbour) в столице Эстонии. На снимке виден новый круизный терминал с характерной «ломаной» кровлей и солнечными панелями — здание, которое открыли летом 2021 года и которое часто попадает в кадр у заходящих в порт лайнеров. На переднем плане — надстройка пришвартованного судна, а силуэт трубы позади — одна из промышленных дымовых труб, расположенных чуть южнее порта.
Да, феноменально. Минут пять o3 цеплялся и пытался расшифровать нечитаемые надписи на корабле. Но все равно отгадал.
Правильнее будет выключил - подождал минуту - воткнул. Потому что недоразряженные конденсаторы в блоке питания создадут импульс уравнивающего тока в сотни ампер при втыкании в карту. Такой ток создает микровзрывы в области контактов. В этих местах разбрызгиваются оксидные микрошарики и у контакта повышается сопротивление. В микроскоп на контактах реле такой эффект виден невооруженным глазом.
ИИ не заменил программистов прямо сейчас только потому что не хватает энергии. Миру не хватает энергии. Значит точки полной замены программистов надо ждать ровно столько пока не построят новых атомных или термоядерных станций раза в два больше чем сейчас.
Сижу минутами пока Claude 3.7 отрефакторит один файлик. Рефакторит вообще без ошибок. Код перепроверять не нужно. Протокол MCP для того и придуман чтобы не было ошибок. Но ускорять надо минимум на два порядка. Компиляторы компилируют тоже минутами. Их тоже надо ускорять. Интернет требует расширения на порядки.
И конечно программисты в нынешнем понимании неминуемо исчезнут как класс лет через 15. Если не найдут способ получать много энергии быстрее.
HAL представляет собой набор несвязанных функций, созданных разработчиками HAL, прежде всего, для собственного удобства поддержки большого семейства похожих микроконтроллеров. Интересы конечного пользователя при этом не учитываются.
Максимальную пользу мне, как пользователю, принесли бы чистые исходники и документация, полностью избавленная от упоминаний отсутствующих в моём чипе функций и различных макросов условной компиляции. Поскольку мне и так приходится детально изучать микроконтроллер, я могу либо полностью отказаться от HAL, либо просто игнорировать его.
Однако, когда разработчики RTOS для собственного удобства создают унифицированную подсистему работы с GPIO, это становится гораздо серьёзнее. Унификация сама по себе лишает чипы их конкурентных преимуществ. Конечно, такую подсистему тоже можно попытаться игнорировать.
Проблема в том, что эта практика идёт дальше. В современных микроконтроллерах есть глобальные флаги, блокирующие доступ к регистрам портов, разделение доменов на secure и non-secure, а также недокументированные серые зоны в ROM, связанные с работой периферии. Такая «подсистема» уже не позволяет просто её игнорировать. Мне приходится проверять, нет ли в ней глобальных состояний портов, которые могут конфликтовать с моим кодом, не заблокирован ли доступ к портам в неподходящий момент, и не переключены ли домены между secure и non-secure. И всё это ради чего?
Получается я трачу время за чужой интерес. Просто потому что кто-то недостаточно гибок.
Да, самая жесть - это когда разработчики делают подсистему. Т.е. когда она встроена в иерхию драйверов и без нее не работает ни один драйвер сверху как : I2C, SPI, USB, SDIO и проч. Тогда беда. Приходится искать другую ось. Вот если просто API, как например в Azure RTOS, или HAL от ST с легким налетом подсистемы, то можно легко вырезать оттуда с помощью ИИ архитектурные рудименты и жить спокойно.
И да, ИИ читает доку на железо (подозреваю что прочитал уже всю эту доку) и отлично по ней пишет драйвера, странно что вы об этом не знаете.
усложнению поддержки и невозможности систематизировать накопленный опыт.
То есть это делается исключительно для удобства самих разработчиков ЗОСРВ «Нейтрино». А если им будет неудобно, то, вероятно, не будет и развития самой ЗОСРВ «Нейтрино». Так что это неизбежность, с которой надо смириться.
Но опытный разработчик, переходя на новую ОС, в первую очередь должен поинтересоваться, насколько легко в ней снести или игнорировать подобные драйвера. Теперь поддержку может обеспечивать ИИ.
И да, абсурдность ситуации в том, что в SoC появляется всё больше уникальных функций на GPIO для разгрузки процессора, а разработчики драйверов либо старательно «убивают» их своим архаичным и якобы универсальным API, либо сами запутываются, не имея практического опыта применения всех новых возможностей железа.
Исходники zephyr / freertos / nuttx им уже скормили и они неплохо уже применяют API известных RTOS. И кучу middleware уже знают. Но если middleware тюнингированный, а оси с кастомного конфигурацией, то беда. Они не помещаются в контекст.
Пока все печально. В проекте для простенького приложения на микроконтроллере с RTOS в котором 1 331 225 строк кода находится 16 606 168 токенов. Это в 16 раз больше чем могут теперяшние боты. Ждем наращивания мощностей на порядок. Это еще пару лет видимо.
Кстати перплексити не стоит использовать для поиска. Ищет хуже всех. Совет искать на куче ботов одновременно - вредный. Совет писать по английски - нелогичный. Они прекрано переводят с русского. Так зачем им писать ненативно по английски. Так будет только хуже.
В отличие от «качалки» эти тренажеры не только помогают укрепить мышечный каркас, но и расслабить, растянуть связки, восстановить подвижность суставов и гибкость тела.
В «качалках» веса хотя бы можно регулировать, а тут болтами прикручено непонятно что. И да, на «качалках» очень ясно нарисовано какую группу мышц они качают, а в этом симулякре качается непойми что.
Таких "чудо станков" постоянно периодически появляется. Вот у нас тут раскручивают Performer
«Делают одно и то же» — нет, в текущем виде функция и макрос делают не одно и то же.
Вариант с функцией принимает структуру по значению, и изменение будет потеряно после выхода из функции.
Вариант с макросом изменяет исходную структуру напрямую, т.к. подставляется непосредственно в место вызова. Использование конструкции do {...} while(0) позволяет корректно использовать этот макрос внутри сложных конструкций (if, for и т.п.).
«Второй вариант абсолютно бесплатный» — это справедливо, так как макрос не требует вызова функции, не требует размещения параметров на стеке и т.п.
«Даже inline-функции не бесплатные» — верно. Inline-функции хоть и встраиваются компилятором напрямую в код, но формально не обязаны это делать всегда. Они могут порождать вызовы, в то время как макрос гарантированно встраивается препроцессором.
Берёте VS Code. Ставите в него GitHub Copilot c GitHub Copilot Chat и забываете о всех проблемах стиля и синтаксиса и языка.
Я уже пару месяцев перешел со всех коммерческих редакторов на VS Code с Copilot на базе ChatGPT o1 и Claude 3.7 Sonnet .
Он мне код инициализации регистров того же CAN пишет прямо со скриншота описания этих регистров в pdf даташите ! Причем в формате, который я ему говорю и с такими коментариями, которые я бы сам так четко не написал. А как он пишит коменты к шапкам функций! Прямо читает мысли. Просто фантастика!
Сейчас Claude 3.7 Sonnet итеративно мне нагенерил функций с автоматами состояний для работы по SPI с цепочкой внешних расширителей IO за полчаса. С учетом таймаутов, логами, мьютексами и прочей мишурой. Сам бы такое кодил и отлаживал пару дней. Масса нагенеренных функций на более чем 500 строк не имела ни одной ошибки!
Хочешь он тебе перечисления сделает, хочешь дефайнами все выполнит. Выкинет все идиотские коменты, вставит правильные.Там это вообще плёвое дело переделать исходники под любой формат и стиль. Тот же .clang-format - это детский лепет по сравнению с GitHub Copilot.
Словом не стоит чинить деревянную телегу, когда все уже на электромобилях.
Есть еще проблема при электролитическом травлении меди. Если коробление требует баланса меди между слоями, то электролитическое травление требует равномерности меди в пространстве слоя, чтобы выдержать одинаковые допуски по всей площади.
События в real time системе в принципе зло. Они мешают точному расчету времени реакции. Они могут зацикливаться. Они могут переполняться. У них могут быть гонки.
Словом отладка систем с событиями очень сложна. Но как раз про это ни слова в статье.
Создатели IEC 61131-3 были не дураки, и были в курсе о событиях. Однако их не реализовали.
Я так понимаю, что события притянули для необходимости рисования SM выполняющихся распределенно на медленных недетерминированных шинах типа MODBUS по TCP.
Если бы был EtherCAT, TSN, Profinet IRT и т.п. события бы не понадобились.
Т.е. по сути вот такая реализаци IEC 61499 - это декларация технологической отсталости.
Простенькое приложение с событиями где еще нет рисков запутаться может и ChatGPT нагенерить в VS Code. Для этого не нужны специальные IDE.
По статьям разработчиков можно только понять что они рассматривают ИИ в первую очередь как оружие в борьбе за их ценности и их только волнует чтобы у ИИ не появилась мораль. Потому что никто не знает существует ли универсальная мораль.
Можно в ChatGPT бросить скриншот с правилами из Altium Designer
И он подробно объяснит какие правила к чему.
Важная фича с каплевидными переходами пропущена. Защищает и от протравов и улучшает устойчивость к обрывам.
Поробовал сейчас ChatGPT дать это задание из статьи. Отлично все решает.
Если нужно использовать заданные подблоки из wally_fpu, то и это делает отлично.
Если нужно статейку прочитать и разобрать, то и это без проблем.
Тут надо учесть, что на прошлой неделе ChatGPT стал сильно мощнее.
Листниги выдает объемные.
Скрытый текст
Как программист микроконтроллеров скажу, что ChatGPT влегкую умеет работать с чужим API и перенимать микроархитектурные подходы.
Словом чувстую, проффесора, как носители статуса непревзойденных экспертов - первые кандидаты на увольнение. Их экспертиза теряет ценность на глазах.
Нужно привыкать жить в новом мире.
Это приколько, как причитают по Delphi. Хотя он живее всех живых.
На рутракере скачиваний всех RAD с Delphi раза в два больше чем всех Visual Studio.
Если поискать слово Embarcadero среди пследних версий популярнейших инженерных программ, то на удивление будет много находок.
Просто Embarcadero ужесточил контроль за лицензированием, и с ним стало гораздо легче обжечься чем с Visual Studio.
Да, феноменально.
Минут пять o3 цеплялся и пытался расшифровать нечитаемые надписи на корабле. Но все равно отгадал.
Правильнее будет выключил - подождал минуту - воткнул.
Потому что недоразряженные конденсаторы в блоке питания создадут импульс уравнивающего тока в сотни ампер при втыкании в карту. Такой ток создает микровзрывы в области контактов. В этих местах разбрызгиваются оксидные микрошарики и у контакта повышается сопротивление.
В микроскоп на контактах реле такой эффект виден невооруженным глазом.
ИИ не заменил программистов прямо сейчас только потому что не хватает энергии. Миру не хватает энергии. Значит точки полной замены программистов надо ждать ровно столько пока не построят новых атомных или термоядерных станций раза в два больше чем сейчас.
Сижу минутами пока Claude 3.7 отрефакторит один файлик. Рефакторит вообще без ошибок. Код перепроверять не нужно. Протокол MCP для того и придуман чтобы не было ошибок. Но ускорять надо минимум на два порядка. Компиляторы компилируют тоже минутами. Их тоже надо ускорять. Интернет требует расширения на порядки.
И конечно программисты в нынешнем понимании неминуемо исчезнут как класс лет через 15. Если не найдут способ получать много энергии быстрее.
По ходу вы сами не в курсе для чего делаете свою операционку:
Либо у вас там куча клонов.
HAL представляет собой набор несвязанных функций, созданных разработчиками HAL, прежде всего, для собственного удобства поддержки большого семейства похожих микроконтроллеров. Интересы конечного пользователя при этом не учитываются.
Максимальную пользу мне, как пользователю, принесли бы чистые исходники и документация, полностью избавленная от упоминаний отсутствующих в моём чипе функций и различных макросов условной компиляции. Поскольку мне и так приходится детально изучать микроконтроллер, я могу либо полностью отказаться от HAL, либо просто игнорировать его.
Однако, когда разработчики RTOS для собственного удобства создают унифицированную подсистему работы с GPIO, это становится гораздо серьёзнее. Унификация сама по себе лишает чипы их конкурентных преимуществ. Конечно, такую подсистему тоже можно попытаться игнорировать.
Проблема в том, что эта практика идёт дальше. В современных микроконтроллерах есть глобальные флаги, блокирующие доступ к регистрам портов, разделение доменов на secure и non-secure, а также недокументированные серые зоны в ROM, связанные с работой периферии. Такая «подсистема» уже не позволяет просто её игнорировать. Мне приходится проверять, нет ли в ней глобальных состояний портов, которые могут конфликтовать с моим кодом, не заблокирован ли доступ к портам в неподходящий момент, и не переключены ли домены между secure и non-secure. И всё это ради чего?
Получается я трачу время за чужой интерес. Просто потому что кто-то недостаточно гибок.
Да, самая жесть - это когда разработчики делают подсистему. Т.е. когда она встроена в иерхию драйверов и без нее не работает ни один драйвер сверху как : I2C, SPI, USB, SDIO и проч. Тогда беда. Приходится искать другую ось.
Вот если просто API, как например в Azure RTOS, или HAL от ST с легким налетом подсистемы, то можно легко вырезать оттуда с помощью ИИ архитектурные рудименты и жить спокойно.
И да, ИИ читает доку на железо (подозреваю что прочитал уже всю эту доку) и отлично по ней пишет драйвера, странно что вы об этом не знаете.
В начале статьи же сказано.
То есть это делается исключительно для удобства самих разработчиков ЗОСРВ «Нейтрино».
А если им будет неудобно, то, вероятно, не будет и развития самой ЗОСРВ «Нейтрино». Так что это неизбежность, с которой надо смириться.
Но опытный разработчик, переходя на новую ОС, в первую очередь должен поинтересоваться, насколько легко в ней снести или игнорировать подобные драйвера.
Теперь поддержку может обеспечивать ИИ.
И да, абсурдность ситуации в том, что в SoC появляется всё больше уникальных функций на GPIO для разгрузки процессора, а разработчики драйверов либо старательно «убивают» их своим архаичным и якобы универсальным API, либо сами запутываются, не имея практического опыта применения всех новых возможностей железа.
Исходники zephyr / freertos / nuttx им уже скормили и они неплохо уже применяют API известных RTOS. И кучу middleware уже знают. Но если middleware тюнингированный, а оси с кастомного конфигурацией, то беда. Они не помещаются в контекст.
Пока все печально.
В проекте для простенького приложения на микроконтроллере с RTOS в котором 1 331 225 строк кода находится 16 606 168 токенов. Это в 16 раз больше чем могут теперяшние боты.
Ждем наращивания мощностей на порядок. Это еще пару лет видимо.
Кстати перплексити не стоит использовать для поиска. Ищет хуже всех.
Совет искать на куче ботов одновременно - вредный.
Совет писать по английски - нелогичный. Они прекрано переводят с русского. Так зачем им писать ненативно по английски. Так будет только хуже.
А между тем ChatGPT научился рисовать слова почти без ошибок:
Не думаю что империалисты когда нибудь объединяться чобы победить единым AI.
Они и так в своих программных статьях рассматривают его как оружие.
Читаем эти перлы - https://situational-awareness.ai/wp-content/uploads/2024/06/situationalawareness.pdf
Скорее всего они разбомбят друг друга прежде чем AGI успеет сказать первые слова.
В «качалках» веса хотя бы можно регулировать, а тут болтами прикручено непонятно что.
И да, на «качалках» очень ясно нарисовано какую группу мышц они качают, а в этом симулякре качается непойми что.
Таких "чудо станков" постоянно периодически появляется. Вот у нас тут раскручивают Performer
А потягайтесь-ка с GPT!
Правильность утверждений:
«Делают одно и то же» — нет, в текущем виде функция и макрос делают не одно и то же.
Вариант с функцией принимает структуру по значению, и изменение будет потеряно после выхода из функции.
Вариант с макросом изменяет исходную структуру напрямую, т.к. подставляется непосредственно в место вызова. Использование конструкции do {...} while(0) позволяет корректно использовать этот макрос внутри сложных конструкций (if, for и т.п.).
«Второй вариант абсолютно бесплатный» — это справедливо, так как макрос не требует вызова функции, не требует размещения параметров на стеке и т.п.
«Даже inline-функции не бесплатные» — верно. Inline-функции хоть и встраиваются компилятором напрямую в код, но формально не обязаны это делать всегда. Они могут порождать вызовы, в то время как макрос гарантированно встраивается препроцессором.
Всё это уже потеряло смысл.
Берёте VS Code. Ставите в него GitHub Copilot c GitHub Copilot Chat и забываете о всех проблемах стиля и синтаксиса и языка.
Я уже пару месяцев перешел со всех коммерческих редакторов на VS Code с Copilot на базе ChatGPT o1 и Claude 3.7 Sonnet .
Он мне код инициализации регистров того же CAN пишет прямо со скриншота описания этих регистров в pdf даташите ! Причем в формате, который я ему говорю и с такими коментариями, которые я бы сам так четко не написал.
А как он пишит коменты к шапкам функций! Прямо читает мысли. Просто фантастика!
Сейчас Claude 3.7 Sonnet итеративно мне нагенерил функций с автоматами состояний для работы по SPI с цепочкой внешних расширителей IO за полчаса. С учетом таймаутов, логами, мьютексами и прочей мишурой. Сам бы такое кодил и отлаживал пару дней. Масса нагенеренных функций на более чем 500 строк не имела ни одной ошибки!
Хочешь он тебе перечисления сделает, хочешь дефайнами все выполнит. Выкинет все идиотские коменты, вставит правильные.Там это вообще плёвое дело переделать исходники под любой формат и стиль. Тот же .clang-format - это детский лепет по сравнению с GitHub Copilot.
Словом не стоит чинить деревянную телегу, когда все уже на электромобилях.
Есть еще проблема при электролитическом травлении меди.
Если коробление требует баланса меди между слоями, то электролитическое травление требует равномерности меди в пространстве слоя, чтобы выдержать одинаковые допуски по всей площади.