c语言编程中-断言

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__)

如上,程序出错的地方就会被打印。

注意:此办法只是调试程序的一种手段,并不能定位所有的问题。

发布了73 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_38240926/article/details/102700402