Добавил такую строку в компилируемый файл получил ошибку Error[Pm050]: a null statement shall only occur on a line by
itself, and shall not have any other text on the same line (MISRA C
2004 rule 14.3). Т.е. имеем файл "*.c" со строками: #define assert_param(expr)
<..>
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
Ошибка Error[Pm050]: a null statement shall only occur on a line by itself, and shall not have any other text on the same line (MISRA C 2004 rule 14.3)
Если макро выглядит как в оригинальной версии:
#define assert_param(expr) ((void)0)
<..>
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
Ошибка Error[Pm049]: all non-null statements shall have a side-effect (MISRA C 2004 rule 14.2)
Если сделать, как во второй ветке:
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
void assert_failed(uint8_t* file, uint32_t line);
<..>
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
Ошибок нет. Но, если я правильно понимаю, где-то должна существовать функция void assert_failed(uint8_t* file, uint32_t line);. Я знаю, что она находится в директории IAR, а мне бы хотелось от этой связи избавиться.
Обнаружил (да, я тормоз), что "USE_FULL_ASSERT", заданный в опциях проекта (препроцессор) также убирает все ошибки.
Дурак, блин. В main.c она:
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif