Этот вопрос я тоже не понял, но схитрил и проверил компилятором.
Получил то же самое, но без защитной обёртки (без подавления
ошибок). Вот так выглядит вызов после препроцессора: /* Check the parameters */
do { ((void)0); } while ( 0 );
С подавление ошибок:
/* Check the parameters */
do {_Pragma ("diag_suppress=Pm049") ((void)0); _Pragma ("diag_default=Pm049") } while ( 0 );
А! Понял.
Несколько обращений одно за другим. Извольте. Код:
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
После замены:
/* Check the parameters */
do {_Pragma ("diag_suppress=Pm049") ((void)0); _Pragma ("diag_default=Pm049") } while ( 0 );
do {_Pragma ("diag_suppress=Pm049") ((void)0); _Pragma ("diag_default=Pm049") } while ( 0 );
do {_Pragma ("diag_suppress=Pm049") ((void)0); _Pragma ("diag_default=Pm049") } while ( 0 );
Вот фрагмент ассемблерного листинга:
NVIC_Init:
PUSH {R4-R6}
// 123 uint8_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
MOVS R3,#+0
MOVS R1,#+0
MOVS R2,#+15
// 124
// 125 /* Check the parameters */
// 126 assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
// 127 assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
// 128 assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
// 129
// 130 if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
LDRB R4,[R0, #+3]
CMP R4,#+0
BEQ.N ??NVIC_Init_0