浏览代码

修改看门狗初始化位置,修改看门狗喂狗位置,修改双PT单开导致内存越界写问题。

liyi 1 年之前
父节点
当前提交
bbdd417577

+ 0 - 7
truing_control/PDU-AC_ADA_NEW_6/common/common.c

@@ -41,7 +41,6 @@ void read_config_from_eeprom(void)
 			//default write eeprom
 			board->write_eeprom_page(EEPROM_DEVICES_ADDR,(uint8_t *)&board->md_data.r_data.dev_chn,EEPROM_DEVICES_LENTH);
 			board->write_eeprom_page(EEPROM_STATUS_ADDR,(uint8_t *)&board->relay_staging_staus[0],2*RelaySlaveChaNum);
-			board->feed_dog();
 			for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
 			{
 				board->md_data.rw_data.open.delay_open[i]  	= (1+i) * 1000;
@@ -52,8 +51,6 @@ void read_config_from_eeprom(void)
 			iic_data chache={0};
 			for(uint8_t i = 0 ; i < MAX_ROW;i++){
 				board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache.data[0],CONSUM_PAGE);
-				board->feed_dog();
-				DelayNms(7);
 			}
 		}
 		{
@@ -70,7 +67,6 @@ void read_config_from_eeprom(void)
 					}
 				}
 			}
-			board->feed_dog();
 			board->read_eeprom_page(EEPROM_OTHER_ADDR,(uint8_t *)&board->md_data.rw_data.open.delay_open[0],sizeof(ac_rw_data_t));
 
 			for(uint8_t i = 0 ; i < RelaySlaveChaNum;i++)
@@ -81,7 +77,6 @@ void read_config_from_eeprom(void)
 			iic_data chache={0};
 			for(uint8_t i = 0 ; i < MAX_ROW;i++)
 			{
-				board->feed_dog();
 				board->read_eeprom_page(EEPROM_CONSUMER_ADDR + (CONSUM_PAGE*i),(uint8_t*)&chache,sizeof(iic_data));
 				if(board->con_da.index > chache.iic_con.recode_index1)
 				{
@@ -93,7 +88,6 @@ void read_config_from_eeprom(void)
 				}
 			}	
 			board->read_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*(board->con_da.row)),(uint8_t*)&chache,sizeof(iic_data));
-			board->feed_dog();
 			for(uint16_t i = 0 ; i < RelaySlaveChaNum;i++)
 			{
 					board->ele_restore[i] = chache.iic_con.iic_consumer[i];
@@ -110,7 +104,6 @@ void read_config_from_eeprom(void)
 				iic_data chache1={0};
 				board->con_da.index = 0;
 				for(uint8_t i = 0 ; i < MAX_ROW;i++){
-					board->feed_dog();
 					board->write_eeprom_page(EEPROM_CONSUMER_ADDR +(CONSUM_PAGE*i),(uint8_t*)&chache1,CONSUM_PAGE);
 					DelayNms(7);
 				}

+ 46 - 19
truing_control/PDU-AC_ADA_NEW_6/hardware/eeprom/eeprom.c

@@ -57,8 +57,8 @@ static void         eeprom_write(uint16_t w_addr,uint8_t *data,uint16_t lenth);
 static void         eeprom_read(uint16_t r_addr,uint8_t *data,uint16_t lenth);
 static void 				check_threshold(uint8_t in_out,uint8_t channel);
 
-static void 				eeprom_page_read(uint16_t addr,uint8_t *data,uint16_t lenth);
-static void         eeprom_write_page(uint16_t addr,uint8_t *data,uint16_t chuank);
+static uint8_t 				eeprom_page_read(uint16_t addr,uint8_t *data,uint16_t lenth);
+static uint8_t         eeprom_write_page(uint16_t addr,uint8_t *data,uint16_t chuank);
 static void 				eeprom_auto_page_write(uint16_t addr,uint8_t *data,uint16_t lenth);
 static void 				eeprom_auto_page_read(uint16_t addr,uint8_t *data,uint16_t lenth);
 static inline void iic_set_sda_input()
@@ -407,28 +407,32 @@ static void check_threshold(uint8_t in_out,uint8_t channel)
 		}
 	}
 }
