v4.8.11

v4.8.11 — это выпуск, направленный на стабильность и корректность, с акцентом на надёжность работы в macOS, сериализацию внешних инструментов и надёжность обновления прошивки. Он построен на Qt Creator 14.0.2 (без изменений по сравнению с предыдущим выпуском) и не содержит несовместимых изменений для пользовательских проектов.

Основные моменты

  • Защита от сбоев в macOS — устранён периодический тихий аварийный выход NSRangeException, вызванный обновлением выбора в дереве/списке/комбобоксе до полной сборки панели или всплывающего окна либо во время асинхронного обновления — в комбобоксе структуры, иерархии вызовов/типов, всплывающих окнах автодополнения и локатора, дереве проекта и других местах.

  • Сериализация внешних инструментов — диалог прогресса загрузчика теперь является модальным для всего приложения и приостанавливает любой опрос устройств, поэтому работающие dfu-util, bossac, picotool и другие инструменты больше нельзя повторно запустить через поток с камеры или автоматическое переподключение.

  • Надёжное обновление прошивки — автоматическое переподключение больше не может перехватить обновление прошивки в процессе прошивки, что ранее приводило к потере реального продолжения и появлению ложного диалога DFU.

  • Безопасность Hello World — подключение платы больше не перезаписывает иногда программу Hello World, в которую вы что-то ввели, благодаря сравнению с исходным снимком вместо ненадёжного флага изменения.

  • Более понятные ошибки DFU — ошибка «no matching interface» теперь указывает обнаруженную плату и имена файлов прошивки, которые она принимает, вместо вывода сырых VID/PID.

Новые возможности

  • ST Edge AI (STM32N6) теперь создаёт перемещаемый бинарный файл сети напрямую через режим компилятора --relocatable, что устраняет отдельный шаг перемещения на Python и дополнительное поле Relocation CLI Options из диалога (7613135c5).

Прочие изменения и улучшения

  • Ошибки интерфейса DFU теперь указывают обнаруженную плату и перечисляют имена файлов прошивки, которые эта плата принимает, с рекомендацией переименовать или выбрать правильный файл, вместо вывода сырых VID/PID (ac509b369).

  • Горячие клавиши навигации по вкладкам в macOS теперь используют доступные Cmd+Shift+[ / Cmd+Shift+] (предыдущая/следующая) и Cmd+Alt+[ / Cmd+Alt+] (перемещение) вместо непригодных к нажатию Ctrl+PageUp / Ctrl+PageDown; привязки в Windows и Linux не изменились (6c09e10b1).

  • Запросы лицензии/платы к upload.openmv.io (check.php, insert.php, register.php) теперь отправляют для каждой платформы заголовок User-Agent в стиле браузера, чтобы сервер лицензий мог определить ОС клиента (6bfd74b36).

Исправления ошибок

  • Исправлен периодический сбой в macOS (тихий аварийный выход NSRangeException без диалога сбоя), при котором обновление выбора в дереве/списке/комбобоксе, пока панель или всплывающее окно были ещё скрыты или находились в процессе асинхронного обновления, обращалось к несобранному кешу специальных возможностей Cocoa. Выбор, прокрутка и раскрытие теперь откладываются или защищены в комбобоксе структуры, иерархии вызовов/типов, всплывающем окне автодополнения кода, всплывающем окне локатора, диалоге Save Items, дереве проекта, навигации по папкам, Open Documents, списке Issues/Tasks и комбобоксе древовидного представления (94c8f9def, ae40a3806, ed23b5c60, c6baf89cd, d7b6f5838, d8b70609c, 21740d9c2, 9217fc8a9, fe75924d5, 9cc247ffb, 3ca71e915, 559b6005f).

  • Исправлен отдельный сбой в macOS (NSRangeException/SIGABRT) в комбобоксе структуры кода, вызванный устаревшим индексом вне диапазона, когда языковой сервер Python асинхронно обновлял символы; setCurrentIndex теперь повторно проверяет границы строки/столбца относительно актуальной модели (3e0ce89f1).

  • Усилена защита редактора моделей ROMFS и редактора наборов данных от асинхронных гонок QFileSystemModel за счёт откладывания предварительного раскрытия дерева до завершения загрузки каталога и выбора только что созданных файлов/папок/моделей лишь после того, как модель получит для них действительный индекс (5eaa91aff).

  • Операции с внешними инструментами (dfu-util, bossac, picotool, alif, imx, ST Cube, mpy-cross, vela, ST Edge AI, конвертация видео) больше не позволяют потоку с камеры или поставленной в очередь работе повторно войти в операцию с устройством за работающим инструментом: диалог прогресса загрузчика теперь является модальным для всего приложения, а опрос устройств полностью приостанавливается, пока он отображается (3069e8ec0).

  • Автоматическое переподключение больше не перехватывает обновление прошивки в процессе прошивки благодаря устойчивому флагу выполняемого обновления прошивки, удерживаемому на протяжении всей принудительной операции/операции загрузчика/стирания, который теперь также проверяет таймер переподключения (b7745484a).

  • Подключение платы больше не перезаписывает иногда программу Hello World, в которую вы что-то ввели, благодаря сравнению актуального документа с исходным снимком, сделанным при открытии, вместо использования ненадёжного флага изменения перед автоматической синхронизацией примера для конкретного датчика (6f4539d44).

  • Прокрутка вверх в последовательном терминале во время быстрого непрерывного вывода больше не возвращает резко вид к низу: пути добавления теперь следуют устойчивому флагу намерения пользователя прокрутить, а не выводят заново состояние «внизу» из позиции полосы прокрутки, которую каждый фрагмент только что заново закрепил (9aea0f1a2).

  • Escape теперь надёжно закрывает диалог Code Profiler независимо от того, какой дочерний виджет имеет фокус (203ffd1e6).

  • В macOS глобальные горячие клавиши меню и команд теперь работают во всём приложении, а не только когда фокус был на редакторе, благодаря размещению скрытой строки меню внутри главного окна на каждой платформе (6d52cbe73).

  • Встроенный интерпретатор Python теперь принудительно устанавливается по умолчанию при каждом запуске, поэтому устаревшее сохранённое значение по умолчанию больше не отключает молча языковой сервер Python (автодополнение и подсказки вызовов) (1d5069a52).

  • Усилена защита ввода-вывода настроек OpenMV от повторного входа: beginGroup / endGroup на общем объекте глобальных настроек (которые порождают модальные диалоги и запускают вложенные циклы событий) заменены полными путями ключей, поэтому повторный доступ к настройкам во время модального диалога больше не может неправильно записать ключи в неверную группу. Пути на диске побайтово идентичны, поэтому настройки существующих пользователей сохраняются в точности (91e78a9e3, f4bb9f48c).

  • Исправлена регрессия, при которой несколько диалогов и вспомогательных функций, получающих общий объект настроек, выполняли ввод-вывод по голым ключам в корне настроек, а не под OpenMV/, теряя геометрию окна, разделитель и раскрытое состояние model zoo, а также состояние шести диалогов загрузчика (dfu-util, imx, bossac, alif, picotool и ST Cube Programmer) наряду с параметрами компиляторов mpy-cross, vela и ST Edge AI; группа теперь встроена в каждый ключ, поэтому используется правильный путь (258448bdf).

Поддержка платформ и инструментов

  • База Qt Creator: 14.0.2.

  • Версия OpenMV IDE повышена до 4.8.11.

Несовместимые изменения

Отсутствуют. Все изменения являются исправлениями ошибок и улучшениями, наложенными на существующую базу Qt Creator 14.0.2; существующие проекты и рабочие процессы не затронуты.