单步调试时候发生HardFault_Handler

2019-07-21 06:11发布

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,希望有经验的前辈指点一下,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
yklstudent
1楼-- · 2019-07-21 08:19
PINS_ACT_FRAME SendData;
这个就是定义了一个指针,没指向任何实体,运行肯定有问题
yklstudent
2楼-- · 2019-07-21 12:00
 精彩回答 2  元偷偷看……
美丽的时光机器
3楼-- · 2019-07-21 17:13
漏了一个关键的声明,在这里补充说明一下,PINS_ACT_FRAME SendData;是下面这样的结构体类型
typedef struct _INS_ACT_FRAME
{
    .......
}INS_ACT_FRAME,*PINS_ACT_FRAME;
美丽的时光机器
4楼-- · 2019-07-21 22:39
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开头的都是结构体指针类型
美丽的时光机器
5楼-- · 2019-07-22 04:25
yklstudent 发表于 2018-11-16 14:33
PINS_ACT_FRAME SendData;
这个就是定义了一个指针,没指向任何实体,运行肯定有问题

要malloc一块内存给它对吗??或者指向NULL???
yklstudent
6楼-- · 2019-07-22 06:38
美丽的时光机器 发表于 2018-11-16 14:44
要malloc一块内存给它对吗??或者指向NULL???

定义为变量就可以了,INS_ACT_FRAME替换掉PINS_ACT_FRAME就可以了

一周热门 更多>