完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
把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 %snLine is %dn", __FILE__, __LINE__); printf("aborted task name is %sn", 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); |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:04 , Processed in 0.605673 second(s), Total 69, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号