Эксперимент: как ChatGPT справляется с программированием для микроконтроллеров STM32 и Arduino

Как и многие, я не смог пройти мимо хайпа вокруг ChatGPT. Найдя в Telegram бота с доступом к этой нейросети, я решил проверить, насколько хорошо она понимает низкоуровневое программирование для микроконтроллеров. Первым делом я задал простой вопрос, чтобы оценить базовые знания.

Ответ был довольно сырым и общим. Это заставило меня задуматься: а способен ли ChatGPT объяснить логику работы конкретного кода, а не просто пересказать теорию?

Результат был ошеломляющим — объяснение оказалось почти осмысленным! Но это был стандартный код на C. Возник следующий вопрос: ограничивается ли модель лишь базовым синтаксисом или может работать с аппаратно-зависимыми особенностями, например, для популярного семейства микроконтроллеров STM32?

Проверка на практике: работа с периферией STM32

Оказалось, что ChatGPT способен генерировать код для STM32, причём использует подход, характерный для Arduino — подсчёт тактов процессора для создания задержек. Однако это решение находится на более низком уровне абстракции, чем использование стандартной библиотеки SPL. Это навело на мысль проверить, может ли нейросеть использовать более сложные аппаратные модули, такие как таймеры.

Анализ показал интересную картину. ChatGPT действительно может корректно инициализировать таймер, подбирая правильные значения для регистров.

Обратите внимание: Realme C15 c NFC, 4 камерами и батареей на 6000, за 9700 рублей..

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

Логические нестыковки и «чайник с водой»

Получилось, что таймер применялся лишь для создания однсекундной задержки в основном цикле программы. Это напомнило известный программистский анекдот: «Как вскипятить чайник? Если он пустой — налить воды и поставить на огонь. А если в нём уже есть вода? Вылить её, чтобы свести задачу к уже решённой». Возможно, нейросеть меня недопоняла, и нужно было задать вопрос точнее.

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

Итоговый вердикт

Вывод из этого эксперимента двойственный. С одной стороны, опытный разработчик для STM32, безусловно, напишет код лучше, качественнее и оптимальнее, чем ChatGPT. С другой стороны, для начинающих, особенно для тех, кто только осваивает платформу Arduino, эта нейросеть может стать полезным помощником, способным сгенерировать работающий каркас программы. Её текущий уровень — это неплохой старт, но не замена глубокому пониманию архитектуры микроконтроллера.

Больше интересных статей здесь: Гаджеты.

Источник статьи: Как GhatGPT умеет общаться с микроконтроллерами.