При отладке программы очень удобно для вывода сообщений об той или иной ситуации, иметь универсальную функцию, которая позволяла бы выводить сообщение об ошибке, номер строки и файл в котором эта ошибка возникла. Для этого, в библиотеке периферии от ST, используется assert_param.
Перед тем как использовать данную функцию необходимо указать, что мы ее используем:
#define USE_FULL_ASSERT
И создать функцию обработчик:
void assert_failed(uint8_t* file, uint32_t line)
{
debug_printf("Wrong parameters value: file %s on line %d\r\n", file, (int)line);
}
Пример использования:
assert_param(TESTING(test));
#define TESTING(PAR) (((PAR) == 10) || \
((PAR) == 11) || \
((PAR) == 12))
uint8_t tmp = 13;
assert_param(TESTING(tmp));
assert_param(tmp == 13);
На самом деле assert_param представляет собой:
assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
Или в более простой записи:
if(expr)
продолжаем программу
else
assert_failed
expr — это выражение, которое передается в assert_param(expr) — assert_param(x > 10).