-static void eeprom_page_read(uint16_t addr,uint8_t *data,uint16_t lenth)
+static uint8_t eeprom_page_read(uint16_t addr,uint8_t *data,uint16_t lenth)
 {
    if(lenth == 0 || lenth > PAGE_SIZE || ((addr % PAGE_SIZE) + lenth > PAGE_SIZE))
    {
-      return;
+      return 1;
    }
 	iic_start_signal();
 	if(USER_DEFINE_EEPROM_TYPE > AT24C16)
 	{
 		iic_send_byte(0XA0);
-		iic_wait_ack();
+	if(iic_wait_ack())
+		goto failed;
 		iic_send_byte(addr >> 8);
 	}else
 	{
 		iic_send_byte(0XA0 + ((addr / 256) << 1));
 	}
-	iic_wait_ack();
+	if(iic_wait_ack())
+		goto failed;
 	iic_send_byte(addr % 256);
-	iic_wait_ack();
+	if(iic_wait_ack())
+		goto failed;
 	iic_start_signal();
 	iic_send_byte(0XA1);
-	iic_wait_ack();
+	if(iic_wait_ack())
+		goto failed;
 	
 	for(int i = 0; i < lenth;i++)
 	{
@@ -442,35 +446,47 @@ static void eeprom_page_read(uint16_t addr,uint8_t *data,uint16_t lenth)
 	}
 	
 	iic_stop_signal();
+	
+	return 0;
+failed:
+	return 1;	
 }
 
-static void eeprom_write_page(uint16_t addr,uint8_t *data,uint16_t chuank)
+static uint8_t eeprom_write_page(uint16_t addr,uint8_t *data,uint16_t chuank)
 {
 	  if(chuank == 0 || chuank > PAGE_SIZE || ((addr % PAGE_SIZE) + chuank > PAGE_SIZE))
     {
-        return;
+        return 1;
     }
 
 	iic_start_signal();
 	if(USER_DEFINE_EEPROM_TYPE > AT24C16)
 	{
 		iic_send_byte(0XA0);
-		iic_wait_ack();
+		if(iic_wait_ack())
+			goto failed;
 		iic_send_byte(addr >> 8);
 	}else
 	{
 		iic_send_byte(0XA0 + ((addr / 256) << 1));
 	}
-	iic_wait_ack();
+	if(iic_wait_ack())
+		goto failed;
 	iic_send_byte(addr % 256);
-	iic_wait_ack();	
+	if(iic_wait_ack())
+		goto failed;
 	for(uint16_t i = 0; i < chuank;i++)
 	{
 		iic_send_byte(data[i]);
-		iic_wait_ack();
+		if(iic_wait_ack())
+			goto failed;
 	}
 	iic_stop_signal();
 	DelayNms(7);
+	
+	return 0;
+failed:
+	return 1;
 }
 
 
@@ -480,12 +496,19 @@ static void eeprom_auto_page_write(uint16_t addr,uint8_t *data,uint16_t lenth)
 {
     uint16_t remaining = lenth;
     uint8_t *p = data;
+		uint8_t count = 5;
     
     while(remaining > 0)
     {
         uint8_t chunk = PAGE_SIZE - (addr % PAGE_SIZE);
         if(chunk > remaining) chunk = remaining;
-        eeprom_write_page(addr, p,chunk);
+				do{
+					if(!eeprom_write_page(addr, p,chunk))
+					{
+						break;
+					}
+				}while(count--);
+
         addr += chunk;
         p += chunk;
         remaining -= chunk;
@@ -497,14 +520,18 @@ static void eeprom_auto_page_read(uint16_t addr,uint8_t *data,uint16_t lenth)
 {
     uint16_t remaining = lenth;
     uint8_t *p = data;
-    
+    uint8_t count = 5;
+	
     while(remaining > 0)
     {
         uint8_t chunk = PAGE_SIZE - (addr % PAGE_SIZE);
         if(chunk > remaining) chunk = remaining;
-        
-        eeprom_page_read(addr, p, chunk);
-         
+				do{
+					if(!eeprom_page_read(addr, p, chunk))
+					{
+						break;
+					}
+				}while(count--);          
         addr += chunk;
         p += chunk;
         remaining -= chunk;

+ 4 - 2
truing_control/PDU-AC_ADA_NEW_6/hardware/electricity/electricity.c

@@ -56,9 +56,11 @@ static void read_ele(uint8_t channel)
 		board->md_data.r_data.ac_ele.ele_info[channel].freq = F_AC_LINE_Freq * 1000;
 		board->md_data.r_data.ac_ele.ele_info[channel].factor = F_AC_PF * 1000;
 		elec[channel] += F_AC_E;
-		board->md_data.r_data.ac_ele.ele_info[channel].consumer = board->ele_restore[channel] + elec[channel] * 1000;
+		board->md_data.r_data.ac_ele.ele_info[channel].consumer = board->ele_restore[channel] + (uint32_t)(elec[channel] * 1000);
+		
+		
 
-		if(F_AC_V < 0.5)
+		if(F_AC_V < 1.0)
 		{
 			board->md_data.r_data.ac_ele.ele_info[channel].voltage = 0;
 			board->md_data.r_data.ac_ele.ele_info[channel].current = 0;

+ 46 - 13
truing_control/PDU-AC_ADA_NEW_6/hardware/hlw8110/Hlw8110.c

@@ -369,26 +369,59 @@ unsigned char Judge_CheckSum_HLW8110_Calfactor(void)
 
 void Init_HLW8110(void)
 {
-	Uart_HLW8110_WriteREG_EN();
-	DelayNms(10);
+
 	
 //电流通道A设置命令,指定当前用于计算视在功率、功率因数、相角、瞬时有功功率、瞬时视在功率和有功功率过载的信号指示 的通道为通道A	
-	Uart_HLW8110_Set_Channel_A();			
-	DelayNms(10);
-	Uart_Write_HLW8110_Reg(REG_SYSCON_ADDR,2,0x0a04);	//开启A通道,关闭B通道,电压通道PGA = 1,电流通道PGA = 16
-	DelayNms(10);
-	
+	for(int i = 0 ; i < 3 ;i++)
+	{
+		Uart_HLW8110_WriteREG_EN();
+		DelayNms(10);
+		Uart_HLW8110_Set_Channel_A();			
+		DelayNms(10);
+		Uart_Write_HLW8110_Reg(REG_SYSCON_ADDR,2,0x0a04);	//开启A通道,关闭B通道,电压通道PGA = 1,电流通道PGA = 16
+		DelayNms(10);
+		
 
-	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);	//1,使能PFA 脉冲输出和有功电能寄存器累加;
+		Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0001);	//1,使能PFA 脉冲输出和有功电能寄存器累加;
 //	Uart_Write_HLW8110_Reg(REG_EMUCON_ADDR,2,0x0018);	//正向和负向过零点均发生变化,ZXD0 = 1,ZXD1 = 1
-	Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);	//0x0001是EMUCON2的默认值,waveEn = 1,zxEn = 1,A通道电量寄存器,读后不清0,EPA_CB = 1;打开功率因素检测
-	DelayNms(10);
+		Uart_Write_HLW8110_Reg(REG_EMUCON2_ADDR,2,0x0065);	//0x0001是EMUCON2的默认值,waveEn = 1,zxEn = 1,A通道电量寄存器,读后不清0,EPA_CB = 1;打开功率因素检测
+		DelayNms(10);
 
 	
-	Uart_HLW8110_WriteREG_DIS();
+		Uart_HLW8110_WriteREG_DIS();
+		B_Read_Error = 0;
+		Check_WriteReg_Success();
+		if (B_Read_Error == 1)
+		{
+			DelayNms(50);
+		}else
+		{
+			break;
+		}
+	}
 //	DelayNms(3);	
   //读取地址是0x6F至0x77的寄存器,验证系数是否正确
-  Judge_CheckSum_HLW8110_Calfactor();	
+ // Judge_CheckSum_HLW8110_Calfactor();	
+	uint8_t d  = 0;
+	for(int i = 0;i < 3;i++)
+	{
+		d = Judge_CheckSum_HLW8110_Calfactor();
+		if(d)
+		{
+			break;
+		}
+	}
+	if(d == 0)
+	{
+		U16_RMSIAC_RegData		=	0xcad1;
+		U16_RMSIBC_RegData		=	0xcacf;
+		U16_RMSUC_RegData			=	0xa4c3;
+		U16_PowerPAC_RegData	=	0xab47;
+		U16_PowerPBC_RegData	=	0xab49;
+		U16_PowerSC_RegData		=	0xab41;
+		U16_EnergyAC_RegData	=	0xe9cc;
+		U16_EnergyBC_RegData	=	0xe9ce;		
+	}
 }
 
 
@@ -725,7 +758,7 @@ void Read_HLW8110_Angle(void)
 
 void Calculate_HLW8110_MeterData(void)
 {	
-	Check_WriteReg_Success();
+	//Check_WriteReg_Success();
 	
 	Read_HLW8110_IA();
 	Read_HLW8110_U();

+ 1 - 1
truing_control/PDU-AC_ADA_NEW_6/modbus/BARE/port/port.c

@@ -302,7 +302,7 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 												uint8_t count = 0;
 												if(WusNRegs >= RelaySlaveChaNum - start)
 												{
-													count = PT_SUB_COUNT - start;
+													count = RelaySlaveChaNum - start;
 												}else
 												{
 													count = WusNRegs;

文件差异内容过多而无法显示
+ 2650 - 79
truing_control/PDU-AC_ADA_NEW_6/prj/JLinkLog.txt


文件差异内容过多而无法显示
+ 162 - 144
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvguix.Gowon


+ 11 - 0
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvoptx

@@ -120,6 +120,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
+          <Name>嗪??</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -189,6 +190,16 @@
           <WinNumber>1</WinNumber>
           <ItemText>usRegHoldBuf</ItemText>
         </Ww>
+        <Ww>
+          <count>9</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>s_iTimDelayCnt</ItemText>
+        </Ww>
+        <Ww>
+          <count>10</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>elec</ItemText>
+        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>

+ 4 - 4
truing_control/PDU-AC_ADA_NEW_6/prj/ctrl_board.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>.\Objects\</OutputDirectory>
-          <OutputName>ctrl_board_new_8</OutputName>
+          <OutputName>ctrl_board_new_5</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
@@ -134,11 +134,11 @@
             <RunIndependent>0</RunIndependent>
             <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
             <Capability>1</Capability>
-            <DriverSelection>-1</DriverSelection>
+            <DriverSelection>4102</DriverSelection>
           </Flash1>
           <bUseTDR>1</bUseTDR>
           <Flash2>BIN\UL2V8M.DLL</Flash2>
-          <Flash3></Flash3>
+          <Flash3>"" ()</Flash3>
           <Flash4></Flash4>
           <pFcarmOut></pFcarmOut>
           <pFcarmGrp></pFcarmGrp>
@@ -322,7 +322,7 @@
             <PlainCh>0</PlainCh>
             <Ropi>0</Ropi>
             <Rwpi>0</Rwpi>
-            <wLevel>1</wLevel>
+            <wLevel>3</wLevel>
             <uThumb>0</uThumb>
             <uSurpInc>0</uSurpInc>
             <uC99>0</uC99>

+ 2 - 2
truing_control/PDU-AC_ADA_NEW_6/user/board_cfg.h

@@ -57,10 +57,10 @@
 #define 	PRJ_DC_8									0
 #define   PRJ_6_NEW                 0
 #define   PRJ_3_NEW                 0
-#define 	PRJ_5_NEW									0
+#define 	PRJ_5_NEW									1
 #define 	PRJ_4_SELF_LOCK       	  0
 #define   PRJ_4_BASE                0
-#define   PRJ_1_BASE                1
+#define   PRJ_1_BASE                0
 
 #if PRJ_8					
 	#define   POWER_TYPE                (POWER_AC)

+ 5 - 3
truing_control/PDU-AC_ADA_NEW_6/user/main.c

@@ -45,7 +45,6 @@ static void app_init(META_DATA_S *meta);
 int main(){
 	
 	InitSysTick();
-	fwdgt_Init();
 	led_init();
 	lock_init();
 	detection_init();
@@ -57,13 +56,14 @@ int main(){
 	query_init();
 	eMBInit(MB_RTU, ac_board.haddr, 0, 115200, MB_PAR_NONE);
 	eMBEnable();
-	ac_board.feed_dog();
+
 	//device
 	ac_board.md_data.r_data.dev_chn =   ACSingCurrid << 8 | RelaySlaveChaNum;   // DEIVECE(POWER_TYPE,INPUT_PT_NUM,ZERO_CONTRL,ZERO_CTRL_NUM,OUTPUT_CONTRL,RelaySlaveChaNum);
 	//
 	ac_board.md_data.r_data.info.channels = RelaySlaveChaNum;
 	read_config_from_eeprom();
-	ac_board.feed_dog();
+	fwdgt_Init();
+	
 	strcpy((char*)&(ac_board.md_data.r_data.info.date),__DATE__);
 	strcat((char*)&(ac_board.md_data.r_data.info.date)," ");
 	strcat((char*)&(ac_board.md_data.r_data.info.date),__TIME__);
@@ -86,6 +86,7 @@ int main(){
 			ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
 			ac_board.relay_staging_staus[i] = 0;
 		}
+		ac_board.handle_input_pt[0] = 0;
 	}
 #if SURPPORT_2_PT		
 		if((ac_board.md_data.r_data.detection & 0x2) == 0)
@@ -95,6 +96,7 @@ int main(){
 				ac_board.handle_status[i] = ac_board.relay_staging_staus[i];
 				ac_board.relay_staging_staus[i] = 0;
 			}
+			ac_board.handle_input_pt[1] = 0;
 		}
 #endif