主函数如下
int main(void)
{
float temp;
int sum;
delay_init(168);
//初始化 RTU模式 参数二:不用管,参数3:从机地址为1 参数4:9600 参数5:无效验
eMBInit(MB_RTU, 0x01, 0x01, 9600, MB_PAR_NONE);
//启动
LED_Init(); //初始化LED
LCD_Init(); //液晶初始化
Adc_Init(); //内部温度传感器ADC初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
eMBEnable();
p=(unsigned char*)&a;
while(1)
{
if(TRUE)
{
temp=Get_Temprate(); //得到温度值
sum=(int)temp;
if(sum<0)
{
sum=-sum;
usRegHoldingBuf[0]=sum;
printf("当前温度为:-%d",sum/100); //显示负号
}
else
{
usRegHoldingBuf[0]=sum;
printf("当前温度为:%d",sum/100); //无符号
}
printf("\r\n\r\n"); //插入换行
delay_ms(200);
(void)eMBPoll();
a++;
}
if(TRUE)
{
eMBRegHoldingCB(p,1,8,MB_REG_WRITE );
(void)eMBPoll();
a++;
}
}
}
现在用modbus poll读取温度数据出现了如下图的问题,每三秒会报错一次,其余两秒可以正常读取
后来怀疑是printf导致的冲突,于是把程序里所有的printf删除,结果poll里面直接timeout。程序里一共5个printf,注释掉两个,每三秒报一次checksum error;注释掉三个,每六秒报一次;注释掉四个,每我秒报两次。
求问这是什么原因导致的,以及如何修改。