搜索
bottom↓
楼主: sunnydragon

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

  [复制链接]

出0入0汤圆

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

出0入9汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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剩余堆栈量,不知道是否可以这样用。

出0入198汤圆

 楼主| 发表于 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 版本。

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

你先试试 CmBacktrace 自带的 STM32F4 Demo。

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

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

出0入0汤圆

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

本帖子中包含更多资源

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

x

出0入0汤圆

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

出0入198汤圆

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

关于那个 Demo 的 GIF 图,


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

出0入0汤圆

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

出0入8汤圆

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

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

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

出0入198汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

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

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

出0入0汤圆

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

出0入0汤圆

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

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

出0入25汤圆

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


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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出140入8汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

本帖子中包含更多资源

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

x

出0入198汤圆

 楼主| 发表于 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

出0入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

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

出0入0汤圆

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

出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出错

出0入0汤圆

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

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

出0入198汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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


测试了一下不行啊

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出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).

出0入198汤圆

 楼主| 发表于 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 宏来配置。

出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

出100入18汤圆

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

出10入95汤圆

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

出5入10汤圆

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

出0入198汤圆

 楼主| 发表于 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 文件中就能看到)。

出0入0汤圆

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

出0入0汤圆

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

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

出0入0汤圆

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

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

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

出0入0汤圆

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

本帖子中包含更多资源

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

x

出30入0汤圆

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

出0入0汤圆

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

出0入198汤圆

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

addr2line.exe

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

出0入8汤圆

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





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

本帖子中包含更多资源

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

x

出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

出0入198汤圆

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

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

出0入198汤圆

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

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

出0入8汤圆

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

出0入8汤圆

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

第二张图???是什么情况

出0入198汤圆

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

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

出0入8汤圆

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

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

出0入198汤圆

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

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

出0入0汤圆

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

出0入8汤圆

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入4汤圆

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

出0入0汤圆

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

1024 好人一生平安 哈哈

出0入36汤圆

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

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

出0入36汤圆

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

出0入0汤圆

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

出0入36汤圆

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

出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

出0入0汤圆

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

出0入0汤圆

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

出0入36汤圆

发表于 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

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

出0入198汤圆

 楼主| 发表于 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

出0入198汤圆

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

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

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

出0入36汤圆

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

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

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

出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、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:26

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

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