搜索
bottom↓
楼主: sunnydragon

【开源】ARM Cortex-M 错误追踪库,让 HardFault 不再可怕

  [复制链接]
(107618384)

出0入0汤圆

发表于 2017-4-26 12:35:39 | 显示全部楼层
这工具不错,感谢分享
(107616594)

出0入0汤圆

发表于 2017-4-26 13:05:29 | 显示全部楼层
目前只有Cortex-M系统内核吗?
(107612745)

出0入0汤圆

发表于 2017-4-26 14:09:38 | 显示全部楼层
大侠的帖子都是精品啊!  前几天碰到一个字节对齐的问题导致的硬错误,折腾了2天. 看看,能不能用得上?
(107606927)

出0入0汤圆

发表于 2017-4-26 15:46:36 | 显示全部楼层
好贴留名,LZ厉害!
(107599681)

出0入0汤圆

发表于 2017-4-26 17:47:22 | 显示全部楼层
sunnydragon 发表于 2017-4-25 20:30
FreeRTOS 可能还要修改系统源码才能支持,所以得晚些时候了

在FreeRTOS中应用,我主要修改了2个地方。
一是:
static void get_cur_thread_stack_info(uint32_t sp, uint32_t *start_addr, size_t *size) {
    CMB_ASSERT(start_addr);
    CMB_ASSERT(size);

#if (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTT)
    *start_addr = (uint32_t) rt_thread_self()->stack_addr;
    *size = rt_thread_self()->stack_size;
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_UCOSII)
    extern OS_TCB *OSTCBCur;

    *start_addr = (uint32_t) OSTCBCur->OSTCBStkBottom;
    *size = OSTCBCur->OSTCBStkSize * sizeof(OS_STK);
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_UCOSIII)
    #error "not implemented, I hope you can do this"
    //TODO ´ýʵÏÖ
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS)
                TaskHandle_t xHandle;
                TaskStatus_t xTaskDetails;
                xHandle = xTaskGetCurrentTaskHandle();
               
                vTaskGetInfo( xHandle,
                  &xTaskDetails,
                  pdTRUE, // Include the high water mark in xTaskDetails.
                  eInvalid ); // Include the task state in xTaskDetails.
                *start_addr = (uint32_t)xTaskDetails.pxStackBase;
                *size = xTaskDetails.usStackHighWaterMark;

    //#error "not implemented, I hope you can do this"
    //TODO ´ýʵÏÖ
#endif
}

二是:
static const char *get_cur_thread_name(void) {
#if (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTT)
    return rt_thread_self()->name;
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_UCOSII)
    extern OS_TCB *OSTCBCur;

#if OS_TASK_NAME_SIZE > 0 || OS_TASK_NAME_EN > 0
        return (const char *)OSTCBCur->OSTCBTaskName;
#else
        return NULL;
#endif /* OS_TASK_NAME_SIZE > 0 || OS_TASK_NAME_EN > 0 */

#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_UCOSIII)
    #error "not implemented, I hope you can do this"
    //TODO ´ýʵÏÖ
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS)
                TaskHandle_t xHandle;
                TaskStatus_t xTaskDetails;
                xHandle = xTaskGetCurrentTaskHandle();
               
                vTaskGetInfo( xHandle,
                  &xTaskDetails,
                  pdTRUE, // Include the high water mark in xTaskDetails.
                  eInvalid ); // Include the task state in xTaskDetails.
                return xTaskDetails.pcTaskName;

    //#error "not implemented, I hope you can do this"
    //TODO ´ýʵÏÖ
#endif
}

FreeRTOS不能直接调用系统函数获取stack_size,我就返回了usStackHighWaterMark剩余堆栈量,不知道是否可以这样用。
(107595070)

出0入148汤圆

 楼主| 发表于 2017-4-26 19:04:13 | 显示全部楼层
