📄 my_can.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name: CANRcv_snd.c
** Last modified Date: 2007.01.18
** Last Version: 1.0
** Description: CAN 通信程序
**
**--------------------------------------------------------------------------------------------------------
** Created By: 曾维勇
** Created date: 2007.09.16
** Version: 1.0
** Descriptions: The original version 初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
** Version: 1.1
** Description: The second version 第二版
**
*********************************************************************************************************/
#include "config.h"
/*********************************************************************************************************
声明全局变量
*********************************************************************************************************/
/*********************************************************************************************************
** Function name: CreateCAN
** Descriptions: 创建一个节点信息结构体
** input parameters: *pCAN 指向节点结构的空指针
** ulChannelNr 节点通道号
** ulBaud 节点通信波特率
** ulRxMsgObj 节点接收数据MO
** ulTxMsgObj 节点发送数据MO
** *pReceBuff 节点接收数据缓冲区
** *pSendBuff 节点发送数据缓冲区
** output parameters: 无
** Returned value: 无
** Created By: 曾维勇
** Created date: 2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void CreateCAN (void *pCAN,tCANFrameBuff *pReceBuff, tCANFrameBuff *pSendBuff)
{
tCANNodeInfo *pCAN_Info;
pCAN_Info = (tCANNodeInfo *)pCAN;
pCAN_Info->pReceFrameBuff = pReceBuff;
pCAN_Info->pSendFrameBuff = pSendBuff;
return;
}*/ //将其屏蔽掉,因为没有用到,
/*********************************************************************************************************
** Function name: CAN_ucWriteBuffer
** Descriptions: 写帧接收缓冲区
** input parameters: *pBuf 指向接收缓冲区的指针
** *pWrite 写数据块指针
** output parameters: 无
** Returned value: FULL, 缓冲区已满
** NOT_FULL 缓冲区未满
** Created By: 曾维勇
** Created date: 2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned char CAN_ucWriteBuffer (void *pBuf, void *pWrite)
{
tCANFrameBuff xdata *pRecBuf;
static tCANFrame xdata *pWriteBuf;
pRecBuf = (tCANFrameBuff *)pBuf;
pWriteBuf = (tCANFrame *)pWrite;
if (pRecBuf->ucBufEmpty == FULL) { /* 接收缓冲区已满 */
return FULL;
}
pRecBuf->ucSize ++;
pRecBuf->ucBufFull = NOT_FULL;
pRecBuf->Buffer[pRecBuf->ucWrite] = *pWriteBuf; /* 向接收缓冲区写数据 */
pRecBuf->ucWrite = (pRecBuf->ucWrite + 1) % CAN_MAX_Buffer;
if (pRecBuf->ucSize == CAN_MAX_Buffer) { /* 接收缓冲区已满 */
pRecBuf->ucBufFull = FULL;
pRecBuf->ucBufEmpty = NOT_EMPTY;
return FULL;
}
return NOT_FULL;
}
/*********************************************************************************************************
** Function name: CAN_ucReadBuffer
** Descriptions: 读数据缓冲区
** input parameters: *pBuf 指向数据缓冲区指针
** *pRead 读数据块指针
** output parameters: 无
** Returned value: EMPTY , 缓冲区为空
** NOT_EMPTY, 缓冲区非空
** Created By: 曾维勇
** Created date: 2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
unsigned char CAN_ucReadBuffer (void *pBuf, void *pRead)
{
tCANFrameBuff xdata *pRecBuf;
tCANFrame xdata *pReadBuf;
pRecBuf = (tCANFrameBuff *)pBuf;
pReadBuf = (tCANFrame *)pRead;
if (pRecBuf->ucSize == 0 ) {//缓冲内没有数据
pRecBuf->ucBufEmpty = EMPTY;
pRecBuf->ucBufFull = NOT_FULL;
return EMPTY;
}
pRecBuf->ucSize --;
*pReadBuf = pRecBuf->Buffer[pRecBuf->ucRead];
pRecBuf->ucRead = (pRecBuf->ucRead + 1) % CAN_MAX_Buffer;
return NOT_EMPTY;
}
/*********************************************************************************************************
** Function name: InitCANController
** Descriptions: 初始化CAN控制器,设定波特率
** input parameters: *pCAN 指向节点的空指针
** output parameters: 无
** Returned value: 无
** Created By: 曾维勇
** Created date: 2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void InitCANController (void *pCAN)
{
pCAN=pCAN;
} */ //将其屏蔽掉,因为没有用到,
/*********************************************************************************************************
** Function name: SendBuffToBus
** Descriptions: 发送缓冲区数据至外部总线
** input parameters: *pCAN 指向节点结构的空指针
** output parameters: 无
** Returned value: 1 发送缓冲区不空,有可数据发送
** 0 发送缓冲区为空,无可发数据
** Created By: 曾维勇
** Created date: 2007.09.16
**--------------------------------------------------------------------------------------------------------
** Modified by: Ni Likao 倪力考
** Modified date: 2007.11.02
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*unsigned char SendBuffToBus (void *pCAN)
{
tCANFrame CANFrame;
tCANNodeInfo *pCAN_Info;
pCAN_Info = (tCANNodeInfo *)pCAN;
if (CAN_ucReadBuffer(pCAN_Info->pSendFrameBuff, &CANFrame) != EMPTY) {
SendCANFrame(pCAN_Info, &CANFrame);
return 1;
}
/*
* 发送一帧数据,启动缓冲区数据发送服务程序
*/
// return 0;
//} */
unsigned char SendBuffToBus (void *pCAN)
{
tCANFrame xdata CANFrame;
tCANFrameBuff * xdata pSendFrameBuff;
pSendFrameBuff=(tCANFrameBuff *)pCAN;
if (CAN_ucReadBuffer(pSendFrameBuff, &CANFrame) != EMPTY) {
SendCANFrame(pSendFrameBuff, &CANFrame);
return 1;
}
/*
* 发送一帧数据,启动缓冲区数据发送服务程序
*/
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -