STM32 加入调试信息来调试代码
最后更新于:2022-04-01 14:51:28
这个想法是从K60上得出来的;今天再帮一哥们看程序的时候,他可以用串口看出来那个文件那一行文件出现问题了,于是很好奇,就问他,他也不知道,然后我就细心的研究了下他的库;发现一个不错的调试方法,其实这个在stm32里面本身也是设置好了的,但是大家一致都没有去用;
先看stm32f10x_conf.h里面的一些内容:
~~~
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function which reports
* the name of the source file and the source line number of the call
* that failed. If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
~~~
默认情况下是:
#define assert_param(expr) ((void)0)
明显,没有什么用,如果我们想调试的时候,可以加一个宏定义:
~~~
#define USE_FULL_ASSERT
~~~
那么我们就可以用这个判断了;
~~~
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
~~~
void assert_failed(uint8_t* file, uint32_t line);
不过还没有完,我们需要在再写一个assert_failed的函数,来实现他的功能:
~~~
#ifdef USE_FULL_ASSERT
#include "stdio.h"
void assert_failed(uint8_t* file, uint32_t line)
{
char buff[64];
sprintf(buff,"%s %d",file,line);
RS232SendStr(buff);
while(1);
}
#endif
~~~
你还可以在里面加入其他调试信息;
this all!