3348|0

420

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

RAW ASSERT 篇 [复制链接]

把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);
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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