Единицы
1. Введение в искусственный интеллект в электронике и коммуникационной технике: границы, проверка, ответственность и этика 2. Искусственный интеллект в схемотехнике и поддержке компоновки печатных плат 3. Обработка сигналов: фильтры, дискретизация и частотный анализ 4. Модуляция, цифровая связь и устранение ошибок 5. Анализ бюджета радиочастот, антенн и линий связи 6. Искусственный интеллект во встраиваемых системах и разработке встроенного ПО 7. Протоколы связи и сетевой стек 8. Искусственный интеллект в производительности и оптимизации сети 9. Искусственный интеллект в области ЭМС/ЭМП, испытаний и измерений 10. Искусственный интеллект в прогнозном обслуживании и здоровье оборудования 11. Проверка стандартных и нормативных исследований 12. Анализ сигналов и телекоммуникационных данных и возможности искусственного интеллекта с помощью Python
Единица 6 / 12

Искусственный интеллект во встраиваемых системах и разработке встроенного ПО

Прибыль:

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

Встроенная система — это электронное устройство, построенное на основе микроконтроллера (небольшого компьютера, в котором размещены процессор, память и периферийные устройства на одном кристалле), предназначенное для выполнения определенной работы: термостат, модем, сенсорный узел, драйвер двигателя. Прошивка — это программное обеспечение, которое непосредственно управляет аппаратным обеспечением этого устройства. В этом модуле вы увидите, как использовать ИИ в качестве ускорителя при разработке прошивки (написание драйверов, конечный автомат, логика прерываний и синхронизации, управление низким энергопотреблением). ИИ действительно силен в кодировании; Но во встроенном мире код переплетается с аппаратным обеспечением, режимом реального времени и часто безопасностью. Таким образом, каждая строка, создаваемая ИИ, должна пройти статический анализ, проверку регистров/технических данных и фактическое тестирование на оборудовании.

Где сильно, где рискованно в прошивке AI

ИИ очень силен в части «скелета» и «кристалла» прошивки: структура драйвера I2C/SPI, структура конечного автомата (логика, определяющая состояния и переходы устройства), реализация кольцевого буфера, синтаксический анализатор инструкций, тестовый скелет. Он может читать таблицу регистров в сложной таблице данных и генерировать код инициализации. Может объяснить ошибку, интерпретировать предупреждение компилятора.

Там, где рискованно, заключается суть встроенной системы:

  • Адреса регистров и битовые поля: ИИ может неправильно запомнить карту регистров чипа; Каждый адрес и бит должны быть проверены по таблице данных.
  • Синхронизация и реальное время: сколько микросекунд занимает операция и как часто поступает прерывание, зависит от аппаратного обеспечения; ИИ прогнозирует, вы измеряете.
  • Параллелизм: если переменные, совместно используемые программой обслуживания прерываний (ISR) и основным циклом, не защищены энергозависимым и атомарным доступом, возникают тихие, неповторяемые ошибки.
  • Ограничения ресурсов: переполнение стека, утечка памяти, тайм-аут сторожевого таймера приводят к сбою во встроенном приложении.

Прерывание, время и сторожевой таймер

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

Watchdog — механизм безопасности, который автоматически перезагружает устройство в случае сбоя программного обеспечения; Прошивка его регулярно "подпитывает", если нет - происходит сброс системы. ИИ разрабатывает эти структуры, но продолжительность сторожевого таймера, приоритеты прерываний и бюджет планирования должны быть проверены на соответствие фактической нагрузке на вашу систему.

Совет: при печати ISR для AI явно проинструктируйте его «сохранять ISR короткими, без блокировки, отмечать общие переменные с изменчивым и атомарным доступом, делегировать длинную задачу основному циклу с помощью флага». Затем построчно проверьте создаваемый код, действительно ли применяются эти правила.

Низкое энергопотребление и безопасность

Управление низким энергопотреблением имеет решающее значение для устройств с батарейным питанием: перевод процессора в спящий режим, выключение периферийных устройств, пробуждение по событию. ИИ рисует переходы в спящий режим и логику пробуждения, но фактическое потребление тока известно только путем измерения (амперметр на уровне микроампер); Слова ИИ, что «в этом режиме он потребляет ~2 мкА», — это предположение.

