邮箱发送
2016-06-28 21:15
190 查看
其中函数HW_EscWriteMbxMem就是写‘len’长度的字节从应用程序的缓存,由“pdata”指向的然后拷贝到ESC的邮箱空间,注意这里的sdo配置还是通过邮箱的方式配置的。
概念,邮箱的处理与协议上面之间是完全分开的,协议可以不顾邮箱的实现。
<a target=_blank href="http://blog.csdn.net/huangxianxinalice/article/details/9356307">http://blog.csdn.net/huangxianxinalice/article/details/9356307</a>
///////////////////////////////////////////////////////////////////////////////////////// /** \param pMbx 指针指向发送给主站的邮箱命令. \brief 这个函数拷贝数据到发送邮箱. *//////////////////////////////////////////////////////////////////////////////////////// UINT8 MBX_CopyToSendMailbox( TMBX MBXMEM *pMbx ) { if ( (nAlStatus & STATE_MASK) == STATE_INIT) { /* 从站如果在INIT状态,邮箱服务是被禁止的 */ return( ERROR_INVALIDSTATE ); } if ( !bMbxRunning ) { /* 从站如果在INIT状态,邮箱服务是被禁止的 */ return( ERROR_INVALIDSTATE ); } if ( bSendMbxIsFull ) { /* 邮箱服务不能被发送因为发送邮箱已满 */ return MBXERR_NOMOREMEMORY; } else { /* 变量mbxSize包含被发送的邮箱数据大小 */ UINT16 mbxSize = pMbx->MbxHeader.Length; HW_EscWriteMbxMem((UINT8 *)pMbx, u16EscAddrSendMbx, (mbxSize + MBX_HEADER_SIZE)); { /*读SM1的控制和状态字,检查缓存是否仍然被标记为空*/ VARVOLATILE UINT8 smstate = 0x00; HW_EscReadByte(smstate,(ESC_SYNCMAN_STATUS_OFFSET + SYNCMAN_REG_SIZE)); #endif <span style="white-space: pre;"> </span>/* 写最后的字节来出发邮箱满符号位,如果已经读到SM的邮箱缓存满,则不需要设置符号位*/ if(!(smstate & SM_STATUS_MBX_BUFFER_FULL)) { u8dummy = 0; HW_EscWriteByte(u8dummy,(u16EscAddrSendMbx + u16SendMbxSize - 1)); } #if !MAILBOX_QUEUE // 如果它不为0的时候,就返回buffer值 if ( pMbx != psWriteMbx && psWriteMbx != 0 ) { /* MBX_MailboxSendReq 将会被调用,当buffer不等于asMbx[0]和asMbx[1], 所以,邮箱响应需要被拷贝用来重复 */ MBXMEMCPY(psWriteMbx, pMbx, mbxSize + MBX_HEADER_SIZE); pMbx = psWriteMbx; } #endif /* 保存最后的发送邮箱服务用来存储一个可能的重复的缓存包括最后一个发送服务 另外一个实际的服务将会被发送(psReadMbx),没有可用的缓存给邮箱接收服务,, 直到最后一个发送缓存被主站读,在INIT2PREOP之后,异常提示这里没有最后一个发送的服务 */ if ( psReadMbx ) psWriteMbx = NULL; else { /* only the first time after the INIT2PREOP-transition */ psWriteMbx = &asMbx[1]; } // HBu 17.06.06: psRepeatMbx was already updated in MBX_MailboxReadInd // psRepeatMbx = psReadMbx; psReadMbx = pMbx; /* set flag that send mailbox is full now */ bSendMbxIsFull = TRUE; return 0; } }
其中函数HW_EscWriteMbxMem就是写‘len’长度的字节从应用程序的缓存,由“pdata”指向的然后拷贝到ESC的邮箱空间,注意这里的sdo配置还是通过邮箱的方式配置的。
概念,邮箱的处理与协议上面之间是完全分开的,协议可以不顾邮箱的实现。
相关文章推荐
- java图书系统管理
- 百度PRNN:增强GPU伸缩性,RNN训练最高提速30倍
- CF 632E Thief in a Shop
- GOF23种设计模式精解
- fmt:formatDate的输出格式详解
- svn--命令
- JS编程最佳实践
- ACM--DP--HDOJ 1005--Number Sequence
- 浅谈JS继承
- ACM_欧拉函数(eular) 及其引申性质
- Linux基础网络设置
- Nvidia显卡对应的计算能力(List of Nvidia graphics processing units)
- 邮箱处理
- 李洪强iOS开发OC[001]-NSLog函数的使用方法
- Perl中的正则
- Leetcode 117. Populating Next Right Pointers in Each Node II
- ListView中点选RadioButton的解决方案
- Android 4.4 图形架构
- Eclipse下开发java,maven项目跟非maven项目互转,源文件夹设置
- redis 事务