for(i=0;i<3;i++) memcpy(&temppw[0] , &(RxFrm->UDat.Dat[44+4*i]) , 4); temppw[1] = tempis/tempib; temppw[1] = (temppw[1] *temppw[0])/10; fnRN7302_Read( 0x000B+ i , (u8 *)&temppw[0] , 4 ) ; ADErr=((float)temppw[0]-(float)temppw[1])/temppw[1]; ADErr=((-ADErr)/(1+ADErr)); if(ADErr>0) Dl645FirmPara.IGain[i]=(u16)(ADErr*32768); else Dl645FirmPara.IGain[i] = (u16)(65535 + ADErr*32768); fnRN7302_Write(GSIA+i,(u8 *)&Dl645FirmPara.IGain[i],2); } fnDl645File_Write(Dl645FileId_FirmPara,48,(u8 *)&Dl645FirmPara.IGain[0],8);代码解析
时间: 2023-10-28 17:04:32 浏览: 137
UART-fifo-memcpy.rar_S32400A使用FIFO_S3c2440 uart
这段代码看起来也是C语言编写的,主要是针对某些电力仪表的数据处理。下面是对代码的分析:
1. for(i=0;i<3;i++):循环3次,每次执行一次循环体中的代码。
2. memcpy(&temppw[0], &(RxFrm->UDat.Dat[44+4*i]), 4):将接收到的数据帧中44+4i号字节之后的4个字节复制到以temppw为首地址的内存空间中。
3. temppw[1] = tempis/tempib:将变量tempis除以变量tempib的结果赋值给temppw[1]。
4. temppw[1] = (temppw[1] * temppw[0])/10:将temppw[1]乘以temppw[0]并除以10,结果重新赋值给temppw[1]。
5. fnRN7302_Read(0x000B+i, (u8 *)&temppw[0], 4):从某个设备(具体是哪个设备需要参考函数fnRN7302_Read的实现)中读取4个字节的数据,存储到以temppw为首地址的内存空间中。
6. ADErr=((float)temppw[0]-(float)temppw[1])/temppw[1]:将temppw[0]减去temppw[1],并除以temppw[1],结果赋值给ADErr。
7. ADErr=((-ADErr)/(1+ADErr)):将ADErr取反并除以1+ADErr,结果重新赋值给ADErr。
8. if(ADErr>0) Dl645FirmPara.IGain[i]=(u16)(ADErr*32768);else Dl645FirmPara.IGain[i]=(u16)(65535+ADErr*32768):如果ADErr大于0,则将ADErr乘以32768并转换成u16类型,结果赋值给Dl645FirmPara.IGain[i];否则将ADErr乘以32768并加上65535,结果转换成u16类型,赋值给Dl645FirmPara.IGain[i]。
9. fnRN7302_Write(GSIA+i, (u8 *)&Dl645FirmPara.IGain[i], 2):将Dl645FirmPara.IGain[i]的值写入某个设备(具体是哪个设备需要参考函数fnRN7302_Write的实现)中。
10. fnDl645File_Write(Dl645FileId_FirmPara, 48, (u8 *)&Dl645FirmPara.IGain[0], 8):将Dl645FirmPara.IGain数组中第0个元素开始的8个字节写入某个文件中的指定位置。
阅读全文