С точки зрения безопасности встроенные устройства все чаще подключаются к сети, а уязвимости встроенного ПО (переполнение буфера, неаутентифицированный ввод, слабая криптография, открытый интерфейс отладки) представляют собой серьезную угрозу. ИИ может напоминать вам о принципах безопасного кодирования, но безопасность сгенерированного кода проверяется с помощью инструментов статического анализа, проверки кода и тестирования безопасности, когда это необходимо. В системах, критически важных для безопасности (медицинских, автомобильных, промышленных), результаты искусственного интеллекта никогда не должны заменять процессы, требуемые одобрением компетентного инженера и соответствующим стандартом безопасности (например, IEC 61508, ISO 26262).

три мини-кейса

Случай 1 — незащищенная общая переменная. Инженер запрашивает код получения UART от ИИ. Код увеличивает счетчик в ISR, и основной цикл считывает этот счетчик; но счетчик не является энергозависимым, а многобайтовое чтение не является атомарным. Устройство работает большую часть времени, но иногда оно неправильно считывает данные, и ошибка не может повториться. Статический анализ и проверка кода выявляют недостающие изменчивые компоненты; Ошибка исчезает, когда счетчик защищен. Урок: ошибки параллелизма в коде ИИ часты и коварны; Надо прочитать и проверить.

Случай 2 — Неправильный бит регистра. Стажер загружает код инициализации АЦП, сгенерированный ИИ; АЦП считывает неожиданные значения. Сравнивая с даташитом, выясняется, что ИИ установил бит конфигурации не в то место (карта для другого варианта чипа). После исправления бита АЦП работает правильно. Урок: проверьте написание каждого регистра по правильному варианту таблицы.

Случай 3 — Правильное использование. Инженер запрашивает у ИИ скелет конечного автомата для сложного протокола датчика; описывает состояния, переходы и ветви тайм-аута. ИИ создает чистую, читаемую структуру. Инженер берет этот фреймворк, сверяет доступ к каждому регистру с таблицей данных, измеряет тайминги осциллографом и тестирует его на аппаратном уровне. Разработка завершается за несколько часов вместо нескольких дней. Урок: ИИ ускоряет работу скелета; Инженер проводит проверку.

Копируемые шаблоны подсказок

ШАБЛОН СКЕЛЕТА ДРАЙВЕРА «Напишите скелет драйвера [I2C/SPI/UART] для [чипа/периферийного устройства]: функции инициализации, чтения, записи, обработки ошибок. Оставьте адреса регистров и битовые поля в PLACEHOLDER (например, REG_XXX) и отметьте «заполнить и проверить их из таблицы данных». Используйте тайм-аут вместо ожидания блокировки. Укажите, что предполагает каждая функция, в строке комментария».

ШАБЛОН БЕЗОПАСНОСТИ ISR «Напишите черновик процедуры обслуживания прерываний (ISR) для следующего события: [событие]. Правила: делайте ISR короткими, не блокируйте, помечайте общие переменные с нестабильным и атомарным доступом, делегируйте длинное задание основному циклу с помощью флага. В конце кода укажите, где применяется каждое из этих правил, чтобы я мог проверить».

ШАБЛОН КОНЕЧНОЙ МАШИНЫ «Напишите скелет конечного автомата для следующего протокола/процесса: [опишите состояния, события, переходы и таймауты]. Укажите действия входа/выхода и ветвь ошибки/таймаута для каждого состояния. Оставьте специфичные для оборудования значения (регистр, продолжительность) в качестве заполнителей и обратите внимание, что их необходимо проверить».

ШАБЛОН ОБЗОРА КОДА «Изучите следующий код прошивки со встроенной точки зрения и отметьте риски: незащищенная общая переменная (изменчивая/атомарность), длительная/блокирующая операция в ISR, риск переполнения стека, ожидание без таймаута, ошибки регистрации, сторожевой канал. Предложите, как мне следует протестировать/проверить каждый результат. Код: [вставить]».

