Например TDA7294

Форум РадиоКот • Просмотр темы - Весь день бился с assert-ом
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс фев 01, 2026 23:33:41

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Весь день бился с assert-ом
СообщениеДобавлено: Чт янв 01, 2026 19:00:40 
Первый раз сказал Мяу!

Зарегистрирован: Пн дек 15, 2025 13:29:04
Сообщений: 23
Рейтинг сообщения: 0
Весь день сегодня бился с assert - не мог его вывести в stderr по USART (эмуляция в протеусе), чуть было не психанул и не прошил реальный камень. Но тут я прочитал документацию:
Цитата:
A diagnostic message is written to stderr and the function abort() is called, effectively terminating the program.


Хотя в выводе ассемблера(скорее всего из-за оптимизации) явно строчка call abort была только в режиме без определения макроса __ASSERT_USE_STDERR в основном из-за этого и затупил.

Понятно, что прерывания сразу отрубались, и в stderr ничего не попадала. Но когда я переписал вывод в NONATOMIC_BLOCK с ожиданием стирания бита UDRIE (особенность используемой USART библиотеки, чтобы не менять её код), всё стало печататься.

По этому поводу запилил свой assert, не убивающий процесс чтобы не переписывать нормальный вывод в stderr. Так же понятно, что можно было бы восстановить прерывания и переопределить стандартный макрос на обертку с goto, но это уже извращения.

Может кому пригодится - не только я один такой. На англоязычных ресурсах это тоже обсуждалось и предлагалось использовать свои макросы утверждений, но не объяснялось почему стандартное утверждение не работает. А может для них это очевидно - документацию прочитали :music:

Код:
#   define assert_na(e)   ((e) ? (void)0 : \
               fprintf(stderr, "Assertion failed: (%s), function %s, file %s, line %u.\n", #e, __func__ , __FILE__, __LINE__))


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y