OpenEdv-开源电子网

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

单步调试时候发生HardFault_Handler

[复制链接]

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-11-16 14:14:29 | 显示全部楼层 |阅读模式
2金钱
1.问题描述:上位机下发一条命令时候我想组一包应答帧给它,于是我就写了下面这样的函数来实现
void GenActFrame(PINS_ACT_FRAME pInsData)
{
    uint8_t CRC;

    pInsData->StdHeader->head.header1  = FRAME_INS_HEAD1;        
    pInsData->StdHeader->head.header2  = FRAME_INS_HEAD2;        
    pInsData->StdHeader->length             = FRAME_LENGTH;           
    pInsData->StdHeader->insType           = FRAME_ACK_TYPE;         
    pInsData->ActCmd->Cmd                   = INS_CMD->Cmd;               
    pInsData->ActCmd->SubCmd              = INS_CMD->SubCmd;            
    pInsData->FrameIndex.index1             = FRAME_INS_INDEX1;                 
    pInsData->FrameIndex.index2             = FRAME_INS_INDEX2;                 
    pInsData->Status                               = 0x00;                       
    pInsData->PraseRst                            = 0x01;                          
    pInsData->CtrStatus                           = 0x00;                       

    CRC = CalCheckSum(pInsData);
    pInsData->InsCRC = CRC;
}

2.我定义了这样的一个类型的数据
PINS_ACT_FRAME SendData;
3.调用
GenActFrame(SendData);//调用这句的时候仅仅是生成了数据包,我并没有将它发到上位机调试工具。
当我没有进入调试模式时候,运行正常,可以循环收到数据,也看到板子上的对应动作了,可以控制状态灯的亮和灭(已经重复多次没问题)。
但是当我进入调试模式想看看数据包有没有生成,把断点打在GenActFrame(SendData);这个函数调用时候,跳到函数里面去,单步执行后就跳到HardFault_Handler了。
4.疑问
(1)我函数这么写语法有问题吗,比如指针作为参数?
(2)为什么正常调用可以运行,单步调试时候出现了HardFault_Handler,希望有经验的前辈指点一下,谢谢。

最佳答案

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

PINS_ACT_FRAME SendData; 这个就是定义了一个指针,没指向任何实体,运行肯定有问题
没有脑袋
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-11-16 14:14:30 | 显示全部楼层
PINS_ACT_FRAME SendData;
这个就是定义了一个指针,没指向任何实体,运行肯定有问题
一分耕耘一分收获。
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-11-16 14:16:52 | 显示全部楼层
PINS_ACT_FRAME pInsData
PINS_ACT_FRAME 是怎么定义的
一分耕耘一分收获。
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 14:17:09 | 显示全部楼层
漏了一个关键的声明,在这里补充说明一下,PINS_ACT_FRAME SendData;是下面这样的结构体类型
typedef struct _INS_ACT_FRAME
{
    .......
}INS_ACT_FRAME,*PINS_ACT_FRAME;
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 14:23:30 | 显示全部楼层
yklstudent 发表于 2018-11-16 14:16
PINS_ACT_FRAME pInsData
PINS_ACT_FRAME 是怎么定义的

typedef struct _INS_ACT_FRAME
{
    PFRAME_STD_HEADER StdHeader;
    PFRAME_INS_CMD    ActCmd;
    INS_INDEX         FrameIndex;
    uint8_t           Status;
    uint8_t           PraseRst;
    uint8_t           CtrStatus;
    uint8_t           InsCRC;
}INS_ACT_FRAME,*PINS_ACT_FRAME;
以上P开头的都是结构体指针类型
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 14:44:42 | 显示全部楼层
yklstudent 发表于 2018-11-16 14:33
PINS_ACT_FRAME SendData;
这个就是定义了一个指针,没指向任何实体,运行肯定有问题

要malloc一块内存给它对吗??或者指向NULL???
没有脑袋
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-11-16 14:55:24 | 显示全部楼层
美丽的时光机器 发表于 2018-11-16 14:44
要malloc一块内存给它对吗??或者指向NULL???

定义为变量就可以了,INS_ACT_FRAME替换掉PINS_ACT_FRAME就可以了
一分耕耘一分收获。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-11-16 16:44:21 | 显示全部楼层
hardfault错误就是内存访问出错,一般数组越界,野指针操作
回复

使用道具 举报

8

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
686
金钱
686
注册时间
2017-8-8
在线时间
494 小时
发表于 2018-11-16 17:21:47 | 显示全部楼层
INS_ACT_FRAME SendData;
GenActFrame(&SendData);
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 17:56:42 | 显示全部楼层
yklstudent 发表于 2018-11-16 14:55
定义为变量就可以了,INS_ACT_FRAME替换掉PINS_ACT_FRAME就可以了

我还是用的指针做参数,这样快一些,现在已经弄好了,malloc一块内存给它,用完后再释放就好啦,不过你的回答也提醒了我,还提供了另外的方案,谢谢了~
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 17:57:21 | 显示全部楼层
Arya 发表于 2018-11-16 17:21
INS_ACT_FRAME SendData;
GenActFrame(&SendData);

已经弄好啦
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-11-16 17:58:09 | 显示全部楼层
szczyb1314 发表于 2018-11-16 16:44
hardfault错误就是内存访问出错,一般数组越界,野指针操作

是的  我就是对于指针的使用不太熟练导致的,指针没有分配一块内存给它指向就访问错了
没有脑袋
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4370
金钱
4370
注册时间
2017-5-30
在线时间
579 小时
发表于 2018-12-31 18:28:20 | 显示全部楼层
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2019-1-3 16:44:23 | 显示全部楼层
whj467467274672 发表于 2018-12-31 18:28
https://github.com/armink/CmBacktrace试试这个

好的   谢谢你
没有脑袋
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 23:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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