问了下ai,旧版本使用define ASSERT_PARAM(PARAM) ((void)0U),新版本使用#define ASSERT_PARAM(PARAM) ((void)(PARAM)),这两种前者没有性能开销,一般用于固件发布,后者有性能开销,一般在调试时可以查看更多的参数信息,然后v1.3.0中apm32f4xx_ddl_utils.c中的代码
#ifdef USE_FULL_ASSERT
#include “apm32_assert.h”
#else
//
#define ASSERT_PARAM(PARAM) ((void)(PARAM))
#define ASSERT_PARAM(PARAM) ((void)0U)
#endif /* USE_FULL_ASSERT */
中的开启USE_FULL_ASSERT似乎用于在调试模式开启,里面这个apm32_assert.h里面已经做了开启
#ifdef USE_FULL_ASSERT
#define ASSERT_PARAM(PARAM) ((PARAM) ? (void)(PARAM) : AssertFailedHandler((uint8_t )FILE, LINE))
/ Declaration */
void AssertFailedHandler(uint8_t file, uint32_t line);
#else
#define ASSERT_PARAM(PARAM) ((void)(PARAM))
#endif / USE_FULL_ASSERT */
都定义了((void)(PARAM)),那么#else分支
就不应该是这个#define ASSERT_PARAM(PARAM) ((void)(PARAM))应该改为#define ASSERT_PARAM(PARAM) ((void)0U)
v1.0的版本是对的,应该回#define ASSERT_PARAM(PARAM) ((void)0U)
按照AI的说法,涉及到USE_FULL_ASSERT的这部分代码,都应改为下面的写法,调试模式和发布模式做区分,模板文件和apm32_assert.h做统一
#if (USE_FULL_ASSERT == 1U)
#define ASSERT_PARAM(PARAM) ((PARAM) ? (void)(PARAM) : AssertFailedHandler((uint8_t )FILE, LINE))
/ Declaration */
void AssertFailedHandler(uint8_t file, uint32_t line);
#else
#define ASSERT_PARAM(PARAM) ((void)0U)
#endif / USE_FULL_ASSERT *
我用的APM32F4xx_DAL_SDKv1.3.0的库不是标准库