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

查看: 6464|回复: 8

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

[复制链接]

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-11-30 20:37:25 | 显示全部楼层 |阅读模式
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;
是释放邮箱,接收数据是放在邮箱中的,并没有读取,那这样不是把数据给释放掉了,这样理解对不对?
 
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-11-30 20:57:38 | 显示全部楼层

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

RxMessage->Data[0] ,这里把数据读取走了。
RxMessage->StdId ,这里把ID取走了。
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-11-30 21:22:14 | 显示全部楼层

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

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

那邮箱和RxMessage什么关系?
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-11-30 21:22:28 | 显示全部楼层

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

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

那邮箱和RxMessage什么关系?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-11-30 22:02:31 | 显示全部楼层

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

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

使用道具 举报

3

主题

185

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-12-1 00:24:53 | 显示全部楼层

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

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

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-12-1 09:31:18 | 显示全部楼层

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

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

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

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-12-1 09:28:47 | 显示全部楼层

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

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

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

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-12-1 09:45:04 | 显示全部楼层

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

你可以在网上搜索一下对于FIFO的介绍
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版