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,希望有经验的前辈指点一下,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
GenActFrame(&SendData);
我还是用的指针做参数,这样快一些,现在已经弄好了,malloc一块内存给它,用完后再释放就好啦,不过你的回答也提醒了我,还提供了另外的方案,谢谢了~
已经弄好啦
是的 我就是对于指针的使用不太熟练导致的,指针没有分配一块内存给它指向就访问错了
一周热门 更多>