Board logo

标题: [求助]定义出错,怎么回事 [打印本页]

作者: ezekyal    时间: 2007-4-26 08:56     标题: [求助]定义出错,怎么回事

void main(void)
{
CAN1_Init();

CAN1_SendFrame(MessageID,FrameType,FrameFormat,Length,Data);

while(!CAN1RFLG_RXF);
CAN1_ReadFrame(MessageID,FrameType,FrameFormat,Length,Data);
return ERR_OK;
}

以上是主程序
在主程序前面应该是定义实参,但我怎么定义,CODEWARRIOR都提示我有错.估计问题出在参数定义上.版主能否给看看怎么定义啊?

下面是接收程序和发送程序.
byte CAN1_ReadFrame(dword *MessageID,byte *FrameType,byte *FrameFormat,byte *Length,byte *Data)
{
byte i; /* Temporary variable */
dword ID; /* Temporary variable */

ID = *(dword *)&CAN1RXIDR0; /* Read the identification of the received message */
if ((CAN1RXIDR1 & 8)) { /* Is the received message "extended frame" */
ID = ( ((ID >> 1) & 0x0003FFFF) | ((ID >> 3) & 0xFFFC0000) ); /* Result the identification */
*FrameType = (CAN1RXIDR3 & 1)? REMOTE_FRAME : DATA_FRAME; /* Result the frame type */
} else { /* Message is "standard frame" */
ID >>= 21; /* Result the identification */
*FrameType = (CAN1RXIDR1 & 16)? REMOTE_FRAME : DATA_FRAME; /* Result the frame type */
}
*MessageID = ID; /* Result the identification */
*FrameFormat = (CAN1RXIDR1 & 8)? EXTENDED_FORMAT : STANDARD_FORMAT; /* Result the frame type */
*Length = CAN1RXDLR & 15; /* Result length of the message */
if (*FrameType == DATA_FRAME) { /* Is frame "data frame" */
for(i=0; i<*Length; i++)
Data = *((byte *)&CAN1RXDSR0 + i); /* Return received data */
}
return ERR_OK; /* OK */
}

 

byte CAN1_SendFrame(byte BufferNum,dword MessageID,byte FrameType,byte Length,byte *Data)
{
byte i; /* Temorary variables */
byte bufmask=((word)1 << BufferNum); /* Buffer mask */

if ( (BufferNum > 2) || (Length > 8) ) /* Is BufferNum greater than 2 or Length greater than 8?*/
return ERR_VALUE; /* If yes then error */
if (FrameType > REMOTE_FRAME) /* Is FrameType other than REMOTE_FRAME or DATA_FRAME */
return ERR_VALUE; /* If yes then error */
if (!(CAN1TFLG & bufmask)) /* Is the transmit buffer full? */
return ERR_TXFULL; /* If yes then error */
CAN1TBSEL = bufmask; /* Find any empty transmit buffer */
if (MessageID <= EXTENDED_FRAME_ID) /* Is it the standard frame? */
*(dword *)&CAN1TXIDR0 = (MessageID << 21); /* Sets the message as "standard" */
else
*(dword *)&CAN1TXIDR0 = ( ((MessageID << 1) & 0x0007FFFF) | ((MessageID << 3) & 0xFFE00000) ) | 0x00080000; /* Set the message as "extended" */
if (FrameType == DATA_FRAME) { /* Is it a data frame? */
for(i=0; i *((byte *)&CAN1TXDSR0 + i) = Data; /* Store data to the transmit register */
if (MessageID <= EXTENDED_FRAME_ID) /* Is it the standard frame? */
CAN1TXIDR1 &= 239; /* If yes then set the standard message type as "data frame" */
else
CAN1TXIDR3 &= 254; /* If no then set the extended message type as "data frame" */
}
else { /* Remote frame */
if (MessageID <= EXTENDED_FRAME_ID) /* Is it the standard frame? */
CAN1TXIDR1 |= 16; /* If yes then set the standard message type as "remote frame" */
else
CAN1TXIDR3 |= 1; /* If yes then set the extended message type as "remote frame" */
}
CAN1TXDLR = Length; /* Set the length of the message */
CAN1TXTBPR = 0; /* Set the priority (high) */
CAN1TFLG = bufmask; /* Start transmission */
return ERR_OK; /* OK */
}

[此贴子已经被作者于2007-4-26 8:56:38编辑过]


作者: strongchen    时间: 2007-4-26 09:49

把整个project打包贴出来吧。
作者: ezekyal    时间: 2007-4-26 15:08

http://bbs.chinaecnet.com/uploadImages/MotorCan.rar
真不知道怎么改了.请版主改改一下看.
想在这方面学到点东西,碍于资料太少,裹足不前啊.
作者: strongchen    时间: 2007-4-26 17:02

你是说CPU的BEAN的错误吗?如同所示,把ROM_C000的大小改为0x3F00即可:

[upload=image/pjpeg]uploadImages/cpu_bean.jpg[/upload]




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0