can接收函数最后释放邮箱,数据岂不是没保存?
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage){
/* Check the parameters */
assert_param(IS_CAN_ALL_PERIPH(CANx));
assert_param(IS_CAN_FIFO(FIFONumber));
/* Get the Id */
RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox.RIR;
if (RxMessage->IDE == CAN_Id_Standard)
{
RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox.RIR >> 21);
}
else
{
RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox.RIR >> 3);
}
RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox.RIR;
/* Get the DLC */
RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox.RDTR;
/* Get the FMI */
RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDTR >> 8);
/* Get the data field */
RxMessage->Data = (uint8_t)0xFF & CANx->sFIFOMailBox.RDLR;
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDLR >> 8);
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDLR >> 16);
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDLR >> 24);
RxMessage->Data = (uint8_t)0xFF & CANx->sFIFOMailBox.RDHR;
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDHR >> 8);
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDHR >> 16);
RxMessage->Data = (uint8_t)0xFF & (CANx->sFIFOMailBox.RDHR >> 24);
/* Release the FIFO */
/* Release FIFO0 */
if (FIFONumber == CAN_FIFO0)
{
CANx->RF0R |= CAN_RF0R_RFOM0;
}
/* Release FIFO1 */
else /* FIFONumber == CAN_FIFO1 */
{
CANx->RF1R |= CAN_RF1R_RFOM1;
}
}
这句话
CANx->RF0R |= CAN_RF0R_RFOM0;
是释放邮箱,接收数据是放在邮箱中的,并没有读取,那这样不是把数据给释放掉了,这样理解对不对?
http://bbs.21ic.com/attachments/month_1111/11113020104017de7271e28e9d.png
RE:can接收函数最后释放邮箱,数据岂不是没保存?
RxMessage->Data ,这里把数据读取走了。RxMessage->StdId ,这里把ID取走了。
回复:can接收函数最后释放邮箱,数据岂不是没保存?
回复第 2 楼 于2011-11-30 12:57:38发表:RxMessage->Data ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。
那邮箱和RxMessage什么关系?
回复:can接收函数最后释放邮箱,数据岂不是没保存?
回复第 2 楼 于2011-11-30 12:57:38发表:RxMessage->Data ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。
那邮箱和RxMessage什么关系?
RE:can接收函数最后释放邮箱,数据岂不是没保存?
FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。回复:can接收函数最后释放邮箱,数据岂不是没保存?
这个数据是你老大自己保存的,你爱怎么弄都可以。读出数据后,就是你自己处理了。回复:can接收函数最后释放邮箱,数据岂不是没保存?
回复第 5 楼 于2011-11-30 14:02:31发表:FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。
接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?
回复:can接收函数最后释放邮箱,数据岂不是没保存?
回复第 5 楼 于2011-11-30 14:02:31发表:FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。
接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?
RE:can接收函数最后释放邮箱,数据岂不是没保存?
你可以在网上搜索一下对于FIFO的介绍
页:
[1]