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,希望有经验的前辈指点一下,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个就是定义了一个指针,没指向任何实体,运行肯定有问题
typedef struct _INS_ACT_FRAME
{
.......
}INS_ACT_FRAME,*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开头的都是结构体指针类型
要malloc一块内存给它对吗??或者指向NULL???
定义为变量就可以了,INS_ACT_FRAME替换掉PINS_ACT_FRAME就可以了
一周热门 更多>