c语音编程中-断言使用
本文除了介绍assert在c语言编程的的使用,更重要的是在rtos系统编程中,configASSERT调试的方法。
一,assert函数
首先,介绍assert函数下c编程中的使用
测试程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int max_fun(int *a,int *b)
{
assert(*a > 50);
int ret;
ret = (*a > *b)?(*a):(*b);
return ret;
}
int main(int argc, const char *argv[])
{
int a;
int b;
int max_nb;
scanf("%d",&a);
getchar();
scanf("%d",&b);
getchar();
printf("a:%d;b:%d\n",a,b);
max_nb = max_fun(&a,&b);
printf("[%s.%d]:max_nb:%d\n",__FUNCTION__,__LINE__,max_nb);
return 0;
}
本例中输入a的大小控制在大于50,否则程序出错。
运行结果:
这个是assert在c语言中的简单应用。
二,freertos中configASSERT应用
在freertos系统中,与其功能类似的的函数configASSERT在debug过程占据这极其重要的位置,特别在程序运行不正常死机时,可以定位其问题,具体使用方法也很简单。
FreeRTOS 内核中的关键点都会调用configASSERT(x),当x 为0 的时候说明有错误发生;使用断言的话会导致开销加大,一般在调试阶段使用。只需要在FreeRTOSConfig.h 文件中定义configASSERT()宏函数即可;
例如:
#define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)
#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)
如上,程序出错的地方就会被打印。
注意:此办法只是调试程序的一种手段,并不能定位所有的问题。