2956|3

245

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

StellarisWare中的错误处理机制 [复制链接]

                         StellarisWare中的错误处理机制

在驱动库中,用一种非传统的方法来处理无效的参数和错误条件,通常函数检查自己的参数,来确保他们的值有效(如果需要,某些参数可能是无条件有效的,如:用作32定时器装载值的一个32位值),如果一个无效的参数被传入的话,则函数就会返回一个错误的代码,然后调用者必须检查每次函数调用的返回代码来确保调用成功。

但是这会导致在每个函数中有大量的参数检查代码,对于一个自我完备的程序代码,一旦应用被调试,这些额外的代码就会变成不需要的负担。在驱动库中,大多数函数不返回错误(FlashProgram();FlashErase()、FlsahProtectSave()、FlashProtectSet()例外)通过调用宏ASSERT来执行参数检查,这个宏有着一个断言宏的常规定义;他接受为一个必须为“true”的表达式;可以通过使用这个宏变成空来从代码中删除参数检查。debug.h中提供了ASSERT的两个定义:

#ifdef DEBUG

#define ASSERT(expr) {                                      \

                         if(!(expr))                        \

                         {                                  \

                             __error__(__FILE__, __LINE__); \

                         }                                  \

                     }

#else

#define ASSERT(expr)

#endif

 

 

一个为空(通常情况下都使用这个宏定义);

一个为被用来判断表达式(当库在调试中编译时使用这个定义)

 

调试情况中将在表达式不为真时调用__error__(__FILE__, __LINE__)函数;传递文件名称和ASSERT宏调用的行编号。而__error__(__FILE__, __LINE__)函数的原型在debug.h中,必须由应用程序来提供,因为是应用程序来负责处理错误条件的。通过在__error__函数中设置一个断点,调试器就能在应用出现错误时立刻停止运行(其他的错误处理方法处理起来可能很困难)。当调试器停止时,__error__函数的参数很堆栈的回溯会精确地指出发现错误的函数、发现的问题和它被调用的地方。

例如:

Long GPIOPinRead(unsigned long ulPort, unsigned char ucPins)

{

    // 参数检查

    ASSERT(GPIOBaseValid(ulPort));

 

    // Return the pin value(s).

    return(HWREG(ulPort + (GPIO_O_DATA + (ucPins << 2))));

}

最新回复

给力  详情 回复 发表于 2012-4-12 14:59
 
点赞 关注

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 

写的不错,说白了就是断言

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

回复 楼主 jxndcl301 的帖子

愿听其详。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

4
 
给力
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表