你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
chenzongxi 提问时间:2011-11-30 20:37 /
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[FIFONumber].RIR;
  if (RxMessage->IDE == CAN_Id_Standard)
  {
    RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21);
  }
  else
  {
    RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3);
  }
  
  RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR;
  /* Get the DLC */
  RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR;
  /* Get the FMI */
  RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8);
  /* Get the data field */
  RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR;
  RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8);
  RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16);
  RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24);
  RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR;
  RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8);
  RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16);
  RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].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;
是释放邮箱,接收数据是放在邮箱中的,并没有读取,那这样不是把数据给释放掉了,这样理解对不对?
 
收藏 评论8 发布时间:2011-11-30 20:37

举报

8个回答
废鱼 回答时间:2011-11-30 20:57:38

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

RxMessage->Data[0] ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。
chenzongxi 回答时间:2011-11-30 21:22:14

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

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

那邮箱和RxMessage什么关系?
chenzongxi 回答时间:2011-11-30 21:22:28

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

回复第 2 楼 于2011-11-30 12:57:38发表:
RxMessage->Data[0] ,这里把数据读取走了。
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的介绍

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版