LiuYH 发表于 2017-4-26 17:47
在FreeRTOS中应用,我主要修改了2个地方。
一是:
static void get_cur_thread_stack_info(uint32_t sp,  ...

这样不行,因为需要遍历任务已使用的堆栈,但只知道剩余堆栈是无法推算出已使用堆栈大小的。

这两天跟一个网友完成了 FreeRTOS 的移植,但是需要修改 FreeRTOS 源码,在 TCB 结构体中增加 stack_size 元素。他晚些时候整理完代码,会释出 FreeRTOS 版本。
(107499106)

出0入0汤圆

发表于 2017-4-27 21:43:37 | 显示全部楼层
厉害了,我的哥
mark一下:ARM Cortex-M 错误追踪库
(107450252)

出0入0汤圆

发表于 2017-4-28 11:17:51 | 显示全部楼层
继续关注,有时间好好看一下
(107435200)

出0入0汤圆

发表于 2017-4-28 15:28:43 | 显示全部楼层
好东西啊,支持cortex m0吗?
(107424045)

出0入148汤圆

 楼主| 发表于 2017-4-28 18:34:38 | 显示全部楼层
yjunson 发表于 2017-4-28 15:28
好东西啊,支持cortex m0吗?

支持的,但是 M0 内核本身异常系统有所裁剪,所以错误诊断功能会不全面。
(107113043)

出0入0汤圆

发表于 2017-5-2 08:58:00 | 显示全部楼层
群主搞一个群讨论
(107076592)

出0入0汤圆

发表于 2017-5-2 19:05:31 | 显示全部楼层
我移植到CM4内核的单片机,起始地址是00000000,出现hardfault时,单片机就重启,有知道是怎么回事的吗?
(107075543)

出0入148汤圆

 楼主| 发表于 2017-5-2 19:23:00 | 显示全部楼层
jingzhongyue 发表于 2017-5-2 19:05
我移植到CM4内核的单片机,起始地址是00000000,出现hardfault时,单片机就重启,有知道是怎么回事的吗? ...

你先试试 CmBacktrace 自带的 STM32F4 Demo。
(107073290)

出0入0汤圆

发表于 2017-5-2 20:00:33 | 显示全部楼层
hard fault有时候查起来还挺麻烦的
打算学习使用这个库
(107070855)

出0入0汤圆

发表于 2017-5-2 20:41:08 | 显示全部楼层
CmBacktrace 自带的 STM32F4 Demo,可以正常使用
(107065364)

出0入148汤圆

 楼主| 发表于 2017-5-2 22:12:39 | 显示全部楼层
jingzhongyue 发表于 2017-5-2 20:41
CmBacktrace 自带的 STM32F4 Demo,可以正常使用

你用的什么平台? 可以的话,打包一份精简的工程出来,大家帮你分析下问题。
(107027554)

出0入0汤圆

发表于 2017-5-3 08:42:49 | 显示全部楼层
我用keil4 LPC4078平台 RTT ,现在怀疑是起始地址00000000导致,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(107021223)

出0入0汤圆

发表于 2017-5-3 10:28:20 | 显示全部楼层
问题已经解决,谢谢楼主!原因是工程中有代码运行在片外flash上,在产生hardfault后,访问片外flash导致
(106828205)

出0入148汤圆

 楼主| 发表于 2017-5-5 16:05:18 | 显示全部楼层
security 发表于 2017-4-21 10:41
我额外说一点用户体验的问题:

关于那个 Demo 的 GIF 图,


增加了一条百度经验: http://jingyan.baidu.com/article/3c48dd34bdd533e10be358e0.html ,帮忙测评这个用户体验怎么样。
(106731545)

出0入0汤圆

发表于 2017-5-6 18:56:18 来自手机 | 显示全部楼层
好东西,必须顶!
(106684272)

出0入0汤圆

发表于 2017-5-7 08:04:11 来自手机 | 显示全部楼层
sunnydragon 发表于 2017-5-5 16:05
增加了一条百度经验: http://jingyan.baidu.com/article/3c48dd34bdd533e10be358e0.html ,帮忙测评这个 ...

好棒好棒。
木有什么问题。

我再额外啰嗦一点,既然面向很多新手,那个啥 addr2line 这种类似 hacker 的工具,打出来的 info,可读性不那么亲民。
很多新手,看得估计都会眼花掉。
是否多增加点 addr2line 输出格式的说明?
(106679071)

出0入148汤圆

 楼主| 发表于 2017-5-7 09:30:52 | 显示全部楼层
security 发表于 2017-5-7 08:04
好棒好棒。
木有什么问题。

可以的~到时候我再增加一个 addr2line 工具使用方法的百度经验
(106635578)

出0入0汤圆

发表于 2017-5-7 21:35:45 | 显示全部楼层
这个工具真心不错!
(106619486)

出0入0汤圆

发表于 2017-5-8 02:03:57 | 显示全部楼层
Mark一下
(106595444)

出0入0汤圆

发表于 2017-5-8 08:44:39 | 显示全部楼层
很不错,学习了,感谢。
(106585380)

出0入0汤圆

发表于 2017-5-8 11:32:23 | 显示全部楼层
IAR下面除零操作和内存未释放的问题都测过,很好用,谢谢楼主,不过数组越界在单片机未进入硬件错误前无法检测出来的,是必须进入硬件错误才可以是不是
(106552907)

出0入0汤圆

发表于 2017-5-8 20:33:36 | 显示全部楼层
本帖最后由 XIUQIN 于 2017-5-8 20:39 编辑

跟你学到很多,特别是那个主从modbus.谢谢!之前都在用串口打印跟踪故障。
(106546942)

出0入0汤圆

发表于 2017-5-8 22:13:01 | 显示全部楼层
谢谢楼主,这绝对用得上哦,好东西!
(106538581)

出0入0汤圆

发表于 2017-5-9 00:32:22 来自手机 | 显示全部楼层
有时间试一下
(106376740)

出0入148汤圆

 楼主| 发表于 2017-5-10 21:29:43 | 显示全部楼层
Veiko 发表于 2017-5-8 11:32
IAR下面除零操作和内存未释放的问题都测过,很好用,谢谢楼主,不过数组越界在单片机未进入硬件错误前无法 ...

数组越界不一定会导致硬件异常。

只有硬件异常,CmBacktrace 才会触发,自动诊断故障原因。
(106318913)

出0入0汤圆

发表于 2017-5-11 13:33:30 | 显示全部楼层
这个不错啊  
(105967615)

出0入0汤圆

发表于 2017-5-15 15:08:28 | 显示全部楼层
XIVN1987 发表于 2017-4-22 22:57
大侠,你是怎么确定函数有几层调用的??
我看了下代码好像是下面这段代码实现的,,就是遍历整个栈空间, ...

我也发现了,这样的callstack是不准确的,中间会有不少错误位置。
求楼主提示如何解决
(105964511)

出0入17汤圆

发表于 2017-5-15 16:00:12 | 显示全部楼层
nanfang2000 发表于 2017-5-15 15:08
我也发现了,这样的callstack是不准确的,中间会有不少错误位置。
求楼主提示如何解决 ...


纯MCU程序是不可能解决这个问题的,,,具体怎么弄我也不知道

不过楼主的程序对STM32还是很实用的,因为STM32的程序地址从0x08000000开始,,栈中值为0x080xxxxx数值很大可能就是函数调用
(105962367)

出0入0汤圆

发表于 2017-5-15 16:35:56 | 显示全部楼层
感谢分享,先MARK下
(105960415)

出0入0汤圆

发表于 2017-5-15 17:08:28 | 显示全部楼层
目前看了下 例子发现你只在断言那里输出错误
断言那里只是在调试的时候用的  不要你这个同样可以发现问题所在
因为断言本身 就是用户自己检查错误的一个措施
(105960287)

出0入0汤圆

发表于 2017-5-15 17:10:36 | 显示全部楼层
如果可以发现其他的问题  比如数组越界  野指针  莫名修改内存
还是很有用的  只看了一部分  有待发现
(105950035)

出140入8汤圆

发表于 2017-5-15 20:01:28 | 显示全部楼层
虽然立马移植了楼主的库,但是确实很是没怎么搞懂楼主的这个东东怎么发挥作用。。。。。
(105937059)

出0入0汤圆

发表于 2017-5-15 23:37:44 | 显示全部楼层
Mark,迟点有时间在好好试试
(105904593)

出0入0汤圆

发表于 2017-5-16 08:38:50 | 显示全部楼层
感謝分享 下載試一下
(105338755)

出0入148汤圆

 楼主| 发表于 2017-5-22 21:49:28 | 显示全部楼层
CmBacktrace V1.0.0 正式版先已发布,增加对 FreeRTOS 的支持,欢迎大家下载。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(105338526)

出0入148汤圆

 楼主| 发表于 2017-5-22 21:53:17 | 显示全部楼层
LiuYH 发表于 2017-4-26 17:47
在FreeRTOS中应用,我主要修改了2个地方。
一是:
static void get_cur_thread_stack_info(uint32_t sp,  ...

FreeRTOS 现在已经支持了,欢迎下载试用哈~ https://github.com/armink/CmBacktrace/releases
(105334619)

出0入0汤圆

发表于 2017-5-22 22:58:24 | 显示全部楼层
好东西来的,下载试用看看,期待大神更多的开源作品
(104751952)

出0入0汤圆

发表于 2017-5-29 16:49:31 | 显示全部楼层
早几天用笨方法解了公司产品偶尔HardFault的BUG,觉得效率太低了,想起楼主这个东东,刚刚试了下STM32F103的NoOS除零异常,不错,定位得很准啊
(104659716)

出0入148汤圆

 楼主| 发表于 2017-5-30 18:26:47 | 显示全部楼层
负西弱 发表于 2017-5-29 16:49
早几天用笨方法解了公司产品偶尔HardFault的BUG,觉得效率太低了,想起楼主这个东东,刚刚试了下STM32F103 ...

呵呵,好用的话,记得分享给其他有需要的人哈~
(103640432)

出0入0汤圆

发表于 2017-6-11 13:34:51 | 显示全部楼层
顶楼主,好东西,最近也在弄这个,已经可以打印寄存器了,必须用查询方式串口打印,但是在处理流程里面加入了写入fat文件系统,就执行不下去了,不知道什么问题,外部是spi flash,难道是hardfault内部不能使用dma的spi?
(103639295)

出0入0汤圆

发表于 2017-6-11 13:53:48 来自手机 | 显示全部楼层
zack_cf 发表于 2017-4-20 09:52
下面这个错误不知道你的代码能不能定位出来。就是当用SDRAM作为栈空间,函数返回时执行到pop{Rx,Ry,PC}指令 ...

你这个错误我最近碰到过,用常规的方法根本追踪不到,后来把整个芯片的代码上FPGA用内嵌的逻辑分析仪工具抓取cortex-m0的AHB总线数据才定位到原来是某个函数内调用memcpy用到了错误指针,恰好动了sp的内容导致pop出错
(103609591)

出0入0汤圆

发表于 2017-6-11 22:08:52 | 显示全部楼层
zzj0329 发表于 2017-6-11 13:53
你这个错误我最近碰到过,用常规的方法根本追踪不到,后来把整个芯片的代码上FPGA用内嵌的逻辑分析仪工具 ...

是的,这个错误很难调试,要不是有官方文档,根本无从下手
(103608884)

出0入148汤圆

 楼主| 发表于 2017-6-11 22:20:39 | 显示全部楼层
ddddd120 发表于 2017-6-11 13:34
顶楼主,好东西,最近也在弄这个,已经可以打印寄存器了,必须用查询方式串口打印,但是在处理流程里面加入了写 ...

细节方面要慢慢分析。我是在 hardfault 时,通过 EasyFlash 的 Log 功能,直接把错误日志写到 STM32 内部 Flash 的。
(103572334)

出0入0汤圆

发表于 2017-6-12 08:29:49 | 显示全部楼层
找机会用下
(103568144)

出0入0汤圆

发表于 2017-6-12 09:39:39 | 显示全部楼层
不错,不过我用的资源太紧张了,用不了啊~
(103563788)

出0入0汤圆

发表于 2017-6-12 10:52:15 | 显示全部楼层
mark一下 正好要用 谢谢!
(103398224)

出0入0汤圆

发表于 2017-6-14 08:51:39 | 显示全部楼层
前两天还和同学聊到这个问题,这边就有这么好的解决办法。先收着,谢谢了
(102876045)

出0入0汤圆

发表于 2017-6-20 09:54:38 | 显示全部楼层
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cm_backtrace.c 1
Error[Pe018]: expected a ")" D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 337
Warning[Pe549]: variable "result" is used before its value is set D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 338
Error[Pe018]: expected a ")" D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 343
Warning[Pe549]: variable "result" is used before its value is set D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 344
Error[Pe018]: expected a ")" D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 349
Warning[Pe549]: variable "result" is used before its value is set D:\RDSVN\BRO\代码管理\BRO_V01\BRO\Mx\src\cm_backtrace\cmb_def.h 350


测试了一下不行啊
(102470146)

出0入0汤圆

发表于 2017-6-25 02:39:37 | 显示全部楼层
Mark一下
(100780422)

出0入0汤圆

发表于 2017-7-14 16:01:41 | 显示全部楼层
这个小工具还不错的
(100425980)

出0入0汤圆

发表于 2017-7-18 18:29:03 | 显示全部楼层
能解决好多这类问题,感谢楼主分享。
(98685332)

出0入0汤圆

发表于 2017-8-7 21:59:51 | 显示全部楼层
使用新塘的单片机,M0或M4都会出现下面这两个提示,这咋整呢
Error: L6218E: Undefined symbol Image$$ER_IROM1$$Base (referred from cm_backtrace.o).     
Error: L6218E: Undefined symbol Image$$ER_IROM1$$Limit (referred from cm_backtrace.o).
(98648894)

出0入148汤圆

 楼主| 发表于 2017-8-8 08:07:09 | 显示全部楼层
本帖最后由 sunnydragon 于 2017-8-8 08:09 编辑
tianxiaoMCU 发表于 2017-8-7 21:59
使用新塘的单片机,M0或M4都会出现下面这两个提示,这咋整呢
Error: L6218E: Undefined symbol Image$$ER_I ...


Keil 编译器?

在 Keil 中默认的在代码段为 ER_IROM1,如果不一样可以在  cmb_cfg.h 中,通过定义 CMB_CODE_SECTION_NAME 宏来配置。
(98635247)

出0入0汤圆

发表于 2017-8-8 11:54:36 | 显示全部楼层
本帖最后由 tianxiaoMCU 于 2017-8-8 11:56 编辑
sunnydragon 发表于 2017-8-8 08:07
Keil 编译器?

在 Keil 中默认的在代码段为 ER_IROM1,如果不一样可以在  cmb_cfg.h 中,通过定义 CMB_ ...


是keil 编译器,

提示错误是这样的:


这样定义还是出错,对这块很陌生,都不知道咋整

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(98626391)

出0入0汤圆

发表于 2017-8-8 14:22:12 | 显示全部楼层
感谢,真是好东西!!!!!
(98621562)

出10入10汤圆

发表于 2017-8-8 15:42:41 | 显示全部楼层
多谢分享!
让 HardFault 不再可怕
(98619316)

出0入10汤圆

发表于 2017-8-8 16:20:07 | 显示全部楼层
必须顶~~~~~~~~~~
(98563061)

出0入148汤圆

 楼主| 发表于 2017-8-9 07:57:42 | 显示全部楼层
tianxiaoMCU 发表于 2017-8-8 11:54
是keil 编译器,

提示错误是这样的:

我指的是 CmBacktrace 定义的 Keil 环境下默认的代码段是 ER_IROM1 (因为貌似 STM32 项目都是这个),但如果你的项目不是,再在 cfg 头文件定义 CMB_CODE_SECTION_NAME 宏来重新配置。

所以,你先确认下你的项目代码段名称是多少(PS: 在项目使用的 *.sct 文件中就能看到)。
(98536277)

出0入0汤圆

发表于 2017-8-9 15:24:06 | 显示全部楼层
小白卡在HardFault也是挺郁闷的一件事,谢谢LZ
(98522032)

出0入0汤圆

发表于 2017-8-9 19:21:31 | 显示全部楼层
sunnydragon 发表于 2017-8-9 07:57
我指的是 CmBacktrace 定义的 Keil 环境下默认的代码段是 ER_IROM1 (因为貌似 STM32 项目都是这个),但 ...

谢谢,搞定了。我的工程没有生成那个sct文件,不过在map文件里找到了。
(97845811)

出0入0汤圆

发表于 2017-8-17 15:11:52 | 显示全部楼层
感谢楼主奉献

addr2line.exe
楼主的软件我在WIN7(32BIT)系统下无法打开

https://www.amobbs.com/thread-5679379-1-1.html
(97837902)

出0入0汤圆

发表于 2017-8-17 17:23:41 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(97685668)

出0入0汤圆

发表于 2017-8-19 11:40:55 | 显示全部楼层
赞一个,Modbus的移植用过xiaowei061兄的工程,程序的风格和精益求精的精神十分敬仰。
(97667847)

出0入0汤圆

发表于 2017-8-19 16:37:56 | 显示全部楼层
mark
(97649821)

出0入148汤圆

 楼主| 发表于 2017-8-19 21:38:22 | 显示全部楼层
appleboy 发表于 2017-8-17 15:11
感谢楼主奉献

addr2line.exe

试试 GitHub 上最新的 win32 版本: https://github.com/armink/CmBack ... ols/addr2line/win32
(97171411)

出0入8汤圆

发表于 2017-8-25 10:31:52 | 显示全部楼层





这是跑的mdk下ucos的demo的效果   ,第二章图打印的没看懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(97171197)

出0入8汤圆

发表于 2017-8-25 10:35:26 | 显示全部楼层
static void  array_fault()
{
        int array[10000];
   
    for(int i = 0; i <200000; i++)
      array = 0;
}
这是我写的测试代码,故意溢出

程序死在这里,单步走不了:


打印东西不全:



什么鬼?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(97137167)

出0入148汤圆

 楼主| 发表于 2017-8-25 20:02:36 | 显示全部楼层
justdomyself 发表于 2017-8-25 10:31
这是跑的mdk下ucos的demo的效果   ,第二章图打印的没看懂

咦~会不会跟使用的 输出方式 是 RTT 有关系,平时都是拿串口测试的。
(97137057)

出0入148汤圆

 楼主| 发表于 2017-8-25 20:04:26 | 显示全部楼层
justdomyself 发表于 2017-8-25 10:35
static void  array_fault()
{
        int array[10000];

看下汇编和变量状态呢,再深入分析下原因?
(97129181)

出0入8汤圆

发表于 2017-8-25 22:15:42 | 显示全部楼层
看到论坛里一个就是这样打印的   
还有会不会我程序里面溢出得太离谱了  
芯片内存才64k    我一下子就写到200k   导你这个程序整段不了
(97129102)

出0入8汤圆

发表于 2017-8-25 22:17:01 | 显示全部楼层
justdomyself 发表于 2017-8-25 10:31
这是跑的mdk下ucos的demo的效果   ,第二章图打印的没看懂

第二张图???是什么情况
(97094216)

出0入148汤圆

 楼主| 发表于 2017-8-26 07:58:27 | 显示全部楼层
justdomyself 发表于 2017-8-25 22:17
第二张图???是什么情况

那个是为了输出函数调用栈的信息,CmBacktrace 在你那边都运行不正常,自然显示不全。详细使用务必要认真看下 GitHub 上首页及 docs 下的说明文档。
(97090853)

出0入8汤圆

发表于 2017-8-26 08:54:30 | 显示全部楼层
sunnydragon 发表于 2017-8-26 07:58
那个是为了输出函数调用栈的信息,CmBacktrace 在你那边都运行不正常,自然显示不全。详细使用务必要认真 ...

那个图是运行你的demo显示出来的   不是我的代码
(97090748)

出0入148汤圆

 楼主| 发表于 2017-8-26 08:56:15 | 显示全部楼层
justdomyself 发表于 2017-8-26 08:54
那个图是运行你的demo显示出来的   不是我的代码

demo 里用的串口,你不是改成 RTT 了吗?
(97082077)

出0入0汤圆

发表于 2017-8-26 11:20:46 | 显示全部楼层
好东东,赞
(97080499)

出0入8汤圆

发表于 2017-8-26 11:47:04 | 显示全部楼层
sunnydragon 发表于 2017-8-26 08:56
demo 里用的串口,你不是改成 RTT 了吗?

只是打印方式不一样  这也有影响?
(97028109)

出0入0汤圆

发表于 2017-8-27 02:20:14 | 显示全部楼层
支持MDK自带的RTX操作系统否?
(97009853)

出0入0汤圆

发表于 2017-8-27 07:24:30 来自手机 | 显示全部楼层
谢谢楼主分享。赞!
(92992694)

出0入0汤圆

发表于 2017-10-12 19:17:09 | 显示全部楼层
先试一下看看
(92462871)

出0入0汤圆

发表于 2017-10-18 22:27:32 | 显示全部楼层
这个真好,免得摸瞎了
(92415617)

出0入0汤圆

发表于 2017-10-19 11:35:06 | 显示全部楼层
测试完成,好用!感谢!
(91984330)

出0入4汤圆

发表于 2017-10-24 11:23:13 | 显示全部楼层
谢谢牛人分享!
(91874121)

出0入0汤圆

发表于 2017-10-25 18:00:02 | 显示全部楼层
sunnydragon 发表于 2017-5-22 21:49
CmBacktrace V1.0.0 正式版先已发布,增加对 FreeRTOS 的支持,欢迎大家下载。

1024 好人一生平安 哈哈
(91122941)

出0入0汤圆

发表于 2017-11-3 10:39:42 | 显示全部楼层
本帖最后由 redworlf007 于 2017-11-3 10:40 编辑

我用你iar的那个demo测试了,串口收到东西,但是串口助手上没有显示为字符,不知道为啥,对了我用的片子是f103vet6.
(91122389)

出0入0汤圆

发表于 2017-11-3 10:48:54 | 显示全部楼层
我把那个mdk的也试了,同样的问题,串口助手显示收到969个字节的数据,但是没有显示为字符,不知道啥问题,我测试的是ucosii下面的iar和mdk的工程。
(91121626)

出0入0汤圆

发表于 2017-11-3 11:01:37 | 显示全部楼层
支持下!lz厉害!
(91119890)

出0入0汤圆

发表于 2017-11-3 11:30:33 | 显示全部楼层
可以了,我换putty打开就好了。
(91115409)

出0入0汤圆

发表于 2017-11-3 12:45:14 | 显示全部楼层
本帖最后由 huy666 于 2017-11-3 12:50 编辑

有三个错误,见图。

FreeRTOS。配置如下:
/* print line, must config by user */
#define cmb_println(...)            printf(__VA_ARGS__)   

/* enable bare metal(no OS) platform */
/* #define CMB_USING_BARE_METAL_PLATFORM */

/* enable OS platform */
#define CMB_USING_OS_PLATFORM
/* OS platform type, must config when CMB_USING_OS_PLATFORM is enable */
#define CMB_OS_PLATFORM_TYPE            CMB_OS_PLATFORM_FREERTOS
/* cpu platform type, must config by user */
#define CMB_CPU_PLATFORM_TYPE           CMB_CPU_ARM_CORTEX_M4
/* enable dump stack information */
#define CMB_USING_DUMP_STACK_INFO
/* language of print information */
#define CMB_PRINT_LANGUAGE              CMB_PRINT_LANGUAGE_ENGLISH

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(91114719)

出0入0汤圆

发表于 2017-11-3 12:56:44 | 显示全部楼层
FREERTOS需要改哪些代码?
(91114593)

出0入0汤圆

发表于 2017-11-3 12:58:50 | 显示全部楼层
学习了,谢谢分享!
(91111999)

出0入0汤圆

发表于 2017-11-3 13:42:04 | 显示全部楼层
我测了下数组越界,定位不准。
全局数组uint8_t Test[3];

在一个任务里面,如下:
    while( 1 )
    {
        LED2_TOGGLE;
        for(uint8_t i=0;i<60;i++)
        {
         Test[i] = 1;
        }
        OSTimeDlyHMSM( 0, 0, 0, 500 );
    }

0x08001dee
OSQPost
C:\Users\Desktop\STM32-cm_backtrace-V7.0\uCOS-II\Source/os_q.c:585

没有定位他那个任务里面。
(90997283)

出0入148汤圆

 楼主| 发表于 2017-11-4 21:34:00 | 显示全部楼层
huy666 发表于 2017-11-3 12:45
有三个错误,见图。

FreeRTOS。配置如下:

有没有用 GitHub 上 demo 下的 FreeRTOS demo 呢?

FreeRTOS 的改动说明,在说明文档的最下面有讲的: https://github.com/armink/CmBack ... /freertos/stm32f10x
(90997057)

出0入148汤圆

 楼主| 发表于 2017-11-4 21:37:46 | 显示全部楼层
redworlf007 发表于 2017-11-3 13:42
我测了下数组越界,定位不准。
全局数组uint8_t Test[3];

数组越界不一定会导致当前代码出现异常的。

比如说你越界后把系统调度相关的信息覆盖了,虽然当前线程这段越界代码可以正常执行下来,但是在接下来的系统调度时,就可能会出现 hardfault 。
(90946116)

出0入0汤圆

发表于 2017-11-5 11:46:47 | 显示全部楼层
sunnydragon 发表于 2017-11-4 21:37
数组越界不一定会导致当前代码出现异常的。

比如说你越界后把系统调度相关的信息覆盖了,虽然当前线程这 ...

是的,我也是不懂,就随便敲了点代码,试了下,这个软件比查看寄存器还是方便的多,谢谢。
(90859904)

出0入0汤圆

发表于 2017-11-6 11:43:39 | 显示全部楼层
sunnydragon 发表于 2017-11-4 21:34
有没有用 GitHub 上 demo 下的 FreeRTOS demo 呢?

FreeRTOS 的改动说明,在说明文档的最下面有讲的: h ...

看您在prvInitialiseNewTask函数里加了一句。
pxNewTCB->uxSizeOfStack = ulStackDepth;   /*< Support For CmBacktrace >*/

我的FreeRTOS是8.2.3,没有这个函数。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-9-23 02:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表