chenzongxi 发表于 2011-11-30 20:37:25

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

发表于 2011-11-30 20:57:38

RE:can接收函数最后释放邮箱,数据岂不是没保存?

RxMessage->Data ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。

chenzongxi 发表于 2011-11-30 21:22:14

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 2 楼 于2011-11-30 12:57:38发表:
RxMessage->Data ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。 

那邮箱和RxMessage什么关系?

chenzongxi 发表于 2011-11-30 21:22:28

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 2 楼 于2011-11-30 12:57:38发表:
RxMessage->Data ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。 

那邮箱和RxMessage什么关系?

发表于 2011-11-30 22:02:31

RE:can接收函数最后释放邮箱,数据岂不是没保存?

FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。

火雷达 发表于 2011-12-1 00:24:53

回复:can接收函数最后释放邮箱,数据岂不是没保存?

这个数据是你老大自己保存的,你爱怎么弄都可以。读出数据后,就是你自己处理了。

chenzongxi 发表于 2011-12-1 09:31:18

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 5 楼 于2011-11-30 14:02:31发表:
FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。 

接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?

chenzongxi 发表于 2011-12-1 09:28:47

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 5 楼 于2011-11-30 14:02:31发表:
FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。 

接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?

发表于 2011-12-1 09:45:04

RE:can接收函数最后释放邮箱,数据岂不是没保存?

你可以在网上搜索一下对于FIFO的介绍
页: [1]
查看完整版本: can接收函数最后释放邮箱,数据岂不是没保存?