Все функции библиотеки STM32F10x SPL используют для проверки своих аргументов макрос assert_param.
Этот макрос выполняет проверку выражения с участием проверяемого аргумента функции на равенство нулю. Если значение выражения равно нулю, то вызывается функция-обработчик ошибки аргумента assert_failed, в противном случае (выражение не равно нулю) проверка аргумента проходит успешно.
По умолчанию проверка правильности входных данных выключена и все макросы assert_param ни чего не делают. Что бы использовать проверку необходимо добавить в Defines определение USE_FULL_ASSERT и в коде добавить функцию:
Этот макрос выполняет проверку выражения с участием проверяемого аргумента функции на равенство нулю. Если значение выражения равно нулю, то вызывается функция-обработчик ошибки аргумента assert_failed, в противном случае (выражение не равно нулю) проверка аргумента проходит успешно.
По умолчанию проверка правильности входных данных выключена и все макросы assert_param ни чего не делают. Что бы использовать проверку необходимо добавить в Defines определение USE_FULL_ASSERT и в коде добавить функцию:
void
assert_failed(uint8_t* file, uint32_t line)
{
while
(1){}
}
В ней и зависнет программа, если вы введете что нибудь неправильно. Переменные file и line - это файл и строка, в которой неудачно выполнился assert_param.
Например представим что мы случайно попытались включить тактирование TIM3 на шине APB1:
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
На самом же деле TIM3 подключен к шине APB1 и код не включит тактирование таймера. И прерывания не будут вызывается. При запуске Debug в функции assert_failed на строке с while нужно поставить точку прерывания, и нажать Resume (F8). В результате макро assert_param найдет ошибку, и программа зависнет в бесконечном while.
Комментариев нет:
Отправить комментарий