[Raw-OS] RAW ASSERT 篇

jorya_txj   2012-7-5 17:07 楼主
把assert 单独放一篇文章,可见是多么的重要。Raw os 提供了RAW_ASSERT 的接口。强烈建议在产品研发阶段打开assert 功能
/*enable assert for raw os*/
#define CONFIG_RAW_ASSERT                                        1               

RAW_ASSERT 是一个宏,移植的时候放在raw_cpu.h 里面,比如VC 上的移植如下。
#define  RAW_ASSERT(CON)       if (!(CON)) {printf("file is %s\nLine is %d\n", __FILE__, __LINE__); \
printf("aborted task name is %s\n", raw_task_active->task_name); \
while (1); }  


需要打开串口的功能,但是有的时候串口打开比较麻烦,怎么办呢。最简单的移植是:       
#define  RAW_ASSERT(CON)        if (!(CON)) {volatile RAW_U8 dummy = 0; while (dummy==0);}

但是这样的话就看不到有效debug信息,资源紧缺的话建议这样的移植
#define  RAW_ASSERT(CON)        if (!(CON)) {volatile RAW_U8 dummy = 0; led1_on();while (dummy==0);}
led1_on() 操作寄存器使能一个小灯,用来告诉用户系统出错了。


RAW_ASSERT 的时候可以串口打印任何全局变量,最常用的是打印raw_task_active 的信息 告诉你是哪个任务跑的有问题,告诉你哪一行,哪一个文件,甚至哪一个函数有问题。

raw_idle_task 里面assert的话说明哪个任务栈空间不够了,那个时候不够栈空间的任务被保存到raw_task_active 然后assert
raw_task_active = task_ptr;
RAW_ASSERT(0);

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复