OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4597|回复: 7

usmart串口调试组件有bug进入硬件中断,请原子哥分析原因?

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-4-5
在线时间
6 小时
发表于 2017-4-17 16:51:11 | 显示全部楼层 |阅读模式
1金钱
最近在用usmart调试组件时候发现会是STM32103进入HardFault Handler中断,请原子哥分析原因?
下面是我用串口助手发送的16进制命令,发几次就很容易出现。上周还发送过一段数据,是一段那段数据就进入硬件中断。每次都进入,不过那段数据找不到了,不过这段数据发送个3、5次,一般不超过10次也是会很容易进入硬件中断的!
55 aa 00 0c 02 fe 01 00 ff ff ff 01 00 00 00 00 00 00 02 00 00 00 01 01 02 02 03 03 04 03 05 04 06 05 07 06 08 06 09 07 0a 08 0b 09 0c 09 0d 0a 0e 0b 0f 0c 10 0c 11 0d 12 0e 13 0f 14 0f 15 10 16 11 17 12 18 12 19 13 1a 14 1b 15 1c 15 1d 16 1e 17 1f 18 20 18 21 19 22 1a 23 1b 24 1b 25 1c 26 1d 27 1e 28 1e 29 1f 2a 20 2b 21 2c 21 2d 22 2e 23 2f 24 30 24 31 25 32 26 33 27 34 27 35 28 36 29 37 2a 38 2a 39 2b 3a 2c 3b 2d 3c 2d 3d 2e 3e 2f 3f 30 40 30 41 31 42 32 43 33 44 33 45 34 46 35 47 36 48 36 49 37 4a 38 4b 39 4c 39 4d 3a 4e 3b 4f 3c 50 3c 51 3d 52 3e 53 3f 54 3f 55 40 56 41 57 42 58 43 59 43 5a 44 5b 45 5c 46 5d 46 5e 47 5f 48 60 49 61 49 62 4a 63 4b 64 4c 65 4c 66 4d 67 4e 68 4f 69 4f 6a 50 6b 51 6c 52 6d 52 6e 53 6f 54 70 55 71 55 72 56 73 57 74 58 75 58 76 59 77 5a 78 5b 79 5b 7a 5c 7b 5d 7c 5e 7d 5e 7e 5f 7f 60 80 61 81 61 82 62 83 63 84 64 85 64 86 65 87 66 88 67 89 67 8a 68 8b 69 8c 6a 8d 6a 8e 6b 8f 6c 90 6d 91 6d 92 6e 93 6f 94 70 95 70 96 71 97 72 98 73 99 73 9a 74 9b 75 9c 76 9d 76 9e 77 9f 78 a0 79 a1 79 a2 7a a3 7b a4 7c a5 7c a6 7d a7 7e a8 7f a9 7f aa 80 ab 81 ac 82 ad 83 ae 83 af 84 b0 85 b1 86 b2 86 b3 87 b4 88 b5 89 b6 89 b7 8a b8 8b b9 8c ba 8c bb 8d bc 8e bd 8f be 8f bf 90 c0 91 c1 92 c2 92 c3 93 c4 94 c5 95 c6 95 c7 96 c8 97 c9 98 ca 98 cb 99 cc 9a cd 9b ce 9b cf 9c d0 9d d1 9e d2 9e d3 9f d4 a0 d5 a1 d6 a1 d7 a2 d8 a3 d9 a4 da a4 db a5 dc a6 dd a7 de a7 df a8 e0 a9 e1 aa e2 aa e3 ab e4 ac e5 ad e6 ad e7 ae e8 af e9 b0 ea b0 eb b1 ec b2 ed b3 ee b3 ef b4 f0 b5 f1 b6 f2 b6 f3 b7 f4 b8 f5 b9 f6 b9 f7 ba f8 bb f9 bc fa bc fb bd fc be fd bf fe c0 ff 62 38 01

最佳答案

查看完整内容[请看2#楼]

USMART设计初衷,不是用来接收你这些一堆堆的16进制数据的。 设计初衷是用来调用函数,方便调试的。 你发这么多16进制数据,很可能是串口接收buf溢出,导致的硬件错误。和usmart无关。 usmart接收16进制的唯一用处,就是完成16进制数据转换成十进制数据,但是仅限一个16进制数据,而不是你这样,发几千个过去。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-17 16:51:12 | 显示全部楼层
USMART设计初衷,不是用来接收你这些一堆堆的16进制数据的。
设计初衷是用来调用函数,方便调试的。
你发这么多16进制数据,很可能是串口接收buf溢出,导致的硬件错误。和usmart无关。
usmart接收16进制的唯一用处,就是完成16进制数据转换成十进制数据,但是仅限一个16进制数据,而不是你这样,发几千个过去。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-17 17:13:14 | 显示全部楼层
是不是数组资源使用时,下标超出范围了.做一个下标限制试试.
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-4-5
在线时间
6 小时
 楼主| 发表于 2017-4-18 09:44:47 | 显示全部楼层
估计楼上没看懂啥意思
我是说使用usmart组件时,发送上面那么一段数据会造成STM32进入硬件中断
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-4-5
在线时间
6 小时
 楼主| 发表于 2017-4-19 08:59:53 | 显示全部楼层
有人验证过吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-19 21:24:36 | 显示全部楼层
截屏我看看,你怎么设置的?
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-4-5
在线时间
6 小时
 楼主| 发表于 2017-4-20 16:00:04 | 显示全部楼层
正点原子 发表于 2017-4-19 21:24
截屏我看看,你怎么设置的?

操作流程和截图见附件Word文档

usmart bug.rar

153.75 KB, 下载次数: 230

回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-4-5
在线时间
6 小时
 楼主| 发表于 2017-4-21 09:50:44 | 显示全部楼层
正点原子 发表于 2017-4-17 16:51
USMART设计初衷,不是用来接收你这些一堆堆的16进制数据的。
设计初衷是用来调用函数,方便调试的。
你发 ...

void USmart_IRQ_Receive(u8 dat) //½ÓÊÕµ½OD OA²ÅÓлظ´
{
        u8 res;       
#if SYSTEM_SUPPORT_OS                 //Èç¹ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS.
        OSIntEnter();   
#endif

        res=dat;
        if((USART_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É
        {
                if(USART_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d
                {
                        if(res!=0x0a)USART_RX_STA=0;//½ÓÊÕ´íÎó,ÖØÐ¿ªÊ¼
                        else USART_RX_STA|=0x8000;        //½ÓÊÕÍê³ÉÁË
                }else //»¹Ã»ÊÕµ½0X0D
                {       
                        if(res==0x0d)USART_RX_STA|=0x4000;
                        else
                        {
                                USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
                                USART_RX_STA++;
                                if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ¼½ÓÊÕ          
                        }                 
                }
        }                                                                                                

#if SYSTEM_SUPPORT_OS         //Èç¹ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS.
        OSIntExit();                                                                                           
#endif
}
你的这个函数里面是有做下标限制的,buf不可能溢出吧,就算是buf溢出那也是bug啊,希望你们能改一下,usmart还是很好用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 23:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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