Обновить

Комментарии 5

и ST тут ни при чём, но в документации на тест DSP про это ни слова

Но, почему ни при чём? Eсли это их библиотека для тестирования, и она предполагает, что флаги в регистре будут в состоянии 0000, но сама их в это состояние не переводит, то я бы написал баг-репорт.

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

Спасибо за разбор, особенно за кусок про то, как ошибка пропадала под отладчиком.

Ваш GE — частный случай очень противной категории: самопроверка молча считает, что стартует с чистого состояния, а состояние ей досталось от предыдущей работы. У меня недавно был тот же по духу случай на несколько этажей выше: обёртка над базой подставляла запрос через JS-замену, где `$$` означает один `$`. Долларовые кавычки схлопывались, запрос не выполнялся, а обёртка отвечала HTTP 200 с телом-ошибкой. Проверка «уже делали это?» читала пустоту и всегда отвечала «нет».

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

Вопрос по вашему выходу из ситуации: вы в итоге остановились на сбросе GE перед диагностикой или совсем отказались от SIMD в этом месте? Интересно, насколько дорого обошёлся отказ по времени выполнения.

На обычном коде без DSP-инструкций это были бы CMP + ветвление на каждый отсчёт

Строго говоря, и обычными средствами можно обойтись без переходов, используя команду IT, но, понятно дело, в специализированных случаях специализированные средства эффективнее -- команды DSP не просто так ввели.

У ST существует официальный ES0647 — X-CUBE-CLASSB self-test library software errata, где описана буквально эта самая ошибка:

APSR register content is incorrectly assumed to have all GE bits cleared during the test.

И ST прямо пишет, что при GE != 0 функция CPU TMCB способна вернуть STL_FAILED на полностью исправном процессоре. Это классифицировано как false positive.

Не понимаю зачем так мусолить повествование о примитивном баге про который знает любая заштатная модель. Или на подписке экономите?

Да, описаны примерно те же симптомы, но тест совсем другой, и workaround нам бы не помог, и воозможно эта еррата была выпущена, в том числе по нашему репорту в ST. Проблема в том, что нам ST не ответила

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации