Sfoglia il codice sorgente

级联 内存释放 以及主从机同时启动出去通道数据不正确bug!!

liyi 1 anno fa
parent
commit
72df6da589
1 ha cambiato i file con 15 aggiunte e 3 eliminazioni
  1. 15 3
      f407/applications/cascade.c

+ 15 - 3
f407/applications/cascade.c

@@ -478,12 +478,14 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
             if(r == 1)
 						{
 							uint8_t chanels = value & 0xff;
-							if(chanels == 0)
+							if(chanels == 0 || chanels > 100)
 							{
 								cas->info->channels = 0;
-								LOGD("can not get cannes!!!\n");
+								LOGD("get slave channels %d!!!\n",chanels);
 							}else
 							{
+								if(chanels >= SLAVE_CH_MAX)
+										chanels = SLAVE_CH_MAX;
 								cas->info->channels = chanels;
 								//rdata.dlen = sizeof(slave_info_t) -sizeof(power_ch_t)*(SLAVE_CH_MAX - cas->info.channels);
                 rdata.dlen = sizeof(power_ch_t)*cas->info->channels;
@@ -606,6 +608,16 @@ uint8_t cascade_deinit()
     mb_handle_t *handle = (mb_handle_t *)(slave_info.mb);
     lock_deinit(slave_info.lock);
     mb_deinit(slave_info.mb);
+		if(slave_info.north)
+		{
+			free(slave_info.north);
+			slave_info.north = 0;
+		}
+		if(slave_info.info)
+		{
+			free(slave_info.info);
+			slave_info.info = 0;
+		}
     return 0;
 }
 
@@ -833,7 +845,7 @@ void cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud)
 			return;
 		}
 		mb_handle_t *handle=(mb_handle_t *)(&slave_info.mb);
-		handle->quit = 1;
+
 		slave_info.quit = 1;
 		sleep(1);
 		cascade_deinit();