+1. Я примерно так-же делаю, но немного по другому. С помощью ASSERT_LEVEL задается функционал вызываемого ASSERT (детализация отладочной информации, или просто сброс МК и т.д.)
А на практике хватает только 2-х - ASSERT_DBG (только для debug, в release не попадает) и ASSERT (для debug и release)
Концепция "уровень для ASSERT" мне не ясна.
Зачем уровень например для debug-прошивки? Мы тут отлавливаем ошибку, а тут сейчас - не отлавливаем? Зачем эти полумеры? Отлавливать надо сразу все, полумеры не нужны.
То-же относится и к release-прошивке. Если надо отлавливать ошибку и реагировать на нее (например сброс МК) - то ставь ASSERT. Если не надо - не ставь ASSERT. Третьего не дано.
https://caxapa.ru/1513413.html