Ver código fonte

KZB-20221216-13 版本修改记录
变动内容:
* OS层次,调高了时间戳缓存刷新任务的调度优先级,并降低了flash存储管理任务的调度优先级;
* 通过按键输入特殊数字,利用迪文屏显示一些信息方便测试者观察,如:
* 输入12555,迪文屏调试区会显示flash存储补传类信息;
* 远程标定入口0x00D8,丰富其功能定义,如:
* 写此入口,写入字符串"erase",命令通知控制板执行擦除整flash芯片,用来清除已存的历史记录;控制板执行flash擦除会耗时约40秒,之后系统会自动重启,重启之后会进入一次性的flash文件系统的格式化,此格式化会耗时约7分钟。 命令样本如下:
* 390100000000000600D800100000000065726173650000;
* 在进行A2数据补发时,会将包报文内的第四个字节内容由0x00置为0x80,以示补传,方便平台端识别处理。

xuy 2 anos atrás
pai
commit
b7814d27dc

+ 1 - 1
Src/KeySlave485.c

@@ -38,7 +38,7 @@ uint8_t product_code[20] = "JL-SIMS-CJ-V2.1";				 //
 uint8_t product_ID[20] = "20210730001";						 //产品ID
 
 char Version_software[30] = "KZB09A0_20220210_Temp1";
-uint32_t Version_Soft[8] = {2,2,3,13,1,1,0,20221212};
+uint32_t Version_Soft[8] = {2,2,3,13,1,1,0,20221216};
 
 uint8_t flag_exitReset = 0;	 //终止复位命令
 uint8_t flag_Uart4_Busy = 0; //表明打印机占用了总线,暂停语音播报

+ 8 - 0
Src/TerminalSlave485.c

@@ -15,6 +15,7 @@
 #include "leaf_ota.h"
 #include "md5c.h"
 #include "cmsis_os.h"
+#include "func_queue_record.h"
 
 /* zhuzl 20211220 增加为了内蒙定时上送*/
 uint32_t circle_send;
@@ -5406,6 +5407,12 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 					T2C_RemoteCaliDat001.NumberOfRegs = 16; 
       			break;	
 
+      			case	IDEX_ADDR_Read_WorkSt:
+      			    memset(queue_record_obj.cmd,0,sizeof(queue_record_obj.cmd));
+ 					strncpy(queue_record_obj.cmd, (char *)T2C_RemoteCaliDat001.PayLoadData, sizeof(queue_record_obj.cmd)-1);
+					T2C_RemoteCaliDat001.NumberOfRegs = 16; 
+      			break;
+
 				case	ADDR_TiltAngle_Sensor://倾角补偿参数  ----长度为16字节
  					FM25L16B_Write_N_Bytes(ADDR_TiltAngle_Sensor,T2C_RemoteCaliDat001.PayLoadData,16);
 					T2C_RemoteCaliDat001.NumberOfRegs=16;	
@@ -5445,6 +5452,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 					ds1302_Write_Time(T2C_RemoteCaliDat001.PayLoadData-1);
 #endif				
 					ds1302_SynTime(&m_datetime);
+					fram_time_write(m_datetime);
 					/*for(i001=0;i001<6;i001++)
 					{
 						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);

+ 3 - 0
Src/TerminalSlave485_jt808.c

@@ -639,6 +639,9 @@ void jt808_send_buf_data(void)
 	
 	//发送次数进行累加
 	jt808_obj.send_data.send_cnt++;
+
+	//打上补发标记
+	USART1_TX_BUF[3] |= 0x80;
 	
 	//通过串口将数据发送出去
 	TerminalSlave485_Send_Data(USART1_TX_BUF,jt808_obj.send_data.lenth);

+ 24 - 5
Src/freertos.c

@@ -460,7 +460,7 @@ void MX_FREERTOS_Init(void)
 
 #if	USE_RFS_RECORD==1	
 	
-		osThreadDef(task_record, func_record_queue_main, osPriorityNormal, 0, 512 * 16);
+		osThreadDef(task_record, func_record_queue_main, osPriorityBelowNormal, 0, 512 * 16);
 		task_record_Handle = osThreadCreate(osThread(task_record), NULL);
 #endif	
 
@@ -476,7 +476,7 @@ void MX_FREERTOS_Init(void)
 	//  VoicePlay_Handle = osThreadCreate(osThread(VoicePlay_Process), NULL);
 
 	//osPriorityNormal    osPriorityHigh
-	osThreadDef(GetCPU_Usage_Process, Task_GetCPU_Usage, osPriorityBelowNormal, 0, 512 * 2);
+	osThreadDef(GetCPU_Usage_Process, Task_GetCPU_Usage, osPriorityHigh, 0, 512 * 2);
 	Task_GetCPU_Usage_Handle = osThreadCreate(osThread(GetCPU_Usage_Process), NULL);		
 
 	
@@ -2417,7 +2417,7 @@ void DisplayRunInfo(uint32_t FunDebugCode000)
 	}	  //按键功能码>90000 ----结束   if(FunDebugCode>90000)
 	else
 	{ //功能码范围在00--90000之间--开始
-		memset(bufText01Password, ' ', sizeof(bufText01Password));
+		memset(bufText01Password, 0, sizeof(bufText01Password));
 		//sprintf((char*)bufText01Password,"系统运行中.tick=%08X,%08d.\r\n",tick001,tick001);
 		if (FunDebugCode000 == 0)
 		{
@@ -2445,8 +2445,27 @@ void DisplayRunInfo(uint32_t FunDebugCode000)
 
 		else
 		{ //1--90000之间的功能码--开始
-			Len001RunInfo = sprintf((char *)bufText01Password, "系统运行中.tick=%08X,%08d.未定义code=%5d.CPU=%d.\r\n", tick001, tick001 / 1000, FunDebugCode000, cntUsage);
-			memset((char *)bufText01Password + Len001RunInfo, 0, sizeof(bufText01Password) - Len001RunInfo);
+		    //xy, 2022-12, 这里利用迪文屏,显示一些信息方便于测试者观察
+            switch (FunDebugCode000)
+            {
+            case 12111:
+                Len001RunInfo = sprintf((char *)bufText01Password, "KZB,version: %s,%d", 
+                    IR_ROM1==0x8000000 ? "app1":"app2",
+                    Version_Soft[7]
+                    );
+            break;
+            case 12555:
+                Len001RunInfo = sprintf((char *)bufText01Password, "flash, F|W|R: %d|%d|%d", 
+                    func_record_queue_flash_get(),
+                    queue_record_obj.wr_cnt,
+                    queue_record_obj.rd_cnt
+                    );
+            break;
+            
+            default:
+                Len001RunInfo = sprintf((char *)bufText01Password, "系统运行中.tick=%08X,%08d.未定义code=%5d.CPU=%d.\r\n", tick001, tick001 / 1000, FunDebugCode000, cntUsage);
+            break;
+            }
 
 		} //1--90000之间的功能码--结束
 

+ 7 - 29
func/func_queue_record.c

@@ -27,8 +27,6 @@
 
 /* Private macro------------------------------------------------------------------------------*/
 