Слабая подсказка / Сильная подсказка

СЛАБАЯ ПОДСКАЗКА: «Напишите мне драйвер UART».

НАСТОЯЩАЯ ПОДСКАЗКА: «Напишите структуру драйвера приема UART на основе прерываний для [микроконтроллера]. Используйте кольцевой буфер; держите ISR коротким и просто записывайте в буфер, обрабатывая в основном цикле. Сделайте общие индексы изменчивыми и атомарными. Оставьте адреса регистров в заполнителях, отметьте их для проверки из таблицы данных. В конце кода перечислите, что мне нужно протестировать с точки зрения одновременного выполнения и синхронизации».

Слабое приглашение создает код, который не зависит от аппаратного обеспечения и параллелизма; Мощная подсказка устанавливает встроенные правила и запрашивает список проверки.

Слои проверки прошивки

слой

что цепляет

Роль ИИ

Проверка паспорта

Неправильный регистр/бит

Создает заполнитель и контрольную заметку

Статический анализ (линтер)

изменчивые, тип, граничные ошибки

Список правил и пояснения

Предупреждения компилятора

Неявное преобразование, неиспользуемое значение

Предупреждающий комментарий

Тестирование в аппаратном обеспечении

Время, фактическое поведение

Предложение тестового сценария

Осциллограф/анализатор

Точность сигнала и протокола

Точка измерения и ожидаемая волна

Внимание: то, что прошивка «компилируется» и «работает большую часть времени», не означает, что она правильная. Ошибки параллелизма и синхронизации возникают только при определенных условиях; Вот почему статический анализ и реальное тестирование оборудования незаменимы.

Распространенные ошибки

  • Не защищает общие переменные. Данные между ISR и основным циклом должны быть изменчивыми и атомарными.
  • Не сверяется адрес/бит регистра с таблицей данных. ИИ может отобразить неправильный вариант.
  • Сохранение ISR длинным или блокировка внутри него. Система не может ответить, прерывания пропускаются.
  • Предполагая время без измерения. Фактическое время зависит от оборудования; проверено осциллографом.
  • Код, критически важный для безопасности/безопасности, оставлен на утверждение ИИ. Компетентный инженер и соответствующий стандартный процесс имеют важное значение.

В итоге

В этом модуле вы использовали ИИ в качестве мощного ускорителя при создании скелета прошивки, драйвера, конечного автомата и эскиза ISR. Но во встроенном мире код переплетается с аппаратным обеспечением, реальным временем и безопасностью: значения регистров/битов проверяются по таблице данных, параллелизм проверяется с помощью статического анализа, синхронизация проверяется с помощью осциллографа, поведение проверяется с помощью реального тестирования на оборудовании. ИИ доставляет скелет за считанные минуты; Инженер проверяет правильность, надежность и своевременность работы прошивки. В системах, критически важных для безопасности, выходы искусственного интеллекта не заменяют соответствующие процессы стандарта безопасности и одобрение компетентного инженера.

Задача приложения

Выберите периферийное устройство (например, датчик I2C). С помощью шаблона «скелет драйвера» запросите у ИИ скелет драйвера, который оставляет регистры в заполнителях. Затем сгенерируйте эскиз ISR для прерывания готовности данных от этого датчика с помощью шаблона «ISR Security». Наконец, просканируйте создаваемый им код с помощью шаблона «Проверка кода» на наличие встроенных рисков и напишите как минимум три этапа проверки/тестирования.

контрольный список

  • [ ] Я проверил каждый адрес регистра и бит из правильного варианта таблицы.
  • [ ] Я сделал общие переменные между ISR и основным циклом нестабильными и атомарными.
  • [ ] Я держал ISR коротким, не ставил блокировки, передал длинную работу основному циклу.
  • [ ] Я планировал проверить синхронизацию и фактическое поведение аппаратно и с помощью осциллографа.
  • [ ] Я просканировал код с помощью статического анализа и предупреждений компилятора.
  • [ ] Я оставил критически важные для безопасности части на утверждение компетентного инженера и соответствующего стандартного процесса.