在主函数里初始化数组
int main (void)
{
u8 savl;
u8 TimeNumber[7]={3,3,3,3,3,3,3};
u32 j=0;
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
// AT24CXX_Init(); //IIC初始化
// FSMC_SRAM_Init(); //外部静态存储器初始化
// SPI_Flash_Init(); //初始化FM25H20
RS485_Init(115200);
Defaultspec=6; //有256套规范,默认为0,取值0~255
while(1)
{
if(j%300==0)
{
// SendWriteSingleCommand(0X10,0X00);
// savl=ReceiveWriteSingleData();
// SendReadWeldingHistoryCommand(0X01);//读焊接历史
// delay_ms(100); //一定要加延时
// savl=ReceiveWeldingHistoryData();
// SendReadFaultHistoryCommand(0X00);//读故障历史
// delay_ms(100);//一定要加延时
// savl=ReceiveFaultHistoryData();
// SendReadWeldingRecordsCommand(0XFFFF,31); //读焊接过程记录
// delay_ms(10);//一定要加延时
// savl=ReceiveWeldingRecordsData();
// printf("Length is:%d",sizeof(TimeData)); //值为7
SendReadWriteTimeCommand(1,TimeNumber);
delay_ms(20);
SendReadWriteTimeCommand(0,0);
delay_ms(20);
savl=ReceiveReadWriteTimeData();
if(savl==0)
{
printf("\n\r485测试成功,OK!");
}
j=0;
}
j++;
if(j%10==0)
{
LED3=!LED3;
delay_ms(100);
}
}
}
传参之函数
void SendReadWriteTimeCommand(u8 TimeCommand , u8 TimeNumber[] )
{
u16 crcData;
u8 i,length;
MODBUS_SEND_SBUF[0] = baseAddress;//地址
MODBUS_SEND_SBUF[1] = 0X44;//功能码
MODBUS_SEND_SBUF[2] = TimeCommand;
if(TimeCommand==0)
{
crcData = crc16(MODBUS_SEND_SBUF,3);
MODBUS_SEND_SBUF[3] = crcData & 0xff; // CRC代码低位在前
MODBUS_SEND_SBUF[4] = crcData >> 8; //高位在后
RS485_Send_Data(MODBUS_SEND_SBUF,5);
}
else
{
delay_ms(5);
length = sizeof(TimeNumber); //为什么输出的长度是4呢?
for(i=0;i<length ;i++)
{
MODBUS_SEND_SBUF[3+i] = TimeNumber;
printf("\n\r%d\n\r",TimeNumber);
}
crcData = crc16(MODBUS_SEND_SBUF,length+3);
MODBUS_SEND_SBUF[length+3] = crcData & 0xff; // CRC代码低位在前
MODBUS_SEND_SBUF[length +4] = crcData >> 8; //高位在后
RS485_Send_Data(MODBUS_SEND_SBUF,length+5);
}
// MODBUS_SEND_SBUF[3] = RecordPointer&0XFF;
// MODBUS_SEND_SBUF[4] = RecordNumber;
//
}
数组长度怎么会变呢?可能什么影响的呢?
|