-#define DEBUG_RECORD_QUEUE  0
-
 /* Private typedef----------------------------------------------------------------------------*/
 
 record_queue_object lifo_queue_obj = {0};
@@ -37,22 +35,6 @@ record_queue_object fifo_queue_obj = {0};
 /* Private define-----------------------------------------------------------------------------*/
 /* Private variables--------------------------------------------------------------------------*/
 /* Private function prototypes----------------------------------------------------------------*/
-
-typedef struct queue_record_object
-{
-	uint8_t 	link_ok; 				//用于标识当前状态是1:读取,0:写入;
-	uint8_t   flash_ok;					//存储器状态标志
-	uint32_t 	running;
-	uint32_t 	wr_idx;
-	uint32_t 	msg_cnt;
-	uint32_t 	wr_cnt;
-	uint32_t 	rd_cnt;
-	uint8_t 	opt_flag;
-	char 			buf[QUEUE_MSG_ITEM_SIZE];
-	uint32_t 	buf_len;
-	int32_t 	(*flash_pop) (void *buf, uint32_t len);
-	int32_t 	(*flash_push)(void *buf, uint32_t len);
-}queue_record_object;
 	
 queue_record_object queue_record_obj = {
 	.link_ok  = false,
@@ -424,7 +406,7 @@ void func_record_queue_main(void const *argument)
 	//设置flash状态为正常
 	func_record_queue_flash_set(true);
 	
-	lib_ringfs_init(QUEUE_MSG_ITEM_SIZE);	
+	lib_ringfs_init(QUEUE_MSG_ITEM_SIZE);
 	
 	queue_record_obj.wr_cnt = lib_ringfs_obj_cnt_exact();
 #endif
@@ -446,22 +428,18 @@ void func_record_queue_main(void const *argument)
 		if(queue_record_obj.flash_ok == true)			//flash正常,且处于读取状态时进行数量计算;			
 		{		
 			func_record_queue_obj_cnt();
-			
 			func_record_queue_work();	
-			
-#if  DEBUG_RECORD_QUEUE==1		
-		func_record_queue_test();			
-		osDelay(10);
-#else
-		osDelay(1000);
-#endif					
-			
+		    osDelay(1000);
 		}
 		else
 		{
 			osDelay(10000);
 		}
-		
+
+		if(strcmp(queue_record_obj.cmd,"erase") == 0){
+            W25QXX_Erase_Chip();
+            Reboot_System();
+		}
 
 	}
 	

+ 18 - 0
func/func_queue_record.h

@@ -25,9 +25,27 @@ typedef struct{
 	uint32_t 			total_size;		//消息队列总大小
 }record_queue_object;
 
+typedef struct queue_record_object
+{
+	uint8_t 	link_ok; 				//用于标识当前状态是1:读取,0:写入;
+	uint8_t   flash_ok;					//存储器状态标志
+	uint32_t 	running;
+	uint32_t 	wr_idx;
+	uint32_t 	msg_cnt;
+	uint32_t 	wr_cnt;
+	uint32_t 	rd_cnt;
+	uint8_t 	opt_flag;
+	char 			buf[QUEUE_MSG_ITEM_SIZE];
+	uint32_t 	buf_len;
+	char        cmd[32];
+	int32_t 	(*flash_pop) (void *buf, uint32_t len);
+	int32_t 	(*flash_push)(void *buf, uint32_t len);
+}queue_record_object;
+
 /* public function---------------------------------------------------------------------------*/
 extern record_queue_object lifo_queue_obj;
 extern record_queue_object fifo_queue_obj;
+extern queue_record_object queue_record_obj;
 
 void 		func_record_queue_init(void);
 void 		func_record_queue_work(void);