assert在C语言中的使用

来源:本站
导读:目前正在解读《assert在C语言中的使用》的相关信息,《assert在C语言中的使用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《assert在C语言中的使用》的详细说明。
简介:在进行STM8S相关项目开发的过程中 看到assert_param(--)的使用,通常是判断函数的输入参数是否合格。找了一下的答案,关于assert的说明

在进行STM8S相关项目开发的过程中 看到assert_param(--)的使用,通常是判断函数的输入参数是否合格。

找了一下的答案,关于assert的说明

第一个参考:http://www.ippipp.com/article/id/43322

用于开发调试时使用,生产时务必不要使用。在debug时有效,release模式失效。

通常用于两点:

1、验证函数先决条件,判断函数的输入参数满足条件否;

void System_State(unsigned int state)

{

assert(state<4);

SystemState = state;

}

2、验证函数的后置条件;

unsigned int System_State(unsigned int state)

{

assert(state<4);

SystemState= state;

assert(state <5);

return SystemState;

}

第二个参考:http://www.ippipp.com/article/id/43723

在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;

在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。

所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,

则这个assert_param()可以在运行的程序调用到这个函数时报告错误,使程序员可以及时发现错误,而不必等到程序运行结果的错误而大费周折。

这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。

它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。

当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))

。。。

assert_param(IS_ADC_ALL_PERIPH(ADCx));

。。。

在执行assert_param()的检验时,如果发现参数出错,它会调用函数assert_failed()向程序员报告错误,在任何一个例程中的main.c中都有这个函数的模板,如下:

void assert_failed(uint8_t* file, uint32_t line)

{

while (1)

{}

}

你可以按照自己使用的环境需求,添加适当的语句输出错误的信息提示,或修改这个函数做出适当的错误处理

提醒:《assert在C语言中的使用》最后刷新时间 2024-03-14 00:58:31,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《assert在C语言中的使用》该内容的真实性请自行鉴别。