diff --git a/.cproject b/.cproject
index 80231f8..96212d5 100644
--- a/.cproject
+++ b/.cproject
@@ -69,8 +69,8 @@
-
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 82daac9..fca74d6 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/App/inc/collect_Conversion.h b/App/inc/collect_Conversion.h
index 5bbec20..92346f5 100644
--- a/App/inc/collect_Conversion.h
+++ b/App/inc/collect_Conversion.h
@@ -10,6 +10,19 @@
#include "debug.h"
#include "adc.h"
+#include "ring_queue2.h"
+
+#define adcBuffSize 100
+typedef struct _ADC_DATA{
+ RingQueue2 RQCHG_CURR;
+ RingQueue2 RQDSG_CURR;
+ int32_t total_CHG_CURR; /* 充电电流adc之和 */
+ int32_t total_DSG_CURR; /* 放电电流adc之和 */
+}ADC_DATA;
+extern ADC_DATA g_adcData;
+
+void currBuffInit(void);
+void adcChangeProportionalInit(void);
float get_CHG_CURR(void);
float get_PV_VOLT_OUT(void);
@@ -17,6 +30,6 @@ float get_DSG_CURR(void);
float get_PV1_VOLT_IN(void);
float get_PV_VOLT_IN1(void);
float get_MOSFET_Temper(void);
-float get_PV2_VOLT_IN(void);
+//float get_PV2_VOLT_IN(void);
#endif /* APP_INC_COLLECT_CONVERSION_H_ */
diff --git a/App/inc/hy_protocol.h b/App/inc/hy_protocol.h
index f94ddf1..807abb9 100644
--- a/App/inc/hy_protocol.h
+++ b/App/inc/hy_protocol.h
@@ -52,19 +52,17 @@ typedef enum
}HY_AnalyzeDataLen;
+/* 执行状态 */
+typedef enum
+{
+ HY_success = 0xFF, /* 成功 */
+ HY_fail = 0x00, /* 失败 */
+}HY_state;
+
/* 指定对齐方式为1字节 */
#pragma pack(push,1)
-/* 默认参数 */
-typedef struct _HY_default_Value{
- uint8_t start_Flag; /* 起始标志 */
- uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
- uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
- uint8_t end_Flag; /* 结束标志 */
-}HY_default_Value;
-extern HY_default_Value HY_defaultValue;
-
-/* 默认参数 */
+/* 通用参数 */
typedef struct _HY_Recv_pack{
uint8_t start_Flag; /* 起始标志 */
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
@@ -116,6 +114,7 @@ typedef struct _HY_batteryStatusResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_batteryStatusResponse;
#define HY_batteryStatusResponse_PACK_SIZE (sizeof(HY_batteryStatusResponse))
+#define HY_batteryStatusResponse_dataLen 38
/* 电量统计数据报查询 */
typedef struct _HY_electricityStatisticsQuery{
@@ -130,7 +129,7 @@ typedef struct _HY_electricityStatisticsQuery{
}HY_electricityStatisticsQuery;
#define HY_electricityStatisticsQuery_PACK_SIZE (sizeof(HY_electricityStatisticsQuery))
-/* 电池状态数据报响应 */
+/* 电量统计数据报响应 */
typedef struct _HY_electricityStatisticsResponse{
uint8_t start_Flag; /* 起始标志 */
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
@@ -145,6 +144,7 @@ typedef struct _HY_electricityStatisticsResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_electricityStatisticsResponse;
#define HY_electricityStatisticsResponse_PACK_SIZE (sizeof(HY_electricityStatisticsResponse))
+#define HY_electricityStatisticsResponse_dataLen 16
/* 传感器号码配置 */
typedef struct _HY_sensorNumberConfig{
@@ -174,6 +174,7 @@ typedef struct _HY_sensorNumberConfigurationResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_sensorNumberConfigurationResponse;
#define HY_sensorNumberConfigurationResponse_PACK_SIZE (sizeof(HY_sensorNumberConfigurationResponse))
+#define HY_sensorNumberConfigurationResponse_dataLen 5
/* 传感器号码查询 */
typedef struct _HY_sensorNumberInquiryQuery{
@@ -202,6 +203,7 @@ typedef struct _HY_sensorNumberInquiryResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_sensorNumberInquiryResponse;
#define HY_sensorNumberInquiryResponse_PACK_SIZE (sizeof(HY_sensorNumberInquiryResponse))
+#define HY_sensorNumberInquiryResponse_dataLen 14
/* 充电阈值电压配置 */
typedef struct _HY_chargingThresholdVoltageConfig{
@@ -287,6 +289,7 @@ typedef struct _HY_resetInstructionResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_resetInstructionResponse;
#define HY_resetInstructionResponse_PACK_SIZE (sizeof(HY_resetInstructionResponse))
+#define HY_resetInstructionResponse_dataLen 5
/* 充电控制配置 */
typedef struct _HY_chargingControlConfig{
@@ -316,6 +319,7 @@ typedef struct _HY_chargingControlConfigResponse{
uint8_t end_Flag; /* 结束标志 */
}HY_chargingControlConfigResponse;
#define HY_chargingControlConfigResponse_PACK_SIZE (sizeof(HY_chargingControlConfigResponse))
+#define HY_chargingControlConfigResponse_dataLen 5
/* 充电控制查询 */
typedef struct _HY_QueryChargingControl{
@@ -554,7 +558,6 @@ typedef struct _HY_checkMotherboardTemperatureResponse{
}HY_checkMotherboardTemperatureResponse;
#define HY_checkMotherboardTemperatureResponse_PACK_SIZE (sizeof(HY_checkMotherboardTemperatureResponse))
-
/* 恢复默认的对齐设置 */
#pragma pack(pop)
diff --git a/App/inc/inflash.h b/App/inc/inflash.h
index b2f901d..bc3d891 100644
--- a/App/inc/inflash.h
+++ b/App/inc/inflash.h
@@ -9,6 +9,7 @@
#define APP_INC_INFLASH_H_
#include "debug.h"
+#include "math.h"
#pragma pack(push,1)
@@ -27,63 +28,93 @@ typedef struct _recv_config_info{
uint8_t communicationID[4]; /* 通信ID */
uint8_t protocolType; /* 协议类型; 0x01表示:汇源协议(波特率9600) 0x02表示:南瑞协议(波特率115200)*/
+
+ uint8_t CommunicationProtocolType; /* 0x00:SL
+ 0x01:HY*/
+ uint8_t onlyPower; /* 是否只充当电源板:0x00:不是
+ 0x01:是*/
+
uint8_t ConstantVoltageV[2]; /* 高于该(电压 / 100)且电流大于FloatI * 100进行恒压充电 */
uint8_t FloatI[2]; /* 高于该(电压 / 100)且电流低于FloatI * 100进行浮充充电 */
uint8_t startSolarOpenCircuitV[2]; /* 高于该(电压 / 100)开始充电 */
uint8_t stopSolarOpenCircuitV[2]; /* 太阳能板开路电压高于该电压停止充电 (V) */
uint8_t constantVoltageChargeV[2]; /* 恒压充电时的输出电压 (V) */
- uint8_t FloatV[2]; /* 浮充充电时的输出电压 (V) */
+ uint8_t FloatChargeV[2]; /* 浮充充电时的输出电压 (V) */
uint8_t HighSideMosTemperature_stop[2]; /* 当上桥温度达到该值时,停止输出 (°C) */
uint8_t HighSideMosTemperature_end[2]; /* 当上桥温度上升到该值时,降低功率运行 (°C) */
uint8_t HighSideMosTemperature_start[2];/* 当上桥温度降低到该值时,按照正常情况输出 (°C) */
- uint8_t loopImpedance[2]; /* 回路阻抗大小 (mΩ) */
+ uint8_t loopImpedance[2]; /* 回路阻抗大小 (Ω) */
+ uint8_t totalElectricityConsumption[2]; /* 总电量消耗 */
+ uint8_t totalChargCapacity[2]; /* 总充电电量 */
uint8_t checkSolarOpenCircuitVTime[2]; /* 启动任务中太阳能板开路电压检测间隔时间 (S) */
+// uint8_t registerRefreshTime[2]; /* 寄存器数据刷新时间 (S) */
+ uint8_t sensorEnableBroadcastTime[2]; /* 传感器运行再次注册的间隔 (S) */
uint8_t outputAgainFlagTime[2]; /* 出现短路保护后延长该段时间再次检测是否短路,仍然短路则关闭输出 (S) */
uint8_t excessiveLoadFlagTime[2]; /* 出现过载后,在该间隔时间中多次(2次)出现过载,则关闭输出 (S) */
uint8_t eLAgainTime[2]; /* 出现过载过载保护后,在该间隔段时间后,再次尝试输出 (S) */
uint8_t crc[2]; /* 校验 */
uint8_t end_Flag; /* 结束标志 */
}recv_config_info;
+#define RECV_CONFIG_INFO sizeof(recv_config_info)
typedef struct _config_info{
/* SL */
uint8_t address[7]; /* 地址 */
- uint8_t Access_Node_Type[2]; /* 接入节点类型 */
- uint8_t Communication_Methods[2]; /* 通信方式 */
- uint8_t gw485_Baud[4]; /* 串口波特率,为0代表bms不支持通信 */
- uint8_t bat485_Baud[4]; /* 串口波特率 */
+ uint16_t Access_Node_Type; /* 接入节点类型 */
+ uint16_t Communication_Methods; /* 通信方式 */
+ uint32_t gw485_Baud; /* 串口波特率,为0代表bms不支持通信 */
+ uint32_t bat485_Baud; /* 串口波特率 */
/* HY */
uint8_t hardwareID[6]; /* 硬件ID */
uint8_t communicationID[4]; /* 通信ID */
uint8_t protocolType; /* 协议类型; 0x01表示:汇源协议(波特率9600) 0x02表示:南瑞协议(波特率115200)*/
- uint16_t constantVoltageV; /* 电压高于该(ConstantVoltageV / 100)且电流大于(FloatI / 100 + 0.1)进行恒压充电 */
- uint16_t floatI; /* 电压高于该(ConstantVoltageV / 100)且电流低于(FloatI / 100)进行浮充充电 */
- uint16_t startSolarOpenCircuitV; /* 太阳能板开路电压高于该(电压 / 100)开始充电 */
- uint16_t stopSolarOpenCircuitV; /* 太阳能板开路电压高于该(电压 / 100)停止充电 */
- uint16_t constantVoltageChargeV; /* 恒压充电时的输出电压 */
- uint16_t FloatV; /* 浮充电压 */
- uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测时间 */
- uint16_t registerRefreshTime; /* 寄存器数据刷新时间 */
- uint16_t sensorEnableBroadcastTime; /* 传感器运行再次注册的间隔 */
- uint16_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 */
- uint16_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 */
- uint16_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 */
- uint16_t loopImpedance; /* 回路阻抗大小 (mΩ) */
+ uint8_t CommunicationProtocolType; /* 0x00:SL
+ 0x01:HY*/
+ uint8_t onlyPower; /* 是否只充当电源板:0x00:不是
+ 0x01:是*/
+ float_t constantVoltageV; /* 电压高于ConstantVoltageV且电流大于FloatI + 0.1)进行恒压充电 */
+ float_t floatI; /* 电压高于ConstantVoltageV且电流低于FloatI进行浮充充电 */
+ float_t startSolarOpenCircuitV; /* 太阳能板开路电压高于该电压开始充电 */
+ float_t stopSolarOpenCircuitV; /* 太阳能板开路电压高于该电压 停止充电 */
+ float_t constantVoltageChargeV; /* 恒压充电时的输出电压 */
+ float_t FloatChargeV; /* 浮充电压 */
+ float_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 */
+ float_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 */
+ float_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 */
+ float_t loopImpedance; /* 回路阻抗大小 (Ω) */
+ float_t totalElectricityConsumption; /* 总电量消耗 */
+ float_t totalChargCapacity; /* 总充电电量 */
+
+ uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测时间 */
+// uint16_t registerRefreshTime; /* 寄存器数据刷新时间 */
+ uint16_t sensorEnableBroadcastTime; /* 传感器运行再次注册的间隔 */
uint16_t outputAgainFlagTime; /* 出现短路保护后延长该段时间再次检测是否短路,仍然短路则关闭输出 */
uint16_t excessiveLoadFlagTime; /* 出现过载后,在该段时间中再次出现过载,则关闭输出 */
uint16_t eLAgainTime; /* 出现过载过载保护后,该段时间后,再次尝试输出 */
uint16_t crc; /* 校验 */
}config_info;
+
#define CONFIG_INFO_SIZE (sizeof(config_info))
#pragma pack(pop)
-#define CONFIG_SAVE_ADDR_BEGIN (0x00)
-#define CONFIG_SAVE_ADDR_END (0x00 + CONFIG_INFO_SIZE)
+
+#define CONFIG_SAVE_addr (0)
+#define CONFIG_SAVE_ADDR_BEGIN (CONFIG_INFO_SIZE)
+#define CONFIG_SAVE_ADDR_END (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE)
+
+void save_config_info(config_info *save_config_info);
+void save_backups_config_info(config_info *save_config_info);
+void read_config_info(config_info *output_config_info);
+void checkFlashContent(void);
+void saveLoopImpedance(float_t *loopImpedance);
+void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity);
+void config_info_start(void);
+void read_and_process_config_data(void);
#endif /* APP_INC_INFLASH_H_ */
diff --git a/App/inc/mppt_control.h b/App/inc/mppt_control.h
index 294c718..9e210df 100644
--- a/App/inc/mppt_control.h
+++ b/App/inc/mppt_control.h
@@ -11,5 +11,7 @@
#include "debug.h"
#include
+extern void MpptContorl(void);
+
#endif /* APP_INC_MPPT_CONTROL_H_ */
diff --git a/App/inc/parameter.h b/App/inc/parameter.h
index 8889721..250505f 100644
--- a/App/inc/parameter.h
+++ b/App/inc/parameter.h
@@ -25,14 +25,13 @@ typedef struct _Mppt_controlparameter{
float_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 (°C) */
float_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 (°C) */
float_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 (°C) */
+ float_t dutyRatio; /* 占空比 */
- uint16_t sensorEnableBroadcastTime; /* 传感器运行再次注册的间隔 */
+ uint16_t sensorEnableBroadcastTime; /* 传感器运行再次注册的间隔 (S) */
uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测间隔时间 (S) */
uint16_t outputAgainFlagTime; /* 出现短路保护后延长该段时间再次检测是否短路,仍然短路则关闭输出 (S) */
uint16_t excessiveLoadFlagTime; /* 出现过载后,在该间隔时间中多次(2次)出现过载,则关闭输出 (S) */
uint16_t eLAgainTime; /* 出现过载过载保护后,在该间隔段时间后,再次尝试输出 (S) */
-
-
} Mppt_controlparameter;
extern Mppt_controlparameter g_controlParameter;
@@ -42,27 +41,34 @@ typedef struct _Mppt_otherParameter{
uint16_t Access_Node_Type; /* 接入节点类型 */
uint16_t Communication_Methods; /* 通信方式 */
uint16_t Registration_Status; /* 注册状态 */
- uint32_t gw485_Baud; /* 串口波特率 */
- uint32_t bat485_Baud; /* 串口波特率,为0代表bms不支持通信 */
+ uint8_t startFlagSL[2]; /* 起始标志 */
+ uint8_t endFlagSL; /* 结束标志 */
/* HY */
uint8_t hardwareID[6]; /* 硬件ID */
uint8_t communicationID[4]; /* 通信ID */
- uint8_t protocolType; /* 协议类型; 0x01表示:汇源协议(波特率9600) 0x02表示:南瑞协议(波特率115200)*/
+ uint8_t startFlagHY; /* 起始码 */
+ uint8_t endFlagHY; /* 结束码 */
+ uint8_t CommunicationProtocolType; /* 0x00:SL
+ 0x01:HY*/
+ uint8_t onlyPower; /* 是否只充当电源板:0x00:不是
+ 0x01:是*/
+ uint32_t gw485_Baud; /* 串口波特率 */
+ uint32_t bat485_Baud; /* 串口波特率,为0代表bms不支持通信 */
float_t Battery_Voltage; /* 电池电压 (V) */
float_t Output_Voltage; /* 输出电压 */
float_t Charg_Current; /* 充电电流(流向电池+负载) (A) */
float_t Discharg_Current; /* 放电电流(流向负载) (A) */
- float_t Input_Voltage; /* 太阳能板输入电压 (V) */
+ float_t Input_Voltage; /* 系统输入电压 (V) */
float_t Solar_Open_Circuit_Voltage; /* 太阳能板开路电压 (V) */
float_t HighSideMos_Temperature; /* 高端mos的温度 (°C) */
float_t Solar_In_Circuit_Voltage; /* 太阳能板输入电压 (V) */
float_t Charg_BatteryCurrent; /* 电池充电电流(流向电池) (A) */
- float_t totalElectricityConsumption; /* 总电量消耗 */
- float_t totalChargCapacity; /* 总充电电量 */
+ float_t totalElectricityConsumption; /* 总电量消耗(W*H) */
+ float_t totalChargCapacity; /* 总充电电量(W*H) */
float_t SOC; /* 剩余电量 */
uint16_t chargMos_State; /* 充电开关状态 */
@@ -71,7 +77,15 @@ typedef struct _Mppt_otherParameter{
uint8_t versionInformation[13]; /* 软件版本信息 */
-
+ uint8_t batteryState; /* 有无电池(估计) */
+ uint8_t impedanceStart; /* 能否开始测量回路阻抗 */
+ uint8_t outputAgainFlag; /* 一段时间中输出短路次数 */
+ uint8_t excessiveLoadFlag; /* 一段时间中输出过载次数 */
+ uint8_t overTemperature; /* 温度检测保护标志位 */
+ uint8_t RegistrationRequestFlag; /* 回复广播标志位 */
+ uint8_t runBroadcast; /* 是否接收广播帧标志位 */
+ uint16_t RegisterNumberMax; /* 寄存器个数 */
+ uint16_t RegisterStartAddressMax; /* 读写的寄存器的最大起始位置,由设备决定 */
}Mppt_otherParameter;
extern Mppt_otherParameter g_otherParameter;
diff --git a/App/inc/sl_protocol.h b/App/inc/sl_protocol.h
index da68176..0e3da76 100644
--- a/App/inc/sl_protocol.h
+++ b/App/inc/sl_protocol.h
@@ -12,6 +12,12 @@
#include "uart_dev.h"
#include "math.h"
+#define buffLen 100
+#define configBuffLen 100
+extern uint8_t rs485_buff[buffLen];
+extern uint8_t config_buff[configBuffLen];
+
+
/* 功能码 */
typedef enum
{
@@ -74,11 +80,9 @@ typedef enum
typedef enum
{
NoWork = 0, /* 没有工作 */
- TRICKLE = 1, /* 涓流模式 */
- CONSTANTCURRENT = 2, /* 恒流模式 */
- CONSTANTVOLTAGE = 3, /* 恒压模式 */
- FLOAT = 4, /* 浮充模式 */
- NoBattery = 5, /* 没有电池 */
+ CONSTANTCURRENT = 1, /* 恒流模式 */
+ CONSTANTVOLTAGE = 2, /* 恒压模式 */
+ FLOAT = 3, /* 浮充模式 */
}SL_MPPT_MODE;
#define chang_8_to_16(L,H) (L | (H<<8))
@@ -223,7 +227,7 @@ extern default_Value defaultValue;
#pragma pack(pop)
void read_and_process_uart_data(device_handle device);
-uint16_t CheckFunc(uint8_t *arr_buff, uint8_t len);
+uint16_t CheckFuncSL(uint8_t *arr_buff, uint8_t len);
int randomDelay();
uint8_t Check_485_bus_busy(device_handle device);
diff --git a/App/inc/task.h b/App/inc/task.h
index 83d76dd..aaf8c28 100644
--- a/App/inc/task.h
+++ b/App/inc/task.h
@@ -13,9 +13,77 @@
#include "uart_dev.h"
#include "math.h"
+void Init();
+/* 控制运行指示灯和喂狗 */
+#define WdiRunled_reloadVal 1000 /* 任务执行间隔 */
+#define WdiRunled_offset 0 /* 任务执行偏移量 */
+#define wdi_RESET (60 * 60 * 24) /* 一天复位一次 */
+extern STR_TimeSliceOffset m_WdiRunled;
+extern void Task_WdiRunled(void);
+/* 刷新寄存器中的数据 */
+#define refreshRegister_reloadVal 1000 /* 任务执行间隔 */
+#define refreshRegister_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset m_refreshRegister;
+extern void Task_refreshRegister(void);
+/* 回路阻抗检测 */
+#define impedanceCalculation_reloadVal 200 /* 任务执行间隔 */
+#define impedanceCalculation_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_impedanceCalculation;
+extern void Task_impedanceCalculation(void);
+
+/* 短路保护 */
+#define outputAgain_reloadVal 1000 /* 任务执行间隔 */
+#define outputAgain_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_outputAgain;
+extern void Task_outputAgain(void);
+
+/* 过载保护 */
+#define excessiveLoad_reloadVal 1000 /* 任务执行间隔 */
+#define excessiveLoad_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_excessiveLoad;
+extern void Task_excessiveLoad(void);
+
+/* 软启动 */
+#define softStart_reloadVal 10 /* 任务执行间隔 */
+#define softStart_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset m_softStart;
+extern void Task_softStart(void);
+
+/* 启动任务 */
+#define startMpptControl_reloadVal 1000 /* 任务执行间隔 */
+#define startMpptControl_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_startMpptControl;
+extern void Task_startMpptControl(void);
+
+/* 根据寄存器数据完成一些判断 */
+#define dataJudgment_reloadVal 1000 /* 任务执行间隔 */
+#define dataJudgment_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_dataJudgment;
+extern void Task_dataJudgment(void);
+
+/* 串口数据解析和处理 */
+#define usartSL_reloadVal 100 /* 任务执行间隔 */
+#define usartSL_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset m_usart;
+extern void Task_usartSL(void);
+extern void Task_usartHY(void);
+
+/* 广播回应 */
+#define recvbroadcast_reloadVal 3000 /* 任务执行间隔 */
+#define recvbroadcast_offset 0 /* 任务执行偏移量 */
+extern uint8_t recvbroadcast_flag; /* 是否需要再次发送标志 */
+extern device_handle g_recvBroadcastDevice; /* 串口句柄 */
+extern STR_TimeSliceOffset g_recvbroadcast;
+extern void Task_recvbroadcast(void);
+
+/* 再次注册延时 */
+#define sensorEnableBroadcast_reloadVal 1000 /* 任务执行间隔 */
+#define sensorEnableBroadcast_offset 0 /* 任务执行偏移量 */
+extern STR_TimeSliceOffset g_sensorEnableBroadcast;
+extern void Task_sensorEnableBroadcast(void);
#endif /* APP_INC_TASK_H_ */
diff --git a/App/src/collect_Conversion.c b/App/src/collect_Conversion.c
index 384ff33..075daad 100644
--- a/App/src/collect_Conversion.c
+++ b/App/src/collect_Conversion.c
@@ -11,6 +11,7 @@
#include
#include
#include
+#include "parameter.h"
#include "uart_dev.h"
#include
@@ -27,48 +28,11 @@
//#define enable_Printf_VI
-#ifdef ONLYPOWER
-/* 光伏充电输出电流比例,放大倍数*电阻 */
-const float P_CHG_CURR = (1.0 / (50 * 0.005 / 2));
-/* 光伏充电输出电压比例,分压系数(放电时采集不准) */
-//const float P_PV_VOLT_OUT = (47.0 + 10.0) / 10.0;
-//const float P_PV_VOLT_OUT = (47.0 + 4.7) / 4.7;
-const float P_PV_VOLT_OUT = (56.0 + 10.0) / 10.0;
-/* 放电电流采集电流倍数 */
-const float P_DSG_CURR = (1.0 / (50 * 0.005 / 2));
-///* 光伏1开路输出电压比例 */
-const float P_PV1_VOLT_IN = (100 + 4.7) / 4.7;
-//const float P_PV1_VOLT_IN = (47.0 + 4.7) / 4.7;
-/* 光伏1开路输出电压比例 */
-//const float P_PV1_VOLT_IN = (47 + 4.7) / 4.7;
-/* 系统电源电压比例 */
-const float P_PV_VOLT_IN1 = (47 + 4.7) / 4.7;
-/* 温度采集比例 */
-//const float P_MOSFET_TEMPER = 0;
-/* 光伏2开路输出电压比例 */
-const float P_PV2_VOLT_IN = (100.0 + 4.7) / 4.7;
-#endif
-
-#ifndef ONLYPOWER
-/* 光伏充电输出电流比例,放大倍数*电阻 */
-const float P_CHG_CURR = (1.0 / (50 * 0.005));
-/* 光伏充电输出电压比例,分压系数(放电时采集不准) */
-//const float P_PV_VOLT_OUT = (47.0 + 10.0) / 10.0;
-const float P_PV_VOLT_OUT = (47.0 + 4.7) / 4.7;
-/* 放电电流采集电流倍数 */
-const float P_DSG_CURR = (1.0 / (50 * 0.005));
-///* 光伏1开路输出电压比例 */
-//const float P_PV1_VOLT_IN = (100 + 4.7) / 4.7;
-const float P_PV1_VOLT_IN = (47.0 + 4.7) / 4.7;
-/* 光伏1开路输出电压比例 */
-//const float P_PV1_VOLT_IN = (47 + 4.7) / 4.7;
-/* 系统电源电压比例 */
-const float P_PV_VOLT_IN1 = (47 + 4.7) / 4.7;
-/* 温度采集比例 */
-//const float P_MOSFET_TEMPER = 0;
-/* 光伏2开路输出电压比例 */
-const float P_PV2_VOLT_IN = (47 + 4.7) / 4.7;
-#endif
+static float P_CHG_CURR = 0;
+static float P_PV_VOLT_OUT = 0;
+static float P_DSG_CURR = 0;
+static float P_PV1_VOLT_IN = 0;
+static float P_PV_VOLT_IN1 = 0;
/* 温度的adc值的个数 */
#define mosTemperADCLen 241
@@ -134,6 +98,63 @@ static uint16_t get_adc(uint8_t ADC_Channel);
static uint16_t get_aftercalculationAdc(uint8_t ADC_Channel);
static uint16_t middleAverageFilter(uint8_t ADC_Channel);
+ADC_DATA g_adcData;
+static uint16_t CHG_buff[adcBuffSize];
+static uint16_t DSG_buff[adcBuffSize];
+
+/**
+ * @brief 初始化电流采集的环形buff
+ * @param
+ * @retval None
+ */
+void currBuffInit(void)
+{
+ InitRingQueue2(&g_adcData.RQCHG_CURR, CHG_buff, adcBuffSize);
+ InitRingQueue2(&g_adcData.RQDSG_CURR, DSG_buff, adcBuffSize);
+
+ while (InRingQueue2(&g_adcData.RQCHG_CURR, 0) != -2);
+ while (InRingQueue2(&g_adcData.RQDSG_CURR, 0) != -2);
+
+ g_adcData.total_CHG_CURR = 0;
+ g_adcData.total_DSG_CURR = 0;
+}
+
+/**
+ * @brief AD转换的比例初始化
+ * @param
+ * @retval None
+ */
+void adcChangeProportionalInit(void)
+{
+ if (g_otherParameter.onlyPower) {
+ /* 光伏充电输出电流比例,放大倍数*电阻 */
+ P_CHG_CURR = (1.0 / (50 * 0.005 / 2));
+ /* 光伏充电输出电压比例,分压系数(放电时采集不准) */
+ //const float P_PV_VOLT_OUT = (47.0 + 10.0) / 10.0;
+ //const float P_PV_VOLT_OUT = (47.0 + 4.7) / 4.7;
+ P_PV_VOLT_OUT = (56.0 + 10.0) / 10.0;
+ /* 放电电流采集电流倍数 */
+ P_DSG_CURR = (1.0 / (50 * 0.005 / 2));
+ ///* 光伏1开路输出电压比例 */
+ P_PV1_VOLT_IN = (100 + 4.7) / 4.7;
+ //const float P_PV1_VOLT_IN = (47.0 + 4.7) / 4.7;
+ /* 光伏1开路输出电压比例 */
+ //const float P_PV1_VOLT_IN = (47 + 4.7) / 4.7;
+ /* 系统电源电压比例 */
+ P_PV_VOLT_IN1 = (47 + 4.7) / 4.7;
+ } else {
+ /* 光伏充电输出电流比例,放大倍数*电阻 */
+ P_CHG_CURR = (1.0 / (50 * 0.005));
+ /* 光伏充电输出电压比例,分压系数 */
+ P_PV_VOLT_OUT = (47.0 + 4.7) / 4.7;
+ /* 放电电流采集电流倍数 */
+ P_DSG_CURR = (1.0 / (50 * 0.005));
+ ///* 光伏1开路输出电压比例 */
+ P_PV1_VOLT_IN = (47.0 + 4.7) / 4.7;
+ /* 系统电源电压比例 */
+ P_PV_VOLT_IN1 = (47 + 4.7) / 4.7;
+ }
+}
/**
* @brief 获取计算后的adc的值
* @param ADC_Channel ADC通道
@@ -394,26 +415,26 @@ float get_MOSFET_Temper(void)
* @param
* @retval V 电压值
*/
-float get_PV2_VOLT_IN(void)
-{
- float V;
- uint16_t V_ADC;
-
-// GPIO_WriteBit(G_FFMOS_CON2_GPIO, G_FFMOS_CON2_PIN, SET);
-// V_ADC = Get_ConversionVal(get_adc(PV2_VOLT_IN));
- V_ADC = get_aftercalculationAdc(PV2_VOLT_IN);
-// V_ADC = get_adc(PV2_VOLT_IN);
-// GPIO_WriteBit(G_FFMOS_CON2_GPIO, G_FFMOS_CON2_PIN, RESET);
-
- V = (float)(V_ADC) / 4095 * 2.5 * P_PV2_VOLT_IN;
-
-#ifdef enable_Printf_VI
- printf("\n PV2_VOLT_IN ADC : %d \n", V_ADC);
- printf(" PV2_VOLT_IN V : %d /100 \n", (int)(V * 100));
-#endif
-
- return V;
-}
+//float get_PV2_VOLT_IN(void)
+//{
+// float V;
+// uint16_t V_ADC;
+//
+//// GPIO_WriteBit(G_FFMOS_CON2_GPIO, G_FFMOS_CON2_PIN, SET);
+//// V_ADC = Get_ConversionVal(get_adc(PV2_VOLT_IN));
+// V_ADC = get_aftercalculationAdc(PV2_VOLT_IN);
+//// V_ADC = get_adc(PV2_VOLT_IN);
+//// GPIO_WriteBit(G_FFMOS_CON2_GPIO, G_FFMOS_CON2_PIN, RESET);
+//
+// V = (float)(V_ADC) / 4095 * 2.5 * P_PV2_VOLT_IN;
+//
+//#ifdef enable_Printf_VI
+// printf("\n PV2_VOLT_IN ADC : %d \n", V_ADC);
+// printf(" PV2_VOLT_IN V : %d /100 \n", (int)(V * 100));
+//#endif
+//
+// return V;
+//}
diff --git a/App/src/hy_protocol.c b/App/src/hy_protocol.c
index 273286f..6f3e009 100644
--- a/App/src/hy_protocol.c
+++ b/App/src/hy_protocol.c
@@ -13,16 +13,8 @@
#include
#include "task.h"
#include "tim.h"
-
-
-HY_default_Value HY_defaultValue = {0x68\
- , 0x48, 0x59, 0x30, 0x30, 0x30, 0x31\
- , 0x00, 0x00, 0x00, 0x01\
- , 0x16};
-
-/* 读取串口数据时用该数组解析 */
-static uint8_t rs485_buff[100]={0x00};
-
+#include "sl_protocol.h"
+#include "parameter.h"
/* 电池状态数据报 */
static void HY_MsgProcFunc_batteryStatus(device_handle device, void *pMsg, uint32_t MsgLen);
@@ -139,46 +131,76 @@ uint8_t HY_CheckFunc(uint8_t *arr_buff, uint8_t len)
}
/**
- * @brief 匹配设备地址
+ * @brief 匹配设备硬件ID
* @param address 地址
* @retval 1 匹配成功
* 0 匹配失败
*/
-static int HY_matchhardwareID(u_int8_t hardwareID[6])
+static int HY_matchHardwareID(u_int8_t hardwareID[6])
{
-//// if (!strcmp(address, g_slConfigInfo.address)) {
-//// log_info("Match_address fail \r\n");
-//// return 1;
-//// }
-// if ((hardwareID[0] == g_slConfigInfo.address[0]) && \
-// (hardwareID[1] == g_slConfigInfo.address[1]) && \
-// (hardwareID[2] == g_slConfigInfo.address[2]) && \
-// (hardwareID[3] == g_slConfigInfo.address[3]) && \
-// (hardwareID[4] == g_slConfigInfo.address[4]) && \
-// (hardwareID[5] == g_slConfigInfo.address[5]) && \
-// (hardwareID[6] == g_slConfigInfo.address[6])) {
-// log_info("Match_address success \r\n");
-// return 1;
-// }
+ if ((hardwareID[0] == g_otherParameter.hardwareID[0]) && \
+ (hardwareID[1] == g_otherParameter.hardwareID[1]) && \
+ (hardwareID[2] == g_otherParameter.hardwareID[2]) && \
+ (hardwareID[3] == g_otherParameter.hardwareID[3]) && \
+ (hardwareID[4] == g_otherParameter.hardwareID[4]) && \
+ (hardwareID[5] == g_otherParameter.hardwareID[5])) {
+ log_info("Match_hardwareIDHY success \r\n");
+ return 1;
+ }
return 0;
}
/**
- * @brief 匹配广播地址
+ * @brief 匹配广播硬件ID
* @param address 地址
* @retval 1 匹配成功
* 0 匹配失败
*/
-static int Match_Broadcastaddress(u_int8_t address[6])
+static int Match_BroadcastHardwareID(u_int8_t hardwareID[6])
{
- if (address[0] == 0xFF && \
- address[1] == 0xFF && \
- address[2] == 0xFF && \
- address[3] == 0xFF && \
- address[4] == 0xFF && \
- address[5] == 0xFF && \
- address[6] == 0xFF) {
- log_info("Match_Broadcastaddress success\r\n");
+ if (hardwareID[0] == 0xFF && \
+ hardwareID[1] == 0xFF && \
+ hardwareID[2] == 0xFF && \
+ hardwareID[3] == 0xFF && \
+ hardwareID[4] == 0xFF && \
+ hardwareID[5] == 0xFF) {
+ log_info("Match_BroadcastHardwareID success\r\n");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief 匹配设备通信ID
+ * @param address 地址
+ * @retval 1 匹配成功
+ * 0 匹配失败
+ */
+static int HY_matchCommunicationID(u_int8_t communicationID[4])
+{
+ if ((communicationID[0] == g_otherParameter.communicationID[0]) && \
+ (communicationID[1] == g_otherParameter.communicationID[1]) && \
+ (communicationID[2] == g_otherParameter.communicationID[2]) && \
+ (communicationID[3] == g_otherParameter.communicationID[3])) {
+ log_info("Match_hardwareIDHY success \r\n");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief 匹配广播ID
+ * @param address 地址
+ * @retval 1 匹配成功
+ * 0 匹配失败
+ */
+static int Match_BroadcastCommunicationID(u_int8_t communicationID[4])
+{
+ if (communicationID[0] == 0xFF && \
+ communicationID[1] == 0xFF && \
+ communicationID[2] == 0xFF && \
+ communicationID[3] == 0xFF) {
+ log_info("Match_BroadcastHardwareID success\r\n");
return 1;
}
return 0;
@@ -196,6 +218,12 @@ static int HY_uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, ui
uint32_t offset = 0;
uint32_t len = 0;
uint8_t flag_run = 0;
+
+ /* 接收到的硬件ID种类
+ * 0x01 广播ID
+ * 0x02 硬件ID
+ **/
+ uint8_t hardwordIDType = 0;
char c = 0;
HY_Recv_pack *pack = (HY_Recv_pack *)buff;
@@ -212,16 +240,25 @@ static int HY_uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, ui
/* 匹配起始标志位 */
if (offset == HY_analyzeStartFlag || (flag_run > 0)) {
- if (pack->start_Flag != HY_defaultValue.start_Flag) {
+ if (pack->start_Flag != g_otherParameter.startFlagHY) {
memcpy(buff, buff+1, offset-1);
offset--;
continue;
}
}
- /* 匹配硬件ID */
+ /* 匹配硬件ID */
if (offset == HY_analyzeHardwareID || (flag_run > 1)) {
- if (HY_matchhardwareID(pack->hardwareID) || Match_Broadcastaddress(pack->hardwareID)) {
+ if (HY_matchHardwareID(pack->hardwareID)) {
+ hardwordIDType = 0x02;
+ }
+
+ else if (Match_BroadcastHardwareID(pack->hardwareID)) {
+ hardwordIDType = 0x01;
+ }
+
+ else {
+ hardwordIDType = 0x00;
if (flag_run < 1) {
flag_run = 1;
}
@@ -231,11 +268,121 @@ static int HY_uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, ui
}
}
+ /* 匹配通信ID */
+ if (offset == HY_analyzeCommunicationID || (flag_run > 2)) {
+ if (HY_matchCommunicationID(pack->hardwareID) || Match_BroadcastCommunicationID(pack->hardwareID)) {
+ if (flag_run < 2) {
+ flag_run = 2;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+ /* 匹配 */
+ if (offset == HY_analyzeControlWord || (flag_run > 3)) {
+ if (pack->controlWord == HY_batteryStatus && hardwordIDType == 0x02) {
+ len = HY_batteryStatusQuery_PACK_SIZE;
+ }
+ else if (pack->controlWord == HY_electricityStatistics && hardwordIDType == 0x02) {
+ len = HY_electricityStatisticsQuery_PACK_SIZE;
+ }
+ else if (pack->controlWord == HY_sensorNumberConfiguration && hardwordIDType == 0x02) {
+ len = HY_sensorNumberConfiguration_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_sensorNumberInquiry && hardwordIDType == 0x01) {
+ len = HY_sensorNumberInquiryQuery_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_chargingThresholdVoltageConfiguration && hardwordIDType == 0x02) {
+ len = HY_chargingThresholdVoltageConfig_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_chargingRangeVoltageQuery && hardwordIDType == 0x02) {
+ len = HY_chargRangeVoltageQuery_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_resetInstruction && hardwordIDType == 0x02) {
+ len = HY_resetInstructionQuery_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_chargingControlConfiguration && hardwordIDType == 0x02) {
+ len = HY_chargingControlConfig_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_chargingControlQuery && hardwordIDType == 0x02) {
+ len = HY_QueryChargingControl_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_configureProtocolType && hardwordIDType == 0x02) {
+ len = HY_configProtocolType_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_queryControlBoxConfiguration && hardwordIDType == 0x02) {
+ len = HY_queryControlBoxConfigurationQuery_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_querySoftwareVersion && hardwordIDType == 0x02) {
+ len = HY_SoftwareVersionQuery_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_enterConfigurationMode && hardwordIDType == 0x02) {
+ len = HY_enterConfigMode_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_configureHardwareID && hardwordIDType == 0x02) {
+ len = HY_configHardwareID_PACK_SIZE;
+ }
+// else if (pack->controlWord == HY_hardwareID_communicationIDQuery) {
+// len = HY_modifyCommunicationIDChange_PACK_SIZE;
+// }
+ else if (pack->controlWord == HY_modifyCommunicationID && hardwordIDType == 0x02) {
+ len = HY_modifyCommunicationIDChange_PACK_SIZE;
+ }
+
+ else if (pack->controlWord == HY_checkMotherboardTemperature && hardwordIDType == 0x02) {
+ len = HY_checkMotherboardTemperatureQuery_PACK_SIZE;
+ }
+
+ else {
+ if (flag_run < 3) {
+ flag_run = 3;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ /* 匹配通信ID */
+ if (offset == HY_analyzeDataLen || (flag_run > 4)) {
+ if (len != ((pack->dataLen[0] << 8 + pack->dataLen[1]) + 16)) {
+ if (flag_run < 4) {
+ flag_run = 4;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ if (offset == len) {
+ if (buff[len - 2] != HY_CheckFunc(buff, len - 2)
+ && buff[len - 1] != g_otherParameter.endFlagHY) {
+ if (flag_run < 5) {
+ flag_run = 5;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ return len;
+ }
}
-
return 0;
}
@@ -263,11 +410,9 @@ static void HY_FRT_MsgHandler(device_handle device, uint8_t *pMsg, uint32_t MsgL
*/
void HY_read_and_process_uart_data(device_handle device)
{
-// printf("ring_queue_length = %d \n", ring_queue_length(device));
-// if (ring_queue_length(device) > 10) {uart_dev_char_present(device_handle device)
+
if (uart_dev_char_present(device)) {
Delay_Ms(20);
-// printf("ring_queue_length = %d \n", ring_queue_length(device));
memset(rs485_buff, 0, sizeof(rs485_buff));
int ret = HY_uart_read_climate_pack(device, rs485_buff, sizeof(rs485_buff));
if(ret > 0){
@@ -276,39 +421,236 @@ void HY_read_and_process_uart_data(device_handle device)
}
}
-
-
-
-
-
-
-
-
-
-
-
/* 电池状态数据报 */
void HY_MsgProcFunc_batteryStatus(device_handle device, void *pMsg, uint32_t MsgLen)
{
+ HY_batteryStatusResponse pack;
+ pack.start_Flag = g_otherParameter.startFlagHY;
+ pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationID[0] = g_otherParameter.communicationID[0];
+ pack.communicationID[1] = g_otherParameter.communicationID[1];
+ pack.communicationID[2] = g_otherParameter.communicationID[2];
+ pack.communicationID[3] = g_otherParameter.communicationID[3];
+
+ pack.controlWord = HY_batteryStatus;
+ pack.dataLen[0] = HY_batteryStatusResponse_dataLen >> 8;
+ pack.dataLen[1] = HY_batteryStatusResponse_dataLen;
+
+ pack.batteryVoltage = g_otherParameter.Battery_Voltage;
+ pack.dischargCurrent = g_otherParameter.Discharg_Current;
+ pack.chargCurrent1 = g_otherParameter.Charg_Current;
+ pack.SOC = g_otherParameter.SOC;
+ pack.openCircuitVoltage1 = g_otherParameter.Solar_In_Circuit_Voltage;
+
+ if (g_controlParameter.dutyRatio) {
+ pack.chargSwitchStatus1 = 1;
+ } else {
+ pack.chargSwitchStatus1 = 0;
+ }
+
+ pack.chargCurrent2 = g_otherParameter.Charg_Current;
+ pack.openCircuitVoltage1 = g_otherParameter.Solar_In_Circuit_Voltage;
+
+ if (g_controlParameter.dutyRatio) {
+ pack.chargSwitchStatus2 = 1;
+ } else {
+ pack.chargSwitchStatus2 = 0;
+ }
+
+ pack.Mos_Temperature = g_otherParameter.HighSideMos_Temperature;
+
+ HY_batteryStatusQuery *Tpack = (HY_batteryStatusQuery *)pMsg;
+ pack.frameNumber = Tpack->frameNumber;
+
+ pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_batteryStatusResponse_PACK_SIZE - 2);
+
+ pack.end_Flag = g_otherParameter.endFlagHY;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
}
/* 电量统计数据报 */
void HY_MsgProcFunc_electricityStatistics(device_handle device, void *pMsg, uint32_t MsgLen)
{
+ HY_electricityStatisticsResponse pack;
+ pack.start_Flag = g_otherParameter.startFlagHY;
+ pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationID[0] = g_otherParameter.communicationID[0];
+ pack.communicationID[1] = g_otherParameter.communicationID[1];
+ pack.communicationID[2] = g_otherParameter.communicationID[2];
+ pack.communicationID[3] = g_otherParameter.communicationID[3];
+
+ pack.controlWord = HY_electricityStatistics;
+
+ pack.dataLen[0] = HY_electricityStatisticsResponse_dataLen >> 8;
+ pack.dataLen[1] = HY_electricityStatisticsResponse_dataLen;
+
+ pack.statisticalDuration = 0;
+ pack.totalChargCapacity = g_otherParameter.totalChargCapacity;
+ pack.totalElectricityConsumption = g_otherParameter.totalElectricityConsumption;
+ HY_electricityStatisticsQuery *Tpack = (HY_electricityStatisticsQuery *)pMsg;
+ pack.frameNumber = Tpack->frameNumber;
+
+ pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_electricityStatisticsResponse_PACK_SIZE - 2);
+ pack.end_Flag = g_otherParameter.endFlagHY;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
}
/* 传感器号码配置 */
void HY_MsgProcFunc_sensorNumberConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
{
+ HY_sensorNumberConfigurationResponse pack;
+ HY_sensorNumberConfig *Tpack = (HY_sensorNumberConfig *)pMsg;
+ if (HY_matchHardwareID(Tpack->newHardwareID)) {
+ g_otherParameter.communicationID[0] = Tpack->newCommunicationID[0];
+ g_otherParameter.communicationID[1] = Tpack->newCommunicationID[1];
+ g_otherParameter.communicationID[2] = Tpack->newCommunicationID[2];
+ g_otherParameter.communicationID[3] = Tpack->newCommunicationID[3];
+ pack.state = HY_success;
+ }
+ else {
+ pack.state = HY_fail;
+ }
+
+ pack.start_Flag = g_otherParameter.startFlagHY;
+
+ pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationID[0] = g_otherParameter.communicationID[0];
+ pack.communicationID[1] = g_otherParameter.communicationID[1];
+ pack.communicationID[2] = g_otherParameter.communicationID[2];
+ pack.communicationID[3] = g_otherParameter.communicationID[3];
+
+ pack.controlWord = Tpack->controlWord;
+
+ pack.dataLen[0] = HY_sensorNumberConfigurationResponse_dataLen >> 8;
+ pack.dataLen[1] = HY_sensorNumberConfigurationResponse_dataLen;
+
+ pack.frameNumber = Tpack->frameNumber;
+
+ pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_sensorNumberConfiguration_PACK_SIZE - 2);
+ pack.end_Flag = g_otherParameter.endFlagHY;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
}
/* 传感器号码查询 */
void HY_MsgProcFunc_sensorNumberInquiry(device_handle device, void *pMsg, uint32_t MsgLen)
{
+ HY_sensorNumberInquiryQuery *Tpack = (HY_sensorNumberInquiryQuery *)pMsg;
+ HY_sensorNumberInquiryResponse pack;
+
+ pack.start_Flag = g_otherParameter.startFlagHY;
+
+ pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationID[0] = g_otherParameter.communicationID[0];
+ pack.communicationID[1] = g_otherParameter.communicationID[1];
+ pack.communicationID[2] = g_otherParameter.communicationID[2];
+ pack.communicationID[3] = g_otherParameter.communicationID[3];
+
+ pack.controlWord = Tpack->controlWord;
+
+ pack.dataLen[0] = HY_sensorNumberInquiryResponse_dataLen >> 8;
+ pack.dataLen[1] = HY_sensorNumberInquiryResponse_dataLen;
+
+ pack.hardwareIDR[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareIDR[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareIDR[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareIDR[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareIDR[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareIDR[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationIDR[0] = g_otherParameter.communicationID[0];
+ pack.communicationIDR[1] = g_otherParameter.communicationID[1];
+ pack.communicationIDR[2] = g_otherParameter.communicationID[2];
+ pack.communicationIDR[3] = g_otherParameter.communicationID[3];
+
+ pack.frameNumber = Tpack->frameNumber;
+
+ pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_sensorNumberConfiguration_PACK_SIZE - 2);
+ pack.end_Flag = g_otherParameter.endFlagHY;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
}
/* 充电阈值电压配置 */
@@ -326,14 +668,98 @@ void HY_MsgProcFunc_chargingRangeVoltageQuery(device_handle device, void *pMsg,
/* 复位指令 */
void HY_MsgProcFunc_resetInstruction(device_handle device, void *pMsg, uint32_t MsgLen)
{
+ HY_resetInstructionQuery *Tpack = (HY_resetInstructionQuery *)pMsg;
+ HY_resetInstructionResponse pack;
+
+ pack.start_Flag = g_otherParameter.startFlagHY;
+
+ pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+ pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+ pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+ pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+ pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+ pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+
+ pack.communicationID[0] = g_otherParameter.communicationID[0];
+ pack.communicationID[1] = g_otherParameter.communicationID[1];
+ pack.communicationID[2] = g_otherParameter.communicationID[2];
+ pack.communicationID[3] = g_otherParameter.communicationID[3];
+
+ pack.controlWord = Tpack->controlWord;
+
+ pack.dataLen[0] = HY_resetInstructionResponse_dataLen >> 8;
+ pack.dataLen[1] = HY_resetInstructionResponse_dataLen;
+
+ pack.state = HY_success;
+
+ pack.frameNumber = Tpack->frameNumber;
+
+ pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_resetInstructionResponse_PACK_SIZE - 2);
+ pack.end_Flag = g_otherParameter.endFlagHY;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+ break;
+ }
+ }
}
/* 充电控制配置 */
void HY_MsgProcFunc_chargingControlConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
{
-
+// HY_chargingControlConfig *Tpack = (HY_chargingControlConfig *)pMsg;
+//
+// HY_chargingControlConfigResponse pack;
+//
+// pack.start_Flag = g_otherParameter.startFlagHY;
+//
+// pack.hardwareID[0] = g_otherParameter.hardwareID[0];
+// pack.hardwareID[1] = g_otherParameter.hardwareID[1];
+// pack.hardwareID[2] = g_otherParameter.hardwareID[2];
+// pack.hardwareID[3] = g_otherParameter.hardwareID[3];
+// pack.hardwareID[4] = g_otherParameter.hardwareID[4];
+// pack.hardwareID[5] = g_otherParameter.hardwareID[5];
+//
+// pack.communicationID[0] = g_otherParameter.communicationID[0];
+// pack.communicationID[1] = g_otherParameter.communicationID[1];
+// pack.communicationID[2] = g_otherParameter.communicationID[2];
+// pack.communicationID[3] = g_otherParameter.communicationID[3];
+//
+// pack.controlWord = Tpack->controlWord;
+//
+// pack.dataLen[0] = HY_chargingControlConfigResponse_dataLen >> 8;
+// pack.dataLen[1] = HY_chargingControlConfigResponse_dataLen;
+//
+// pack.state = HY_success;
+//
+// pack.frameNumber = Tpack->frameNumber;
+//
+// pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_chargingControlConfigResponse_PACK_SIZE - 2);
+// pack.end_Flag = g_otherParameter.endFlagHY;
+//
+// while (1) {
+// Delay_Ms(randomDelay());
+// if (!Check_485_bus_busy(device)) {
+// uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
+//
+// if (device == g_bat485_uart3_handle) {
+// USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+// } else {
+// USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+// }
+// break;
+// }
+// }
}
/* 充电控制查询 */
diff --git a/App/src/inflash.c b/App/src/inflash.c
index 1da492a..2cad014 100644
--- a/App/src/inflash.c
+++ b/App/src/inflash.c
@@ -8,6 +8,335 @@
#include "inflash.h"
#include "flash.h"
#include "sl_protocol.h"
+#include "parameter.h"
+#include
+
+/**
+ * @brief 校验算法
+ * @param
+ * @retval
+ */
+static uint16_t configCheckFunc(uint8_t *arr_buff, uint8_t len)
+{
+ uint16_t crc = 0xFFFF;
+ uint16_t i, j;
+ for (j = 0; j < len; ++j) {
+ crc = crc ^ (*arr_buff++);
+ for (i = 0; i < 8; ++i) {
+ if ((crc&0x0001) > 0) {
+ crc = crc >> 1;
+ crc = crc ^ 0xa001;
+ }
+ else {
+ crc = crc >> 1;
+ }
+ }
+ }
+ return crc;
+}
+
+/**
+ * @brief 保存配置信息
+ * @param save_config_info 需要保存的配置信息
+ * @retval
+ */
+void save_config_info(config_info *save_config_info)
+{
+ SPI_Flash_Write((uint8_t *)save_config_info, CONFIG_SAVE_ADDR_BEGIN, CONFIG_INFO_SIZE);
+}
+
+/**
+ * @brief 保存配置信息到备份区
+ * @param save_config_info 需要保存的配置信息
+ * @retval
+ */
+void save_backups_config_info(config_info *save_config_info)
+{
+ SPI_Flash_Write((uint8_t *)save_config_info, CONFIG_SAVE_addr, CONFIG_INFO_SIZE);
+}
+
+/**
+ * @brief 读取配置信息
+ * @param read_config_info 读取配置信息并保存在output_config_info中
+ */
+void read_config_info(config_info *output_config_info)
+{
+ SPI_Flash_Read((uint8_t *)&output_config_info, CONFIG_SAVE_ADDR_BEGIN, CONFIG_INFO_SIZE);
+}
+
+/**
+ * @brief 读取备份的配置信息
+ * @param read_config_info 读取配置信息并保存在output_config_info中
+ */
+static void read_backups_config_info(config_info *output_config_info)
+{
+ SPI_Flash_Read((uint8_t *)&output_config_info, CONFIG_SAVE_addr, CONFIG_INFO_SIZE);
+}
+
+/**
+ * @brief 检测flash中是否有配置文件或者文件是否有损坏,损坏了就将备份的配置文件读出,没有则将默认配置保存在其中
+ * @param read_config_info1 读取的配置信息并保存在in_config_info中
+ * @retval
+ *
+ */
+void checkFlashContent(void)
+{
+ config_info temp_configInfo;
+ read_config_info(&temp_configInfo);
+
+ if (temp_configInfo.crc == configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2)) {
+ return;
+ }
+
+ read_backups_config_info(&temp_configInfo);
+ if (temp_configInfo.crc == configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2)) {
+ save_config_info(&temp_configInfo);
+ return;
+ }
+
+ config_info configInfo = {
+ .address = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
+ .Access_Node_Type = 0x01,
+ .Communication_Methods = 0x02,
+ .gw485_Baud = 115200,
+ .bat485_Baud = 115200,
+
+ .hardwareID = {0x48, 0x59, 0x30, 0x30, 0x30, 0x31},
+ .communicationID = {0x00, 0x00, 0x00, 0x01},
+ .protocolType = 0x01,
+
+ .CommunicationProtocolType = 0x00,
+ .onlyPower = 0x01,
+
+ .constantVoltageV = 14.2,
+ .floatI = 0.02,
+ .startSolarOpenCircuitV = 17,
+ .stopSolarOpenCircuitV = 15,
+ .constantVoltageChargeV = 14.4,
+ .FloatChargeV = 14.2,
+ .HighSideMosTemperature_stop = 100,
+ .HighSideMosTemperature_end = 90,
+ .HighSideMosTemperature_start = 50,
+ .loopImpedance = 0.0,
+ .totalElectricityConsumption = 0.0,
+ .totalChargCapacity = 0.0,
+
+ .checkSolarOpenCircuitVTime = 10,
+// .registerRefreshTime = 1,
+ .sensorEnableBroadcastTime = 20,
+ .outputAgainFlagTime = 10,
+ .excessiveLoadFlagTime = 60,
+ .eLAgainTime = 1800,
+ };
+
+ configInfo.crc = configCheckFunc((uint8_t *)&configInfo, CONFIG_INFO_SIZE - 2);
+
+ save_config_info(&configInfo);
+}
+
+/**
+ * @brief 保存回路阻抗的值
+ * @param loopImpedance 需要保存的回路阻抗的值
+ * @retval
+ *
+ */
+void saveLoopImpedance(float_t *loopImpedance)
+{
+ config_info temp_configInfo;
+ read_config_info(&temp_configInfo);
+
+ temp_configInfo.loopImpedance = *loopImpedance;
+
+ temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
+ save_config_info(&temp_configInfo);
+}
+
+/**
+ * @brief 保存总充电电量和总消耗电量的值
+ * @param totalElectricityConsumption 需要保存的总消耗电量
+ * totalChargCapacity 需要保存的总充电电量
+ * @retval
+ *
+ */
+void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity)
+{
+ config_info temp_configInfo;
+ read_config_info(&temp_configInfo);
+
+ temp_configInfo.totalElectricityConsumption = *totalElectricityConsumption;
+ temp_configInfo.totalChargCapacity = *totalChargCapacity;
+
+ temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
+ save_config_info(&temp_configInfo);
+}
+
+/**
+ * @brief 读取配置文件初始化各参数
+ * @param
+ * @retval
+ *
+ */
+void config_info_start(void)
+{
+ checkFlashContent();
+
+ config_info temp_configInfo;
+ read_config_info(&temp_configInfo);
+
+ g_controlParameter.constantVoltageV = temp_configInfo.constantVoltageV;
+ g_controlParameter.floatI = temp_configInfo.floatI;
+ g_controlParameter.startSolarOpenCircuitV = temp_configInfo.startSolarOpenCircuitV;
+ g_controlParameter.stopSolarOpenCircuitV = temp_configInfo.stopSolarOpenCircuitV;
+ g_controlParameter.stopSolarOpenCircuitV = temp_configInfo.constantVoltageChargeV;
+ g_controlParameter.FloatV = temp_configInfo.FloatChargeV;
+ g_controlParameter.loopImpedance = temp_configInfo.loopImpedance;
+ g_controlParameter.HighSideMosTemperature_stop = temp_configInfo.HighSideMosTemperature_stop;
+ g_controlParameter.HighSideMosTemperature_end = temp_configInfo.HighSideMosTemperature_end;
+ g_controlParameter.HighSideMosTemperature_start = temp_configInfo.HighSideMosTemperature_start;
+ g_controlParameter.sensorEnableBroadcastTime = temp_configInfo.sensorEnableBroadcastTime;
+ g_controlParameter.checkSolarOpenCircuitVTime = temp_configInfo.checkSolarOpenCircuitVTime;
+ g_controlParameter.outputAgainFlagTime = temp_configInfo.outputAgainFlagTime;
+ g_controlParameter.excessiveLoadFlagTime = temp_configInfo.excessiveLoadFlagTime;
+ g_controlParameter.eLAgainTime = temp_configInfo.eLAgainTime;
+
+ strlcpy(g_otherParameter.address, temp_configInfo.address, 7);
+ g_otherParameter.Access_Node_Type = temp_configInfo.Access_Node_Type;
+ g_otherParameter.Communication_Methods = temp_configInfo.Communication_Methods;
+ strlcpy(g_otherParameter.hardwareID, temp_configInfo.hardwareID, 6);
+ strlcpy(g_otherParameter.communicationID, temp_configInfo.communicationID, 4);
+ g_otherParameter.CommunicationProtocolType = temp_configInfo.CommunicationProtocolType;
+ g_otherParameter.Battery_Voltage = 0;
+ g_otherParameter.Output_Voltage = 0;
+ g_otherParameter.Charg_Current = 0;
+ g_otherParameter.Discharg_Current = 0;
+ g_otherParameter.Input_Voltage = 0;
+ g_otherParameter.Solar_Open_Circuit_Voltage = 0;
+ g_otherParameter.HighSideMos_Temperature = 0;
+ g_otherParameter.Solar_In_Circuit_Voltage = 0;
+ g_otherParameter.Charg_BatteryCurrent = 0;
+ g_otherParameter.totalElectricityConsumption = temp_configInfo.totalElectricityConsumption;
+ g_otherParameter.totalChargCapacity = temp_configInfo.totalChargCapacity;
+ g_otherParameter.SOC = 0;
+ g_otherParameter.chargMos_State = 0;
+ g_otherParameter.DischargMos_State = 0;
+ g_otherParameter.MPPT_Mode = 0;
+ strlcpy(g_otherParameter.versionInformation, "SV01_24101501", 13);
+
+ strlcpy(g_otherParameter.startFlagSL, "SL", 2);
+ g_otherParameter.endFlagSL = 0x16;
+ g_otherParameter.startFlagHY = 0x68;
+ g_otherParameter.endFlagHY = 0x16;
+
+ g_otherParameter.batteryState = 0;
+ g_otherParameter.impedanceStart = 1;
+ g_otherParameter.overTemperature = 0;
+ g_otherParameter.RegistrationRequestFlag = 0;
+ g_otherParameter.runBroadcast = 1;
+ g_otherParameter.RegisterNumberMax = 5;
+ g_otherParameter.RegisterStartAddressMax = 0x150;
+
+ if (g_otherParameter.CommunicationProtocolType == 0x00) {
+ g_otherParameter.gw485_Baud = temp_configInfo.gw485_Baud;
+ g_otherParameter.bat485_Baud = temp_configInfo.bat485_Baud;
+ } else if (g_otherParameter.CommunicationProtocolType == 0x01) {
+ g_otherParameter.bat485_Baud = temp_configInfo.bat485_Baud;
+ if (temp_configInfo.protocolType == 0x01) {
+ g_otherParameter.gw485_Baud = 9600;
+ } else if (temp_configInfo.protocolType == 0x02) {
+ g_otherParameter.gw485_Baud = 115200;
+ }
+ }
+}
+
+/**
+ * @brief 判断接收到的配置文件数据是否正确,正确的话存入flash中
+ * @param
+ * @retval
+ *
+ */
+void read_and_process_config_data(void)
+{
+ while (strlen(config_buff) > RECV_CONFIG_INFO) {
+ recv_config_info *pack = (recv_config_info *)config_buff;
+
+ if (pack->start_Flag[0] != g_otherParameter.startFlagSL[0]
+ || pack->start_Flag[1] != g_otherParameter.startFlagSL[1]) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+// if (pack->address[0] != g_otherParameter.address[0]
+// || pack->address[1] != g_otherParameter.address[1]
+// || pack->address[2] != g_otherParameter.address[2]
+// || pack->address[3] != g_otherParameter.address[3]
+// || pack->address[4] != g_otherParameter.address[4]
+// || pack->address[5] != g_otherParameter.address[5]
+// || pack->address[6] != g_otherParameter.address[6]) {
+// memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+// continue;
+// }
+ uint16_t temp_u16;
+ temp_u16 = (uint16_t)pack->Access_Node_Type[0] << 8
+ | (uint16_t)pack->Access_Node_Type[1];
+// if (temp_u16 != POWERBOX || temp_u16 != MICROMETEOROLOGY) {
+ if (temp_u16 != POWERBOX) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ temp_u16 = (uint16_t)pack->Communication_Methods[0] << 8
+ | (uint16_t)pack->Communication_Methods[1];
+// if (temp_u16 != RS485 || temp_u16 != RJ45) {
+ if (temp_u16 != RS485) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ uint32_t temp_u32;
+ temp_u32 = (uint32_t)pack->gw485_Baud[0] << 24
+ | (uint32_t)pack->gw485_Baud[1] << 16
+ | (uint32_t)pack->gw485_Baud[2] << 8
+ | (uint32_t)pack->gw485_Baud[3];
+ if (temp_u32 != 9600 || temp_u32!= 115200) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ temp_u32 = (uint32_t)pack->bat485_Baud[0] << 24
+ | (uint32_t)pack->bat485_Baud[1] << 16
+ | (uint32_t)pack->bat485_Baud[2] << 8
+ | (uint32_t)pack->bat485_Baud[3];
+ if (temp_u32 != 9600 || temp_u32!= 115200 || temp_u32!= 0) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ if (pack->protocolType != 0x01 || pack->protocolType != 0x02) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ if (pack->CommunicationProtocolType != 0x00 || pack->CommunicationProtocolType != 0x01) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ if (pack->onlyPower != 0x00 || pack->onlyPower != 0x01) {
+ memcpy(config_buff, config_buff + 1, RECV_CONFIG_INFO - 1);
+ continue;
+ }
+
+ float_t temp_float;
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/App/src/mppt_control.c b/App/src/mppt_control.c
index ff6818e..97e9e2e 100644
--- a/App/src/mppt_control.c
+++ b/App/src/mppt_control.c
@@ -14,3 +14,222 @@
#include "task.h"
#include "uart_dev.h"
#include "parameter.h"
+
+
+static void ConstantCurrentCharge(void);
+static void ConstantVoltageCharge(void);
+static void FloatingCharge(void);
+
+
+/**
+ * @brief 恒定输入电压
+ * @param
+ * @retval
+ *
+ */
+void mppt_constantVoltage(float InVoltage)
+{
+ static float_t kp = 0.005;
+ static float_t ki = 0.00001;
+
+ float_t pv1Volt = g_otherParameter.Input_Voltage;
+ float_t error = pv1Volt - InVoltage;
+ float_t stepPwm = kp * error + ki * pv1Volt;
+ g_controlParameter.dutyRatio += stepPwm;
+
+ Set_duty_ratio(&g_controlParameter.dutyRatio);
+}
+
+/**
+ * @brief 恒定输出电压(电池)
+ * @param
+ * @retval
+ *
+ */
+void mppt_constantVoltageB(float OutVoltage)
+{
+ static float_t kp = 0.005;
+ static float_t ki = 0.00001;
+
+ float_t outVolt = g_otherParameter.Battery_Voltage;
+
+ float_t error = OutVoltage - outVolt;
+ float_t stepPwm = kp * error + ki * outVolt;
+ g_controlParameter.dutyRatio += stepPwm;
+
+ Set_duty_ratio(&g_controlParameter.dutyRatio);
+}
+
+/**
+ * @brief 恒定输出电压(输出检测端)
+ * @param
+ * @retval
+ *
+ */
+void mppt_constantVoltageO(float OutVoltage)
+{
+ static float_t kp = 0.005;
+ static float_t ki = 0.00001;
+
+ float_t outVolt = g_otherParameter.Output_Voltage;
+
+ float_t error = OutVoltage - outVolt;
+ float_t stepPwm = kp * error + ki * outVolt;
+ g_controlParameter.dutyRatio += stepPwm;
+
+ Set_duty_ratio(&g_controlParameter.dutyRatio);
+}
+
+/**
+ * @brief 恒流充电(大电流充电),mppt最大功率充电
+ * @param
+ * @retval
+ *
+ */
+void ConstantCurrentCharge(void)
+{
+ mppt_constantVoltage(18);
+}
+
+/**
+ * @brief 恒压充电
+ * @param
+ * @retval
+ *
+ */
+void ConstantVoltageCharge(void)
+{
+ mppt_constantVoltageO(g_controlParameter.constantVoltageChargeV);
+}
+
+/**
+ * @brief 浮充充电
+ * @param
+ * @retval
+ *
+ */
+void FloatingCharge(void)
+{
+ mppt_constantVoltageO(g_controlParameter.FloatV);
+}
+
+/**
+ * @brief mppt控制模式的确定
+ * @param
+ * @retval
+ *
+ */
+void MpptContorlChoice(void)
+{
+ switch(g_otherParameter.MPPT_Mode) {
+
+ case CONSTANTCURRENT:
+ ConstantCurrentCharge();
+ break;
+
+ case CONSTANTVOLTAGE:
+ ConstantVoltageCharge();
+ break;
+
+ case FLOAT:
+ FloatingCharge();
+ break;
+
+ default:
+ break;
+ }
+}
+
+/**
+ * @brief mppt模式的确定
+ * @param
+ * @retval
+ *
+ */
+void MpptModeChoice(void)
+{
+ /* 太阳能板输出电压小于一定值且充电电流也小于一定值时mppt停止工作 */
+ if ((g_otherParameter.Input_Voltage < g_controlParameter.stopSolarOpenCircuitV
+ && g_otherParameter.Charg_Current < 0.05) ){
+// && g_otherParameter.MPPT_Mode != NoWork) {
+ g_otherParameter.MPPT_Mode = NoWork;
+
+ TIM_Cmd(TIM3, DISABLE);
+ TIM_SetCompare4(TIM4, 0);
+ g_controlParameter.dutyRatio = 0;
+
+ TimeSliceOffset_Register(&g_startMpptControl, Task_startMpptControl
+ , startMpptControl_reloadVal, startMpptControl_offset);
+ return;
+ }
+
+ /* 流向电池的电流小于一定值或者电压过大或者过小采用浮充输出 */
+ if ((g_otherParameter.Charg_BatteryCurrent < 0.05 && g_otherParameter.Charg_BatteryCurrent > -0.05)
+ || g_otherParameter.Battery_Voltage > 16 || g_otherParameter.Battery_Voltage < 8) {
+ g_otherParameter.MPPT_Mode = FLOAT;
+
+ g_otherParameter.batteryState = 0;
+
+ return;
+ }
+
+ /* */
+ if ((g_controlParameter.constantVoltageV - 0.2) >= g_otherParameter.Battery_Voltage
+// && g_otherParameter.Charg_BatteryCurrent > 0.1) {
+ && g_otherParameter.Charg_Current > 0.1) {
+ g_otherParameter.MPPT_Mode = CONSTANTCURRENT;
+ return;
+ }
+
+ if (((g_controlParameter.constantVoltageV < g_otherParameter.Battery_Voltage)
+ && (g_controlParameter.floatI + 0.1 <= g_otherParameter.Charg_Current))) {
+ g_otherParameter.MPPT_Mode = CONSTANTVOLTAGE;
+ return;
+ }
+
+ if ((((g_controlParameter.constantVoltageV < g_otherParameter.Battery_Voltage)
+ && (g_controlParameter.floatI > g_otherParameter.Charg_Current))
+ && (g_controlParameter.floatI > g_otherParameter.Discharg_Current))) {
+// || g_Mppt_Para.MPPT_Mode == FLOAT) {
+ g_otherParameter.MPPT_Mode = FLOAT;
+ return;
+ }
+
+}
+
+/**
+ * @brief mppt的控制
+ * @param
+ * @retval
+ *
+ */
+void MpptContorl(void)
+{
+ g_otherParameter.Output_Voltage = get_PV_VOLT_OUT();
+ g_otherParameter.Input_Voltage = get_PV1_VOLT_IN();
+
+ /* 出现adc采集出错全为0,退出本次中断 */
+ if (g_otherParameter.Discharg_Current == 0 && g_otherParameter.Charg_Current == 0) {
+ return;
+ }
+
+ g_otherParameter.Charg_BatteryCurrent = g_otherParameter.Charg_Current - g_otherParameter.Discharg_Current;
+
+ /* 判断有无电池 */
+ if (g_otherParameter.batteryState == 0 && (g_otherParameter.Charg_BatteryCurrent > 0.1 || g_otherParameter.Charg_BatteryCurrent < -0.1)
+ && g_otherParameter.Output_Voltage < 14.2) {
+ g_otherParameter.batteryState = 1;
+ }
+
+ if (!g_otherParameter.overTemperature) {
+ MpptModeChoice();
+ MpptContorlChoice();
+ }
+
+}
+
+
+
+
+
+
diff --git a/App/src/sl_protocol.c b/App/src/sl_protocol.c
index 3bc28f4..5eecc19 100644
--- a/App/src/sl_protocol.c
+++ b/App/src/sl_protocol.c
@@ -15,8 +15,729 @@
#include "tim.h"
#include "parameter.h"
-default_Value defaultValue = {'S', 'L'\
- , 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11\
- , POWERBOX\
- , RS485
- , 0x16};
+
+uint8_t rs485_buff[buffLen]={0x00};
+uint8_t config_buff[configBuffLen] = {0x00};
+
+/* 鐢ㄤ簬瑙f瀽涓插彛鍖呮椂鐨勯暱搴 */
+#define analyzeStartFlag 2 //闀垮害涓2鏃惰В鏋愯捣濮嬫爣蹇
+#define analyzeAddress 9 //闀垮害涓9鏃惰В鏋愬湴鍧
+#define analyzeFunctionCode 10 //闀垮害涓10鏃惰В鏋愬姛鑳界爜
+#define analyzeWritelen 14 //鍔熻兘鐮佷负鍐欏叆瀵勫瓨鍣ㄤ笖buffer闀垮害涓14鏃讹紝鍙互瑙f瀽鍑哄啓鍏ュ瘎瀛樺櫒鍖呯殑闀垮害
+
+/* 闈欐佸嚱鏁扮敵鏄 */
+static void SL_MsgProcFunc_Read_Register(device_handle device, void *pMsg, uint32_t MsgLen);
+static void SL_MsgProcFunc_Write_Register(device_handle device, void *pMsg, uint32_t MsgLen);
+static void SL_MsgProcFunc_Broadcast_Scan(device_handle device, void *pMsg, uint32_t MsgLen);
+static void SL_MsgProcFunc_Registration_request(device_handle device, void *pMsg, uint32_t MsgLen);
+static void SL_MsgProcFunc_Update_Profile(device_handle device, void *pMsg, uint32_t MsgLen);
+static void SL_MsgProcFunc_Remote_Upgrade(device_handle device, void *pMsg, uint32_t MsgLen);
+
+static uint16_t SL_ReadRegisterBatteryVoltage(void *pMsg);
+static uint16_t SL_ReadRegisterChargCurrent(void *pMsg);
+static uint16_t SL_ReadRegisterDischargCurrent(void *pMsg);
+static uint16_t SL_ReadRegisterSolarOpenCircuitVoltage(void *pMsg);
+static uint16_t SL_ReadRegisterHighSideMosTemperature(void *pMsg);
+static uint16_t SL_ReadRegisterDischargMosState(void *pMsg);
+static uint16_t SL_ReadRegisterMPPTMode(void *pMsg);
+
+/* 鍔熻兘鐮佸鐞嗚〃 */
+SL_FuncionMsgProcTable g_MsgTbl[] =
+{
+ {SL_Function_Code_Read_Register, SL_MsgProcFunc_Read_Register},
+ {SL_Function_Code_Write_Register, SL_MsgProcFunc_Write_Register},
+ {SL_Function_Code_Broadcast_Scan, SL_MsgProcFunc_Broadcast_Scan},
+ {SL_Function_Code_Registration_request, SL_MsgProcFunc_Registration_request},
+ {SL_Function_Code_Update_Profile, SL_MsgProcFunc_Update_Profile},
+ {SL_Function_Code_Remote_Upgrade, SL_MsgProcFunc_Remote_Upgrade},
+};
+
+/* 瀵勫瓨鍣ㄥ鐞嗚〃 */
+SL_RegProcTable g_RegTblR[] =
+{
+// {SL_Register_Registration_Status, SL_ReadRegisterRegistrationStatus},
+// {SL_Register_address, SL_ReadRegisteraddress},
+// {SL_Register_Access_Node_Type, SL_ReadRegisterAccessNodeType},
+// {SL_Register_Communication_Methods, SL_ReadRegisterCommunicationMethods},
+ {SL_Register_Battery_Voltage, SL_ReadRegisterBatteryVoltage},
+ {SL_Register_Charg_Current, SL_ReadRegisterChargCurrent},
+ {SL_Register_Discharg_Current, SL_ReadRegisterDischargCurrent},
+ {SL_Register_Solar_Open_Circuit_Voltage, SL_ReadRegisterSolarOpenCircuitVoltage},
+ {SL_Register_HighSideMos_Temperature, SL_ReadRegisterHighSideMosTemperature},
+ {SL_Register_DischargMos_State, SL_ReadRegisterDischargMosState},
+ {SL_Register_MPPT_Mode, SL_ReadRegisterMPPTMode},
+};
+
+/* 瀵勫瓨鍣ㄥ鐞嗚〃 */
+SL_RegProcTable g_RegTblW[] =
+{
+// {SL_Register_Registration_Status, SL_WriteRegisterRegistrationStatus},
+// {SL_Register_address, SL_WriteRegisteraddress},
+// {SL_Register_Access_Node_Type, SL_WriteRegisterAccessNodeType},
+// {SL_Register_Communication_Methods, SL_WriteRegisterCommunicationMethods},
+// {SL_Register_Battery_Voltage, SL_WriteRegisterBatteryVoltage},
+// {SL_Register_Battery_temperature, SL_WriteRegisterBatterytemperature},
+// {SL_Register_Remaining_Battery_Bower, SL_WriteRegisterRemainingBatteryBower},
+// {SL_Register_Solar_Open_Circuit_Voltage1, SL_WriteRegisterSolarOpenCircuitVoltage1},
+// {SL_Register_Solar_Open_Circuit_Voltage2, SL_WriteRegisterSolarOpenCircuitVoltage2},
+};
+
+/**
+ * @brief 鏍¢獙绠楁硶
+ * @param
+ * @retval
+ */
+uint16_t CheckFuncSL(uint8_t *arr_buff, uint8_t len)
+{
+ uint16_t crc = 0xFFFF;
+ uint16_t i, j;
+ for (j = 0; j < len; ++j) {
+ crc = crc ^ (*arr_buff++);
+ for (i = 0; i < 8; ++i) {
+ if ((crc&0x0001) > 0) {
+ crc = crc >> 1;
+ crc = crc ^ 0xa001;
+ }
+ else {
+ crc = crc >> 1;
+ }
+ }
+ }
+ return crc;
+}
+
+/**
+ * @brief 闅忔満寤舵椂鍑芥暟,寤舵椂鍖洪棿100-2500ms锛屽垎杈ㄧ巼10ms聽聽
+ * @param
+ * @retval 寤舵椂鏃堕棿
+ */
+int randomDelay()
+{
+ int minSeconds = 10;
+ int maxSeconds = 250;
+// srand(SystemCoreClock);//time(NULL)鏇挎崲涓哄搴旀搷浣滅郴缁熸椂閽
+ srand(TIM_GetCounter(TIM4));
+ int delaySeconds = minSeconds + rand() % (maxSeconds - minSeconds + 1);
+ return delaySeconds * 10;
+}
+
+/**
+ * @brief 妫娴485鎬荤嚎鏄惁绻佸繖
+ * @param
+ * @retval 1 绻佸繖
+ * 0 绌洪棽
+ */
+uint8_t Check_485_bus_busy(device_handle device)
+{
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ uint16_t num_ago = ring_queue_length(device);
+ Delay_Ms(2);
+ uint16_t num_now = ring_queue_length(device);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, DISABLE);
+ }
+
+ if (num_now == num_ago) {
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * @brief 璇诲彇
+ * @param
+ * @retval
+ */
+void SL_MsgProcFunc_Read_Register(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ SL_Mppt_Rorecv_pack *rpack = (SL_Mppt_Rorecv_pack *)pMsg;
+
+ uint16_t Register_Number_16 = chang_8_to_16(rpack->read_Register_Number_L,rpack->read_Register_Number_H);
+ if (Register_Number_16 > g_otherParameter.RegisterNumberMax) {
+ log_error(" Register_Number error:%x \r\n", Register_Number_16);
+ return;
+ }
+
+ uint16_t Start_Address_16 = chang_8_to_16(rpack->read_Register_Start_Address_L,rpack->read_Register_Start_Address_H);
+ if (Start_Address_16 > g_otherParameter.RegisterStartAddressMax) {
+ log_error(" Register_Start_Address error : %x \r\n", Start_Address_16);
+ return;
+ }
+
+ /* 璇诲彇瀵勫瓨鍣ㄦ暟鎹 */
+// uint8_t reply_Data_Content[2 * 5] = {0};
+ uint16_t reply_Data_Content[10] = {0};
+ for ( uint16_t pos = 0; pos < Register_Number_16; pos++) {
+ for (uint16_t var = 0; var < sizeof(g_RegTblR) / sizeof(SL_RegProcTable); var++) {
+ if (g_RegTblR[var].regId == (Start_Address_16 + pos)) {
+// *(uint16_t *)&reply_Data_Content[pos * 2] = g_RegTblR[var].pRegProc(NULL);
+ reply_Data_Content[pos] = g_RegTblR[var].pRegProc(NULL);
+ }
+ }
+ }
+
+ /* 鎵撳寘 */
+ memset(rs485_buff, 0, sizeof(rs485_buff));
+ uint8_t *replay_pack = rs485_buff;
+// strlcpy(replay_pack, g_slConfigInfo.start_Flag, 2);
+ *(replay_pack) = g_otherParameter.startFlagSL[0];
+ *(replay_pack + 1) = g_otherParameter.startFlagSL[1];
+
+ replay_pack += 2;
+// strlcpy(replay_pack, g_slConfigInfo.address, 7);
+ *(replay_pack) = g_otherParameter.address[0];
+ *(replay_pack + 1) = g_otherParameter.address[1];
+ *(replay_pack + 2) = g_otherParameter.address[2];
+ *(replay_pack + 3) = g_otherParameter.address[3];
+ *(replay_pack + 4) = g_otherParameter.address[4];
+ *(replay_pack + 5) = g_otherParameter.address[5];
+ *(replay_pack + 6) = g_otherParameter.address[6];
+
+
+ replay_pack += 7;
+ *replay_pack = SL_Function_Code_Read_Register;
+
+ replay_pack += 1;
+// *(uint16_t *)&replay_pack = rpack->read_Register_Number;
+ *replay_pack = (Register_Number_16 >> 8);
+ *(replay_pack + 1) = (Register_Number_16);
+
+ replay_pack += 2;
+ for (uint8_t var = 0; var < Register_Number_16 * 2; var++) {
+ if (0 == (var & 0x01)) {
+ *(replay_pack + var) = (reply_Data_Content[var / 2] >> 8);
+ } else {
+ *(replay_pack + var) = (reply_Data_Content[var / 2]);
+ }
+ }
+
+ replay_pack += Register_Number_16 * 2;
+ uint16_t crc_temp = CheckFuncSL(rs485_buff, (2 + 7 + 1 + 2 + Register_Number_16 * 2));
+// log_info("CheckFuncSL crc_temp: %x \r\n", crc_temp);
+ *replay_pack = (uint8_t)(crc_temp >> 8);
+ replay_pack += 1;
+ *replay_pack = (uint8_t)crc_temp;
+
+ replay_pack += 1;
+ *replay_pack = g_otherParameter.endFlagSL;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+// log_info("pack : %s", (uint8_t *)&replay_pack);
+
+// uart_dev_write(device, (uint8_t *)&replay_pack, 16 + Register_Number_16 * 2 + 1);
+ uart_dev_write(device, rs485_buff, 16 + Register_Number_16 * 2);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
+}
+
+void SL_MsgProcFunc_Write_Register(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ SL_Mppt_Worecv_pack *wpack = (SL_Mppt_Worecv_pack *)pMsg;
+ uint8_t *buff = (uint8_t *)pMsg;
+
+ uint16_t Register_Number = \
+ chang_8_to_16(wpack->write_Register_Number_L, wpack->write_Register_Number_H);
+ if (Register_Number > g_otherParameter.RegisterNumberMax) {
+ log_error(" Register_Number error:%x \r\n", Register_Number);
+ return;
+ }
+
+ uint16_t Register_Start_Address = \
+ chang_8_to_16(wpack->write_Register_Start_Address_L, wpack->write_Register_Start_Address_H);
+ if (Register_Start_Address > g_otherParameter.RegisterStartAddressMax) {
+ log_error(" Register_Start_Address error : %x \r\n", Register_Start_Address);
+ return;
+ }
+
+ uint16_t content[10] = {0};
+
+ for (uint16_t var = 0; var < Register_Number; var++) {
+ content[var] = buff[14 + 2 * var] << 8 | buff[14 + 2 * var + 1];
+ }
+
+ for ( uint16_t pos = 0; pos < Register_Number; pos++) {
+ for (uint16_t i = 0; i < sizeof(g_RegTblW) / sizeof(SL_RegProcTable); i++) {
+ if (g_RegTblW[i].regId == (Register_Start_Address + pos)) {
+ g_RegTblW[i].pRegProc(&content[pos]);
+ }
+ }
+ }
+}
+
+void SL_MsgProcFunc_Broadcast_Scan(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ g_recvBroadcastDevice = device;
+
+ g_otherParameter.RegistrationRequestFlag = 1;
+
+ /* 浠诲姟鍒涚珛鍚庯紝绔嬪嵆鎵ц涓娆 */
+ TimeSliceOffset_Register(&g_recvbroadcast, Task_recvbroadcast \
+ , recvbroadcast_reloadVal, recvbroadcast_offset);
+ g_recvbroadcast.runFlag = 1;
+}
+
+void SL_MsgProcFunc_Registration_request(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ log_info("Registration success \r\n");
+ recvbroadcast_flag = 1;
+ g_otherParameter.RegistrationRequestFlag = 0;
+ TimeSliceOffset_Unregister(&g_recvbroadcast);
+ g_recvbroadcast.runFlag = 0;
+ SL_Mppt_RegistrationReply_pack *rpack = (SL_Mppt_RegistrationReply_pack *)pMsg;
+ g_otherParameter.Registration_Status = chang_8_to_16(rpack->registration_Status_L, rpack->registration_Status_H);
+
+ /* 20s鍐呬笉鍐嶆帴鏀跺箍鎾抚 */
+ TimeSliceOffset_Register(&g_sensorEnableBroadcast, Task_sensorEnableBroadcast
+ , sensorEnableBroadcast_reloadVal, sensorEnableBroadcast_offset);
+}
+
+void SL_MsgProcFunc_Update_Profile(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ SL_Mppt_SOther_pack SUpdateProfile_pack = {0};
+
+ SUpdateProfile_pack.start_Flag[0] = g_otherParameter.startFlagSL[0];
+ SUpdateProfile_pack.start_Flag[1] = g_otherParameter.startFlagSL[1];
+
+ SUpdateProfile_pack.address[0] = g_otherParameter.address[0];
+ SUpdateProfile_pack.address[1] = g_otherParameter.address[1];
+ SUpdateProfile_pack.address[2] = g_otherParameter.address[2];
+ SUpdateProfile_pack.address[3] = g_otherParameter.address[3];
+ SUpdateProfile_pack.address[4] = g_otherParameter.address[4];
+ SUpdateProfile_pack.address[5] = g_otherParameter.address[5];
+ SUpdateProfile_pack.address[6] = g_otherParameter.address[6];
+
+ SUpdateProfile_pack.function_Code = SL_Function_Code_Update_Profile;
+
+ SUpdateProfile_pack.state = 0x01;
+
+ uint16_t crc = CheckFuncSL((uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE - 3);
+ SUpdateProfile_pack.check_Bit_H = crc >> 8;
+ SUpdateProfile_pack.check_Bit_L = crc;
+
+ SUpdateProfile_pack.end_Flag = g_otherParameter.endFlagSL;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, (uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE + 1);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
+}
+
+void SL_MsgProcFunc_Remote_Upgrade(device_handle device, void *pMsg, uint32_t MsgLen)
+{
+ SL_Mppt_SOther_pack SUpdateProfile_pack = {0};
+
+ SUpdateProfile_pack.start_Flag[0] = g_otherParameter.startFlagSL[0];
+ SUpdateProfile_pack.start_Flag[1] = g_otherParameter.startFlagSL[1];
+
+ SUpdateProfile_pack.address[0] = g_otherParameter.address[0];
+ SUpdateProfile_pack.address[1] = g_otherParameter.address[1];
+ SUpdateProfile_pack.address[2] = g_otherParameter.address[2];
+ SUpdateProfile_pack.address[3] = g_otherParameter.address[3];
+ SUpdateProfile_pack.address[4] = g_otherParameter.address[4];
+ SUpdateProfile_pack.address[5] = g_otherParameter.address[5];
+ SUpdateProfile_pack.address[6] = g_otherParameter.address[6];
+
+ SUpdateProfile_pack.function_Code = SL_Function_Code_Remote_Upgrade;
+
+ SUpdateProfile_pack.state = 0x01;
+
+ uint16_t crc = CheckFuncSL((uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE - 3);
+ SUpdateProfile_pack.check_Bit_H = crc >> 8;
+ SUpdateProfile_pack.check_Bit_L = crc;
+
+ SUpdateProfile_pack.end_Flag = g_otherParameter.endFlagSL;
+
+ while (1) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(device)) {
+ uart_dev_write(device, (uint8_t *)&SUpdateProfile_pack, SL_MPPT_SOTHER_PACK_SIZE + 1);
+
+ if (device == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
+}
+
+/**
+ * @brief 璇诲彇鐢垫睜鐢靛帇瀵勫瓨鍣
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterBatteryVoltage(void *pMsg)
+{
+ log_info(" SL_ReadRegisterBatteryVoltage ");
+ uint16_t value = (uint16_t)(g_otherParameter.Battery_Voltage * 10);
+ return value;
+}
+
+/**
+ * @brief 璇诲彇鍏呯數鐢垫祦瀵勫瓨鍣
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterChargCurrent(void *pMsg)
+{
+ log_info(" SL_ReadRegisterChargCurrent ");
+ uint16_t value = (uint16_t)(g_otherParameter.Charg_Current * 10);
+ return value;
+}
+
+/**
+ * @brief 璇诲彇鏀剧數鐢垫祦瀵勫瓨鍣
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterDischargCurrent(void *pMsg)
+{
+ log_info(" SL_ReadRegisterDischargCurrent ");
+ uint16_t value = (uint16_t)(g_otherParameter.Discharg_Current * 10);
+ return value;
+}
+
+/**
+ * @brief 璇诲彇澶槼鑳藉紑璺數鍘嬪瘎瀛樺櫒
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterSolarOpenCircuitVoltage(void *pMsg)
+{
+ log_info(" SL_ReadRegisterSolarOpenCircuitVoltage ");
+ uint16_t value = (uint16_t)(g_otherParameter.Solar_Open_Circuit_Voltage * 10);
+ return value;
+}
+
+/**
+ * @brief 璇诲彇楂樼mos绠$殑娓╁害瀵勫瓨鍣
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterHighSideMosTemperature(void *pMsg)
+{
+ log_info(" SL_ReadRegisterHighSideMosTemperature ");
+ uint16_t value = (uint16_t)(g_otherParameter.HighSideMos_Temperature * 10);
+ return value;
+}
+
+/**
+ * @brief 璇诲彇鏀剧數mos绠$姸鎬佸瘎瀛樺櫒
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterDischargMosState(void *pMsg)
+{
+ log_info(" SL_ReadRegisterDischargMosState ");
+ uint16_t value = (uint16_t)g_otherParameter.DischargMos_State;
+ return value;
+}
+
+/**
+ * @brief 璇诲彇mppt宸ヤ綔妯″紡瀵勫瓨鍣
+ * @param
+ * @retval
+ */
+uint16_t SL_ReadRegisterMPPTMode(void *pMsg)
+{
+ log_info(" SL_ReadRegisterMPPTMode ");
+ uint16_t value = (uint16_t)g_otherParameter.MPPT_Mode;
+ return value;
+}
+
+/**
+ * @brief 鍖归厤璧峰鏍囧織"SL"
+ * @param start_buff 璧峰鏍囧織
+ * @retval 1 鍖归厤鎴愬姛
+ * 0 鍖归厤澶辫触
+ */
+static int Match_Startflag(uint8_t start_buff[2])
+{
+// if (!strcmp(start_buff, g_slConfigInfo.start_Flag)) {
+// log_info("Match_Startflag fail \r\n");
+// return 1;
+// }
+ if ((start_buff[0] == g_otherParameter.startFlagSL[0]) && \
+ (start_buff[1] == g_otherParameter.startFlagSL[1])) {
+ log_info("Match_Startflag success \r\n");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief 鍖归厤璁惧鍦板潃
+ * @param address 鍦板潃
+ * @retval 1 鍖归厤鎴愬姛
+ * 0 鍖归厤澶辫触
+ */
+static int Match_address(u_int8_t address[7])
+{
+// if (!strcmp(address, g_slConfigInfo.address)) {
+// log_info("Match_address fail \r\n");
+// return 1;
+// }
+ if ((address[0] == g_otherParameter.address[0]) && \
+ (address[1] == g_otherParameter.address[1]) && \
+ (address[2] == g_otherParameter.address[2]) && \
+ (address[3] == g_otherParameter.address[3]) && \
+ (address[4] == g_otherParameter.address[4]) && \
+ (address[5] == g_otherParameter.address[5]) && \
+ (address[6] == g_otherParameter.address[6])) {
+ log_info("Match_address success \r\n");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief 鍖归厤骞挎挱鍦板潃
+ * @param address 鍦板潃
+ * @retval 1 鍖归厤鎴愬姛
+ * 0 鍖归厤澶辫触
+ */
+static int Match_Broadcastaddress(u_int8_t address[7])
+{
+ if (address[0] == 0xFF && \
+ address[1] == 0xFF && \
+ address[2] == 0xFF && \
+ address[3] == 0xFF && \
+ address[4] == 0xFF && \
+ address[5] == 0xFF && \
+ address[6] == 0xFF) {
+ log_info("Match_Broadcastaddress success\r\n");
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief 璇诲彇涓插彛鏁版嵁
+ * @param uart_handle 涓插彛鍙ユ焺
+ * @param buff 缂撳啿鍖
+ * @param buff_size 缂撳啿鍖洪暱搴
+ * @retval
+ */
+static int uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, uint32_t buff_size)
+{
+ uint32_t offset = 0;
+ uint32_t len = 0;
+ uint8_t flag_run = 0;
+ char c = 0;
+
+ SL_Mppt_Recv_pack *pack = (SL_Mppt_Recv_pack *)buff;
+
+ buff_size--; //棰勭暀涓涓'\0'浣嶇疆
+ for (; offset < buff_size;){
+ if (ring_queue_length(uart_handle) == 0) {
+ break;
+ }
+
+ c = uart_dev_in_char(uart_handle);
+
+ buff[offset++] = c;
+
+ /* 鍖归厤璧峰鏍囧織浣 */
+ if (offset == analyzeStartFlag || (flag_run > 0)) {
+ if (!Match_Startflag(pack->start_Flag)) {
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ /* 鍖归厤鍦板潃 */
+ if (offset == analyzeAddress || (flag_run > 1)) {
+ if (!((((g_otherParameter.Registration_Status == 2) || g_otherParameter.RegistrationRequestFlag) && Match_address(pack->address))
+ || (g_otherParameter.runBroadcast && Match_Broadcastaddress(pack->address)))) {
+ if (flag_run < 1) {
+ flag_run = 1;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ /* 鍖归厤鍔熻兘鐮 */
+ if (offset == analyzeFunctionCode || (flag_run > 2)) {
+ /* 鏈敞鍐屾椂锛屼笉澶勭悊璇诲啓鍜屽叾浠栧抚 */
+ if (g_otherParameter.Registration_Status == 2) {
+ /* 璇诲瘎瀛樺櫒鏁版嵁 */
+ if (pack->function_Code == SL_Function_Code_Read_Register) {
+ log_info("Read_Register\r\n");
+ len = SL_MPPT_RORECV_PACK_SIZE;
+ }
+
+ /* 鍐欏瘎瀛樺櫒鏁版嵁 */
+ else if (pack->function_Code == SL_Function_Code_Write_Register) {
+ log_info("Write_Register\r\n");
+ }
+
+ /* 鍏朵粬甯ф牸寮 */
+ else if (pack->function_Code == SL_Function_Code_Update_Profile
+ || pack->function_Code == SL_Function_Code_Remote_Upgrade) {
+ len = SL_MPPT_ROTHER_PACK_SIZE;
+ log_info("Other frames\r\n");
+ }
+
+ else if (g_otherParameter.runBroadcast) {
+ /* 骞挎挱鎵弿 */
+ if (pack->function_Code == SL_Function_Code_Broadcast_Scan) {
+ log_info("Broadcast_Scan\r\n");
+ len = SL_MPPT_SCAN_BROADCAST_PACK_SIZE;
+ }
+
+ /* 娉ㄥ唽璇锋眰 */
+ else if (pack->function_Code == SL_Function_Code_Registration_request) {
+ log_info("Registration_request\r\n");
+ len = SL_MPPT_REGISTRATIONREPLY_PACK_SIZE;
+ }
+
+ else {
+ if (flag_run < 2) {
+ flag_run = 2;
+ }
+ log_info("funcode error %x\r\n", pack->function_Code);
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ else {
+ if (flag_run < 2) {
+ flag_run = 2;
+ }
+ log_info("funcode error %x\r\n", pack->function_Code);
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+ }
+
+ /* 骞挎挱鎵弿 */
+ else if (pack->function_Code == SL_Function_Code_Broadcast_Scan) {
+ log_info("Broadcast_Scan\r\n");
+ len = SL_MPPT_SCAN_BROADCAST_PACK_SIZE;
+ }
+
+ /* 娉ㄥ唽璇锋眰 */
+ else if (pack->function_Code == SL_Function_Code_Registration_request) {
+ log_info("Registration_request\r\n");
+ len = SL_MPPT_REGISTRATIONREPLY_PACK_SIZE;
+ }
+
+ else {
+ if (flag_run < 2) {
+ flag_run = 2;
+ }
+ log_info("funcode error %x\r\n", pack->function_Code);
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+ continue;
+ }
+
+ }
+
+ if ((pack->function_Code == SL_Function_Code_Write_Register) && (offset >= 14)) {
+ SL_Mppt_Worecv_pack *wpack = (SL_Mppt_Worecv_pack *)buff;
+ uint8_t Register_Number = (wpack->write_Register_Number_H << 8) | wpack->write_Register_Number_L;
+ len = Register_Number * 2 + SL_MPPT_WORECV_PACK_SIZE - 4;
+ continue;
+ }
+
+ if (offset == len) {
+ uint16_t crc_16 = chang_8_to_16(buff[offset - 2], buff[offset - 3]);
+
+ if ((CheckFuncSL(buff, offset - 3) != crc_16) || (buff[offset - 1] != 0x16)) {
+ if (flag_run < 3) {
+ flag_run = 3;
+ }
+ memcpy(buff, buff+1, offset-1);
+ offset--;
+
+ } else {
+ return offset;
+ }
+ }
+ }
+ return 0;
+}
+
+/**
+ * @brief 澶勭悊涓鏉℃秷鎭
+ * @param
+ * @retval
+ */
+void FRT_MsgHandler(device_handle device, uint8_t *pMsg, uint32_t MsgLen)
+{
+ SL_Mppt_Recv_pack *pack = (SL_Mppt_Recv_pack *)pMsg;
+
+ for (u_int16_t i = 0; i < sizeof(g_MsgTbl) / sizeof(SL_FuncionMsgProcTable); i++){
+ if (pack->function_Code == g_MsgTbl[i].msgId){
+ g_MsgTbl[i].pMsgProc(device, pMsg, MsgLen);
+ }
+ }
+}
+
+void read_and_process_uart_data(device_handle device)
+{
+ if (uart_dev_char_present(device)) {
+ Delay_Ms(20);
+ memset(rs485_buff, 0, sizeof(rs485_buff));
+ int ret = uart_read_climate_pack(device, rs485_buff, sizeof(rs485_buff));
+ if(ret > 0){
+ FRT_MsgHandler(device, rs485_buff, ret);
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App/src/task.c b/App/src/task.c
index efec0f9..c7da648 100644
--- a/App/src/task.c
+++ b/App/src/task.c
@@ -23,5 +23,499 @@
#include
#include "collect_Conversion.h"
#include "parameter.h"
+#include "hy_protocol.h"
+
+/**
+ * @brief 初始化
+ * @param
+ * @retval
+ *
+ */
+void Init()
+{
+ SPI_Flash_Init();
+ currBuffInit();
+ config_info_start();
+ adcChangeProportionalInit();
+
+ uart_dev_init();
+ PWM_TIM_Configuration();
+ ADC_all_Init();
+ RUN_LED_Init();
+ WDI_INPUT_Init();
+ POW_OUT_CON_Init();
+ DSG_PROT_Init();
+ WORK_VOLT_INT_Init();
+ TIM3_Init(1);
+
+ TimeSliceOffset_Register(&m_WdiRunled, Task_WdiRunled, WdiRunled_reloadVal, WdiRunled_offset);
+ TimeSliceOffset_Register(&m_refreshRegister, Task_refreshRegister,
+ refreshRegister_reloadVal, refreshRegister_offset);
+ TimeSliceOffset_Register(&g_startMpptControl, Task_startMpptControl,
+ startMpptControl_reloadVal, startMpptControl_offset);
+ TimeSliceOffset_Register(&g_dataJudgment, Task_dataJudgment,
+ dataJudgment_reloadVal, dataJudgment_offset);
+
+ if (g_otherParameter.CommunicationProtocolType == 0x00) {
+ TimeSliceOffset_Register(&m_usart, Task_usartSL, usartSL_reloadVal, usartSL_offset);
+ } else if (g_otherParameter.CommunicationProtocolType == 0x01) {
+ TimeSliceOffset_Register(&m_usart, Task_usartHY, usartSL_reloadVal, usartSL_offset);
+ }
+
+ TIM2_Init(1);
+ TimeSliceOffset_Start(); /* 启动时间片轮询 */
+}
+
+/**
+ * @brief 运行指示灯和看门狗
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset m_WdiRunled;
+void Task_WdiRunled(void)
+{
+ static uint8_t flag = RESET;
+ flag = !flag;
+ GPIO_WriteBit(RUN_LED_GPIO, RUN_LED_PIN, flag);
+
+ static uint32_t temp = wdi_RESET;
+ if (!(--temp)) {
+ temp = 0;
+ NVIC_SystemReset();
+ }
+ GPIO_WriteBit(WDI_INPUT_GPIO, WDI_INPUT_PIN, SET);
+ GPIO_WriteBit(WDI_INPUT_GPIO, WDI_INPUT_PIN, RESET);
+}
+
+/**
+ * @brief 刷新寄存器中的数据
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset m_refreshRegister;
+void Task_refreshRegister(void)
+{
+ g_otherParameter.Output_Voltage = get_PV_VOLT_OUT();
+ g_otherParameter.Input_Voltage = get_PV_VOLT_IN1();
+ g_otherParameter.Solar_In_Circuit_Voltage = get_PV1_VOLT_IN();
+ g_otherParameter.HighSideMos_Temperature = get_MOSFET_Temper();
+
+ g_otherParameter.Charg_BatteryCurrent = g_otherParameter.Charg_Current
+ - g_otherParameter.Discharg_Current;
+ g_otherParameter.totalChargCapacity += totalChargCapacity / 3600000;
+ g_otherParameter.totalElectricityConsumption += totalElectricityConsumption / 3600000;
+ saveTotalPower(&g_otherParameter.totalElectricityConsumption, &g_otherParameter.totalChargCapacity);
+ totalChargCapacity = 0;
+ totalElectricityConsumption = 0;
+
+ g_otherParameter.SOC = 0;
+
+ g_otherParameter.Battery_Voltage = g_otherParameter.Output_Voltage
+ - g_otherParameter.Charg_BatteryCurrent * g_controlParameter.loopImpedance;
+
+ if (g_otherParameter.onlyPower) {
+ g_otherParameter.DischargMos_State = GPIO_ReadOutputDataBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN)
+ && GPIO_ReadInputDataBit(DSG_PROT_GPIO, DSG_PROT_PIN);
+ } else {
+ g_otherParameter.DischargMos_State = GPIO_ReadOutputDataBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN);
+ }
+}
+
+/**
+ * @brief 满足一定条件后启动该任务,测量回路阻抗
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset m_impedanceCalculation;
+void Task_impedanceCalculation(void)
+{
+ static uint8_t num = 0;
+ static float_t currOne = 0;
+ static float_t voltOne = 0;
+ static float_t currTwo = 0;
+ static float_t voltTwo = 0;
+
+ num++;
+
+ if (num == 1) {
+ TIM_Cmd(TIM3, DISABLE);
+ TIM_SetCompare4(TIM4, 300);
+ return;
+ }
+
+ if (num == 11) {
+ currOne = get_CHG_CURR() - get_DSG_CURR();
+ voltOne = get_PV_VOLT_OUT();
+ TIM_SetCompare4(TIM4, 420);
+ return;
+ }
+
+ if (num == 11) {
+ currOne = get_CHG_CURR() - get_DSG_CURR();
+ voltOne = get_PV_VOLT_OUT();
+ TIM_SetCompare4(TIM4, 420);
+ return;
+ }
+
+ if (num == 21) {
+ TimeSliceOffset_Unregister(&m_impedanceCalculation);
+ m_impedanceCalculation.runFlag = 0;
+
+ currTwo = get_CHG_CURR() - get_DSG_CURR();
+ voltTwo = get_PV_VOLT_OUT();
+ float_t tempLoopImpedance = 0;
+ tempLoopImpedance = (voltOne - voltTwo) / (currOne - currTwo);
+
+ /* 判断回路阻抗是否合理 */
+ if (tempLoopImpedance < 1.0 && tempLoopImpedance > 0.05) {
+ g_controlParameter.loopImpedance = tempLoopImpedance;
+ saveLoopImpedance(&g_controlParameter.loopImpedance);
+ }
+
+ g_otherParameter.impedanceStart = 0;
+ num = 0;
+
+ g_otherParameter.MPPT_Mode = CONSTANTCURRENT;
+ TIM_Cmd(TIM3, ENABLE);
+ return;
+ }
+
+}
+
+/**
+ * @brief 短路保护后启动该任务,一段时间后检测是否仍然短路,仍然短路则关闭输出
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset g_outputAgain;
+void Task_outputAgain(void)
+{
+ static uint8_t num = 0;
+ num++;
+
+ if (num == g_controlParameter.outputAgainFlagTime) {
+ num = 0;
+ g_otherParameter.outputAgainFlag = 0;
+ TimeSliceOffset_Unregister(&g_outputAgain);
+ g_outputAgain.runFlag = 0;
+ if (!(GPIO_ReadInputDataBit(DSG_PROT_GPIO, DSG_PROT_PIN))) {
+ GPIO_WriteBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN, RESET);
+ }
+ }
+}
+
+/**
+ * @brief 过载保护
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset g_excessiveLoad;
+void Task_excessiveLoad(void)
+{
+ static uint8_t num = 0;
+ static uint16_t numLong = 0;
+
+ /* 短路保护了则退出过载保护 */
+ if (g_otherParameter.outputAgainFlag == 1) {
+ num = 0;
+ numLong = 0;
+ g_otherParameter.excessiveLoadFlag = 0;
+ TimeSliceOffset_Unregister(&g_excessiveLoad);
+ g_excessiveLoad.runFlag = 0;
+ }
+
+ /* 过载一次 */
+ if (g_otherParameter.excessiveLoadFlag == 1) {
+ num++;
+ }
+
+ /* 多次过载则关闭输出 */
+ if (g_otherParameter.excessiveLoadFlag >= 2) {
+ GPIO_WriteBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN, RESET);
+ num = 0;
+ }
+
+ /* 仅过载一次,达到时间后关闭该任务 */
+ if (num == g_controlParameter.excessiveLoadFlagTime) {
+ num = 0;
+ g_otherParameter.excessiveLoadFlag = 0;
+ TimeSliceOffset_Unregister(&g_excessiveLoad);
+ g_excessiveLoad.runFlag = 0;
+ return;
+ }
+
+ /* 关闭输出后开始计时 */
+ if (!(GPIO_ReadOutputDataBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN))) {
+ numLong++;
+ }
+
+ /* 达到时间就重新尝试输出 */
+ if (numLong == g_controlParameter.eLAgainTime) {
+ numLong = 0;
+ TimeSliceOffset_Unregister(&g_excessiveLoad);
+ g_excessiveLoad.runFlag = 0;
+ GPIO_WriteBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN, SET);
+ g_otherParameter.excessiveLoadFlag = 0;
+ }
+
+ return;
+}
+
+/**
+ * @brief 软启动
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset m_softStart;
+void Task_softStart(void)
+{
+ static uint16_t num = 0;
+ static float_t dutyRatio = 0;
+ num++;
+
+ if (num < 5) {
+ TIM_SetCompare4(TIM4, 100);
+ }
+
+ else if (num > 70 || dutyRatio > 0.75) {
+ TimeSliceOffset_Unregister(&m_softStart);
+ m_softStart.runFlag = 0;
+
+ dutyRatio = 0;
+ num = 0;
+ g_controlParameter.dutyRatio = 0.75;
+ Set_duty_ratio(&g_controlParameter.dutyRatio);
+
+ if (g_otherParameter.batteryState == 1) {
+ g_otherParameter.MPPT_Mode = CONSTANTCURRENT;
+ TIM_Cmd(TIM3, ENABLE);
+ return;
+ } else {
+ g_otherParameter.Charg_BatteryCurrent = g_otherParameter.Charg_Current
+ - g_otherParameter.Discharg_Current;
+ //软起动后bms保护板开启电池充电
+ if (g_otherParameter.Charg_BatteryCurrent > 0.1
+ || g_otherParameter.Charg_BatteryCurrent < -0.1) {
+ g_otherParameter.MPPT_Mode = CONSTANTCURRENT;
+ TIM_Cmd(TIM3, ENABLE);
+ return;
+ }
+
+ g_otherParameter.MPPT_Mode = FLOAT;
+ TIM_Cmd(TIM3, ENABLE);
+
+ return;
+ }
+ }
+}
+
+/**
+ * @brief 停止充电后开启该任务,每隔一段时间检测开路电压能否达到充电标准,达到后检测电压判断系统中是否有电池同时启动软启动任务,
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset g_startMpptControl;
+void Task_startMpptControl(void)
+{
+ static uint8_t num = 0;
+ if (g_controlParameter.checkSolarOpenCircuitVTime == ++num) {
+ num = 0;
+ g_otherParameter.Solar_Open_Circuit_Voltage = get_PV1_VOLT_IN();
+
+ if (g_otherParameter.Solar_Open_Circuit_Voltage > g_controlParameter.startSolarOpenCircuitV) {
+ TimeSliceOffset_Unregister(&g_startMpptControl);
+ g_startMpptControl.runFlag = 0;
+ if (g_otherParameter.Output_Voltage > 11) {
+ g_otherParameter.batteryState = 1;
+ } else {
+ g_otherParameter.batteryState = 0;
+ }
+ TimeSliceOffset_Register(&m_softStart, Task_softStart, softStart_reloadVal, softStart_offset);
+ }
+ }
+ return;
+}
+
+/**
+ * @brief 根据寄存器数据完成一些判断:
+ * 是否开启回路阻抗计算
+ * MOS管温度对于进入什么模式
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset g_dataJudgment;
+void Task_dataJudgment(void)
+{
+ /* 有电池,太阳能输出功率大,同时回路阻抗未测试或需要重新测试 */
+ if ((g_otherParameter.impedanceStart == 1 || g_controlParameter.loopImpedance == 0.0)
+ && g_otherParameter.batteryState == 1 && (g_otherParameter.Charg_Current > 3.0)) {
+ TimeSliceOffset_Register(&m_impedanceCalculation, Task_impedanceCalculation
+ , impedanceCalculation_reloadVal, impedanceCalculation_reloadVal);
+ }
+ if (g_otherParameter.overTemperature != 0
+ && g_otherParameter.HighSideMos_Temperature < g_controlParameter.HighSideMosTemperature_start + 3) {
+ if (g_otherParameter.overTemperature == 2) {
+ TimeSliceOffset_Register(&m_softStart, Task_softStart, softStart_reloadVal, softStart_offset);
+ }
+ g_otherParameter.overTemperature = 0;
+ return;
+ }
+
+ if (g_otherParameter.overTemperature == 0
+ && g_otherParameter.HighSideMos_Temperature < g_controlParameter.HighSideMosTemperature_stop
+ && g_otherParameter.HighSideMos_Temperature > g_controlParameter.HighSideMosTemperature_end + 3) {
+ g_controlParameter.dutyRatio -= 0.15;
+ Set_duty_ratio(&g_controlParameter.dutyRatio);
+ g_otherParameter.overTemperature = 1;
+ }
+
+ if (g_otherParameter.overTemperature != 2
+ && g_otherParameter.HighSideMos_Temperature > g_controlParameter.HighSideMosTemperature_stop + 3) {
+ g_otherParameter.overTemperature = 2;
+ TIM_Cmd(TIM3, DISABLE);
+ TIM_SetCompare4(TIM4, 0);
+ g_controlParameter.dutyRatio = 0;
+ }
+}
+
+/**
+ * @brief 串口数据解析和处理
+ * Task_usartSL:sl协议
+ * Task_usartHY:hy协议
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset m_usart;
+void Task_usartSL(void)
+{
+ read_and_process_uart_data(g_gw485_uart4_handle);
+}
+void Task_usartHY(void)
+{
+ HY_read_and_process_uart_data(g_gw485_uart4_handle);
+}
+
+/**
+ * @brief 接收到广播指令后,发送数据给网关,未接收到指令再次发送,最多三次,间隔时间3s
+ * @param
+ * @retval
+ *
+ */
+uint8_t recvbroadcast_flag; /* 是否需要再次发送标志 */
+device_handle g_recvBroadcastDevice; /* 串口句柄 */
+STR_TimeSliceOffset g_recvbroadcast;
+void Task_recvbroadcast(void)
+{
+ static uint8_t run_number = 0;
+ /* 超过三次,不再发送 */
+ if (run_number++ == 3 || run_number > 3) {
+ g_otherParameter.RegistrationRequestFlag = 0;
+ run_number = 0;
+ TimeSliceOffset_Unregister(&g_recvbroadcast);
+ g_recvbroadcast.runFlag = 0;
+ return;
+ }
+ SL_Mppt_RegistrationRequest_pack recvpack = {0};
+
+ /* 起始标志 */
+ recvpack.start_Flag[0] = g_otherParameter.startFlagSL[0];
+ recvpack.start_Flag[1] = g_otherParameter.startFlagSL[1];
+
+ /* ID */
+ recvpack.address[0] = 0xFF;
+ recvpack.address[1] = 0xFF;
+ recvpack.address[2] = 0xFF;
+ recvpack.address[3] = 0xFF;
+ recvpack.address[4] = 0xFF;
+ recvpack.address[5] = 0xFF;
+ recvpack.address[6] = 0xFF;
+
+ /* 功能码 */
+ recvpack.function_Code = SL_Function_Code_Registration_request;
+
+ /* 寄存器长度 */
+// recvpack.register_Length_H = (g_otherParameter.RegisterNumberMax + 5) >> 8;
+// recvpack.register_Length_L = g_otherParameter.RegisterNumberMax + 5;
+ recvpack.register_Length_H = g_otherParameter.RegisterNumberMax >> 8;
+ recvpack.register_Length_L = g_otherParameter.RegisterNumberMax;
+
+ /* 注册状态 */
+ recvpack.registration_Status_H = g_otherParameter.Registration_Status >> 8;
+ recvpack.registration_Status_L = g_otherParameter.Registration_Status;
+
+ /* 接入节点ID */
+ recvpack.access_Node_ID[0] = g_otherParameter.address[0];
+ recvpack.access_Node_ID[1] = g_otherParameter.address[1];
+ recvpack.access_Node_ID[2] = g_otherParameter.address[2];
+ recvpack.access_Node_ID[3] = g_otherParameter.address[3];
+ recvpack.access_Node_ID[4] = g_otherParameter.address[4];
+ recvpack.access_Node_ID[5] = g_otherParameter.address[5];
+ recvpack.access_Node_ID[6] = g_otherParameter.address[6];
+
+ /* 接入节点类型 */
+ recvpack.access_Node_Type_H = g_otherParameter.Access_Node_Type >> 8;
+ recvpack.access_Node_Type_L = g_otherParameter.Access_Node_Type;
+
+ /* 校验位 */
+// uint8_t *rpack_buf = (uint8_t *)&recvpack;
+ uint16_t crc = CheckFuncSL((uint8_t *)&recvpack, SL_MPPT_REGISTRATIONREQUEST_PACK_SIZE - 3);
+
+ recvpack.check_Bit_H = crc >> 8;
+ recvpack.check_Bit_L = crc;
+ /* 结束标志 */
+ recvpack.end_Flag = g_otherParameter.endFlagSL;
+ /* 校验位 */
+ for (uint8_t var = 0; var < 10; ++var) {
+ Delay_Ms(randomDelay());
+ if (!Check_485_bus_busy(g_recvBroadcastDevice)) {
+ if (recvbroadcast_flag == 1) {
+ recvbroadcast_flag = 0;
+ run_number = 0;
+ return;
+ }
+ uart_dev_write(g_recvBroadcastDevice, (uint8_t *)&recvpack, SL_MPPT_REGISTRATIONREQUEST_PACK_SIZE + 1);
+
+ if (g_recvBroadcastDevice == g_bat485_uart3_handle) {
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+ } else {
+ USART_ITConfig(USART4, USART_IT_RXNE, ENABLE);
+ }
+
+ break;
+ }
+ }
+}
+
+/**
+ * @brief 注册后,一段时间后才能再次响应注册指令
+ * @param
+ * @retval
+ *
+ */
+STR_TimeSliceOffset g_sensorEnableBroadcast;
+void Task_sensorEnableBroadcast(void)
+{
+ static uint32_t enabBroadcastTimeFlag = 0;
+ enabBroadcastTimeFlag++;
+ g_otherParameter.runBroadcast = 0;
+
+ if (enabBroadcastTimeFlag == g_controlParameter.sensorEnableBroadcastTime) {
+ TimeSliceOffset_Unregister(&g_sensorEnableBroadcast);
+ g_sensorEnableBroadcast.runFlag = 0;
+ enabBroadcastTimeFlag = 0;
+ g_otherParameter.runBroadcast = 1;
+ }
+ return;
+}
+
diff --git a/App/src/uart_dev.c b/App/src/uart_dev.c
index 2c3947e..d26240b 100644
--- a/App/src/uart_dev.c
+++ b/App/src/uart_dev.c
@@ -80,10 +80,12 @@ device_handle uart_dev_init(void)
// return (device_handle)(&uart_devices[i]);
// }
// }
- InitRingQueue(&uart_devices[0].uart_ring_queue, bat485_in_buff, sizeof(bat485_in_buff));
- uart_init(BAT485_UART_INDEX, g_otherParameter.bat485_Baud);
- uart_devices[0].init = 1;
- g_bat485_uart3_handle = (device_handle)(&uart_devices[0]);
+ if (g_otherParameter.bat485_Baud != 0) {
+ InitRingQueue(&uart_devices[0].uart_ring_queue, bat485_in_buff, sizeof(bat485_in_buff));
+ uart_init(BAT485_UART_INDEX, g_otherParameter.bat485_Baud);
+ uart_devices[0].init = 1;
+ g_bat485_uart3_handle = (device_handle)(&uart_devices[0]);
+ }
InitRingQueue(&uart_devices[1].uart_ring_queue, gw485_in_buff, sizeof(gw485_in_buff));
uart_init(GW485_UART_INDEX, g_otherParameter.gw485_Baud);
diff --git a/Drivers/RingQueue2/ring_queue2.h b/Drivers/RingQueue2/ring_queue2.h
index 5decbe1..c5d7099 100644
--- a/Drivers/RingQueue2/ring_queue2.h
+++ b/Drivers/RingQueue2/ring_queue2.h
@@ -11,7 +11,9 @@
//#define RING_QUEUE_DEBUG //定义本宏会打印RingQueue的调试信息
-typedef unsigned char RQ_ElementType2;//元素类型
+//typedef unsigned char RQ_ElementType2;//元素类型
+typedef uint16_t RQ_ElementType2;//元素类型
+
typedef struct _ring_queue2
{
@@ -21,7 +23,7 @@ typedef struct _ring_queue2
}RingQueue2;
//初始化队列,需传入保存队列状态的结构q,队列使用的buffer和buffer大小
-int InitRingQueue(RingQueue2 *q, RQ_ElementType2 *buff, int size);
+int InitRingQueue2(RingQueue2 *q, RQ_ElementType2 *buff, int size);
#define RingQueueFull2(q) (((q)->rear+1) % (q)->size == (q)->front)
#define RingQueueEmpty2(q) ((q)->front == (q)->rear)
@@ -31,13 +33,13 @@ int InitRingQueue(RingQueue2 *q, RQ_ElementType2 *buff, int size);
int ShowRingQueue2(RingQueue2 *q);
//向队尾插入元素e
-int InRingQueue(RingQueue2 *q,RQ_ElementType2 e);
+int InRingQueue2(RingQueue2 *q,RQ_ElementType2 e);
//从队首删除元素
-int OutRingQueue(RingQueue2 *q, RQ_ElementType2 *e);
+int OutRingQueue2(RingQueue2 *q, RQ_ElementType2 *e);
//队列中的元素个数
-int RingQueueLength(RingQueue2 *q);
+int RingQueueLength2(RingQueue2 *q);
#endif /* DRIVERS_RINGQUEUE_RING_QUEUE_H_ */
diff --git a/Hardware/inc/tim.h b/Hardware/inc/tim.h
index 735fad6..83f14dd 100644
--- a/Hardware/inc/tim.h
+++ b/Hardware/inc/tim.h
@@ -9,10 +9,13 @@
#define HARDWARE_INC_TIM_H_
#include "debug.h"
+#include "math.h"
void TIM3_Init(uint16_t delay_ms);
void TIM3_Int_Init(uint16_t arr,uint16_t psc);
+extern float_t totalElectricityConsumption;
+extern float_t totalChargCapacity;
void TIM2_Init(uint16_t delay_ms);
void TIM2_Int_Init(uint16_t arr,uint16_t psc);
diff --git a/Hardware/src/gpio.c b/Hardware/src/gpio.c
index c5250d9..2e2c32c 100644
--- a/Hardware/src/gpio.c
+++ b/Hardware/src/gpio.c
@@ -7,7 +7,7 @@
#include "gpio.h"
#include "task.h"
-
+#include "parameter.h"
void G_FFMOS_CON_Init(void)
{
@@ -59,6 +59,7 @@ void BEEP_Init(void)
void POW_OUT_CON_Init(void)
{
+// GPIO_WriteBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN, RESET);
RCC_PB2PeriphClockCmd(RCC_PB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = POW_OUT_CON_PIN;
@@ -100,17 +101,22 @@ void DSG_PROT_Init(void)
void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2)==SET) { //EXTI_GetITStatus用来获取中断标志位状态,如果EXTI线产生中断则返回SET,否则返回RESET
-// GPIO_WriteBit(DSG_PROT_GPIO, DSG_PROT_PIN, RESET);
EXTI_ClearITPendingBit(EXTI_Line2); //清除中断标志位
// printf("Run at EXTI 111\r\n");
-// if (outputAgainFlag == 0) {
-// outputAgainFlag = 1;
-// TimeSliceOffset_Register(&m_outputAgain, Task_outputAgain
-// , outputAgain_reloadVal, outputAgain_offset);
-// m_outputAgain.runFlag = 1;
-// return;
-// }
+ if (0 == g_otherParameter.outputAgainFlag) {
+ g_otherParameter.outputAgainFlag++;
+ TimeSliceOffset_Register(&g_outputAgain, Task_outputAgain
+ , outputAgain_reloadVal, outputAgain_offset);
+ g_outputAgain.runFlag = 1;
+ return;
+ }
+ g_otherParameter.outputAgainFlag++;
+ if (2 == g_otherParameter.outputAgainFlag) {
+ TimeSliceOffset_Unregister(&g_outputAgain);
+ g_outputAgain.runFlag = 0;
+ GPIO_WriteBit(POW_OUT_CON_GPIO, POW_OUT_CON_PIN, RESET);
+ }
}
}
@@ -157,13 +163,12 @@ void WORK_VOLT_INT_Init(void)
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line12)==SET) { //EXTI_GetITStatus用来获取中断标志位状态,如果EXTI线产生中断则返回SET,否则返回RESET
-// EXTI_ClearITPendingBit(EXTI_Line12); //清除中断标志位
-// excessiveLoadFlag++;
-// TimeSliceOffset_Register(&m_excessiveLoad, Task_excessiveLoad
-// , excessiveLoad_reloadVal, excessiveLoad_offset);
-
-
+ EXTI_ClearITPendingBit(EXTI_Line12); //清除中断标志位
+ if (0 == g_otherParameter.excessiveLoadFlag) {
+ TimeSliceOffset_Register(&g_excessiveLoad, Task_excessiveLoad
+ , excessiveLoad_reloadVal, excessiveLoad_offset);
+ }
+ g_otherParameter.excessiveLoadFlag++;
}
-
}
diff --git a/Hardware/src/tim.c b/Hardware/src/tim.c
index 0162cb4..6f1804b 100644
--- a/Hardware/src/tim.c
+++ b/Hardware/src/tim.c
@@ -10,6 +10,9 @@
#include "pwm.h"
#include "mppt_control.h"
#include "task.h"
+#include "math.h"
+#include "parameter.h"
+#include "collect_Conversion.h"
void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
@@ -59,7 +62,7 @@ void TIM3_IRQHandler(void)
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { //检查TIM3中断是否发生。
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIM3的中断挂起位。
// uart_dev_write(g_bat485_uart3_handle, "\n\n\n\n\nin tim3 irt\n\n\n\n\n", sizeof("\n\n\n\n\nin tim3 irt\n\n\n\n\n"));
-// test();
+ MpptContorl();
}
}
@@ -98,14 +101,20 @@ void TIM2_Int_Init(uint16_t arr, uint16_t psc)
TIM_Cmd(TIM2, ENABLE); //TIM2使能
}
+float_t totalElectricityConsumption = 0; /* 总电量消耗 */
+float_t totalChargCapacity = 0; /* 总充电电量 */
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { //检查TIM2中断是否发生。
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM1的中断挂起位。
TimeSliceOffset_Produce();
-// if (outputAgainFlag == 1) {
-// outputAgainFlag = 0;
-// }
+
+ g_otherParameter.Charg_Current = get_CHG_CURR();
+ g_otherParameter.Discharg_Current = get_DSG_CURR();
+
+ totalElectricityConsumption += g_otherParameter.Charg_Current * g_otherParameter.Output_Voltage;
+ totalChargCapacity += g_otherParameter.Discharg_Current * g_otherParameter.Output_Voltage;
+
}
}
diff --git a/User/main.c b/User/main.c
index ff4adba..4209aa4 100644
--- a/User/main.c
+++ b/User/main.c
@@ -39,6 +39,5 @@ int main(void)
printf("SystemClk:%d\r\n", SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID());
-// hardware_Init();
-// task_Init();
+ Init();
}
diff --git a/obj/App/src/collect_Conversion.d b/obj/App/src/collect_Conversion.d
index a5984d7..80d5b05 100644
--- a/obj/App/src/collect_Conversion.d
+++ b/obj/App/src/collect_Conversion.d
@@ -26,10 +26,12 @@ App/src/collect_Conversion.o: ../App/src/collect_Conversion.c \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_misc.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_lptim.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h \
- D:\psx\MPPT\git\Hardware\inc/adc.h D:\psx\MPPT\git\Hardware\inc/gpio.h \
+ D:\psx\MPPT\git\Hardware\inc/adc.h \
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h \
+ D:\psx\MPPT\git\Hardware\inc/gpio.h D:\psx\MPPT\git\App\inc/parameter.h \
D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
- D:\psx\MPPT\git\Hardware\inc/rs485.h
+ D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/uart_dev.h
D:\psx\MPPT\git\App\inc/collect_Conversion.h:
@@ -91,10 +93,16 @@ D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h:
D:\psx\MPPT\git\Hardware\inc/adc.h:
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
+
D:\psx\MPPT\git\Hardware\inc/gpio.h:
+D:\psx\MPPT\git\App\inc/parameter.h:
+
D:\psx\MPPT\git\App\inc/uart_dev.h:
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h:
D:\psx\MPPT\git\Hardware\inc/rs485.h:
+
+D:\psx\MPPT\git\App\inc/uart_dev.h:
diff --git a/obj/App/src/collect_Conversion.o b/obj/App/src/collect_Conversion.o
index 1626aba..b95f801 100644
Binary files a/obj/App/src/collect_Conversion.o and b/obj/App/src/collect_Conversion.o differ
diff --git a/obj/App/src/hy_protocol.d b/obj/App/src/hy_protocol.d
index fd6f0d0..3446cf0 100644
--- a/obj/App/src/hy_protocol.d
+++ b/obj/App/src/hy_protocol.d
@@ -32,7 +32,9 @@ App/src/hy_protocol.o: ../App/src/hy_protocol.c \
D:\psx\MPPT\git\App\inc/pdebug.h D:\psx\MPPT\git\App\inc/mppt_control.h \
D:\psx\MPPT\git\App\inc/task.h \
D:\psx\MPPT\git\Drivers\TimeSliceOffset/timeSliceOffset.h \
- D:\psx\MPPT\git\App\inc/uart_dev.h D:\psx\MPPT\git\Hardware\inc/tim.h
+ D:\psx\MPPT\git\App\inc/uart_dev.h D:\psx\MPPT\git\Hardware\inc/tim.h \
+ D:\psx\MPPT\git\App\inc/sl_protocol.h \
+ D:\psx\MPPT\git\App\inc/parameter.h
D:\psx\MPPT\git\App\inc/hy_protocol.h:
@@ -111,3 +113,7 @@ D:\psx\MPPT\git\Drivers\TimeSliceOffset/timeSliceOffset.h:
D:\psx\MPPT\git\App\inc/uart_dev.h:
D:\psx\MPPT\git\Hardware\inc/tim.h:
+
+D:\psx\MPPT\git\App\inc/sl_protocol.h:
+
+D:\psx\MPPT\git\App\inc/parameter.h:
diff --git a/obj/App/src/hy_protocol.o b/obj/App/src/hy_protocol.o
index ca3ae90..8d19ec8 100644
Binary files a/obj/App/src/hy_protocol.o and b/obj/App/src/hy_protocol.o differ
diff --git a/obj/App/src/inflash.d b/obj/App/src/inflash.d
index 107811e..6bbda04 100644
--- a/obj/App/src/inflash.d
+++ b/obj/App/src/inflash.d
@@ -28,7 +28,7 @@ App/src/inflash.o: ../App/src/inflash.c D:\psx\MPPT\git\App\inc/inflash.h \
D:\psx\MPPT\git\Hardware\inc/flash.h \
D:\psx\MPPT\git\App\inc/sl_protocol.h D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
- D:\psx\MPPT\git\Hardware\inc/rs485.h
+ D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/parameter.h
D:\psx\MPPT\git\App\inc/inflash.h:
@@ -97,3 +97,5 @@ D:\psx\MPPT\git\App\inc/uart_dev.h:
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h:
D:\psx\MPPT\git\Hardware\inc/rs485.h:
+
+D:\psx\MPPT\git\App\inc/parameter.h:
diff --git a/obj/App/src/inflash.o b/obj/App/src/inflash.o
index 943450d..91ac5be 100644
Binary files a/obj/App/src/inflash.o and b/obj/App/src/inflash.o differ
diff --git a/obj/App/src/mppt_control.d b/obj/App/src/mppt_control.d
index fa46b44..c4f5891 100644
--- a/obj/App/src/mppt_control.d
+++ b/obj/App/src/mppt_control.d
@@ -27,8 +27,10 @@ App/src/mppt_control.o: ../App/src/mppt_control.c \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_lptim.h \
D:\psx\MPPT\git\Peripheral\inc/ch32l103_opa.h \
D:\psx\MPPT\git\App\inc/collect_Conversion.h \
- D:\psx\MPPT\git\Hardware\inc/adc.h D:\psx\MPPT\git\Hardware\inc/pwm.h \
- D:\psx\MPPT\git\App\inc/inflash.h D:\psx\MPPT\git\Hardware\inc/gpio.h \
+ D:\psx\MPPT\git\Hardware\inc/adc.h \
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h \
+ D:\psx\MPPT\git\Hardware\inc/pwm.h D:\psx\MPPT\git\App\inc/inflash.h \
+ D:\psx\MPPT\git\Hardware\inc/gpio.h \
D:\psx\MPPT\git\App\inc/sl_protocol.h D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/task.h \
@@ -97,6 +99,8 @@ D:\psx\MPPT\git\App\inc/collect_Conversion.h:
D:\psx\MPPT\git\Hardware\inc/adc.h:
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
+
D:\psx\MPPT\git\Hardware\inc/pwm.h:
D:\psx\MPPT\git\App\inc/inflash.h:
diff --git a/obj/App/src/mppt_control.o b/obj/App/src/mppt_control.o
index 3ca60ba..7509451 100644
Binary files a/obj/App/src/mppt_control.o and b/obj/App/src/mppt_control.o differ
diff --git a/obj/App/src/parameter.o b/obj/App/src/parameter.o
index 0b0d7d6..7d06258 100644
Binary files a/obj/App/src/parameter.o and b/obj/App/src/parameter.o differ
diff --git a/obj/App/src/sl_protocol.o b/obj/App/src/sl_protocol.o
index e7f7038..9f1c6c1 100644
Binary files a/obj/App/src/sl_protocol.o and b/obj/App/src/sl_protocol.o differ
diff --git a/obj/App/src/subdir.mk b/obj/App/src/subdir.mk
index d7bd845..581fb1b 100644
--- a/obj/App/src/subdir.mk
+++ b/obj/App/src/subdir.mk
@@ -37,6 +37,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
App/src/%.o: ../App/src/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/App/src/task.d b/obj/App/src/task.d
index 0990a44..1796f89 100644
--- a/obj/App/src/task.d
+++ b/obj/App/src/task.d
@@ -35,7 +35,9 @@ App/src/task.o: ../App/src/task.c D:\psx\MPPT\git\App\inc/task.h \
D:\psx\MPPT\git\App\inc/sl_protocol.h \
D:\psx\MPPT\git\App\inc/mppt_control.h D:\psx\MPPT\git\App\inc/inflash.h \
D:\psx\MPPT\git\App\inc/collect_Conversion.h \
- D:\psx\MPPT\git\App\inc/parameter.h
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h \
+ D:\psx\MPPT\git\App\inc/parameter.h \
+ D:\psx\MPPT\git\App\inc/hy_protocol.h
D:\psx\MPPT\git\App\inc/task.h:
@@ -123,4 +125,8 @@ D:\psx\MPPT\git\App\inc/inflash.h:
D:\psx\MPPT\git\App\inc/collect_Conversion.h:
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
+
D:\psx\MPPT\git\App\inc/parameter.h:
+
+D:\psx\MPPT\git\App\inc/hy_protocol.h:
diff --git a/obj/App/src/task.o b/obj/App/src/task.o
index 5228ac4..65724e7 100644
Binary files a/obj/App/src/task.o and b/obj/App/src/task.o differ
diff --git a/obj/App/src/uart_dev.o b/obj/App/src/uart_dev.o
index a2cc9c4..c138ab3 100644
Binary files a/obj/App/src/uart_dev.o and b/obj/App/src/uart_dev.o differ
diff --git a/obj/Core/subdir.mk b/obj/Core/subdir.mk
index 7f617c6..b2fd676 100644
--- a/obj/Core/subdir.mk
+++ b/obj/Core/subdir.mk
@@ -16,6 +16,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Core/%.o: ../Core/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Debug/subdir.mk b/obj/Debug/subdir.mk
index 5a91bea..c875bc5 100644
--- a/obj/Debug/subdir.mk
+++ b/obj/Debug/subdir.mk
@@ -16,6 +16,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Debug/%.o: ../Debug/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Drivers/RingQueue/subdir.mk b/obj/Drivers/RingQueue/subdir.mk
index cbd762a..1bf595e 100644
--- a/obj/Drivers/RingQueue/subdir.mk
+++ b/obj/Drivers/RingQueue/subdir.mk
@@ -16,6 +16,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Drivers/RingQueue/%.o: ../Drivers/RingQueue/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Drivers/RingQueue2/ring_queue2.o b/obj/Drivers/RingQueue2/ring_queue2.o
index d6f93fc..cc4df31 100644
Binary files a/obj/Drivers/RingQueue2/ring_queue2.o and b/obj/Drivers/RingQueue2/ring_queue2.o differ
diff --git a/obj/Drivers/RingQueue2/subdir.mk b/obj/Drivers/RingQueue2/subdir.mk
index 5efbfe2..1b24068 100644
--- a/obj/Drivers/RingQueue2/subdir.mk
+++ b/obj/Drivers/RingQueue2/subdir.mk
@@ -16,6 +16,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Drivers/RingQueue2/%.o: ../Drivers/RingQueue2/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Drivers/TimeSliceOffset/subdir.mk b/obj/Drivers/TimeSliceOffset/subdir.mk
index dc10b9d..4b203f6 100644
--- a/obj/Drivers/TimeSliceOffset/subdir.mk
+++ b/obj/Drivers/TimeSliceOffset/subdir.mk
@@ -16,6 +16,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Drivers/TimeSliceOffset/%.o: ../Drivers/TimeSliceOffset/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Hardware/src/gpio.d b/obj/Hardware/src/gpio.d
index 0f1a83b..55dc5ba 100644
--- a/obj/Hardware/src/gpio.d
+++ b/obj/Hardware/src/gpio.d
@@ -30,7 +30,8 @@ Hardware/src/gpio.o: ../Hardware/src/gpio.c \
D:\psx\MPPT\git\Drivers\TimeSliceOffset/timeSliceOffset.h \
D:\psx\MPPT\git\App\inc/uart_dev.h \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
- D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/uart_dev.h
+ D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\App\inc/uart_dev.h \
+ D:\psx\MPPT\git\App\inc/parameter.h
D:\psx\MPPT\git\Hardware\inc/gpio.h:
@@ -101,3 +102,5 @@ D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h:
D:\psx\MPPT\git\Hardware\inc/rs485.h:
D:\psx\MPPT\git\App\inc/uart_dev.h:
+
+D:\psx\MPPT\git\App\inc/parameter.h:
diff --git a/obj/Hardware/src/gpio.o b/obj/Hardware/src/gpio.o
index ff0b87c..0cee2e9 100644
Binary files a/obj/Hardware/src/gpio.o and b/obj/Hardware/src/gpio.o differ
diff --git a/obj/Hardware/src/subdir.mk b/obj/Hardware/src/subdir.mk
index e3868de..f496f16 100644
--- a/obj/Hardware/src/subdir.mk
+++ b/obj/Hardware/src/subdir.mk
@@ -31,6 +31,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Hardware/src/%.o: ../Hardware/src/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/Hardware/src/tim.d b/obj/Hardware/src/tim.d
index e8c1e49..eef4b8a 100644
--- a/obj/Hardware/src/tim.d
+++ b/obj/Hardware/src/tim.d
@@ -31,7 +31,10 @@ Hardware/src/tim.o: ../Hardware/src/tim.c \
D:\psx\MPPT\git\Drivers\RingQueue/ring_queue.h \
D:\psx\MPPT\git\Hardware\inc/rs485.h D:\psx\MPPT\git\Hardware\inc/pwm.h \
D:\psx\MPPT\git\App\inc/mppt_control.h D:\psx\MPPT\git\App\inc/task.h \
- D:\psx\MPPT\git\App\inc/uart_dev.h
+ D:\psx\MPPT\git\App\inc/uart_dev.h D:\psx\MPPT\git\App\inc/parameter.h \
+ D:\psx\MPPT\git\App\inc/collect_Conversion.h \
+ D:\psx\MPPT\git\Hardware\inc/adc.h \
+ D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h
D:\psx\MPPT\git\Hardware\inc/tim.h:
@@ -106,3 +109,11 @@ D:\psx\MPPT\git\App\inc/mppt_control.h:
D:\psx\MPPT\git\App\inc/task.h:
D:\psx\MPPT\git\App\inc/uart_dev.h:
+
+D:\psx\MPPT\git\App\inc/parameter.h:
+
+D:\psx\MPPT\git\App\inc/collect_Conversion.h:
+
+D:\psx\MPPT\git\Hardware\inc/adc.h:
+
+D:\psx\MPPT\git\Drivers\RingQueue2/ring_queue2.h:
diff --git a/obj/Hardware/src/tim.o b/obj/Hardware/src/tim.o
index 2e1f4ce..6dde0fd 100644
Binary files a/obj/Hardware/src/tim.o and b/obj/Hardware/src/tim.o differ
diff --git a/obj/Peripheral/src/subdir.mk b/obj/Peripheral/src/subdir.mk
index a25e7e1..e24de46 100644
--- a/obj/Peripheral/src/subdir.mk
+++ b/obj/Peripheral/src/subdir.mk
@@ -76,6 +76,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
Peripheral/src/%.o: ../Peripheral/src/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/User/main.o b/obj/User/main.o
index bcfba1a..0073806 100644
Binary files a/obj/User/main.o and b/obj/User/main.o differ
diff --git a/obj/User/subdir.mk b/obj/User/subdir.mk
index 9b01319..474a812 100644
--- a/obj/User/subdir.mk
+++ b/obj/User/subdir.mk
@@ -22,6 +22,6 @@ C_DEPS += \
# Each subdirectory must supply rules for building sources it contributes
User/%.o: ../User/%.c
- @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"D:\psx\MPPT\git\Debug" -I"D:\psx\MPPT\git\Core" -I"D:\psx\MPPT\git\User" -I"D:\psx\MPPT\git\Peripheral\inc" -I"D:\psx\MPPT\git\App\inc" -I"D:\psx\MPPT\git\Hardware\inc" -I"D:\psx\MPPT\git\Drivers\TimeSliceOffset" -I"D:\psx\MPPT\git\Drivers\RingQueue" -I"D:\psx\MPPT\git\Drivers\RingQueue2" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
@ @
diff --git a/obj/mppt_Nos_V0.4.bin b/obj/mppt_Nos_V0.4.bin
index 9231466..89d4a44 100644
Binary files a/obj/mppt_Nos_V0.4.bin and b/obj/mppt_Nos_V0.4.bin differ
diff --git a/obj/mppt_Nos_V0.4.elf b/obj/mppt_Nos_V0.4.elf
index 8df4c54..026d4c9 100644
Binary files a/obj/mppt_Nos_V0.4.elf and b/obj/mppt_Nos_V0.4.elf differ
diff --git a/obj/mppt_Nos_V0.4.hex b/obj/mppt_Nos_V0.4.hex
index 2e750ec..dfec98f 100644
--- a/obj/mppt_Nos_V0.4.hex
+++ b/obj/mppt_Nos_V0.4.hex
@@ -1,22 +1,22 @@
-:040000006F006043EA
+:040000006F00E0436A
:100004000000000000000000480200004A02000056
-:1000140000000000340400000000000000000000A4
-:10002400340400003404000000000000000000005C
-:10003400800B0000000000003404000000000000F9
-:1000440034040000340400003404000034040000CC
-:1000540034040000340400003404000034040000BC
-:10006400A80A000034040000340400003404000032
-:10007400340400003404000034040000340400009C
-:10008400340400003404000034040000340400008C
-:10009400340400003404000034040000340400007C
-:1000A400340400008E0B000034040000340400000B
-:1000B400680B0000460B0000340400003404000008
-:1000C400340400003404000034040000340400004C
-:1000D400340400003404000034040000C20A0000A8
-:1000E400BA0A0000340400003404000034040000A0
-:1000F40034040000040B0000340400003404000045
-:10010400340400003404000034040000340400000B
-:1001140034040000000000000000000000000000A3
+:10001400000000003C04000000000000000000009C
+:100024003C0400003C04000000000000000000004C
+:100034008A1D0000000000003C04000000000000D5
+:100044003C0400003C0400003C0400003C040000AC
+:100054003C0400003C0400003C0400003C0400009C
+:10006400661700003C0400003C0400003C0400004F
+:100074003C0400003C0400003C0400003C0400007C
+:100084003C0400003C0400003C0400003C0400006C
+:100094003C0400003C0400003C0400003C0400005C
+:1000A4003C040000981D00003C0400003C040000D7
+:1000B4001C1D00006C1C00003C0400003C040000FB
+:1000C4003C0400003C0400003C0400003C0400002C
+:1000D4003C0400003C0400003C0400005C1B0000E5
+:1000E400461800003C0400003C0400003C040000EE
+:1000F4003C040000A21B00003C0400003C0400007F
+:100104003C0400003C0400003C0400003C040000EB
+:100114003C0400000000000000000000000000009B
:1001240000000000000000000000000000000000CB
:0C013400000000000000000000000000BF
:10014000397101436EC619A0397141536AC866CA34
@@ -36,480 +36,2190 @@
:10022000D58D93960501D58D61B7939627009702DA
:10023000000096968682E78086FA9680C1171D8F09
:100240003E96E374C3F8A5B701A001A0EFF25FF2F8
-:100250000545092D352AEF00901B71651305052012
-:10026000EF00F01CB707002083A507083725000022
-:10027000130585E9EF00F0269124AA8537250000B3
-:10028000130585EAEF00F025014529B7EFF25FEE8F
-:10029000371402401C403707FF08411193E717004D
-:1002A0001CC05C40F98F5CC01C403707F7FE6D171F
-:1002B000F98F1CC01C403707FCFF7D17F98F1CC04D
-:1002C0005C40370701FF7D17F98F5CC0B7079F00BF
-:1002D0001CC4112102C402C6B7270240054798C3B7
-:1002E0001C404167B7160240D98F1CC03706020078
-:1002F00005679C42F18F3EC6A24785073EC4B247C0
-:1003000081E7A247E397E7FEB71702409C431397A4
-:10031000E7006357070685473EC6324785476313A4
-:10032000F706B7170240D843B706C1FFFD16D8C37A
-:10033000D843D8C3D84313670740D8C3D843758F71
-:10034000D8C3D843B7061100558FD8C39843B70612
-:100350000001558F98C3984393166700E3DD06FEAE
-:10036000D843B7160240719BD8C3D8431367270000
-:10037000D8C32147DC42B18BE39EE7FE410119BDA2
-:1003800002C661BF372702401C43F19B1CC3FDB767
-:10039000B7160240DC42370700201146B18B130725
-:1003A0000708638FC70221466381C70495EB9C420F
-:1003B000918B9DC7B7470F00938707241CC3B717BE
-:1003C0000240DC43918393F6F700B7070020938740
-:1003D0000700B69794231C43B3D7D7001CC3828071
-:1003E000B7177A0093870720D1BFDC42D442416619
-:1003F000C983BD8BF18E890745466393C700C94702
-:1004000081EEB746024083A60680C18A89CEB71620
-:100410007A009386062021A8B7160240D44213968C
-:10042000E600E35606FEB7163D0093860690B387B6
-:10043000D70269B701A0970100209381A144175109
-:100440000020130121BC172500001305E5B1970515
-:100450000020938525BB1386818163FAC500832222
-:10046000050023A0550011059105E3EAC5FE13859B
-:100470008181938501856377B500232005001105EF
-:10048000E36DB5FEFD42739002BC8D4273904280D5
-:100490009302800873900230970200009382C2B6E4
-:1004A00093E2320073905230EFF05FDE970200006B
-:1004B000938202DA739012347300203003A5C18155
-:1004C0008280B70701401387074083A70740584B36
-:1004D000698F09C77D8D3335A000828001458280F8
-:1004E000B707014023AAA74082809C4513F7070164
-:1004F00013F8F70001C7D8413368E8008E2113F7DD
-:10050000F50F39C318418146854E3D4F930F800248
-:1005100093028004214E3396DE00B3F8C5006311C8
-:1005200016039398260033131F011343F3FF337709
-:10053000E300B318180133E7E800639FF70550C9DB
-:100540008506E39AC6FD18C11307F00F6375B7045B
-:1005500054412146854E3D4F930F80029302800403
-:10056000414EB398CE0033F715016392E80213179A
-:10057000260001173313EF001343F3FFB376D300C4
-:100580003317E800D98E639DF701232A150105066C
-:10059000E319C6FD54C18280E39457FA10C94DB7E0
-:1005A000E39757FE23281501DDB7370700C0B3775F
-:1005B000E5006395E708370701405C439356B501B2
-:1005C000584F9D8A9DE6F99BB70600FFFD16758F73
-:1005D00089C993160501C182D58FB706FF01758DB4
-:1005E000498FB7060007D58FB7060140DCC2D8CEC9
-:1005F000828005466396C600F59BB70680FFF9B773
-:1006000009466396C600ED9BB706E8FFC1B70D46E5
-:100610006396C600DD9BB706FCFF4DBF114663978E
-:10062000C60093F7F7F3B706C0FF4DB71546E39141
-:10063000C6FA93F7F7CFB706E0FF49BF3707004088
-:100640006391E702B7070140D84F4205B367A7009F
-:1006500089E51345F5FFB377E500370701405CCF27
-:100660008280A9E337080140B7073000032648001D
-:1006700013170501B376F50041836396F602B706BA
-:1006800000F9FD16B377D60003264800F18E232229
-:10069000D80091C5558112053315A700C98F3707BA
-:1006A00001405CC382809317B50063D00702935763
-:1006B000050193F6F7008D47B397D70093C7F7FF6F
-:1006C000F18FB7060007D58FE9B793575501920709
-:1006D000B317F700E5B7EFF2BFA937F4FF1F032701
-:1006E00044723706003E4111931797019346F7FF76
-:1006F000F18F060737063E00718FD98F370600014C
-:1007000013979600718FD98FBD824167F98ED58F6F
-:1007100002C202C402C623A0F18203578472854537
-:10072000239CE180032704721305D00323A2E182F6
-:100730000327447023AEE1802124832744703707C8
-:100740003A101307077093F7F7F0638FE70E6360B3
-:10075000F7023707321013070770638FE704370774
-:100760003710130707706386E708410125B4370780
-:100770003B1013070770638BE70A37073D10130719
-:100780000770E394E7FE854521650535B714014000
-:10079000E177130480044C00138504807C8222C618
-:1007A000A93385679387C7334C00138504C07C82C7
-:1007B00022C6253BF9770DA085452165FD33B71489
-:1007C0000140930700E0130480044C00138504C02B
-:1007D0007C8222C6193B89674C00371501407C8218
-:1007E00022C621338D477C8222C64C0013850440EB
-:1007F00025A8B7140140E17793870770130480049C
-:100800004C00138504807C8222C6C5319307D0E357
-:100810004C00138504C07C8222C6C139F9777C82E2
-:1008200022C64C0037150140C93181B7B7140140C9
-:10083000E177130480044C00138504807C8222C677
-:100840006D31930740208DB7B7140140E177130451
-:1008500080044C00138504807C8222C6793189672C
-:10086000F51799B723A4A1828280371702405C4311
-:100870009146B18B638CD706A146638ED706BDE740
-:100880001C43918BA5C7B7470F00938707241CC152
-:10089000371602405C423707002013070701918397
-:1008A000BD8BBA9794231C41B3D7D7005CC1544287
-:1008B000A1829D8ABA969422B3D6D70014C5544219
-:1008C000AD829D8A36971423B3D6D70054C55842BB
-:1008D000634C07005C42B98313F73700938741806C
-:1008E000BA979C23B3D7F6021CC98280B7177A0047
-:1008F0009387072069BF5C435843C166C983BD8B9A
-:10090000758F8907C5466393D700C94701EF3747FD
-:10091000024003270780418B09CF37177A0013075E
-:10092000072021A83717024058439316E700E3D663
-:1009300006FE37173D0013070790B387E70281BF14
-:1009400099C5371702401C4F5D8D08CF8280B717BD
-:100950000240984F1345F5FF798D88CF82801E297C
-:100960004A25ED8F4205418189C76D8D3335A00041
-:1009700082800145828093C5F5FFC205C1810EA921
-:100980008280EFF2EFFE1629F577FD17F58FF6213D
-:10099000DA257971D58F1EA95625FD779387379F64
-:1009A000F58FD6212A842EC6D58F9625D58FB625CC
-:1009B000D58F5EA55E29C207C18393F7F7CFD98F84
-:1009C0005EA968085D35B747014093870780B24547
-:1009D000631AF404A25756246547B387E702C20698
-:1009E000C186984163D20604060752244206B3D753
-:1009F000E702130740064186B3D6E702B3F7E702E2
-:100A00009206635506028E0793872703B3D7E70242
-:100A100013F77700B367D700C207C1831EA44561EF
-:100A20006FF04FF7925745BF0A07C1B792079387F8
-:100A30002703B3D7E702BD8BD58FF9BF91C55E25DC
-:100A40000967D98F5EA582805A25F977FD17F98F3E
-:100A5000D5BF93F5F51F4EA182804A211375F51F6E
-:100A600082800A216D8D3335A000828013F7F50F47
-:100A700085461583B397B6006311D7025A25F98FBF
-:100A80001A2101454207418381CB0545A181B31558
-:100A9000B5006D8F3335E000828089466314D7003E
-:100AA0001A29F1BF5A29E1BF1145213C854763143A
-:100AB000F500114535347300203005651934730095
-:100AC0002030411122C6375400409305505213057F
-:100AD0000480693F05C51305048041379375F50F00
-:100AE0002386B18203A5C1831C4D10495449850753
-:100AF000B3E7C7026384D7003105E52032444101E2
-:100B000073002030411122C63754004093055052E3
-:100B1000130504C0A13F05C5130504C03D3F9375EF
-:100B2000F50F2388B18203A501841C4D1049544957
-:100B30008507B3E7C7026384D70031055D203244DF
-:100B4000410173002030411122C637040040854521
-:100B500013050440293509C5854513050440213D89
-:100B60003244410173002030854537050040C53BC4
-:100B700011C5854537050040FD3B812073002030BD
-:100B8000B7F700E023A207000D28730020304111C1
-:100B900022C6373401408545130504C0C93311C945
-:100BA000130504C08545C13B37250000130585EBBF
-:100BB0009924324441017300203083A741830546C4
-:100BC00091E38280D62381CEBA237D1742074183E9
-:100BD000BAA3BA234207418319E390A3B6A3DC4723
-:100BE000C5B75C45544118458507B3E7D702638E06
-:100BF000E70058451C41BA978CA35C4558418507CE
-:100C0000B3E7E7025CC50545828079558280B70766
-:100C1000002083A707080967130707F4B3D7E70283
-:100C2000C207C183239DF182239CF1828280EFF26F
-:100C30002FD42A84116501118545110511339307BD
-:100C400000207C82371501408D473EC44C00E147AF
-:100C5000130505803EC6EFF05F8922C83744014086
-:100C6000B70708000C08130504803ECC02CA231EF7
-:100C70000100013B854513050480C93305616FF010
-:100C80006FD1EFF24FCDB7440140AE8932890144B4
-:100C900093840480634524014A856FF00FCF930548
-:100CA000000426857D3B65DDB387890083850700C9
-:100CB00026850504C205C181693BE9BF1387818090
-:100CC0001C43938601853E95636BD500B756002083
-:100CD0009386068063E5A60008C33E858280FD57A3
-:100CE000EDBF39713EDA2ED232D436D63AD842DC54
-:100CF00046DE9387C18022CC804326CA06CEAA84D2
-:100D000009C41C4C99E32285ED290C445410268615
-:100D1000228536C6EF007012F2406244D24421614F
-:100D20008280011126CA4AC806CE22CC4EC652C4C1
-:100D3000AA842E8901C51C4D91E3E1219C4C80447D
-:100D400099E326857D29971700009387271A631B4F
-:100D5000F402C0405E24A18BB1C71C48A1C7FD5955
-:100D6000294A1C4483450900FD17B1E91CC463DD11
-:100D700007062286A94526856120FD576308F502EE
-:100D8000294535A097170000938747186314F4008E
-:100D90008044C9B79717000093874713E31CF4FA00
-:100DA000C0444DBFA2852685112A55D97D55F240F4
-:100DB0006244D2444249B249224A056182801CC43D
-:100DC000050963D70700184C63CAE700638845012B
-:100DD0001C401387170018C08CA361B72286268594
-:100DE0000520E31035F9D9B71C401387170018C048
-:100DF000294798A371B79387C180AA85884315B7FF
-:100E0000011122CC26CA4AC806CE4EC6AA842E8913
-:100E1000328401C51C4D91E3ED269717000093879E
-:100E2000E70C6317F406C0401C4C1CC45E24A18B65
-:100E3000C1C31C48B5CF1C4808409379F90F1379FA
-:100E4000F90F1D8D5C486346F500A2852685692C47
-:100E500025E51C440505FD171CC41C40138717001D
-:100E600018C0238037015C486388A7005E24858B07
-:100E700081CBA9476316F900A2852685B5240DED1F
-:100E8000F24062444A85D2444249B24905618280B7
-:100E900097170000938787076314F400804469B7AD
-:100EA0009717000093878702E310F4F8C044ADBFA2
-:100EB000A2852685212041D17D59D9B7411193873B
-:100EC000C18026C2844322C44AC006C62A892E8411
-:100ED00089C49C4C99E326852D269717000093879B
-:100EE000E700631BF402C0400317C4009317070117
-:100EF000C18393F68700ADEA93F6070195EEA54707
-:100F00002320F900136707045AA47D55B2402244F8
-:100F1000924402494101828097170000938707FF9E
-:100F20006314F4008044C9B797170000938707FA49
-:100F3000E31CF4FAC0444DBF918B9DC34C5889C942
-:100F4000930744046384F5004A853123232A04026D
-:100F50005E242322040093F7B7FD5EA41C481CC046
-:100F60005E2493E787005EA41C4899EB5E24130778
-:100F7000002093F707286385E700A2854A85A12111
-:100F80005E2413F717001DC35C4823240400B30735
-:100F9000F0401CCC1C480145B5FB8317C40013F777
-:100FA00007082DD793E707045EA485B7898B01470F
-:100FB00091E3584818C4F9BFDE25011122CC26CA96
-:100FC00006CE4AC84EC613F78700AA842E8479EB52
-:100FD000D841634DE000B841634AE0000145F2406A
-:100FE0006244D2444249B2490561828058547DD757
-:100FF00003A904009396370123A0040063DB0606CF
-:1010000070485E24918B99C75C401D8E5C5899C3D3
-:101010003C401D8E5C540C50814626858297FD57BE
-:101020005A24631DF5009440F54763E8D706B707D7
-:1010300040208507B3D7D700858BA5C31C48232242
-:1010400004001CC09317370163D80700FD576314D1
-:10105000F5009C4091E368C84C5823A02401BDDDF5
-:10106000930744046384F5002685F526232A0402A9
-:10107000B5B70C500146854626850297FD572A864E
-:10108000E311F5F89C40B5DF75476385E7005947E4
-:101090006393E70423A0240191B7136707045AA4BC
-:1010A0007D5535BF83A90501E38A09F203A905002F
-:1010B0008D8B23A0350133093941014791E3D8498C
-:1010C00018C4E35D20F11C540C50CA864E86268558
-:1010D00082976347A0005E2493E707045EA4C9B724
-:1010E000AA993309A940F1BF9C49B9CF011122CC7B
-:1010F00006CE2A8411C51C4D81E72EC61922B245A1
-:1011000097170000938787DE639BF5004C40839719
-:10111000C50095C722856244F240056171BD9717ED
-:1011200000009387A7DE6394F5000C44CDB79717B2
-:1011300000009387A7D9E39CF5FC4C44C9BFF2405B
-:10114000624401450561828001458280411122C4CB
-:1011500006C62A844EA572A5232005002322050079
-:10116000232405002322050623280500232A050041
-:10117000232C0500214681451305C505EFF04F825C
-:1011800097170000938747B15CD0971700009387AB
-:1011900067B31CD497170000938747B75CD49717A1
-:1011A00000009387A7B900D01CD8B2402244410167
-:1011B000828097050000938565F3A9A2411126C29C
-:1011C000130680069384F5FFB384C4024AC02E89B7
-:1011D00022C406C6938544071D262A8401CD2320F8
-:1011E000050023222501310508C4138684068145A4
-:1011F000EFE01FFB2285B2402244924402494101A4
-:1012000082801C4DADE3411106C622C49707000041
-:10121000938767FA1CD5938701819C432324050497
-:1012200023260504232805046314F50085471CCDF7
-:101230002A841D2848C02285052808C422852D201F
-:1012400048C4484001469145113708440546A54524
-:10125000F53D48440946C945D53D85471CCCB240BB
-:10126000224441018280828041119387018126C2FC
-:1012700084434AC006C69C4C22C42A8999E3268529
-:101280004937938484048044DC40FD1763D607000B
-:101290009C40B9CF8440C5BF0317C40039E7C1776C
-:1012A000850723220406232004002322040023248C
-:1012B00004005CC423280400232A0400232C040017
-:1012C000214681451305C405EFE09FED232A040262
-:1012D000232C040223240404232604042285B24080
-:1012E000224492440249410182801304840671BF62
-:1012F00091454A85E13588C051FDB1472320F90069
-:101300000144E9BF797122D44AD052CC56CA5AC896
-:101310005EC606D626D24ECE2A8AAE8A130485042D
-:101320000149054BFD5B09ECB25022544A859254A9
-:101330000259F249624AD24A424BB24B456182801D
-:10134000044483294400FD1963D409000040E1BF2F
-:10135000DE24637BFB008397E40063877701A68527
-:101360005285829A3369A90093848406E9BF197172
-:10137000A6DAAE848395E500A2DC86DE328463DBE8
-:101380000500DE2423A0060093F7070885E79307EE
-:1013900000401DA0300836C6EF00D01FB246E34221
-:1013A00005FE7247BD67F98F7977BA9793B7170033
-:1013B0009CC2F1BF930700041CC0F6506654D6547B
-:1013C000014509618280DE25011122CC06CE26CAA4
-:1013D0004AC8898B2E8489CF930774041CC01CC80B
-:1013E00085475CC8F2406244D2444249056182802C
-:1013F00074003000AA84A53FA2452A8926850122CF
-:1014000019E98317C40013F7072069FFF19B93E7DD
-:1014100027005EA4D1B7970700009387C7D99CD453
-:101420005E2408C008C893E707085EA4A2475CC80A
-:10143000B24781CF8315E4002685EF00501811C50F
-:101440005E24F19B93E717005EA45E243369F900E4
-:101450002316240141BFDDC183A7C5FF411122C46A
-:1014600006C626C21384C5FF63D307003E94AA8430
-:10147000EF00B01B938741849C4381EF232204003B
-:1014800023A281842244B2402685924441016F0008
-:10149000F019637EF40014403307D4006396E7002C
-:1014A0009843DC43369718C05CC0D9BFBA87D8438D
-:1014B00019C3E37DE4FE94433386D700631F86009F
-:1014C0001040B29694C33386D700E31DC7FA104389
-:1014D0005843B29694C3D8C375B76375C400B14777
-:1014E0009CC04DB71040B306C4006316D700144328
-:1014F0005843B29614C058C0C0C369B78280011166
-:1015000026CA93843500F19806CE22CC4AC84EC62E
-:10151000A104B14763F3F404B14463E2B4042A893B
-:10152000EF00B0109387418498433A8439E0938761
-:1015300081849C4391E781454A85052F23A4A1849A
-:10154000A6854A851D27FD5963193507B147232014
-:10155000F9004A85EF00900D29A0E3D004FCB147C3
-:101560001CC10145F2406244D2444249B24905617E
-:1015700082801C40858F63CF0702AD4663F6F6007C
-:101580001CC03E9404C031A05C406313870223A2B8
-:10159000F1844A85EF0090091305B40093074400D5
-:1015A00061993307F5405DDF3A94898F1CC05DBFB8
-:1015B0005CC3C5B72287404095BF130435007198BE
-:1015C000E30285FCB305A4404A854525E31C35FBB1
-:1015D000B5BF1C46FD171CC663DA0700184E63C56D
-:1015E000E700A9476394F5006FF09F811C422E85A8
-:1015F0001387170018C28CA38280011122CC26CA3F
-:101600004AC84EC652C406CE2A89AE893284B30473
-:10161000D6007D5A63149400014501A80C204E8623
-:101620004A85453F0504E31745FFF2406244D24432
-:101630004249B249224A05618280357122CD26CBCA
-:101640004AC94EC706CF52C556C35AC1DEDEE2DCD8
-:10165000E6DAAA89AE843289368401C51C4D91E34D
-:101660004D3697170000938767886397F40C83A41F
-:101670004900DE24A18BFDC39C48EDC39307000203
-:10168000A304F1029307000302D22305F10222C64C
-:10169000930B5002971A0000938A4A89054C294BF4
-:1016A0004A841C2099C3639E770DB30C2441638D3B
-:1016B0000C00E6864A86A6854E858137FD57630F66
-:1016C000F51C9256E69636D21C206389071CFD57FE
-:1016D0001309140002C802CE3ECA02CCA3090104B9
-:1016E00082D4834509001546568525271304190021
-:1016F000C24751E913F7070109C713070002A309FD
-:10170000E10413F7870009C71307B002A309E10436
-:10171000834609001307A002638FE606F2474A8456
-:1017200081462546182093051400130707FD6377AB
-:10173000E60AB5CA3ECE85A8970700009387077DC5
-:101740006395F40083A489002DB797070000938761
-:10175000E777E390F4F283A4C90021BFA6854E8504
-:10176000EFF0CFF501DD7D55FA406A44DA444A498D
-:10177000BA492A4A9A4A0A4BF65B665CD65C0D6106
-:101780008280050439BF330555413315AC00C98F3C
-:101790003EC82289B9B7324793064700184336C678
-:1017A000634707023ACE18209307E002631DF7044F
-:1017B00018309307A002631BF702B247090413878E
-:1017C00047009C433AC663C107023ECA2DA83307AF
-:1017D000E04093E727003ACE3EC8F1B7B3876703EE
-:1017E00085462E84BA973DBFFD57C5B7050402CA8A
-:1017F000814681472546182093051400130707FDED
-:101800006374E606F9F20C200D4617050000130577
-:101810006572012511CD970700009387A7711D8D73
-:1018200093070004B397A700424505045D8D2AC8BD
-:101830000C20194617050000130505701309140044
-:101840002304B102F92335C197E7FFFF9387877B14
-:1018500095E74247B2471377071009CF91073EC675
-:101860009257D2973ED22DBDB387670385462E840B
-:10187000BA9751B79D07E19BA107D5B778009706A6
-:1018800000009386C6D726860C084E859700000078
-:10189000E7000000FD572A8AE314F5FCDE2493F7E5
-:1018A0000704E39207EC1255C1B5780097060000D3
-:1018B0009386E6D426860C084E85012AE1BF79710D
-:1018C00056CA9C49BA8A984522D426D24ECE52CCCA
-:1018D00006D64AD05AC85EC6AA892E84B284368AF1
-:1018E00063D3E700BA879CC00347340419C3850754
-:1018F0009CC01C4093F7070281C79C4089079CC08D
-:101900000329040013796900631A0900130B940179
-:10191000FD5B5C449840998F634CF9041C408346FE
-:10192000340493F70702B336D000A5EB1306340452
-:10193000D2854E85829AFD576303F5041C401146FB
-:101940009840998B544481446397C700B384E64020
-:1019500063D3040081441C4418486354F700998FF2
-:10196000BE94014969047D5B63982405014509A87B
-:1019700085465A86D2854E85829A631E75017D55AD
-:10198000B250225492540259F249624AD24A424B0E
-:10199000B24B456182800509ADBF3307D400130601
-:1019A0000003A301C7040347540493871600A297BA
-:1019B0008906A381E7049DBF85462286D2854E8590
-:1019C000829AE30E65FB050945B7797122D426D2C8
-:1019D0004AD04ECE06D652CC56CA5AC8B689942D95
-:1019E000930790063289AA842E8413863504638D6A
-:1019F000F60263E2D706930780056385F61863ED68
-:101A0000D700638D062093073004638EF60A930A8D
-:101A100024042301D404C9A0930730066385F60A81
-:101A200093074006E395F6FE1C40084393F607082B
-:101A300093054500C5C61C410CC363D807001307B6
-:101A4000D002B307F040A301E40497060000938698
-:101A5000264F294765A8930700076381F61663E5BB
-:101A6000D7029307E0066388F6189307F006E39021
-:101A7000F6FA0C401C4313F805081385470063076A
-:101A8000080608C39C4385A893075007E383F6FE26
-:101A9000930780076388F61293073007E399F6F6F9
-:101AA0001C43D04181459386470014C383AA070095
-:101AB0005685852601C53305554148C05C401CC884
-:101AC000A301040461A81C43930A240493864700DD
-:101AD0009C4314C32301F4048547D5B793F6070448
-:101AE0001C410CC3B9DAC207C18781BF93F5050455
-:101AF00008C3C9D99E231307F0066386E60E97062E
-:101B000000009386E6432947A30104044C400CC41B
-:101B100063C5050008406D9908C099E3B28A89CD74
-:101B2000B28AB3F5E702FD1AB6958C212380BA007C
-:101B3000B3D5E70263FFE70AA147631EF7001C4025
-:101B4000858B91CB58401C4863C7E700930700037F
-:101B5000A38FFAFEFD1A3306564110C84E87CA8677
-:101B60007000A2852685A13B7D5A631D450B7D55DE
-:101B7000B250225492540259F249624AD24A424B1C
-:101B800045618280A382D504970600009386463B78
-:101B90000C40084313F805081C411105630D0802A9
-:101BA00008C313F7150001C793E505020CC04147B0
-:101BB000A1FF0C4093F5F5FD0CC0B9B79C4193E72C
-:101BC00007029CC193078007A302F4049706000054
-:101BD0009386463875BF13F8050408C3E30308FC71
-:101BE000C207C1837DBF97060000938666352147F3
-:101BF00021BFAE873DB794411C43CC4913F806087A
-:101C0000138547006306080008C39C438CC339A0B2
-:101C100008C393F606049C43F5DA8EA32328040038
-:101C2000B28A2DBF14485686CA8526858299E3005C
-:101C300045F51C40898B8DE7B2474844E35AF5F2DD
-:101C40003E853DB785465686CA8526858299E3003E
-:101C500065F3050A5C443247998FE345FAFEE9BF14
-:101C6000014A930A94017D5BF5B7411122C42A848D
-:101C70002E8523A6018406C6EFF04F84FD57631717
-:101C8000F5009387C1849C4391C31CC0B240224499
-:101C900041018280411122C42E848395E50006C64D
-:101CA0007922634905007C48AA977CC8B240224447
-:101CB000410182805E247D777D17F98F5EA4FDB798
-:101CC000DE25011122CC26CA4AC84EC606CE93F79D
-:101CD0000710AA842E843289B68991C78395E500BE
-:101CE0008946014609225E247D777D17F98F5EA41F
-:101CF0008315E4006244F240CE864A86B2494249E6
-:101D00002685D244056125A8411122C42E848395DD
-:101D1000E50006C6C928FD575A24631AF500FD7769
-:101D2000FD17F98F5EA4B24022444101828085678D
-:101D3000D98F5EA468C8C5BF8395E50005A8411189
-:101D400022C42A842E85B285368623A6018406C63F
-:101D5000EFE03FF3FD576317F5009387C1849C4381
-:101D600091C31CC0B240224441018280411122C46F
-:101D70002A842E8523A6018406C6C520FD57631735
-:101D8000F5009387C1849C4391C31CC0B240224498
-:101D900041018280411122C42A842E85B28523A666
-:101DA000018406C6C920FD576317F5009387C184D7
-:101DB0009C4391C31CC0B240224441018280411126
-:101DC00022C42A842E8523A6018406C65D20FD57E1
-:101DD0006317F5009387C1849C4391C31CC0B24034
-:101DE000224441018280411122C42A842E85B28579
-:101DF000368623A6018406C65920FD576317F500D1
-:101E00009387C1849C4391C31CC0B24022444101CA
-:101E1000828093F5F50F2A966314C50001458280F0
-:101E20001C21E38EB7FE0505C5BF8280828041116B
-:101E300022C42A842E85B285368623A6018406C64E
-:101E4000A920FD576317F5009387C1849C4391C374
-:101E50001CC0B2402244410182809307800523A622
-:101E6000F1847D5582809307800523A6F1847D55FA
-:101E700082809307800523A6F18401458280930721
-:101E8000800523A6F1847D5582809307800523A6D3
-:101E9000F1847D558280000053797374656D436CC5
-:101EA0006B3A25640D0A00004368697049443A257D
-:101EB0003038780D0A000000696E2074696D312099
-:101EC00069727120000000000000000000000000A6
-:101ED0000000000000000000000000000000000002
-:101EE00000000000000000000000000000000000F2
-:101EF00000000000000000000000000000000000E2
-:101F000000000000000000000000000000000000D1
-:101F100000000000000000000000000000000000C1
-:101F20000000000000000000232D302B20000000E6
-:101F3000686C4C00656667454647000030313233B7
-:101F400034353637383941424344454600000000B5
-:101F5000303132333435363738396162636465661F
-:041F6000000000007D
-:101F64000000000000000000010203040607080945
-:101F7400000000000102030401020304060708092B
-:101F840000000000E81E0000081F0000C81E00003A
-:101F9400000000000000000000000000000000003D
-:101FA400000000000000000000000000000000002D
-:101FB400000000000000000000000000000000001D
-:101FC400000000000000000000000000000000000D
-:101FD40000000000000000000000000000000000FD
-:101FE400006CDC0202040608D0000020200000205F
-:081FF4002000002000000000A5
+:100250000545EF00D0288922EF10704D7165130518
+:100260000520EF103052B707002083A5871A378585
+:100270000000130545FCEF6030210925AA8537856C
+:100280000000130545FDEF603020EF305059014567
+:1002900011B7EFF2FFED371402401C403707FF089B
+:1002A000411193E717001CC05C40F98F5CC01C40F3
+:1002B0003707F7FE6D17F98F1CC01C403707FCFF8E
+:1002C0007D17F98F1CC05C40370701FF7D17F98F40
+:1002D0005CC0B7079F001CC4EF00700702C402C6D1
+:1002E000B7270240054798C31C404167B716024034
+:1002F000D98F1CC03706020005679C42F18F3EC6AD
+:10030000A24785073EC4B24781E7A247E397E7FECD
+:10031000B71702409C431397E700635707068547CA
+:100320003EC6324785476313F706B7170240D843E6
+:10033000B706C1FFFD16D8C3D843D8C3D843136747
+:100340000740D8C3D843758FD8C3D843B706110028
+:10035000558FD8C39843B7060001558F98C398436B
+:1003600093166700E3DD06FED843B7160240719B83
+:10037000D8C3D84313672700D8C32147DC42B18BC9
+:10038000E39EE7FE410139B502C661BF372702404F
+:100390001C43F19B1CC3FDB7B7160240DC42370774
+:1003A00000201146B18B1307871A638FC7022146BD
+:1003B0006381C70495EB9C42918B9DC7B7470F00A3
+:1003C000938707241CC3B7170240DC43918393F63D
+:1003D000F700B707002093870700B69794231C43C4
+:1003E000B3D7D7001CC38280B7177A009387072042
+:1003F000D1BFDC42D4424166C983BD8BF18E8907EF
+:1004000045466393C700C94781EEB746024083A6BD
+:100410000680C18A89CEB7167A009386062021A865
+:10042000B7160240D4421396E600E35606FEB7160E
+:100430003D0093860690B387D70269B701A0970164
+:1004400000209381A156175100201301A1BB1785ED
+:1004500000001305254E970500209385A5BA138645
+:10046000818163FAC5008322050023A05500110590
+:100470009105E3EAC5FE13858181971500209385D8
+:1004800065336377B500232005001105E36DB5FEE4
+:10049000FD42739002BC8D427390428093028008AB
+:1004A0007390023097020000938202B693E232000A
+:1004B00073905230EFF0FFDD97020000938242D933
+:1004C0007390123473002030B727014093870740A0
+:1004D000631FF500EFF2DFC9854513050020EF002B
+:1004E0001018814513050020EF00701765B1828058
+:1004F0005C413707F1E01307F7EF944D7D8F9C4186
+:10050000D58FD44DD58FD441A206D58FD98F5CC15C
+:100510001C4537F7F1FF1307D77FD4457D8F9C49E2
+:10052000D58F94458606D58FD98F1CC55C55370766
+:1005300010FF7D177D8FDC29FD1793F7F70FD2078A
+:10054000D98F5CD582801C4589C593E717001CC5EF
+:100550008280F99BEDBF1C4593E787001CC5828014
+:1005600008450D81058982801C4593E747001CC51D
+:10057000828008450981058982801C4591C537071D
+:100580005000D98F1CC582803707B0FF7D17F98FC7
+:10059000D5BFA54763F7B7048D47138765FF3307BA
+:1005A000F7020328C5009D47B397E70093C7F7FFFD
+:1005B000B3F70701B396E600DD8E54C5994763E3B0
+:1005C000C70495477D163306F6025859FD47B39781
+:1005D000C70093C7F7FFF98F3396C5005D8E50D9DA
+:1005E00082800D473387E502032805019D47B397B5
+:1005F000E70093C7F7FFB3F70701B396E600DD8E78
+:1006000014C96DBFB14763E2C7029547651633064B
+:10061000F6021859FD47B397C70093C7F7FFF98F44
+:100620003396C5005D8E10D9828095474D163306EE
+:10063000F6025855FD47B397C70093C7F7FFF98FE8
+:10064000B395C500DD8D4CD582806845420541815A
+:10065000828008416D8D3335A00082805C4191C558
+:1006600037070004D98F5CC18280370700FC7D17F3
+:10067000F98FD5BF3C4989C593E707083CC98280FB
+:1006800093F7F7F7E5BF3C4989C593E707043CC9F1
+:10069000828093F7F7FBE5BF3C4993F7F7FD3CC930
+:1006A0003C49DD8D2CC98280EFF29FACB7066745CF
+:1006B000B7270240938636123797EFCDD4C313077E
+:1006C000B79AD8C3D4D3011198C7D45B1387470313
+:1006D00013962600E34B06FED45737250140130539
+:1006E000054093E60620D4D7DC5BB7060020D58F03
+:1006F0001CC31C431C4537070E00D98F1CC51C4565
+:1007000093E717001CC53C4993E707043CC91C4507
+:1007100093E787001CC52A842285993575FD372506
+:100720000140832785401305054093E747001CC51A
+:100730002A8422853D3D75FD372501400546C94582
+:10074000814613050540B1352546230401003727AE
+:100750000140B70550001C84637FF60423040100A8
+:10076000A54621461C8463FFF606231501002304D9
+:10077000010095461C8463F1F60E38853C85994648
+:100780000D46B3F7D7020565130505803357D70229
+:10079000B3D7C702BA97C207C1837C85B727014088
+:1007A00003A78740799B23A4E7403C8505611D8D05
+:1007B00042054185C5B283278740CD8F2324F7406A
+:1007C00083270740898BEDDF1C848326C7440810EC
+:1007D0008607AA972396D7FE1C84850793F7F70F01
+:1007E0005C8495BFA30401009C846378F6001C849C
+:1007F000850793F7F70F5C84B5B798849C840C1039
+:100800000607850786072E97AE970357C7FE83D73F
+:10081000C7FE63FDE7029C848607AE9783D7C7FEB9
+:100820007C859C84988485078607AE9783D5C7FE10
+:10083000931717001810BA972396B7FE9C84388533
+:100840000C1085078607AE972396E7FE9C848507E4
+:1008500093F7F70FDC8449BF1C8410103885890793
+:100860008607B29783D7C7FEBA97C207C1837C8534
+:100870001C84850793F7F70F5C84EDBD03A5C18148
+:1008800082805841032805004C45370601409307F4
+:1008900006403E979346F8FFB1C583250640F58D87
+:1008A0002320B640D043F18ED4C31443B3E60601EF
+:1008B00014C3184190479346F7FF758E90C7D047F1
+:1008C000F18ED4C7144541466399C6009447D98E2A
+:1008D00094C7D447558FD8C78280B6979443558F15
+:1008E00098C382801C43F58F1CC38280B7070140E8
+:1008F0001387074083A70740584B698F09C77D8D31
+:100900003335A000828001458280B707014023AAC9
+:10091000A74082809C4513F7070113F8F70001C731
+:10092000D8413368E8008E2113F7F50F39C3184119
+:100930008146854E3D4F930F800293028004214EE5
+:100940003396DE00B3F8C5006311160393982600B2
+:1009500033131F011343F3FF3377E300B318180178
+:1009600033E7E800639FF70550C98506E39AC6FDA3
+:1009700018C11307F00F6375B70454412146854E23
+:100980003D4F930F800293028004414EB398CE00F6
+:1009900033F715016392E80213172600011733138A
+:1009A000EF001343F3FFB376D3003317E800D98E7B
+:1009B000639DF701232A15010506E319C6FD54C1FD
+:1009C0008280E39457FA10C94DB7E39757FE232866
+:1009D0001501DDB708456D8D3335A000828048458F
+:1009E0006D8D3335A00082800CC9828019C20CC97C
+:1009F00082804CC98280370700C0B377E5006395D9
+:100A0000E708370701405C439356B501584F9D8A6C
+:100A10009DE6F99BB70600FFFD16758F89C99316F1
+:100A20000501C182D58FB706FF01758D498FB706C5
+:100A30000007D58FB7060140DCC2D8CE82800546BC
+:100A40006396C600F59BB70680FFF9B70946639623
+:100A5000C600ED9BB706E8FFC1B70D466396C6001A
+:100A6000DD9BB706FCFF4DBF11466397C60093F7A9
+:100A7000F7F3B706C0FF4DB71546E391C6FA93F7F3
+:100A8000F7CFB706E0FF49BF370700406391E702A1
+:100A9000B7070140D84F4205B367A70089E5134562
+:100AA000F5FFB377E500370701405CCF8280A9E30B
+:100AB00037080140B7073000032648001317050127
+:100AC000B376F50041836396F602B70600F9FD168A
+:100AD000B377D60003264800F18E2322D80091C5B3
+:100AE000558112053315A700C98F370701405CC334
+:100AF00082809317B50063D007029357050193F6E0
+:100B0000F7008D47B397D70093C7F7FFF18FB7066C
+:100B10000007D58FE9B7935755019207B317F70030
+:100B2000E5B713F7C50F93F73500B7050140BA9540
+:100B300094458A073D473317F7001347F7FF758F32
+:100B400098C598453315F500598D88C58280EFF218
+:100B50002FE237F4FF1F032744723706003E41118E
+:100B6000931797019346F7FFF18F060737063E006C
+:100B7000718FD98F3706000113979600718FD98F27
+:100B8000BD824167F98ED58F02C202C402C623A07E
+:100B9000F182035784728545239CE1800327047208
+:100BA0001305D00323A2E1820327447023AEE18022
+:100BB0008D2C8327447037073A101307077093F77B
+:100BC000F7F06380E7106361F7023707321013070D
+:100BD00007706380E70637073710130707706387CE
+:100BE000E70841016FF00FDB37073B101307077071
+:100BF000638BE70A37073D1013070770E393E7FE9F
+:100C000085452165CD3BB7140140E177130480048D
+:100C10004C00138504807C8222C6ED39856793875A
+:100C2000C7334C00138504C07C8222C6E531F977B6
+:100C30000DA085452165C133B7140140930700E03D
+:100C4000130480044C00138504C07C8222C6D93171
+:100C500089674C00371501407C8222C665398D4773
+:100C60007C8222C64C001385044025A8B71401409D
+:100C7000E17793870770130480044C001385048088
+:100C80007C8222C641399307D0E34C00138504C00F
+:100C90007C8222C64131F9777C8222C64C0037150E
+:100CA00001408D393DBFB7140140E1771304800442
+:100CB0004C00138504807C8222C6A939930740200A
+:100CC0008DB7B7140140E177130480044C001385FD
+:100CD00004807C8222C63D398967F51799B723A421
+:100CE000A182828003A78182854714216310F702C5
+:100CF0001C31639CE7023C21960793E707F837E72E
+:100D000000E093F7F70F36972300F740054793D796
+:100D100056003317D700544189CE938707048A07BA
+:100D2000B7E600E0B69798C38280EDF33C219607C2
+:100D3000F9B793870706E5B7B7160240DC42374795
+:100D4000FF7F7D17F98F5D8DC8C282803717024003
+:100D50005C439146B18B638CD706A146638ED70660
+:100D6000BDE71C43918BA5C7B7470F0093870724A6
+:100D70001CC1371602405C423707002013070701E9
+:100D80009183BD8BBA9794231C41B3D7D7005CC124
+:100D90005442A1829D8ABA969422B3D6D70014C534
+:100DA0005442AD829D8A36971423B3D6D70054C5DA
+:100DB0005842634C07005C42B98313F737009387AE
+:100DC0004180BA979C23B3D7F6021CC98280B7171B
+:100DD0007A009387072069BF5C435843C166C98383
+:100DE000BD8B758F8907C5466393D700C94701EF4F
+:100DF0003747024003270780418B09CF37177A0016
+:100E00001307072021A83717024058439316E7001D
+:100E1000E3D606FE37173D0013070790B387E702B6
+:100E200081BF99C5371702401C4F5D8D08CF828066
+:100E3000B7170240984F1345F5FF798D88CF828010
+:100E400099C5371702405C4F5D8D48CF8280B71738
+:100E50000240D84F1345F5FF798DC8CF828099C5E0
+:100E6000371702405C475D8D48C78280B717024044
+:100E7000D8471345F5FF798DC8C782801A218D6741
+:100E800093870704B6217D8F9E21D58FD621D58FDC
+:100E9000F621D58F9625D58FB625D58FD625D58F1A
+:100EA000F625D58FD98F1EA19E291EA982801E21CD
+:100EB00089C593E707041EA18280C207C18393F707
+:100EC000F7FBC207C183C5BF4EA582804A25828039
+:100ED0000A256D8D3335A00082801E2137370140F1
+:100EE000130707C0C207C1836300E502370700404C
+:100EF000630CE500130707406308E500371700405F
+:100F0000130707806316E500FA2193F7F7F8D98FE6
+:100F10009A2593F7F7CFC207C183D98F37170040BF
+:100F20001EA1130707809C416310E5025CD5DE21FA
+:100F30001EB5B7370140938707C06314F500BC2581
+:100F40001EB985475EA98280C207C1835EB5C5B759
+:100F50001A31FD77FD17F98F1EB10358050256218E
+:100F60005E2D6577D2211307F7CF7D8FF9772206A3
+:100F7000FD17518FB3F70701F22103D8A500C20670
+:100F80004207336606013206D18F37360140C20769
+:100F9000130606C0C1824183C183631AC5007176FE
+:100FA0007D16F18EF2251A06D18EC206C18256A197
+:100FB000B71600405AAD9386068098416315D50058
+:100FC00038C11EB1828042074183DDBF1E2189C521
+:100FD00093E717001EA18280C207C183F99BC20755
+:100FE000C183CDBF8357450491C52167D98F231293
+:100FF000F5048280C607C583DDBF5E2501C6DD8D91
+:101000004EA5828093C5F5FFFD8DDDBF1E2189C5EC
+:1010100093E707081EA18280C207C18393F7F7F701
+:10102000C207C183C5BF5A2DFD779387F77FF98F1C
+:10103000A205CD8FC207C1835EAD8280B717004085
+:10104000938707806314F5002CC18280C205C1819B
+:10105000E5BFB7170040938707806314F500485138
+:1010600082804A314205418182801E294A25ED8FC6
+:101070004205418189C76D8D3335A00082800145CD
+:10108000828093C5F5FFC205C1810EA98280EFF26F
+:101090002F8E1629F577FD17F58FF621DA25797150
+:1010A000D58F1EA95625FD779387379FF58FD621BB
+:1010B0002A842EC6D58F9625D58FB625D58F5EA5C9
+:1010C0005E29C207C18393F7F7CFD98F5EA968085D
+:1010D000B539B747014093870780B245631AF404D6
+:1010E000A25756246547B387E702C206C1869841D6
+:1010F00063D20604060752244206B3D7E702130759
+:1011000040064186B3D6E702B3F7E702920663557D
+:1011100006028E0793872703B3D7E70213F77700FA
+:10112000B367D700C207C1831EA445616FF08F86E5
+:10113000925745BF0A07C1B7920793872703B3D7D2
+:10114000E702BD8BD58FF9BF91C55E250967D98FA1
+:101150005EA582805A25F977FD17F98FD5BF13F761
+:10116000F50F85471583B395B7006319F70093070B
+:10117000C500984301CED98D8CC3828089469307E0
+:101180004501E318D7FE93070501E5B793C5F5FFC1
+:10119000F98DDDB793F5F51F4EA182804A211375B5
+:1011A000F51F82800A216D8D3335A000828013F7F0
+:1011B000F50F85461583B397B6006311D7025A25FC
+:1011C000F98F1A2101454207418381CB0545A18151
+:1011D000B315B5006D8F3335E00082808946631406
+:1011E000D7001A29F1BF5A29E1BFEFE27FF87971E0
+:1011F0001306000281450808EFE09FFA8545114576
+:1012000002C202C402C631398545130500201139D6
+:1012100001451D36371501409307E00F4C001305BB
+:101220000580372401407C8202C6EFF0AFEE130543
+:101230000440EFF06FA913050440EFF0EFC6AA8554
+:101240002396A18237850000130545FEEF50D02379
+:10125000B7070E003ECE0C08854713050440230255
+:10126000F10202C802CA02CC02D0EFF06FA8854595
+:1012700013050440EFF02FAD854513050440EFF052
+:101280008FC0814513050440EFF04FBD13050440A6
+:10129000EFF06FAC930404402685EFF06FAC6DFD6A
+:1012A0001305044037240140EFF00FAC93040440D1
+:1012B0002685EFF00FAC6DFD37050080B53C1305BA
+:1012C00004408545EFF00FBB930500021305044071
+:1012D000EFF08FBC45616FE0FFEBEFE27FE90111BA
+:1012E000854521453D3E85451165993E37140140B0
+:1012F00085678D447C808A85C147130504C03EC440
+:1013000026C2EFF02FE1130504C08565EFF0CFEDA5
+:10131000896761498A85130504C07C804AC426C256
+:10132000EFF04FDF91677C808A859147130504C0F9
+:101330003EC4EFF02FDEE1778A85130504C07C8080
+:101340004AC426C2EFF00FDDB70704013EC6B70757
+:1013500002003EC8B70700028507374400403ECA76
+:10136000A1473ECC6C009D4713050480FC863936AE
+:10137000854513050480253E05616FE0BFE1EFE27E
+:101380009FDDB74400402A891304900C93890480A0
+:1013900089454E85353E0DC5CA8513850480B74401
+:1013A00000401D361304900C1389048085454A853E
+:1013B000053611CD13850480113E1375F50F31A04C
+:1013C0007D141374F40F69F401456FE01FDC7D1484
+:1013D0001374F40F61FCCDBFEFE29FD937140140C5
+:1013E00001468565130504C0EFF04FE01545413F08
+:1013F0001305F00F6937AA840546130504C08565F7
+:10140000EFF0CFDE26856FE0FFD8EFE27FD6E93739
+:10141000058975FD6FE01FD8EFE29FD537140140B5
+:1014200001468565130504C0EFF04FDC1945813F87
+:1014300005468565130504C0EFF04FDB6FE09FD5CF
+:10144000EFE21FD31314C500B7140140F137753F05
+:1014500001468565138504C0EFF04FD913050002DE
+:10146000393F135504011375F50F113F13558400CF
+:101470001375050F2937014519370546856513850D
+:1014800004C0EFF0AFD651376FE0DFD0EFE25FCEB0
+:101490002A89371501402E84130505C08565B2845D
+:1014A0000146EFF0AFD40D45D93D13550401137536
+:1014B000F50FF135135584001375F50FC935137504
+:1014C000F40F753D014493170401C18363EC970049
+:1014D0003715014005468565130505C0EFF00FD1AE
+:1014E0006FE05FCB1305F00F593DB307890088A368
+:1014F0000504D1BFEFE2DFC72E842A89B284293FD9
+:101500003715014001468565130505C0EFF00FCE84
+:101510000945B535135504011375F50F8D35135570
+:1015200084001375F50FA13D1375F40F893D014437
+:1015300093170401C18363ED9700371501400546F9
+:101540008565130505C0EFF06FCAC1356FE09FC414
+:10155000B3078900882305041D35D9BFEFE2BFBF5B
+:1015600013F7F50F93070010998F3E84C207C183CC
+:10157000AA892E89B2846373F600328442044180C2
+:10158000130A00102286CA854E85AD37638F84000A
+:10159000818CC204C180A2992299268463749A0026
+:1015A0001304001042044180F1BF6FE01FBEEFE260
+:1015B000BFB913994501135949018567B38727417D
+:1015C0003E84C207C183AA8AAE89B28413DAC500F9
+:1015D0006373F6003284370B00204204930BCB2355
+:1015E0004180130BCB23130CF00F931CCA0005662C
+:1015F000E6855E85613D81471397070141836366F8
+:1016000087002286CE85568525A885073307F900F1
+:101610005A970347F7FFE30187FF52851535814746
+:101620003387FA0014233307F9005E97850714A364
+:10163000139707014183E36587FE0566E6855A85B2
+:10164000313F63838402A29AA29933848440931425
+:101650000401C1808567050A0149268463F3970068
+:1016600005644204418051B76FE09FB1EFE25FB083
+:10167000411185451145EFF0CFFA930700107C82A8
+:1016800037150140C1473EC64C008D471305058004
+:101690003EC4EFF02FA841016FE0DFAFEFE25FAD96
+:1016A000411185454145EFF0CFF785679387078066
+:1016B0007C8237150140C1473EC64C008D4713055B
+:1016C00005803EC4EFF00FA541016FE0BFACEFE233
+:1016D0003FAA411185452145EFF0AFF49307001073
+:1016E000371401407C82C1473EC64C008D4713052C
+:1016F00004C03EC4EFF00FA201469305001013058D
+:1017000004C0EFF0AFAE41016FE0DFA8EFE25FA6EB
+:10171000797185452545EFF0CFF0914737150140A8
+:10172000FC824C0893078004130505C03ECEEFF001
+:101730006F9E89450545EFF0CFBE914705443ED0E9
+:101740000810B1473ED422D602D2EFF08F93930710
+:1017500080117C86680089475C8722C8EFF08FD8AB
+:1017600045616FE03FA34111114522C626C4EFF049
+:10177000EF978547631DF5022A841145EFF0EF9836
+:10178000371700201307C7428347D70695E7B714DA
+:101790000020B745000081461306803E9385651002
+:1017A00013858452A30687060D2523848452324470
+:1017B000A244410173002030850793F7F70FA30679
+:1017C000F7060947E395E7FE371400201305845216
+:1017D000EF008063371501400146930500101305A3
+:1017E00005C023040452EFF06FA0D1B7EFE25F9879
+:1017F000797185451545EFF0CFE2856737150140D2
+:10180000FC824C0893078002130505803ECEEFF062
+:101810006F90B1450145EFF0CFB0856705443ED0EC
+:101820000810A1473ED422D602D2EFF08F8593074D
+:1018300080137C8668008D475C8722C8EFF08FCAD2
+:1018400045616FE03F954111056522C6EFF00F8AB3
+:101850008547631FF5020565EFF02F8B37140020D5
+:101860009307C44283C7E7061304C44289EFB74510
+:1018700000003715002081461306803E93858516AB
+:101880001305855199238347E40685072307F4064A
+:101890003244410173002030EFE29F8D41118545B4
+:1018A0002145EFF00FD885451145EFF06FD993072B
+:1018B0000020371401407C82E1473EC64C008D4732
+:1018C000130504C03EC4EFF0EF84930700084C00FA
+:1018D000130504C07C82EFF0EF8341016FE09F8B22
+:1018E000EFE21F8901114D3F371400409307F01DAF
+:1018F0008A85130504803EC002C22314010023051B
+:101900000100EFF08FDD130504808545EFF00FF047
+:10191000C167938707066C00130504803EC8231B2C
+:10192000010002C6EFF0CFE213050480A145EFF0FD
+:101930008FEF130504808545EFF04FE985451305CA
+:101940000480EFF02FEA05616FE0DF84411122C4CB
+:101950002A8408414AC24EC006C6EF40907FB7872E
+:10196000000003A6870083A6C7002A89AE89EF304E
+:10197000C03F635F0502B787000083A7C7FF1CC095
+:10198000B787000083A547000840EF409008EF406C
+:10199000106A9315050137150040C18113050580B4
+:1019A000EFF0CFE9B24022441249824941018280DE
+:1019B000B787000003A6070183A647014A85CE85A5
+:1019C000EF30C02FE35EA0FAB787000083A70700BF
+:1019D0007DB7EFE2EFF9797137140140C1472A89E9
+:1019E000FC828D44C1474C08130504C03ECE26CC72
+:1019F000EFE05FF20146130504C0C145EFE01FFFB1
+:101A000085452145EFF0EFC1854537050800EFF02A
+:101A10002FC38547FC824C08E147130504C026CC40
+:101A20003ECEEFE03FEF894491474C08130504C0D8
+:101A3000E482375400403ECEEFE0DFED0C10B707F4
+:101A40000C00130504C04AD03ED402D22316010272
+:101A5000EFF0EFE39307D0137C86680085473EC81C
+:101A60004487EFF02FA80546130504C09305505294
+:101A7000EFF0EFEE8545130504C0EFF0EFEC4561A4
+:101A80006FE04FF1EFE2CFEE797137140140930729
+:101A900000022A89FC828D44C1474C08130504C00A
+:101AA0003ECE26CCEFE01FE70146130504C09305A8
+:101AB0000002EFE0BFF385452145EFF08FB6854585
+:101AC00037050400EFF0CFB793070040FC824C08C5
+:101AD000E147130504C026CC3ECEEFE0BFE38567A7
+:101AE00093870780FC824C089147130504C03ECEC3
+:101AF00037540040EFE01FE20C10B7070C0013054D
+:101B000004804AD03ED402D223160102EFF02FD82F
+:101B1000930770137C8685475C87680085473EC8BD
+:101B2000EFF04F9C05461305048093055052EFF0EB
+:101B30000FE3854513050480EFF00FE145616FE089
+:101B40006FE5EFE2EFE22A84EFF0CFE493050008BF
+:101B50002285EFF02FE57DD96FE0CFE3411122C65A
+:101B6000375400409305505213050480EFF02FE4E2
+:101B70000DC513050480EFF06FE29375F50F238810
+:101B8000B18203A541881C4D104954498507B3E72C
+:101B9000C7026384D7003105152E3244410173001A
+:101BA0002030411122C6375400409305505213058E
+:101BB00004C0EFF0CFDF0DC5130504C0EFF00FDE5A
+:101BC0009375F50F238AB18203A581881C4D1049B6
+:101BD00054498507B3E7C7026384D7003105FD2464
+:101BE0003244410173002030EFE28FD80111AA8402
+:101BF0002E8409458545EFF0AFA4E084370400400A
+:101C00004C081305044026CA231E0100231D0100B1
+:101C1000EFF0AFAC130504408545EFF08FC60546E5
+:101C2000854513050440EFF04FBD9307D0027C8635
+:101C300085475C87680085473EC8EFF0AF8A05613D
+:101C40006FE04FD5EFE2CFD2B707002083A5871A08
+:101C5000896793870771B3D5F5027D1542054181E8
+:101C6000FD15C205C18149376FE0CFD2411122C6AF
+:101C700037040040854513050440EFF00FBF01C94C
+:101C8000854513050440EFF0CFBFEF10C04E32443E
+:101C9000410173002030EFE2AFCD01112E84AA8400
+:101CA00085450545EFF0CF994C083705004026CA19
+:101CB000E084231E0100231D0100EFF00FA2054662
+:101CC000854537050040EFF04FB39307C0027C868F
+:101CD0008D475C87680085473EC8EFF0AF8085453B
+:101CE00037050040EFF08FAE05616FE0AFCAEFE25D
+:101CF0002FC8B707002083A5871A896793870771C4
+:101D0000B3D5F502A9473305F502FD15C205C1811A
+:101D10007D154205418141376FE0CFC741118545AF
+:101D20003705004022C626C44AC24EC0EFF0EFB3CA
+:101D300031C5854537050040EFF0AFB437140020BA
+:101D4000212A1304C442412108D8112B8329C4023B
+:101D50000C5848D82A894E85EF40A04B9384C18304
+:101D60008C4013848183EF30305288C0CE854A8501
+:101D7000EF40204A0C40EF30305108C03244A244BA
+:101D800012498249410173002030B7F700E023A2D5
+:101D90000700D92073002030411122C6373401409A
+:101DA0008545130504C0EFF04FAC01CD130504C009
+:101DB0008545EFF00FAD3785000013058501EF4035
+:101DC000F07D32444101730020301DC9B296C20635
+:101DD000C18252A136A10CC509EE85471CA183A67C
+:101DE000018493870184368701EB54C588C301457C
+:101DF000828023000500E5B76306A7005847EDB7CA
+:101E00007D558280054582800DC583A70184138797
+:101E1000018499E305458280D4476396A60058451E
+:101E2000D8C7014582806394A70014C3DDBFB6877D
+:101E3000CDB77D558280EFE2AFB303A4018475DC9A
+:101E40001C2093F7F70F99C75E2099C32300040065
+:101E50001C4482974044E5B783A70184054691E37B
+:101E60008280D62381CEBA237D1742074183BAA34D
+:101E7000BA234207418319E390A3B6A3DC47C5B751
+:101E8000232605000CC150C123240500054582808E
+:101E9000584550411C4505073367C702630EF700DC
+:101EA00054455C45184186068507B3E7C702369757
+:101EB0000EA35CC5054582807955828023260500E6
+:101EC0000CC150C123240500054582805C45544166
+:101ED00018458507B3E7D702638EE70058451C41D4
+:101EE000BA978CA35C4558418507B3E7E7025CC508
+:101EF000054582807955828018455C45630FF7005F
+:101F000018451C41BA979C239CA11C455841850744
+:101F1000B3E7E7021CC505458280014582805C4528
+:101F200018454841998FAA9733E5A7028280B707E1
+:101F3000002083A7871A0967130707F4B3D7E702BE
+:101F4000C207C1832393F1842392F1848280B7F77F
+:101F500000E0D8438146799BD8C303D74184330638
+:101F6000A70290CBD4CB98431367070198C398433B
+:101F70001367170298C3D843058B75DF9843799B85
+:101F800098C38280EFE2CF9E2A84116501118545B6
+:101F90001105EFE01FE9930700207C82371501400F
+:101FA0008D473EC44C00E147130505803EC6EFE077
+:101FB0007F9622C837440140B70708000C08130574
+:101FC00004803ECC02CA231E0100EFF04F8C8545F1
+:101FD00013050480EFF04F9705616FE0AF9BEFE2D0
+:101FE0008F97B7440140AE893289014493840480BD
+:101FF000634524014A856FE04F99930500042685C7
+:10200000EFF04F9A7DD9B387890083850700268535
+:102010000504C205C181EFF0EF97D9BF1387818016
+:102020001C43B71600209386067B3E95636BD50054
+:10203000B75600209386068063E5A60008C33E8558
+:102040008280FD57EDBFEFE20F9137140020B715E6
+:102050000020130640069385C5231305C43C0D35A7
+:102060009304C43CB71500201385040113064006F1
+:1020700093854530B714002021351309C43C93845F
+:10208000C43DF95981451305C43C1935E31C35FF9E
+:10209000795481452685ED3BE31D85FE2320090209
+:1020A000232209026FE06F8EB717002003C5A744F3
+:1020B00093858184138681859386C18413870185E6
+:1020C00093874185378800000DC5378500000325BB
+:1020D000850288C2B786000083A6060388C1B7853B
+:1020E000000083A5C50214C3032748030CC298C38C
+:1020F0008280378500000325850388C18325480336
+:1021000088C20CC20CC38CC382800397C1828147F2
+:102110002A97634F070009CD05669306F6FFB68739
+:102120006358C700AA876305D50093170701C183C9
+:102130003E858280EFE22F82411137240140AA8937
+:1021400044001309010113040440CE8522859546FD
+:102150000546EFE00FC485452285EFE00FC28945B3
+:102160002285EFE00FCF65DD2285EFE00FCE42053F
+:102170004185613F8AA08904E31999FC154781478D
+:1021800035A013961700140885073696080893960D
+:102190001700AA96835546FF03D546FF6376B50020
+:1021A000231AA6FE239AB6FEC207C183E3CBE7FC3F
+:1021B0007D1771F728843C8541013E954205418198
+:1021C00005816FD09FFCEFD2BFFA0545A537EF40E0
+:1021D000606BB787000083A5C703EF309041EF40E5
+:1021E0004077B787000003A6070483A64704EF20C3
+:1021F00030432A8403A58184AE84EF4080752A860B
+:10220000AE862285A685EF20B041EF40407F6FD09B
+:102210007FF8EFD2FFF50945313FEF40A066B78761
+:10222000000083A5C703EF30D03CEF408072B78732
+:10223000000003A6070483A64704EF20703E2A840B
+:1022400003A58185AE84EF40C0702A86AE862285C4
+:10225000A685EF20F03CEF40807A6FD0BFF3EFD23D
+:102260003FF10D45C13DEF40E061B787000083A518
+:10227000C703EF301038EF40C06DB787000003A6EA
+:10228000070483A64704EF20B0392A8403A5C1843C
+:10229000AE84EF40006C2A86AE862285A685EF20AC
+:1022A0003038EF40C0756FD0FFEEEFD27FEC1145B4
+:1022B0005135EF40205DB787000083A5C703EF309D
+:1022C0005033EF400069B787000003A6070483A6D8
+:1022D0004704EF20F0342A8403A50185AE84EF4043
+:1022E00040672A86AE862285A685EF207033EF40B0
+:1022F00000716FD03FEAEFD2BFE71545253DEF40B3
+:102300006058B787000083A5C703EF30902EEF40D9
+:102310004064B787000003A6070483A64704EF20A4
+:1023200030302A8403A54185AE84EF4080622A863E
+:10233000AE862285A685EF20B02EEF40406C6FD090
+:102340007FE5EFD2FFE21945EFF0DFDEA16793876B
+:10235000870501479306100F92236369C5023A85EA
+:10236000EF30606BB787000003A6870483A6C7041D
+:10237000EF20102BB787000003A6070583A64705AB
+:10238000EF209075EF40A0676FD0DFE00507890769
+:10239000E314D7FC13050000C5BF8280B7170020E7
+:1023A0009387C7421021943B6316D6041031B42B97
+:1023B0002A8701456312D6043023B43B631ED6023C
+:1023C0003033D42B631AD6025023D43B6316D60283
+:1023D0005833FC2B6312F702EFD29FD937850000E8
+:1023E0001306300985451305C523EF40F00905455F
+:1023F0006FD05FDA01458280828082808280828015
+:1024000082808280828082808280828082808280BC
+:10241000014781479376F70F63E7B60013C5F7FFCF
+:102420001375F50F8280B306E50094220507B69771
+:10243000D5B7EFD2FFD3371400201304C4421838A5
+:102440003C3C0111D8843A285C843C2C788558485F
+:102450002309F100BC353AC61A2CA309F1009307F1
+:102460000050FC82FD57F880230BF100F835FC2565
+:10247000AA8422075D8F9C292800C2075D8F9C39A2
+:10248000CD45E207D98F13D78700A30BF100230CAA
+:10249000E10013D70701E183230DF100A30CE10054
+:1024A000853F5C2CA30DA100230EF100EF00107FEF
+:1024B000EFF0FFA92685EF1020016DF913066003E8
+:1024C0002C002685EF20800183A7418805469305CF
+:1024D0005052375500406399970013050580EFE08F
+:1024E0001FC805616FD01FCB130505C0CDBFEFD24C
+:1024F0003FC8371400201304C4423C3C0111143877
+:102500005C803E28034F2401834E34017C815C486B
+:10251000034E4401034354013EC21E2C8348640110
+:10252000034874017C84BC35103C382CAA84082CE8
+:10253000DC858567938707E0D48058857C8654873F
+:10254000A307E1012308D101A308C1012309610008
+:10255000A3091101230A0101A30AA100230BC10051
+:10256000A30BE100F835FC250A8522075D8F9C2925
+:10257000C2075D8F9C39F145E207D98F3ECCEFF061
+:102580003FE95C2C230EA100A30EF100EF001071B7
+:10259000EFF0FF9B2685EF0030736DF913066003A3
+:1025A0008A852685EF10907383A741880546930599
+:1025B0005052375500406399970013050580EFE0AE
+:1025C0001FBA05616FD01FBD130505C0CDBFEFD287
+:1025D0003FBA7971AA84138525012EC637140020CD
+:1025E000EFF0DFDB1304C442B24569C19C2D7CB817
+:1025F0009C3D1CACBC2D1CBCBC3D3CACFD5723031E
+:10260000F10218383C3C2808A30CE1003A28230CBE
+:10261000F1003C2CF88558482301F102BC353ACE34
+:102620001A2CA301F102930700502310E102231298
+:10263000F102F835FC2522075D8F9C29C2075D8FCA
+:102640009C39F145E207D98F13D78700A303F10224
+:102650002304E10213D70701E1832305F102A30458
+:10266000E102EFF0FFDA5C2CA305A1022306F102E0
+:10267000EF00D062EFF0BF8D2685EF00F0646DF9BA
+:10268000130660032C082685EF10506583A7418848
+:1026900005469305505237550040639C970013053B
+:1026A0000580EFE0DFAB45616FD0DFAE23030102B1
+:1026B00089BF130505C0F5B7EFD29FAB37140020D3
+:1026C0001304C4423C3C011118385C803C2CD88077
+:1026D0003A285C8593071006DC8585673EC63C4832
+:1026E00078815848FC83C183FC847C443AC21A2C0C
+:1026F000FC81C183788423180100FC82F835FC2515
+:10270000AA8422075D8F9C290A85C2075D8F9C39A8
+:10271000F945E207D98FFC85C183FC86EFF05FCFD6
+:102720005C2C230FA100A30FF100EF003057EFF056
+:102730001F822685EF0050596DF9130660038A85C4
+:102740002685EF10B05983A741880546930550525E
+:10275000375500406399970013050580EFE03FA0CF
+:1027600005616FD03FA3130505C0CDBFEFD2BF9E5B
+:10277000371400201304C4423C3C397104585C8473
+:102780003C2C18382A892309F10093070006A30975
+:10279000F100896793870760FC821C54D8843A282B
+:1027A000FC83C183FC845C5878855848FC85C183D0
+:1027B000FC8693D704012310F1027C483AC61A2CF8
+:1027C0002311F102C1832312F1027C40AE899305EB
+:1027D00000002313F102C1832314F102B717002074
+:1027E00003A5C741F880E487EF30D00B93D784016D
+:1027F00013D784002307F1023C402306E10213D7DC
+:102800000401A306E10203C7F9003EDA83C7E90029
+:1028100022073335A0005D8F83C709012305A1027C
+:10282000A309A102C2075D8F83C719019305400365
+:102830002800E207D98F3EDCA3059102EFF05FBDCF
+:102840005C2C230EA102A30EF102EF003045EFF045
+:102850000FF04A85EF0050476DF9130660032C0016
+:102860004A85EF10B04783A741880546930550522B
+:10287000375500406399270113050580EFE03F8E2F
+:1028800021616FD09F90130505C0CDBFEFD2DF8BC4
+:10289000AA8BEF10D04A630E05145145EFF02FEBD1
+:1028A000B71900201306400681451385494A371C95
+:1028B0000020B71C0020371B0020EFD07F8E014482
+:1028C00081440149814A138A494A130C2C4A938C4A
+:1028D0003C4A130BCB425E85EF10704A630B051028
+:1028E0005E85EF1050479387494AD69788A3138D8A
+:1028F0001A0063840A006307092603C7494A83470D
+:10290000BB01630CF700B715002056869385554A26
+:102910001385494AEF40202CC9A89D476305FD0057
+:10292000854763FA2705B71400201385544AEFF052
+:10293000FFA6A685894421E103472A0083471A00A0
+:10294000F98F03473A00F98F03474A00F98F03478D
+:102950005A00F98F03476A00F98F1307F00F639B42
+:10296000E706378500001306700A85451305C5265E
+:10297000EF4080318544AD476305FD00894763F929
+:10298000271F03461A0083457B0183462A0003471D
+:102990003A0083474A006390C50683458B01639CD8
+:1029A000D50483459B016398E5048345AB0163949B
+:1029B000F504378500001306900B85451305C523E4
+:1029C000EF40802C0947CA876373E900894713F9F0
+:1029D000F70F15BF63130900054956869385554ABD
+:1029E0001385494AEF40201F814493072006E3F4F2
+:1029F00057EF6FD0EFF8F18E758FF98F1307F00F47
+:102A00006398E716378500001306B00C854513055B
+:102A1000C5267DB7130710066388E716130720063F
+:102A20006397E70089476396F40C794415A0130770
+:102A300030066397E7008547639DF40A514409A86F
+:102A400013074006639CE70289476394F40A7144C4
+:102A5000B9476305FD00914763F3270B0347DA008D
+:102A60008347CA002107B397E700C1076389870836
+:102A70001147CA87E37DE9F4914791BF13075006D8
+:102A80006384E710130760066380E7101307C0062E
+:102A90006397E7008947639EF404594455BF1307C1
+:102AA000D0066383E70E130700076397E7008947A3
+:102AB0006391F404554469BF130740076386E70C2C
+:102AC000130750076382E70C13076007638EE70A5A
+:102AD0001307B0076397E7008947639CF4006944D4
+:102AE00085BF1307D007E38FE7F21307E007638D75
+:102AF000E7080D47CA87E37CE9EC8D47C9BD631140
+:102B00008D069305E4FF93F5F50F1385494AEFF021
+:102B10003F90B30784019C23638FA700B307940100
+:102B200098238347CB016308F7001547CA87E370F2
+:102B3000E9EA954769BDB70400209384040213892C
+:102B400084080347BA009C406318F700DC402286E3
+:102B50009385494A5E858297A104E39424FF51BD81
+:102B6000EA8A61B59D47E300FDDCAD47E30BFDE07C
+:102B7000B1476305FD008D47E3FC27ED8347BA00AD
+:102B800013070006E398E7E889477DB5C167E97652
+:102B90001306A505FD17850605050347F5FFB98F43
+:102BA000214793F51700858381C5B58FC207C1837F
+:102BB0007D174207418375F7E310C5FE3E8582808D
+:102BC000EFD20FDB1306C0059305C005EFE03F9E73
+:102BD0006FD04FDCEFD2CFD941112AC61306C00502
+:102BE00068009305C005EFE07F8A41016FD08FDA5E
+:102BF000EFD20FD8317120002285E93F835421069E
+:102C0000228569376382A402C8101306C005814576
+:102C1000A2D2EFE0BF87835421062285EFF01FF791
+:102C20006397A4002285693F29616FD0AFD6130650
+:102C300040048145E818EFD0AFD6B717111193873C
+:102C40001711BED2B717110193871711BED493077E
+:102C50000020BED69307201CBED8B7070048938734
+:102C6000271CBEDAB737303093879705BEDC930751
+:102C70001003230EF106930710102310F108854767
+:102C8000A301F108B787000083A7472A3787000010
+:102C90000327872A3EC33ECDB787000083A7872B33
+:102CA0003AC5378700003ECFB787000083A7C72B00
+:102CB0000327C72AC8103ED1B78700003AC783A7A9
+:102CC000072C378700000327072B3ED3B7071400D4
+:102CD0003AC9A907378700000327472B3EDBB70710
+:102CE0003C00A9073EDD930780703ACB231EF10A12
+:102CF000EFF0DFE9231FA10AC81035B7EFD24FC7A5
+:102D00001D712A844800EFF0FFEC1C404800BEC44F
+:102D1000EFF0DFE7231FA1044800EFF07FEA256111
+:102D20006FD04FC7EFD2CFC459712A8448082EC63E
+:102D3000EFF05FEAB2451C404808BECE9C41BED0D1
+:102D4000EFF0DFE42317A1064808EFF07FE76561A5
+:102D50006FD04FC4EFD2CFC11D71EFF07FE94800B3
+:102D6000EFF05FE71257B7170020E64623AAE73EC9
+:102D700022579387473F37140020D8C3325794DB3C
+:102D80001D4698C752574C001305C442D8C7625716
+:102D90001304C442D8CB264798CF7257D8CF0647E2
+:102DA00098D31647D8D303576105DAB703574105BF
+:102DB000FAB70357C105DABBEF40C00C3247948520
+:102DC000371500209377F70FA207D58F2183194677
+:102DD000930571011305D5431EA43AA4EF40800A60
+:102DE0003715002011469305D10113053544EF40F6
+:102DF000600983472102B7850000371500205CBCBD
+:102E0000930700003E871CD45CD41CD85CD81CDC23
+:102E10005CDC3CC07CC03CC4B64735469385452C41
+:102E20007CC4C6471305A54878C83CC8232C0404B5
+:102E3000231E0404EF400005B7850000371500206D
+:102E400009469385452D1305A543EF40A003D947B7
+:102E50001CA85CAC8547130780062306F406B70759
+:102E600005009387071038BC583C3CD893070015E1
+:102E7000A3050406A3070406231AF4060DE7B70703
+:102E800000011386F7FFC246D2478C8733F7C6008E
+:102E9000F18F2207E182A2074D8FD58F18D05CD029
+:102EA00025616FD02FAF8547E31CF7FED2478346DD
+:102EB0003101A207D58F5CD0834711026397E700E9
+:102EC0008967938707581CD0E1BF0947E39AE7FC5D
+:102ED000F16793870720C5BFEFD28FA9B7170020EE
+:102EE00083A44746AA85371400202685EF30A05BCF
+:102EF000B787000083A587301304443FEF3060316B
+:102F0000B787000083A5C7302A892685EF30603057
+:102F1000AA854A85EF2050370C54EF20F03608D4AC
+:102F2000371500201305C541EFE05FA26FD08FA6D3
+:102F3000EFD20FA4B717002083A4874537140020D1
+:102F40001304443FA685EF300056B787000083A5E1
+:102F50008730EF30002CB787000083A5C7302A895F
+:102F60002685EF30002BAA854A85EF20F0310C54DE
+:102F7000EF20903108D4371500201305C541EFE04C
+:102F8000FF9C6FD02FA1EFD2AF9EB717002083D741
+:102F9000874809476380E7020D476384E7020547D6
+:102FA0006398E700B787000003A5872EEFF0DFF2F4
+:102FB0006FD04F9EB717002003A54740EFF05FF793
+:102FC000C5BFB717002003A58740CDBFEFD2CF976D
+:102FD00037140020B71400201309C442138A443F59
+:102FE0008325CA00032589031304C442938A443FFE
+:102FF000EF306019B7890000635105060325090306
+:10300000EF30301503A6890083A6C900EF10F055F4
+:103010006355050437050040814513050540231E0F
+:103020000904EFD0BFFA371500408145130505802C
+:10303000EFE0CF80B7450000371500209307000070
+:1030400081461306803E9385A5D813058555232414
+:10305000FA02EFE09FD76FD0AF922844EF30700FA5
+:1030600003A6890083A6C9002A8BAE8BEF10F04F10
+:10307000635E0500B787000003A6072F83A6472FCE
+:103080005A85DE85EF1090436346A002032984022F
+:10309000B787000083A5C72E4A85EF306006634BD3
+:1030A000A000B787000083A587024A85EF30A00DF6
+:1030B000635805008D47231EF404A305040661BF71
+:1030C00083A4443F2685EF30D008B787000003A6CD
+:1030D000872F83A6C72FEF2020202A8B4A85AE8B0F
+:1030E000EF3030072A86AE865A85DE85EF10103D18
+:1030F000634005020858EF30D005B787000003A6EB
+:10310000073083A64730EF10703B85476342A00627
+:10311000A6854A85EF20D07EE35FA0F283A44A0013
+:10312000032904032685EF30D002B787000003A6E9
+:10313000073083A64730EF1060452A8A4A85AE8A59
+:10314000EF3030012A86AE865285D685EF10F041E9
+:103150008947635FA000CA852685EF20707AE35C0B
+:10316000A0EE4C582685EF20B079E356A0EE8D47AF
+:10317000231EF404CDB5EFC21FFE371400209304C4
+:10318000C442EFF00F89C8D4EFF02F9288DCC45806
+:10319000930500001304C4422685EF20B07019E5A2
+:1031A000085893050000EF20F06F35C90858A68530
+:1031B000EF30602F8347B40628C4B9EBEF30607955
+:1031C000B787000003A6073083A647302A89AE8957
+:1031D000EF10D02E634EA000B787000003A6872D06
+:1031E00083A6C72D4A85CE85EF103038635205027D
+:1031F0004854EF300076B787000003A6072E83A659
+:10320000472EEF109036635505008547A305F40659
+:103210008347F40689E7EFF07FDBEFF0DFD66FC07E
+:10322000DFF6EFC2FFF4D425DC35A206DD8EB7173A
+:1032300000209387C74203D72707637DD7003785D0
+:1032400000001306301085451305C533EF30D02339
+:103250006FC05FF4B425B83583D74707A206D98E6F
+:10326000E3F8D7FE378500001306A0108545130547
+:10327000C536E9BFEFC2DFEF378500001306901DAA
+:1032800085451305054BEF303020B717002003D5D7
+:1032900087486FC03FF0EFC2BFED378500001306CF
+:1032A000D01C85451305C543EF30101EB71700200D
+:1032B00003D567486FC01FEEEFC29FEB3785000054
+:1032C0001306101C854513054547EF30F01BB787E3
+:1032D000000083A50747B717002003A5C746EF20C6
+:1032E0005073EF30C054420541816FC0BFEAEFC256
+:1032F0003FE8378500001306501B85451305C54D73
+:10330000EF309018B787000083A50747B717002054
+:1033100003A58746EF20F06FEF30605142054181F1
+:103320006FC05FE7EFC2DFE4378500001306901A35
+:10333000854513058540EF303015B787000083A51C
+:103340000747B717002003A50746EF20906CEF3022
+:10335000004E420541816FC0FFE3EFC27FE1378538
+:1033600000001306D01985451305853DEF30D011B7
+:10337000B787000083A50747B717002003A5C745F7
+:10338000EF203069EF30A04A420541816FC09FE0D5
+:10339000EFC21FDE3785000013061019854513059F
+:1033A000453AEF30700EB787000083A50747B7177F
+:1033B000002003A54745EF20D065EF304047420588
+:1033C00041816FC03FDDEFC2BFDA37850000AE84B8
+:1033D0001306B012854513050531EF30F00A371991
+:1033E0000020371400201304C442054713058953F5
+:1033F000238FE18623080406EFE01FA1DC24D834E4
+:10340000B7450000A20737150020D98F8146130663
+:10341000803E9385453813058554230C09525EA4DC
+:10342000EFE0BF9A6FC01FD7EFC29FD437140020C0
+:103430000566B745000023A8A1868544B71700207C
+:103440008146130686BB9385C52513058453238EB9
+:103450009748EFE09F97230C94526FC0BFD3C1678A
+:1034600069768146FD17050613970601418363645B
+:10347000B7003E8582803307D5001823B98F2147D6
+:1034800013F81700858363050800B18FC207C18355
+:103490007D17420741836DF78506F9B7EFC25FCD0F
+:1034A0003715004013050580EFD0BFBAEF30D00FBD
+:1034B000EF3010159307100F3365F502A947290562
+:1034C0003305F5026FC01FCDEFC2FFC803A74188C7
+:1034D0002A84BE84054693055052631CA7043755C1
+:1034E000004013050580EFD09FC72285EF1020090B
+:1034F000131905010945EFE09FA52285EF1020086B
+:1035000083A74188931905011359090193D909012A
+:1035100001469305505237550040639187021305C9
+:103520000580EFD0DFC3330539413335A0006FC0CC
+:10353000DFC537550040130505C075B7130505C035
+:10354000CDB7EFC2FFC2B71700201384C74283D79D
+:10355000C74241117A247C813E20788078207C8289
+:103560005E2023150100AA847C83930710FDDC8470
+:10357000AD4585470A855C85231601005884EFF028
+:103580001FEE93578500DC851C284886DC86EFF00B
+:10359000FFF0EFE0DF9B2685EFF01FF36DF93D466E
+:1035A0008A852685EF00907383A741880546930599
+:1035B0005052375500406399970013050580EFD0AE
+:1035C0001FBA41016FC01FBD130505C0CDBFEFC2BB
+:1035D0003FBAB71700201384C74283D7C7424111AF
+:1035E0007A247C813E20788078207C825E2023159E
+:1035F0000100AA847C83930700FDDC84AD458547E8
+:103600000A855C85231601005884EFF05FE5935727
+:103610008500DC851C284886DC86EFF03FE8EFE07B
+:103620001F932685EFF05FEA6DF93D468A85268572
+:10363000EF00D06A83A7418805469305505237555D
+:1036400000406399970013050580EFD05FB14101F9
+:103650006FC05FB4130505C0CDBFEFC2FFAE03C995
+:10366000C500DC35371A002022093369F900420908
+:103670009307CA421359094103D7270713140901B5
+:1036800041807971637F870037850000A286130629
+:10369000500A85451305C533EF30005F45616FC0A3
+:1036A0003FAEB425B83583D74707A206D98E63FA53
+:1036B000D700378500001306B00A85451305C536C7
+:1036C000E1BFAA89930ACA4202CE02D002D202D432
+:1036D00002D6930BC101368B370C0020B307DB40B9
+:1036E000C207C18363EC870A371B002093044B4A4F
+:1036F0001385C400130680058145EFC07FAA0357D8
+:10370000CA4283D7EA00A3852401BAA003D72A00BE
+:103710009EA083C76A00DAA003D74A009CA493073F
+:1037200000039CB493578400BCA4FAA0B7140020F3
+:10373000131A140081479384044B63C5470993050A
+:103740006400860593F5E50F13054B4AEFF03FD172
+:103750009317850021815D8D83C70A01D2948AA0C9
+:10376000BCA0EFF0BFD3EFE08FFE4E85EFF0DFD5CA
+:103770006DF913060A0193054B4A4E85EF0010566A
+:1037800083A7418805469305505237550040639CF6
+:10379000370513050580EFD09F9C09B793048C0D66
+:1037A000938C84039C4063996701DC40014536C6D5
+:1037B0008297B2462390AB00A104E3959CFE890B4F
+:1037C000050B29BF101813F7E70F329713F61700F0
+:1037D000B386F4000357C7FE11E22183850798A240
+:1037E00093F7F70F99BF130505C075B7EFC2BF96E2
+:1037F000370400201304840AAA89AE84328A13098C
+:10380000040398341C406317F7005C405286A68579
+:103810004E8582972104E31624FF6FC01F97EFC2E5
+:103820003F924111AA8CEF009051630B052A51453C
+:10383000EFE0EFF13719002013064006814513052C
+:10384000494A1304494A371C0020EFC07F9581493B
+:103850008144014A930B1400378D0000B78D00009E
+:10386000130BCC426685EF009051630B05266685ED
+:10387000EF00704E9307494AD2973EC688A3930A39
+:103880001A0089476384FA00638F04249307CC42AB
+:103890001420F8276395E6101830FC376311F710F1
+:1038A000378500001306C01E854513058551EF308E
+:1038B000A03DA5476395FA069307CC42D627094752
+:1038C000639EE60838208347CC42631CF7083830F3
+:1038D00083471B006317F708582083472B006312A8
+:1038E000F708583083473B00631DF706782083476D
+:1038F0004B006318F706783083475B006313F706C5
+:10390000182483476B00631EF704378500001306F5
+:103910005020854513054554EF30003721A08547D9
+:10392000E3EC97F8A9476385FA00894763F0970AA3
+:103930001306CC425E26094714346391E71213073D
+:1039400000036399E6063785000013066025854568
+:103950001305455AEF304033C5498DA883C7070783
+:10396000B5F383471B0795CB38303C20F98F58209F
+:10397000F98F5830F98F7820F98F7830F98F182423
+:10398000F98F1307F00F639AE700378500001306DD
+:10399000A02185451305055741B791E0854452861E
+:1039A000DE851305494AEF30002393072006E3FB29
+:1039B00047EB3DA241476398E602378500001306B6
+:1039C000C02585451305855CEF30002C1834C147B0
+:1039D0006311F70CB54763FE570B8349D400860982
+:1039E000C509568AD9B7138706031377F70F85459C
+:1039F00063ECE50037850000130630261305C55E2D
+:103A0000EF308028B549D9B7034716071DCF1307F4
+:103A1000000A130690266389E6041307100A6398C8
+:103A2000E6001306F026854513850D6325B7268726
+:103A300063F3F40009479374F70F13067027854565
+:103A400013058D65EF30402499BF268763F3F4009A
+:103A500009479374F70F13062028D5B79307000A78
+:103A6000639AF6001306B0283785000085451305D4
+:103A7000C56079B79307100A13061029E385F6FA93
+:103A8000A68763F3E400894793F4F70F13069029A0
+:103A90007DB7E3983AF59385DAFF93F5F50F1305B3
+:103AA000494AEFF0DF9B330744018347E7FF0347B1
+:103AB000F7FFA207D98F6397A700B2479823D9478A
+:103AC000630AF7000D47A68763F3E4008D4793F47C
+:103AD000F70FF1B556869305494A6685EFF01FD179
+:103AE00041016FC0AFE9A547E39EFAE2F1B3EFC22F
+:103AF0002FE89387C1869023371501409305001066
+:103B0000133616001305058090A3EFC03FEE138710
+:103B1000C1801C43FD171CC381EBB707EFBE37E71D
+:103B200000E0938707083CC73714014085649385FC
+:103B30000480130504800546EFC05FEB01469385C2
+:103B4000048013050480EFC07FEA6FC0AFE4EFC2CA
+:103B50008FE0B71400201384C442EFE08FEB48D409
+:103B6000EFE06FF908DCEFE04FF468C0EFE06FFDC5
+:103B70004C5828C00858378A0000EF20D0128325FF
+:103B8000CA6828C403A58183EF20A0262C48EF1023
+:103B9000B06F8325CA6828C803A5C183EF206025BC
+:103BA0006C44EF10706E68C4B71500203715002004
+:103BB0009385C54713058547EFF0CF96930700001F
+:103BC00023ACF18223AEF1827CC8B717002083A515
+:103BD000C7402844EF20E063AA854854EF20B00C8A
+:103BE0007C2C08D485CB37140140930500101305B5
+:103BF00004C0EFC0DFDE9384C442814701C9914510
+:103C0000130504C0EFC01FDDB337A000239DF404EB
+:103C10006FC0AFD73715014093050010130505C0DD
+:103C2000EFC0FFDB231DA404E5B7EFC2CFD23714EA
+:103C300000209307C44203C7C706B7140020854776
+:103C40001304C4429384443F378900006308F7009B
+:103C5000884C93050000EF20E0441DE90347B406BB
+:103C600085476317F7028325C9670858EF20404945
+:103C70006350A002B7450000371500209306800C62
+:103C80001306800C9385E5E013058557EFE0EF936D
+:103C90008349F406032A0404638F09028325C96754
+:103CA000C850EF10705ED285EF2080458947635B76
+:103CB000A00A639EF900B745000037150020814631
+:103CC00029469385C5F213058559EFE00F90A307A8
+:103CD00004066FC08FCBC84CD285EF20604263537F
+:103CE000A0048325C9678850EF10105AD285EF20B1
+:103CF0008049635905028854EF20B045B78700001A
+:103D000003A6076883A64768EF10005DEF20304FD9
+:103D100088D4371500201305C541EFD03FC3854730
+:103D2000A307F4068325C967C84CEF10F055AA8590
+:103D30002840EF20E03CE35EA0F8370500408947CB
+:103D4000814513050540A307F406EFD02FA83715CA
+:103D50000040814513050580EFD04FAE930700006A
+:103D60009CD485BFE387F9F675BFEFC26FC003A58A
+:103D70008188EFF0DFAA6FC0EFC1EFC26FBF03A56C
+:103D80008188EFE0BFB06FC0EFC0EFC26FBE138796
+:103D9000A1871C23B71400209384443FF634850781
+:103DA00093F7F70F6385F6001CA36FC0AFBE230027
+:103DB0000700EFE08FCF371400208C441304C44277
+:103DC00048DCEF20E033E352A0FE371500209304D7
+:103DD000855513058555EFE02F83B787000083A530
+:103DE0004703485423800400EF2080313325A0008E
+:103DF000A305A406B74500003715002081462946D3
+:103E00009385C5F213058559EFD03FFC79BFEFC20A
+:103E10002FB6938641879C22850793F7F70F9CA2C4
+:103E200085466393D7023705004081451305054059
+:103E3000EFD0CF999305C0123715004013050580C8
+:103E4000EFD0CF9F6FC00FB5938441872D47639408
+:103E5000E702EFE04FB7AA84EFE06FC0AA8526859E
+:103E6000EF20606423AEA184EFE0AFBA23A0A18865
+:103E70009305401AD1B75547E396E7FC3715002064
+:103E80001304855713058557EFD01FF8230004004E
+:103E9000EFE06FB32A89EFE08FBCAA854A85EF2057
+:103EA00080601384018608C0EFE0AFB6AA8503A541
+:103EB0000188EF20405F0C402A8903A5C185EF20CF
+:103EC000805EAA854A85EF10D072B787000083A56F
+:103ED00087682A84EF20202B635705022285EF2074
+:103EE0005027B787000003A6870083A6C700EF000E
+:103EF000F05C635AA000B71700201385C74023A6C3
+:103F00008740EFE0BFDFB7170020370500409387F9
+:103F1000C7420547854513050540238607062380CC
+:103F20000400239EE704EFD06F8A29BFEFC2AFA23F
+:103F3000938681879E228507C207C1839EA29146F0
+:103F400063ECF60037150040930540061305058025
+:103F5000EFD0CF8E6FC06FA31384818713076004E7
+:103F600093844186378900006369F70083250969D6
+:103F70008840EF20E018E35FA0FC3715002093098C
+:103F8000855913058559EFD03FE803270969930741
+:103F900000009CC0B71700201385C74123AEE7403F
+:103FA0002310040023800900EFD05F9AB717002088
+:103FB0001384C7428346B40605479384C742639D72
+:103FC000E6008547239EF404370500408545130528
+:103FD0000540EFC0BFFFBDBF4C580858EF20A04CB4
+:103FE00028C4EF201017B787000003A6073083A668
+:103FF00047302A89AE89EF00704CE344A0FCB787B4
+:10400000000003A6872D83A6C72D4A85CE85EF0025
+:10401000D055E34805FA8D47231EF40475B7EFC267
+:104020002F95EFD08FABEFE00F82EFE0BFD2EFE044
+:10403000AF87C526EFD0DF8AEFD02F9BEFD00FE3FD
+:10404000EFD0CFE5EFD0AFE8EFD04FECEFD00FFAE5
+:104050000545EFD03FBFB74500003715002081462A
+:104060001306803E9385E5AE13058556EFD0FFD548
+:10407000B74500003715002081461306803E938522
+:10408000E5B413058558EFD05FD4B7450000371568
+:10409000002081461306803E9385A5D813058555DB
+:1040A000EFD0BFD2B7450000371500208146130678
+:1040B000803E9385A5C213058550EFD01FD1B71759
+:1040C000002083C797448DE7B7450000814613065B
+:1040D00040069385A5D6371500201305855AEFD0E5
+:1040E000DFCE0545EFD0BFC0EFD0FFD46FC08F8AC1
+:1040F0000547E398E7FEB7450000814613064006F2
+:104100009385A5D7C9BF138751871C23B7160020F5
+:1041100083D64642850793F7F70F1CA36395F604F1
+:10412000EFC20F853715002013048552B717002002
+:104130001305855223000700A38C0748EFD0DFCC7E
+:1041400023000400371401409145130504C0EFC05B
+:104150007F8801E9014693050010130504C0EFC0F4
+:10416000FF886FC02F838280EFC28F80B71400203A
+:104170009387C44203C7D70685479384C4421384F8
+:1041800061876312F7023715002013098551130563
+:10419000855123000400239E018623870406EFD067
+:1041A000BFC62300090003C7E4068547631FF70263
+:1041B0001C2085071CA0B71700201387473F142039
+:1041C0003A3B1389473F6390E604371500202300EC
+:1041D0000400130485511305855123870406EFD08D
+:1041E000BFC2230004006FB0FFFAE3F6E7FC371507
+:1041F0000140014693050010130505C0EFC00FFFF5
+:10420000230004004DBF371501409305001013052E
+:1042100005C0EFC0CFFC9387C18701E59A2305074E
+:104220009AA3835649039A23E39FE6FA37150020A1
+:10423000130485511305855123900700EFD0DFBC8F
+:1042400037150140054693050010130505C02300EE
+:104250000400EFC0AFF92387040671B7EFB2BFEFD8
+:104260001387F1871C231306B00F011193861700E3
+:10427000F51714A393F7F70FB71600201384C6425F
+:104280006363F602371500202308040613048553E0
+:104290001305855323000700EFD01FB72300040048
+:1042A00005616FB09FEE7E24231D0100DD457C82F9
+:1042B000FD577C83FD573EC4E9779387F71F7C86C3
+:1042C000835724074800231E010013978700A1830A
+:1042D000D98F7C875E249384F18713978700A1830D
+:1042E000D98F03D7C642FC807C20F8813A20230C6A
+:1042F000F1001E24F8825A20230DF100F88313D711
+:104300008700A30CE100EFF08F9593578500A30D74
+:10431000F1001C28230EA1002944A30EF100EFF0A8
+:10432000EF97EFD0DFC21389018703250900EFF073
+:10433000AF9921E59387E187942305476397E600CA
+:104340002380070023800400A1BF032509006D46D8
+:104350004C0069220327090083A74188054693057D
+:104360005052375500406317F70013050580EFC022
+:104370001FDF3DB7130505C0DDBF7D141374F40FB7
+:1043800059FC39BFEFB2DFDE138481861C4037173A
+:104390000020B71400200357074285079384C442C6
+:1043A0001CC0A38804066391E70237150020130997
+:1043B000855413058554EFD03FA585472300090098
+:1043C00023200400A388F4066FB0DFDCEFB25FDACD
+:1043D000014405C1002111CC5C410D47639EE700FB
+:1043E0003755004093F5F50F13050580EFD06FF5B5
+:1043F000054422856FB01FDA11470544E39BE7FEB1
+:104400003755004093F5F50F130505C0EFD06FF356
+:10441000CDB7EFB2FFD5B717002083A70745370404
+:1044200000201304041185C7B71500201306800C63
+:104430009385855B1305C400EFD05FA871651305F4
+:104440000520EFD02FE485471CA023A28188B71553
+:1044500000201306C0129385056813058402EFD06F
+:10446000FFA548507104EFD0CFD685471CA023A4E8
+:10447000818801456FB01FD2EFB29FCF3715014041
+:10448000054693050002130505C0EFC02FD66FB097
+:104490007FD0EFB2FFCD37150140014693050002F2
+:1044A000130505C0EFC08FD46FB0DFCEEFB25FCC85
+:1044B000371501400546C145130505C0EFC00FD3B0
+:1044C0006FB05FCDEFB2DFCA371501400146C1457D
+:1044D000130505C0EFC08FD16FB0DFCBEFB2BFC700
+:1044E00003A741882A842E8AB28993844188631164
+:1044F000A702EFF07FF80149634339030545EFD088
+:104500001FA59C4063968702EFF0BFF86FB0FFC70E
+:1045100083A78188E391A7FEEFF05FF9E9BFB307B6
+:104520002A018385070022850509EFF03FEAE9B7F4
+:1045300083A78188E39C87FCEFF0DFF8C1BF814748
+:1045400009C91821814711C75C49084D898FB337C4
+:10455000F0003E858280EFB2BFC141112A84A307DB
+:104560000100EFF0DFFD19C59305F1001305C4004C
+:10457000EFD09F980305F10041016FB0BFC1EFB2CA
+:104580003FBF3105EFD0BF996FB0DFC037081000D3
+:1045900001117D183377B80026CA3378D80093D438
+:1045A000450113D34601131E37004EC61357D501DC
+:1045B0000E089357D60193F4F47F1373F37F06CE5E
+:1045C00022CC4AC893D9F50193DEF6013367C701BF
+:1045D000131F350033E80701931F3600338E644004
+:1045E0006380D9196356C0136304031CB7068000A7
+:1045F0009307F07F3368D800638FF4369307800306
+:1046000063C0C735FD4763CDC747130500023305B7
+:10461000C541B3D7CF01B316A8003399AF00DD8EE3
+:1046200033392001B357C80133E926011D8F3309FF
+:104630002F41B3372F013306F7409317860063D419
+:104640000724370780007D173374E600630C042CC1
+:104650002285EF206051130785FF93070002998F91
+:10466000B357F9003316E400D18F3319E9006341E1
+:10467000972A33059740130615007D47634DC738C9
+:1046800013070002118FB356C9003319E90033979D
+:10469000E700558F333920013369270133D6C7002E
+:1046A00081449377790081CF1377F90091476308AC
+:1046B000F70013074900333927014A963A899317BF
+:1046C000860063D6071C138514009307F07FCE8500
+:1046D0006304F520B70780FFFD17F18F9398D7018A
+:1046E00013593900A607B3E82801B1831375F57F84
+:1046F0009396C7005205F2406244B182FE05C98E0E
+:10470000CD8ED2444249B2494685B6850561828044
+:10471000631E0E0A138314001373E37F63170322CF
+:10472000B367E701B368F801639D041A6387074024
+:10473000638608443309FF41B307074133362F012D
+:104740003386C7409317860063D6074C3389EF4101
+:10475000B307E84033B62F013386C740F68991B7D7
+:104760006350C00F6300030CB70680009307F07F0F
+:104770003368D800638AF43A9307800363CBC71386
+:10478000FD4763DFC73513090EFE93070002B356DA
+:104790002801630AFE00130900043309C9413319D3
+:1047A0002801B3EF2F013339F0013369D90031A269
+:1047B000B367F801638A071C9307FEFF638C073811
+:1047C0009306F07F6309DE1A3E8E0DBDB30593405C
+:1047D00063910422B367E701638707329387F5FF8C
+:1047E000638107449306F07F638CD520BE859307D1
+:1047F000800363CCB72AFD4763CFB73C9307000221
+:104800008D8F3319F700B356BF00B317FF0033691C
+:10481000D900B337F0003357B7003369F9003308D4
+:10482000E84041ACB367F801638007349307FEFFAB
+:10483000638A07209306F07F6308DE2E3E8E2DBF2D
+:10484000631E0E149386140093F7E67F639107347A
+:10485000B367E7016395042C6380073EB367F801F3
+:10486000638E07303309FF01B3070701333FE901C6
+:104870003386E7019317860063D70700B70780FFE9
+:10488000FD177D8E854493777900E39F07E09317AA
+:10489000D60193583900B3E8F80093573600130750
+:1048A000F07F638DE404B207B18313F5F47FCE8506
+:1048B00081B53369F801333920017A99B337E901B9
+:1048C0003386E70093178600E3DF07FA8504930732
+:1048D000F07F6396F418CE851305F07F81478148F9
+:1048E00001BDC1EB6384083A931636009317D801D3
+:1048F0008D82B3E8D700F68993573800B3E7F80004
+:10490000F9DB81451305F07FB70708008148CDB377
+:10491000370680FF7D167D8E93777900998CE3951D
+:1049200007D8B5B74A85EF20202413078501FD4736
+:10493000E3D5E7D2130685FFB317C900014905BBCC
+:104940003369F80133392001DDB13309FF41330602
+:10495000074133342F01330486409317840063CD1D
+:104960000724B3688900E39308CE814781498144D5
+:104970001DBFE39808F80E059317D7010D81B3E822
+:10498000A700935737009DBF0E059317D7010D81E0
+:10499000B3E8A700F2849357370011B7330593406B
+:1049A00063820412B70680009307F07F558F630D72
+:1049B000F32E9307800363CBA720FD4763C3A72A89
+:1049C00093070002898F3319F700B356AF00B3176E
+:1049D000FF003369D900B337F0003357A7003369BC
+:1049E000F9003A987E99B337F901338607019A8422
+:1049F000D1BDB70680009307F07F558FE319F3DE32
+:104A0000931736008D839318D801B3E81701F68900
+:104A100093573800E5B5130715FE9306000233D708
+:104A2000E700630AD600930600043386C640339637
+:104A3000C7003369C900333920013369E9000146F1
+:104A4000814491B53309FF01B30707013336E9010A
+:104A50003E96931786008544E3D707E28944B7075B
+:104A600080FFFD17F18F135719001379190033696F
+:104A700027019398F70133E9280113D6170015B1E0
+:104A800013090EFE93070002B3562801630AFE00C5
+:104A9000130900043309C94133192801B3EF2F0169
+:104AA0003339F0013369D90059B63369E701333935
+:104AB000200133892F41B3B72F013306F8409A8480
+:104AC000F689A5BEB367E701638207189307F5FF70
+:104AD0006384071C9306F07F6304D5123E85D1BD25
+:104AE00093070002B387C741B316F8003399FF005C
+:104AF00033D6CF01D18E33392001B357C80133E902
+:104B000026013E975DBB931736008D839318D8011D
+:104B1000B3E81701AE8493573800F68949B3EDC363
+:104B20003369F801E31F09DC0E059317D7010D81E6
+:104B3000B368F50093573700D1B36381080E93161D
+:104B400036009317D8018D82B3E8D700F6899357C2
+:104B5000380091BB3309FF41B3070741333F2F01B1
+:104B60003386E7418544D1BC0E059317D7010D81EB
+:104B7000B368F500F2849357370015B30E05931709
+:104B8000D7010D81B3E8A7009357370029BB9307DE
+:104B9000F07FE382F6D43309FF013336E901B3072E
+:104BA0000701B2979398F7011359190033E92801C7
+:104BB00013D61700B684C1B93389EF413307E840F3
+:104BC00033B62F013304C740F68949B43369E7018E
+:104BD0003339200101BD938705FE93060002B357C8
+:104BE000F700638AD50093060004B385B6403317F7
+:104BF000B700336FEF003339E0013369F90055BD79
+:104C0000931736008D839318D801B3E81701935793
+:104C10003800EDB1B368C900E39708C68147814900
+:104C200059B13389EF41B307E84033B62F013386DA
+:104C3000C740F689854411B4931636009317D801FE
+:104C40008D82B3E8D70093573800B1B99316360078
+:104C50009317D8018D82B3E8D700AA849357380000
+:104C60003DB9930705FE93060002B357F700630AA8
+:104C7000D500930600043385A6403317A700336F91
+:104C8000EF003339E0013369F900A9BB8145130511
+:104C9000F07FB7070800A9BC3309FF01B30707017C
+:104CA0003336F9013E9675B3931636009317D80143
+:104CB0008D82B3E8D7009357380089B113D74501E7
+:104CC000B7071000FD1713D846011377F77F930835
+:104CD000F07F33F3B7002A8EF58FFD81B28E137803
+:104CE000F87FFD8263081703630018030DEBB368B8
+:104CF000A300631408005D8E29CA638508046388D5
+:104D0000D502054595ED8280B3E8C700E38008FE33
+:104D1000795582803365A30065FD630CE802631456
+:104D200008005D8E79DEE39ED5FCE34CE8FC634829
+:104D30000701E3E867FC6303F302637FF30081E5A7
+:104D40007D558280F5DE054582800145E39B08FAAA
+:104D500082805D8E69DA6DBF01458280E3E3CEFB20
+:104D60000145E372DEFBE5F1E1BF13D74501B7076B
+:104D70001000FD1713D846011377F77F9308F07FD3
+:104D800033FEB700AA8EF58FFD81328F1378F87F3E
+:104D9000FD82630E1703630D180129E3B368AE00AB
+:104DA000631F08005D8E01EE0143638C080421A897
+:104DB000B3E8C7000943639608046DD305A0638474
+:104DC00008046385D50205438DCD7D531DA8B368C6
+:104DD000AE00094363970802630AE80263140800FF
+:104DE0005D8E75D2E391D5FEE34FE8FC6349070180
+:104DF000E3EBC7FD630FFE0001436374FE00F1D5D2
+:104E000005431A858280EDFE7D53E5BF5D8E79DA1C
+:104E1000CDBFE36ADFFB0143E3F5EEFFF5F175B7C4
+:104E200039714AD813D945014ED652D456D29399E6
+:104E3000C50006DE22DC26DA5AD05ECE1379F97F71
+:104E40002A8A93D9C90093DAF501630D090E9307F5
+:104E5000F07F6306F9181354D5018E09B369340144
+:104E60003704800033E4890093143500130919C016
+:104E70008149814B13D74601139AC6001377F77FF8
+:104E8000B285135ACA0013DBF601630B07109307B0
+:104E9000F07F6303F7049357D6010E0A33EA470104
+:104EA000130717C0B7078000B367FA0093153600E1
+:104EB0003A99814833C76A01BD463A8513081900FB
+:104EC00063E83617173600001306067D8A09B29983
+:104ED00083A60900B2968286B367CA001309F97FD8
+:104EE0006399071293E9290081458948E1B7014791
+:104EF0009307F07F3704080081443204D2073180E1
+:104F00007E075D8C598CA285F250625426854259E9
+:104F1000D254B259225A925A025BF24B21618280DA
+:104F20005A853E84AE84C68B8947638DFB0E8D47C0
+:104F3000E38FFBFA85472A87639EFB38814701444C
+:104F4000814465BF33E4A90061C036C632C4638CB6
+:104F5000092A4E85EF1050412246B246AA87130710
+:104F600055FF7544938487FF198CB3999900335486
+:104F70008A0033643401B3149A0013D7460113092D
+:104F8000D0C0139AC6001377F77F3309F9408149DF
+:104F9000814BB285135ACA0013DBF601E31907EE01
+:104FA000B367CA00B1C7630F0A22528532C4EF103B
+:104FB000B03B22462A87930655FFF547930587FFA6
+:104FC000958F331ABA00B357F600B3E74701B3150C
+:104FD000B6003309E9401309D9C08148E1BD33E483
+:104FE000A90001ECA14981441309F07F894B59B50F
+:104FF00093E919008145854875BD4E84AA84B1495D
+:105000001309F07F8D4BBDB5914981440149854B12
+:1050100095B593E93900D2878D4869BD8947568592
+:10502000E397FBF02A879307F07F01448144F1B5B1
+:10503000C16E1386FEFF93D6040113DE0501F18CC9
+:10504000F18D338695023383B602935806013305FA
+:105050009E021A95AA98B382C60363F36800F6927B
+:10506000C16F1383FFFF33F5670093D30701B3F7D5
+:105070006800C207337366003E933306950293D8E7
+:105080000801B387A602135F0601B3849302BE949E
+:10509000FA94B38E760263F3F400FE9E416A93079E
+:1050A000FAFF935F0401B376F400B3F9F4007D8E48
+:1050B000C1803384D502C209338FD401B299CE980E
+:1050C000B307DE02935E0401B385BF02AE97BE9EB6
+:1050D000330EFE0363F3BE00529EC1679385F7FF54
+:1050E00033F6BE006D8C4206229693DE0E01B305A8
+:1050F000D502769E3385AF0213D40501B386D30261
+:10510000AA96A296B38FF30363F3A600BE9F4165F0
+:105110007D15B3F7A600C2076D8DAA97B385580019
+:10512000B3B93501FA97B2953384370133B6C50068
+:10513000B30EC4013385CE0033343401B3B7E70175
+:10514000C18F33BECE0113D406013336C5003E9461
+:105150003366CE009394950032947E94B3E4640059
+:10516000260493567501B3349000DD8193179500A2
+:10517000CD8C558CDD8C9317740063DB070093D7BF
+:10518000140085889316F401DD8CD58C0580428946
+:105190009307F93F6359F00893F6740081CE93F6B4
+:1051A000F40011466388C60093864400B3B49600A9
+:1051B0002694B6849316740063D80600B70700FFE0
+:1051C000FD177D8C930709409306E07F63CFF60EB1
+:1051D00093D634009314D4012604D58C318093F7F0
+:1051E000F77F21BB328532C4EF10101893065501AA
+:1051F000F147130705022246E3D1D7DC6115B31747
+:10520000A6008145F9B3EF10301613075501F1459B
+:10521000930705022246B246E3D5E5D4611533145F
+:10522000AA00814499BB85469D8EB1E71309E941E7
+:10523000B3972401B3D4D40033192401B337F00059
+:10524000B3649900DD8C93F77400B356D40081CF1A
+:1052500093F7F40011466388C70093874400B3B402
+:105260009700A696BE849397860063D80704854767
+:105270000144814459B113068003E341D6CC7D46F5
+:10528000E356D6FA0556B307F640930500023356A7
+:10529000F4006387B6001309E943B3172401DD8CDA
+:1052A000B3349000D18C93F67400014499CA93F7FB
+:1052B000F40011468146E392C7FA139496003180B8
+:1052C000F6068D80D58C81470DB99307F07F014498
+:1052D000814425B142896DBD370710007D1701114A
+:1052E0003373B70093D84601758F935ED60122CCF5
+:1052F00026CA0E0393D445019357D5010E0706CE57
+:105300004AC84EC693F8F87F130EF07F33E7EE00DD
+:1053100093F4F47F13D4F50133E36700131F3500D2
+:10532000FD82931E36006380C81993C61600B385AC
+:1053300014416305D4126351B018638B081AB70780
+:1053400080005D8F6381C4599307800363C4B734C1
+:10535000FD4763C5B748930700028D8FB3D9BE00E0
+:105360003318F700B39EFE00336838013357B70097
+:10537000B339D001336838013303E340B3090F4137
+:10538000B3373F013306F3409317860063D30724F6
+:10539000370980007D1933792601630F092C4A856E
+:1053A000EF10807C130785FF93070002998FB3D716
+:1053B000F9003316E900D18FB399E9006344972AC5
+:1053C000058F13061700FD4663C5C63A1307000292
+:1053D000118FB3D6C9003398E9003397E700558F92
+:1053E00033380001B369070133D6C700814493F70E
+:1053F000790081CF93F6F90091476388F600938690
+:10540000490033B836014296B6899317860063D6B1
+:10541000071C138714009307F07F05886306F720A5
+:10542000B70780FFFD17F18F1398D70193D9390083
+:10543000A60733683801B1831377F77F9396C700C7
+:105440005207B1827E04D98EC18EF2406244D244AA
+:105450004249B2494285B685056182806356B00AE9
+:10546000638A0812B70780005D8F6387C42D930796
+:10547000800363C7B718FD4763D2B73C138805FEA6
+:1054800093070002B3590701638AF50093070004EC
+:10549000B385B7403317B700B3EEEE003338D00111
+:1054A0003368380195A2B367D7019385148099E3D7
+:1054B00093C61600630AD404D1E19387140093F7CE
+:1054C000E77F6399071EB367E3013368D7016392EF
+:1054D00004166382073C63160842131835009316BE
+:1054E000D3011358380033E806019357330019A24B
+:1054F000B367D7016385071A9387F5FF638B073A74
+:10550000638CC523BE8589B56399051C93861400F9
+:1055100093F7E67FC1EFB367E30163900436638DD1
+:105520000744B367D701639407460E051318D301E8
+:105530000D813368A800935733006DA8B385984058
+:1055400063970420B367E301638D07309387F5FF0A
+:10555000638907401305F07F6383A520BE85930709
+:10556000800363C2B72AFD4763C8B73C93070002B4
+:105570008D8F3318F3003356BF00B317FF00336825
+:10558000C800B339F0003353B30033683801330730
+:105590006740B5ACB367D701638307109387F5FF06
+:1055A000638F071E6380C52FBE85D1B59307F07F3B
+:1055B000638BF606FA9E33B6EE01B307E300B297AB
+:1055C0001398F70193DE1E00B369D80113D61700B4
+:1055D000B68493F77900E39F07E09317D60113D8B9
+:1055E00039003368F800A685935736001307F07F1B
+:1055F0006380E506B207B18313F7F57F05883DBDEB
+:105600003367D7013338E000B309E801B3B7E901E4
+:105610003386670093178600E3DD07FA8504930756
+:10562000F07F639CF41805881307F07F81470148D9
+:1056300031B5639107106301083C131836009317C6
+:10564000D701135838003368F80036849357370071
+:10565000B367F800E9DB01441307F07FB7070800E0
+:105660000148E9BB370680FF7D167D8E93F77900F0
+:10567000998CE39107D895B74E85EF10E04E13074C
+:105680008501FD47E3D2E7D2130685FFB397C90032
+:1056900081492DB33368D70133380001C5B11318E0
+:1056A00035009317D301135838003368F800935727
+:1056B00033002DBFB309DF413309E34033363F01E7
+:1056C0003309C9409317890063CA072033E82901C9
+:1056D000E31508CC8147014431BFB385984063810D
+:1056E0000414B70680009307F07F3363D30063810F
+:1056F000F8209307800363CCB722FD4763C9B72C1A
+:10570000930700028D8F3318F300B356BF00B31711
+:10571000FF003368D800B339F0003353B300336867
+:1057200038011A97B309D801B3B7D9013386E70016
+:10573000C684CDB5E31108F2131835009317D301D1
+:10574000135838003368F8009357330011B7370502
+:1057500080009307F07F3363A300E392F8E00E0626
+:105760001318D7010D823368C80093573700368469
+:10577000C5B505179306000233D7E700630AD600C4
+:10578000930600043386C6403396C700B3E9C900C8
+:1057900033383001B369E800014681441DBDB309C7
+:1057A000DF01B307E30033BFE9013386E701931755
+:1057B00086008544E3DF07E08944B70780FFFD17D3
+:1057C000F18F13D7190013F8190033680701939963
+:1057D000F701B3E9090113D6170011B9138805FEC3
+:1057E00093070002B3590701638AF5009307000489
+:1057F000B385B7403317B700B3EEEE003338D001AE
+:1058000033683801A5BE3363E30133386000B389E0
+:105810000E41B3B73E013306F740C6843684ADB6B9
+:10582000B367E301638707189387F5FF638C071C51
+:105830009306F07F638ED50ABE8565BD930700028F
+:105840008D8FB3D9BE003318F700B39EFE003368C6
+:1058500038013357B700B339D001336838013A9370
+:1058600065B3131836009317D7011358380033E87F
+:10587000070136849357370095BBBDCB3367D701FB
+:10588000E31B07DC0E051318D3010D813368A80054
+:105890009357330075BBE30F08E2131836009317D4
+:1058A000D701135838003368F8003684935737000F
+:1058B00091B3B309DF41B307E340333F3F01338680
+:1058C000E7418544D1B4131835009316D30113581A
+:1058D000380033E80601935733009DBBB389EE418E
+:1058E0003306674033B93E0133092641368475B427
+:1058F0000E061318D7010D823368C800935737007E
+:1059000081BBB309DF41B307E34033363F01338640
+:10591000C7409317860063D7070AB389EE41B307E0
+:105920006740B3BE3E013386D7413684C9B4336382
+:10593000E30133386000FDB3138805FE93070002CE
+:10594000B3590301638AF50093070004B385B74098
+:105950003313B300336F6F003338E001336838011D
+:105960007DB5B389EE41B3076740B3BE3E013386D0
+:10597000D7413684854409BC131836009317D701E4
+:10598000135838003368F80093573700A5B1B309AE
+:10599000DF01B307E30033BFE9013386E701931763
+:1059A0008600E3D807C2B70780FFFD177D8E8544C8
+:1059B0000DB10E061318D7010D823368C800935736
+:1059C00037002DB133E8C900E30608D019B11388B8
+:1059D00005FE93070002B3590301638AF50093079C
+:1059E0000004B385B7403313B300336F6F0033380F
+:1059F000E001336838013DB301441307F07FB70776
+:105A000008002DBCB309DF01B307E300B3BED90121
+:105A10003386D70169BB411106C622C426C20DCD0B
+:105A20009357F541B3C4A7009D8C2A842685EF10B7
+:105A3000A0139306E041898EA9477D8093F6F67FF7
+:105A400063CDA7022D47098FB3D7E4005505B207F0
+:105A5000B394A400B18329A00144814681478144C5
+:105A6000B207D206B1837E04D58FC18FB2402244E3
+:105A70002685BE859244410182805515B397A400C6
+:105A8000B207B1838144E9BF4111370780007D1718
+:105A900013D8750126C2935475013373A70093F48C
+:105AA000F40FB376B7004AC01378F80F1359F50115
+:105AB00006C622C4FD819A8726854A86131E3300B6
+:105AC000939E3600B3880441630AB90E6350100DEB
+:105AD000630408149307F00F638BF414B7070004F2
+:105AE000B3EEFE00ED4763C1172993070002B387A9
+:105AF0001741B397FE00B3D81E01B337F000B3E7E8
+:105B0000F800B307FE4013975700635E0718370489
+:105B100000047D147D8C2285EF1000056D15B317F0
+:105B2000A4006348951A058D13041500130700029D
+:105B3000018F3397E7003337E000B3D78700D98F61
+:105B4000814413F7770019C713F7F70091466303F1
+:105B5000D700910713975700635B07148504130759
+:105B6000F00F4A866383E4169A07A58313F5F40FB2
+:105B7000B2402244A6079314750113D59700458DB2
+:105B80007E0692440249518D410182806399080A40
+:105B9000138714001377E70F631707146390042229
+:105BA000630D0E1EE3860EFCB307DE41139757000C
+:105BB00063500722B387CE412E8961B7635C100B17
+:105BC000630E08089307F00F6383F406B707000419
+:105BD000B3EEFE00ED4763C9171F93070002B387BA
+:105BE0001741B397FE00B3D81E01B337F000B3E7F7
+:105BF000F800F297139757006357070A85041307B5
+:105C0000F00F6384E40CB706007E13D71700FD166F
+:105C1000858B758FD98F35B7638D0E08FD18B30747
+:105C2000DE41E38208EE9307F00FE39DF4EA630D93
+:105C3000030801461305F00FB707400015BF3307EF
+:105C40009840EDE863020E147D1763080718930768
+:105C5000F00F6319F80E2E893683D1BF638B0E04C3
+:105C6000FD18B307DE01E38708F89307F00FE3930D
+:105C7000F4F675BF63950808850413F7E40F631302
+:105C8000071263170510630F0E14E3830EEEB307BC
+:105C9000DE0113975700814463570700370700FC64
+:105CA0007D17F98F854413F77700E31F07E813D3B7
+:105CB00037009307F00FE38CF4F693179300A58356
+:105CC00013F5F40F4A866DB54A861305F00F814728
+:105CD00045B5370700FC7D17F98F13F77700898CDE
+:105CE000E31407E6E9B73304DE419317540063C3B6
+:105CF000070CE31204E201460145814795BD3307D5
+:105D00009840ADC49307F00FE308F8F4B707000418
+:105D1000336EFE00ED4763CCE70C93070002998FCA
+:105D2000B317FE003357EE00B337F000D98FF69764
+:105D3000C284C9B59307F00FE30FF8F0B70700046A
+:105D4000336EFE00ED4763C3E70893060002998EA9
+:105D5000B316DE00B357EE003337D000D98FB387C8
+:105D6000FE40C2842E8945B3854761BB630E0E0693
+:105D70007D17B307DE01C284E30E07E69307F00F39
+:105D8000E31AF8F8368365B53683C2842E8915B7D1
+:105D9000E3040EECE38D0EE869BD638D0E022E86E2
+:105DA000B687F9B39307F00FE381F4F2B307DE018E
+:105DB0008583D5BD3384CE412E89B1BBE31C0EFC57
+:105DC000E3890EE62E8949BD854725B5854741BF44
+:105DD000E39B07EC0146814761BBB387CE41C28498
+:105DE0002E8915B3B68769B33683C284D9B5854782
+:105DF0003DBF3971935775014AD856D25ECE931A7A
+:105E000095001359F50106DE22DC26DA4ED652D46F
+:105E10005AD093F7F70F93DA9A00CA8B638207126E
+:105E20001307F00F6384E7128E0A37070004B3EA02
+:105E3000EA00138A17F80144014B93D77501939434
+:105E4000950093F7F70FA58093D9F501FDC71307C8
+:105E5000F00F6387E7028E04938717F83707000473
+:105E6000D98C330AFA408146558C17370000130746
+:105E7000A7860A043A941C4033493901BA978287AD
+:105E8000130A1AF0F9E88946558C173700001307F2
+:105E9000A7880A043A941C4033493901BA9782878B
+:105EA00001491307F00FB707400013959700F25010
+:105EB00062549317770125817E095D8D3365250135
+:105EC000D2544259B259225A925A025BF24B216182
+:105ED00082801307F00F8147C9BFA68ACE8B368B0D
+:105EE0008947630BFB1A8D47E30CFBFA8547630A6E
+:105EF000FB0A1307FA0713F91B006357E01293F725
+:105F00007A0099C793F7FA0091466383D700910A04
+:105F100093974A0063D90700B70700F8FD17B3FA53
+:105F2000FA0013070A089307E00FE3C4E7FA939710
+:105F30006A00A5831377F70F8DBFB9E48546A9B72B
+:105F400063940A021144014A054BC5BD63990A00D6
+:105F50002144130AF00F094BCDB58D4631B73144BA
+:105F6000130AF00F0D4BD1BD56852EC6EF00D03F62
+:105F70009307B5FFB39AFA009307A0F8338AA740B6
+:105F80000144014BB24555BD2685EF00F03D130796
+:105F9000B5FFB307AA00B394E400138A67078146EC
+:105FA000E1B513F91B000147814701B7416613951D
+:105FB00054007D1693570501698E63FA9A0AB3D58A
+:105FC000FA027D1AD68601473388C502B3F6F60277
+:105FD000C206558F637B07012A979386F5FF636896
+:105FE000A70A6376070BF9152A9733070741B356BB
+:105FF000F7023377F702B38AC6029317070163FBF0
+:106000005701AA971387F6FF63E1A70863FF5707B5
+:10601000F916AA97C205B38A5741D58DB33A5001F4
+:10602000B3EA5501CA8BF1B58546998E11C76D4605
+:1060300001478147E34BD6E6130AEA09339A4A013E
+:10604000B3D7DA00B33A4001B3E7570113F777004B
+:1060500019C713F7F70091466303D7009107139709
+:106060005700634807029A07A58301473DBD93D6B1
+:106070001A00B3D5F6021397FA0141833388C5029B
+:10608000B1B7CE8B368B814AA1BDBA8661B7B685D2
+:10609000A9BF0547814711BD13F91B001307F00F76
+:1060A000814721B593567501B7078000FD1713D6B8
+:1060B000750193F6F60F1308F00FB3F8A700135706
+:1060C000F501ED8F1376F60FFD816384060313054A
+:1060D000F00F6304A60205456383C6008280E39F38
+:1060E000F8FE0145E30CB7FE0545EDFA3335100126
+:1060F00082800545E38D08FC82800545E9DF8280CA
+:1061000093567501B7078000FD1713D6750193F6F6
+:10611000F60F1308F00FB3F8A7001357F501ED8F32
+:106120001376F60FFD8163810603630C06018DE291
+:1061300011E2B1C3638E08026305B70405451DE78C
+:106140008280F5D779558280E39E08FE6309D602E6
+:1061500011E2EDD7E314B7FEE342D6FE63C7C600F3
+:10616000E3EE17FD0145E3FDF8FC01E77D55828074
+:10617000F5DD054582800145E39208FC8280F9DB6C
+:10618000D1B78146E1BF93567501B7078000FD176F
+:1061900013D6750193F6F60F1308F00FB3F8A700A6
+:1061A0001357F501ED8F1376F60FFD816387060314
+:1061B0006309060185EA11EA89EB0145639B080042
+:1061C00082800945F5FFE5DA31A8638C0802630097
+:1061D000B704054575D77D55828009456398080247
+:1061E0006304D60211E2F5D7E315B7FEE343D6FE0A
+:1061F00063C7C600E3EF17FD0145E3F3F8FC19E3BD
+:10620000D9BFF1D905458280E5D38280828081465D
+:10621000C5B7797122D4135475014ECE52CC93195F
+:10622000950006D626D24AD056CA5AC81374F40F1F
+:1062300093D99900135AF50169C49307F00F6308C5
+:10624000F40E9397390037070004B3E9E70013040D
+:1062500014F88144014B13D77501939A9500137775
+:10626000F70F93DA9A0013D9F50145CF9307F00F92
+:10627000630CF7028E0A130717F8B7070004B3EA96
+:10628000FA003A94014633452A01BD47AA86930590
+:10629000140063E29710172700001307E74B8A04E6
+:1062A000BA949C40BA9782871304F40F63980A0C3F
+:1062B00093E424000946C1BF01451307F00FB70757
+:1062C0004000B2502254A6075E07A5837E05D98FF1
+:1062D00092540259F249624AD24A424B5D8D45615D
+:1062E0008280CA86D689328B89476301FB0A8D4733
+:1062F000E304FBFC854736856312FB1A014781479F
+:10630000C9B7639E090413D77501939A9500137753
+:10631000F70F91440144054B93DA9A0013D9F50124
+:1063200031F7639D0A0093E414000546A9BF639307
+:106330000902A1441304F00F094B31BF5685EF0049
+:10634000B0029307B5FF098CB39AFA001304A4F8BE
+:10635000014615BFB1441304F00F0D4BEDBD4E8542
+:106360002EC6EF0070009307B5FF1304A0F8B39991
+:10637000F900098C8144014BB245F1BD93E434002E
+:106380000D4611B78947D286E313FBF6368513070E
+:10639000F00F81473DB741639306F3FF13D6090120
+:1063A00093D80A01B3F7D900B3FADA003388570358
+:1063B000B389F80213570801B30A5603D6994E97CA
+:1063C00033061603637357011A96C167FD17B37638
+:1063D000F7003378F800C206C29693996600935787
+:1063E0000701B3393001E982B2979A07B3E6D900C1
+:1063F000B3E9D7009397490063D9070013D7190071
+:1064000093F71900B369F7002E841307F40763505C
+:10641000E00493F7790099C793F7F90091466383F5
+:10642000D70091099397490063D90700B70700F88F
+:10643000FD17B3F9F900130704089307E00F63CBC6
+:10644000E70493976900A5831377F70F9DBD8547F0
+:10645000B386E74011C76D4601478147E343D6E65F
+:106460001307E4093397E9003337E000B3D7D900C5
+:10647000D98F13F7770019C713F7F7009146630315
+:10648000D700910713975700634C07009A07A5831D
+:10649000014705BD1307F00F814725B52E84B5B719
+:1064A0000547814739BD3707800041117D17935655
+:1064B000750113D87501B377A70093F6F60F935EB5
+:1064C000F5013376B70026C24AC01378F80F06C626
+:1064D00022C41303F00F3E8E3689F684139F3700D3
+:1064E000FD8113153600B38806416302681093C519
+:1064F0001500638CBE106354100D63100810630404
+:10650000051EFD18B307AF40638608029307F00F1E
+:106510006388F616ED4763C7172913070002330790
+:1065200017413317E500B35715013337E000D98F12
+:10653000B307FF40139757006351071A370400044D
+:106540007D147D8C22850D256D15B317A400634E37
+:10655000251B330525411304150013070002018F85
+:106560003397E7003337E000B3D78700D98F01496D
+:1065700013F7770019C713F7F70091466303D700A5
+:10658000910713975700635E0714930619001307CA
+:10659000F00F93FE14006386E6169A07A58393F620
+:1065A000F60FA607B240224413D59700DE06939754
+:1065B000FE01558D924402495D8D410182806392B6
+:1065C000080A138716001377E70F631B07146394F9
+:1065D000062263020F2071D5B307AF40139757000F
+:1065E00063550722B307E5410149AE8451B7E30083
+:1065F00005F0638ABE0AE35410FD9307F00F638130
+:10660000F608B70700045D8D31B7635E10096301BA
+:1066100008089307F00F6385F606B70700045D8D41
+:10662000ED4763C0171F13070002330717413317E5
+:10663000E500B35715013337E000D98FFA97139768
+:106640005700635C070805091307F00F630BE90A9D
+:10665000B706007E13D71700FD16858B758FD98F6F
+:1066600001BF3307D84063950610630D0F147D17E3
+:106670006303071A9307F00F6314F810AE84328E89
+:10668000630F0E06814E9306F00FB707400011BF4F
+:1066900039C9FD18B307AF00E38308FA9307F00F79
+:1066A000E390F6F8F1BF6399080813891600137791
+:1066B000E90F63160712639B061063030F16E302CC
+:1066C00005EEB307AF001397570001496357070062
+:1066D000370700FC7D17F98F054913F77700E31C96
+:1066E00007E813DE37009307F00FE30BF9F8931771
+:1066F0009E00A5839376F90F93FE14005DB593FE7B
+:1067000014009306F00F814769BD370700FC7D1721
+:10671000F98F13F777003309A940E31E07E4D1B7D7
+:106720003304AF409317540063C3070CE31C04E029
+:10673000814E81468147B5B53307D840B5C693072A
+:10674000F00FE30EF8F2B7070004336FFF00ED47D8
+:1067500063CDE70C93070002998FB317FF003357FF
+:10676000EF00B337F0005D8FB307A7004289C1BDCA
+:106770009307F00FE304F8F0B7070004336FFF004E
+:10678000ED4763C2E70893070002998FB317FF0034
+:106790003357EF00B337F000D98FB307F540428984
+:1067A000AE8449BB854769B3630E0F067D17B307F7
+:1067B000AF004289E30507E89307F00FE319F8F803
+:1067C000328E7DBD328E4289AE8431BFE3090FEA3D
+:1067D000E30805EA45BD0DCDAE8EB287D9B3930768
+:1067E000F00FE300F9F2B307AF008583FDB5330482
+:1067F000E541AE8481BBE31D0FFCE30505E8AE84F3
+:10680000BDBD854725BD854749BF0149E39707ECD5
+:10681000814E814779B3B307E5414289AE8419BB04
+:10682000B28741B3328E42897DBD054735BF1357CC
+:106830007501370680009307F6FF1377F70F93056E
+:10684000E007B3F6A7009357F501014563F4E500AF
+:1068500099C3828082809307E0097D55E3EBE7FED0
+:1068600093055009B3E7C60063D7E5001307A7F601
+:106870003395E7008280130560093307E54033D57F
+:10688000E7008280411106C622C415CD2A84E92C76
+:106890009307E0093387A7409307600963C0E704C3
+:1068A000A1469377F70F63D5A60061153314A400B2
+:1068B00026042580260413559400B2402244DE07A6
+:1068C0005D8D410182800144260413559400B2403D
+:1068D00022448147DE075D8D410182809307900944
+:1068E00063DDE7009307B5019546B317F400898E81
+:1068F000B337F0003354D4005D8C954763D6A700BE
+:106900009307B5FF3314F400B70600FCFD16937728
+:1069100074003376D40085C39377F4009145638C7B
+:10692000B70011069317560063D707009307F009C5
+:10693000758E3387A74013146600258026041355EF
+:106940009400B24022449377F70FDE075D8D41013A
+:106950008280135775011377F70F411193071700C2
+:1069600022C426C21314950006C693F7E70F2580AC
+:106970009354F50185C793573400130707387604FD
+:10698000B2075207B1831395F401D98FC98FB24072
+:10699000228522449244BE854101828005EB39C4A0
+:1069A0002285D922A94763C6A7042D47098F9307DB
+:1069B00055013357E4003314F4009317C70013074D
+:1069C0009038098FB1831377F77F5DBF01CC1357E0
+:1069D0003400B7070800D98FB2077604B1831307D4
+:1069E000F07F79BF1307F07F814759BF0147814787
+:1069F00041BF130755FF3317E40001447DBF93D611
+:106A000045019397C50093F6F67FB1831386160070
+:106A10008E071357D5011376E67FFD815D8F93189E
+:106A2000350035CE138806C89307E00F63DD0701F4
+:106A30008147139597009306F00FDE062581FE052A
+:106A4000558D4D8D82806355000B931765000E07A1
+:106A5000B337F000D98F93D8D801B3E7170113F7F4
+:106A600077006301071013F7F70091466303D7001F
+:106A70009107370700047D8F75C7130718001306A9
+:106A8000F00F9376F70FE305C7FA9A07A5831395DE
+:106A90009700DE062581FE05558D4D8D8280B367FA
+:106AA000170199EE85CF95479A07A583139597000F
+:106AB00093F6F60FDE062581FE05558D4D8D8280FD
+:106AC000A5DBB7074000139597009306F00FDE068D
+:106AD00081452581FE05558D4D8D82808147139519
+:106AE00097008146DE062581FE05558D4D8D8280FD
+:106AF000A5576348F804F94737068000B387074174
+:106B00007D45598E6351F5047957330707411305C5
+:106B100000023357E6006388A700938626CAB3169F
+:106B2000D600B3E8D800B3371001D98F13F7770038
+:106B3000014815FB139757008546E34807F4814643
+:106B4000A5B781468DB7938626C83397D8003337CB
+:106B5000E000B316D600B3D8F800B367D700B3E7A8
+:106B6000F800E9B7C28689B7C167637CF50293076D
+:106B7000F00F1307000263EBA7009727000093872D
+:106B8000A7C1AA9788233305A74082802181972730
+:106B90000000938767C0AA97882361473305A74001
+:106BA0008280B7070001636DF500618197270000BF
+:106BB000938787BEAA97882321473305A740828001
+:106BC000418197270000938727BDAA9788234147D3
+:106BD0003305A7408280B3C7A5008D8B3307C5005E
+:106BE00081E78D4763EDC700AA87637EE50894219E
+:106BF00085078505A38FD7FEE3EBE7FE82809376BA
+:106C00003500AA8789CA942185078505A38FD7FEF9
+:106C100093F63700C5BF9376C7FF138606FE63F071
+:106C2000C70683A3050083A2450083AF850003AF99
+:106C3000C50083AE050103AE450103A3850183A80A
+:106C4000C5019385450223A0770003A8C5FF23A2B1
+:106C5000570023A4F70123A6E70123A8D70123AAFD
+:106C6000C70123AC670023AE17019387470223AE09
+:106C700007FF75B790419107910523AEC7FEE3EB7F
+:106C8000D7FEE3E6E7F6828039713EDA2ED232D4BF
+:106C900036D63AD842DC46DE9387018122CC804347
+:106CA00026CA06CEAA8409C41C4C99E32285212D4C
+:106CB0000C4454102686228536C6EF00D025F240BB
+:106CC0006244D24421618280011126CA4AC806CE9C
+:106CD00022CC4EC652C4AA842E8901C51C4D91E314
+:106CE000DD239C4C804499E32685F12B97270000F7
+:106CF000938787BC631BF402C0405E24A18BB1C79D
+:106D00001C48A1C7FD59294A1C4483450900FD17A9
+:106D1000B1E91CC463DD07062286A94526855522F4
+:106D2000FD576308F502294535A097270000938792
+:106D3000A7BA6314F4008044C9B79727000093876B
+:106D4000A7B5E31CF4FAC0444DBFA2852685052CE7
+:106D500055D97D55F2406244D2444249B249224A53
+:106D6000056182801CC4050963D70700184C63CAFB
+:106D7000E700638845011C401387170018C08CA3E7
+:106D800061B722862685352AE31035F9D9B71C402C
+:106D90001387170018C0294798A371B793870181FB
+:106DA000AA8588436FF05FF241119387018122C465
+:106DB000804326C206C61C5CAA8495EB6145EF00A1
+:106DC0008076B737CDAB08DC9387E7301CC1B717A7
+:106DD0006DE6938747235CC1B7E705009387C7EE4D
+:106DE0001CC5AD475EA50547814718C95CC91C5C39
+:106DF000B240224484CB23AA0700924441018280FE
+:106E000041119387018122C4804306C61C5C8DEB2F
+:106E10006145112FB737CDAB08DC9387E7301CC134
+:106E2000B7176DE6938747235CC1B7E705009387E3
+:106E3000C7EE1CC5AD475EA50547814718C95CC9AB
+:106E4000105C3787954CB7F75158144A484A1307D6
+:106E5000D7F29387D742B387F602B2402244330574
+:106E6000E5023E95B387E60233B7E6029386170044
+:106E700014CA2A9733B5F6003A9548CA0605058123
+:106E80004101828005C68547630BF6021387150012
+:106E90002E968346F7FF0505BA87A30FD5FE81CE50
+:106EA0000507E318E6FE2300050011A0AE8785075D
+:106EB00003C7F7FF6DFF3385B7407D158280AE872E
+:106EC000DDB7011122CC26CA4AC806CE4EC6AA8416
+:106ED0002E89328401C51C4D91E3F52697270000C9
+:106EE0009387879D6317F406C0401C4C1CC45E2426
+:106EF000A18BC1C31C48B5CF1C4808409379F90F3A
+:106F00001379F90F1D8D5C486346F500A28526852F
+:106F1000692C25E51C440505FD171CC41C4013877E
+:106F2000170018C0238037015C486388A7005E24DF
+:106F3000858B81CBA9476316F900A2852685B524E8
+:106F40000DEDF24062444A85D2444249B24905619E
+:106F5000828097270000938727986314F400804469
+:106F600069B79727000093872793E310F4F8C0448C
+:106F7000ADBFA2852685212041D17D59D9B74111C8
+:106F80009387018126C2844322C44AC006C62A8947
+:106F90002E8489C49C4C99E32685352697270000CA
+:106FA00093878791631BF402C0400317C4009317B3
+:106FB0000701C18393F68700ADEA93F6070195EECA
+:106FC000A5472320F900136707045AA47D55B24052
+:106FD000224492440249410182809727000093870E
+:106FE000A78F6314F4008044C9B7972700009387E4
+:106FF000A78AE31CF4FAC0444DBF918B9DC34C5843
+:1070000089C9930744046384F5004A851523232A1C
+:1070100004025E242322040093F7B7FD5EA41C48FB
+:107020001CC05E2493E787005EA41C4899EB5E2495
+:107030001307002093F707286385E700A2854A8598
+:1070400091295E2413F717001DC35C482324040014
+:10705000B307F0401CCC1C480145B5FB8317C400A6
+:1070600013F707082DD793E707045EA485B7898B2C
+:10707000014791E3584818C4F9BFDE25011122CC1D
+:1070800026CA06CE4AC84EC613F78700AA842E84A5
+:1070900079EBD841634DE000B841634AE000014517
+:1070A000F2406244D2444249B24905618280585458
+:1070B0007DD703A904009396370123A0040063DB66
+:1070C000060670485E24918B99C75C401D8E5C5803
+:1070D00099C33C401D8E5C540C5081462685829796
+:1070E000FD575A24631DF5009440F54763E8D70621
+:1070F000B70740208507B3D7D700858BA5C31C48A9
+:10710000232204001CC09317370163D80700FD57E2
+:107110006314F5009C4091E368C84C5823A02401F7
+:10712000BDDD930744046384F50026851121232ADD
+:107130000402B5B70C500146854626850297FD57D7
+:107140002A86E311F5F89C40B5DF75476385E700B3
+:1071500059476393E70423A0240191B713670704F9
+:107160005AA47D5535BF83A90501E38A09F203A915
+:1071700005008D8B23A0350133093941014791E387
+:10718000D84918C4E35D20F11C540C50CA864E86C1
+:10719000268582976347A0005E2493E707045EA4D8
+:1071A000C9B7AA993309A940F1BF9C49A5C30111E8
+:1071B00022CC06CE2A8411C51C4D81E72EC6212281
+:1071C000B245971700009387276F639CF5004C40EA
+:1071D0008397C5009DC722856244F24005616FF028
+:1071E000DFE9971700009387276F6394F5000C443D
+:1071F000C5B7971700009387276AE39BF5FC4C44BB
+:10720000C1BFF24062440145056182800145828030
+:10721000411122C406C62A844EA572A5232005006A
+:107220002322050023240500232205062328050028
+:10723000232A0500232C0500214681451305C50599
+:10724000EF801FF6971700009387A7B35CD09717BE
+:1072500000009387C7B51CD4971700009387A7B980
+:107260005CD497170000938707BC00D01CD8B240AD
+:1072700022444101828097050000938545F391AA3D
+:10728000411126C2130680069384F5FFB384C4021D
+:107290004AC02E8922C406C693854407352E2A8407
+:1072A00001CD2320050023222501310508C41386C2
+:1072B00084068145EF80DFEE2285B240224492446D
+:1072C0000249410182801C4DA5E7411106C622C436
+:1072D00097070000938767FA1CD5938741819C43E9
+:1072E0002324050423260504232805046314F5003C
+:1072F00085471CCD2A84352848C022851D2808C40E
+:107300002285052848C4484001469145EFF05FF0CA
+:1073100008440546A545EFF0BFEF48440946C94576
+:10732000EFF01FEF85471CCCB24022444101828020
+:10733000828041119387418126C284434AC006C698
+:107340009C4C22C42A8981E72685EFF0DFF79384DD
+:1073500084048044DC40FD1763D607009C40B9CF0D
+:107360008440C5BF0317C40039E7C17785072322CE
+:1073700004062320040023220400232404005CC408
+:1073800023280400232A0400232C040021468145DD
+:107390001305C405EF80DFE0232A0402232C040236
+:1073A00023240404232604042285B2402244924468
+:1073B0000249410182801304840671BF91454A85C8
+:1073C000EFF01FEC88C049FDB1472320F9000144CC
+:1073D000E1BF797122D44AD052CC56CA5AC85EC68F
+:1073E00006D626D24ECE2A8AAE8A130485040149D7
+:1073F000054BFD5B09ECB25022544A859254025968
+:10740000F249624AD24A424BB24B456182800444FF
+:1074100083294400FD1963D409000040E1BFDE2444
+:10742000637BFB008397E40063877701A685528521
+:10743000829A3369A90093848406E9BF1971A6DA98
+:10744000AE848395E500A2DC86DE328463DB050032
+:10745000DE2423A0060093F7070885E79307004082
+:107460001DA0300836C6EF009022B246E34205FE6A
+:107470007247BD67F98F7977BA9793B717009CC2A7
+:10748000F1BF930700041CC0F6506654D654014562
+:1074900009618280DE25011122CC06CE26CA4AC8A7
+:1074A000898B2E8489CF930774041CC01CC8854720
+:1074B0005CC8F2406244D244424905618280740053
+:1074C0003000AA84EFF09FF7A2452A892685292259
+:1074D00019E98317C40013F7072061FFF19B93E7B5
+:1074E00027005EA4C9B797070000938707D99CD4EB
+:1074F0005E2408C008C893E707085EA4A2475CC8DA
+:10750000B24781CF8315E4002685EF00701B11C5BB
+:107510005E24F19B93E717005EA45E243369F900B3
+:107520002316240179B793870181AA8588436DA02A
+:10753000DDC183A7C5FF411122C406C626C213843C
+:10754000C5FF63D307003E94AA84EF00301F9387E2
+:10755000C1889C4381EF2322040023A68188224412
+:10756000B2402685924441016F00701D637EF40095
+:1075700014403307D4006396E7009843DC43369702
+:1075800018C05CC0D9BFBA87D84319C3E37DE4FEF5
+:1075900094433386D700631F86001040B29694C38D
+:1075A0003386D700E31DC7FA10435843B29694C3FD
+:1075B000D8C375B76375C400B1479CC04DB71040C0
+:1075C000B306C4006316D70014435843B29614C0E0
+:1075D00058C0C0C369B78280011126CA93843500A0
+:1075E000F19806CE22CC4AC84EC6A104B14763F337
+:1075F000F404B14463E2B4042A89EF0030149387A1
+:10760000C18898433A8439E0938701899C4391E784
+:1076100081454A85252F23A8A188A6854A853D272F
+:10762000FD5963193507B1472320F9004A85EF005A
+:10763000101129A0E3D004FCB1471CC10145F24060
+:107640006244D2444249B249056182801C40858F20
+:1076500063CF0702AD4663F6F6001CC03E9404C03B
+:1076600031A05C406313870223A6F1884A85EF00AE
+:10767000100D1305B4009307440061993307F540DA
+:107680005DDF3A94898F1CC05DBF5CC3C5B722879C
+:10769000404095BF130435007198E30285FCB305A3
+:1076A000A4404A856525E31C35FBB5BF1C46FD1784
+:1076B0001CC663DA0700184E63C5E700A947639448
+:1076C000F5006FF01F801C422E851387170018C22B
+:1076D0008CA38280011122CC26CA4AC84EC652C44D
+:1076E00006CE2A89AE893284B304D6007D5A63144B
+:1076F0009400014509A80C204E864A85EFF01FFB37
+:107700000504E31645FFF2406244D2444249B249BF
+:10771000224A05618280357122CD26CB4AC94EC7E7
+:1077200006CF52C556C35AC1DEDEE2DCE6DAAA89CC
+:10773000AE843289368409C51C4D99E3EFF0BFB899
+:1077400097170000938747176398F40C83A44900A8
+:10775000DE24A18BE5C79C48F5C393070002A30470
+:10776000F1029307000302D22305F10222C6930B14
+:107770005002971A0000938A2A18054C294B4A8414
+:107780001C2099C3639F770DB30C2441638E0C00BA
+:10779000E6864A86A6854E85EFF0DFF3FD57630F38
+:1077A000F51C9256E69636D21C206389071CFD57BD
+:1077B0001309140002C802CE3ECA02CCA309010478
+:1077C00082D48345090015465685A92F1304190054
+:1077D000C24751E913F7070109C713070002A309BC
+:1077E000E10413F7870009C71307B002A309E104F6
+:1077F000834609001307A002638FE606F2474A8416
+:1078000081462546182093051400130707FD63776A
+:10781000E60AB5CA3ECE85A8971700009387C70B26
+:107820006395F40083A4890025B797170000938718
+:10783000A706E39FF4F083A4C90019BFA6854E856F
+:10784000EFF0EFF319D97D55FA406A44DA444A491A
+:10785000BA492A4A9A4A0A4BF65B665CD65C0D61C5
+:107860008280050431BF330555413315AC00C98F03
+:107870003EC82289B9B7324793064700184336C637
+:10788000634707023ACE18209307E002631DF7040E
+:1078900018309307A002631BF702B247090413874D
+:1078A00047009C433AC663C107023ECA2DA833076E
+:1078B000E04093E727003ACE3EC8F1B7B3876703AD
+:1078C00085462E84BA973DBFFD57C5B7050402CA49
+:1078D000814681472546182093051400130707FDAC
+:1078E0006374E606F9F20C200D4617150000130527
+:1078F00025010D2D11CD97170000938767001D8D71
+:1079000093070004B397A700424505045D8D2AC87C
+:107910000C201946171500001305C5FE13091400A5
+:107920002304B102012535C19787FFFF9387876D37
+:1079300095E74247B2471377071009CF91073EC634
+:107940009257D2973ED225BDB387670385462E84D2
+:10795000BA9751B79D07E19BA107D5B77800970665
+:107960000000938666D726860C084E859700000097
+:10797000E7000000FD572A8AE314F5FCDE2493F7A4
+:107980000704E39207EC1255C1B578009706000092
+:10799000938686D426860C084E85012AE1BF79712C
+:1079A00056CA9C49BA8A984522D426D24ECE52CC89
+:1079B00006D64AD05AC85EC6AA892E84B284368AB0
+:1079C00063D3E700BA879CC00347340419C3850713
+:1079D0009CC01C4093F7070281C79C4089079CC04C
+:1079E0000329040013796900631A0900130B940139
+:1079F000FD5B5C449840998F634CF9041C408346BE
+:107A0000340493F70702B336D000A5EB1306340411
+:107A1000D2854E85829AFD576303F5041C401146BA
+:107A20009840998B544481446397C700B384E640DF
+:107A300063D3040081441C4418486354F700998FB1
+:107A4000BE94014969047D5B63982405014509A83A
+:107A500085465A86D2854E85829A631E75017D556C
+:107A6000B250225492540259F249624AD24A424BCD
+:107A7000B24B456182800509ADBF3307D4001306C0
+:107A80000003A301C7040347540493871600A29779
+:107A90008906A381E7049DBF85462286D2854E854F
+:107AA000829AE30E65FB050945B7797122D426D287
+:107AB0004AD04ECE06D652CC56CA5AC8B689942D54
+:107AC000930790063289AA842E8413863504638D29
+:107AD000F60263E2D706930780056386F61863ED26
+:107AE000D700638E062093073004638EF60A930A4C
+:107AF00024042301D404C9A0930730066385F60A41
+:107B000093074006E395F6FE1C40084393F60708EA
+:107B100093054500C5C61C410CC363D80700130775
+:107B2000D002B307F040A301E40497160000938647
+:107B3000E6DD294765A8930700076382F61663E52B
+:107B4000D7029307E0066389F6189307F006E390DF
+:107B5000F6FA0C401C4313F8050813854700630729
+:107B6000080608C39C4385A893075007E383F6FEE5
+:107B7000930780076389F61293073007E399F6F6B7
+:107B80001C43D04181459386470014C383AA070054
+:107B90005685492E01C53305554148C05C401CC877
+:107BA000A301040461A81C43930A2404938647009C
+:107BB0009C4314C32301F4048547D5B793F6070407
+:107BC0001C410CC3B9DAC207C18781BF93F5050414
+:107BD00008C3C9D99E231307F0066387E60E9716DC
+:107BE00000009386A6D22947A30104044C400CC48C
+:107BF00063C5050008406D9908C099E3B28A89CD34
+:107C0000B28AB3F5E702FD1AB6958C212380BA003B
+:107C1000B3D5E70263F0E70CA147631EF7001C40F1
+:107C2000858B91CB58401C4863C7E700930700033E
+:107C3000A38FFAFEFD1A3306564110C84E87CA8636
+:107C40007000A2852685EFF09FD57D5A631D450BF8
+:107C50007D55B250225492540259F249624AD24A96
+:107C6000424B45618280A382D5049716000093861B
+:107C7000E6C90C40084313F805081C411105630DC3
+:107C8000080208C313F7150001C793E505020CC0ED
+:107C90004147B9FB0C4093F5F5FD0CC0B1B79C41D1
+:107CA00093E707029CC193078007A302F404971689
+:107CB00000009386E6C675BF13F8050408C3E30306
+:107CC00008FCC207C1837DBF97160000938606C4D7
+:107CD000214719BFAE8735B794411C43CC4913F8EF
+:107CE0000608138547006306080008C39C438CC33D
+:107CF00039A008C393F606049C43F5DA8EA3232823
+:107D00000400B28A25BF14485686CA852685829902
+:107D1000E30045F51C40898B8DE7B2474844E35AA0
+:107D2000F5F23E853DB785465686CA8526858299F9
+:107D3000E30065F3050A5C443247998FE345FAFE98
+:107D4000E9BF014A930A94017D5BF5B7411122C452
+:107D50002A842E8597A7FF1F23AC07A406C6EFA091
+:107D6000EFABFD576319F50097A7FF1F938747A453
+:107D70009C4391C31CC0B240224441018280411106
+:107D800022C42E848395E50006C65D2A634905005A
+:107D90007C48AA977CC8B2402244410182805E247C
+:107DA0007D777D17F98F5EA4FDB7DE25011122CC0A
+:107DB00026CA4AC84EC606CE93F70710AA842E8458
+:107DC0003289B68991C78395E500894601460D221F
+:107DD0005E247D777D17F98F5EA48315E4006244ED
+:107DE000F240CE864A86B24942492685D244056190
+:107DF00025A8411122C42E848395E50006C6CD280E
+:107E0000FD575A24631AF500FD77FD17F98F5EA41C
+:107E1000B2402244410182808567D98F5EA468C840
+:107E2000C5BF8395E50025A8411122C42A842E856B
+:107E3000B285368697A7FF1F23AC079606C6EFA02C
+:107E40000F9AFD576319F50097A7FF1F9387479671
+:107E50009C4391C31CC0B240224441018280411125
+:107E600022C42A842E8597A7FF1F23A3079406C642
+:107E70001122FD576319F50097A7FF1F93874793BA
+:107E80009C4391C31CC0B2402244410182804111F5
+:107E900022C42A842E85B28597A7FF1F23AA0790A4
+:107EA00006C6CD20FD576319F50097A7FF1F9387DE
+:107EB00027909C4391C31CC0B24022444101828060
+:107EC000411122C42A842E8597A7FF1F23A2078E63
+:107ED00006C6C920FD576319F50097A7FF1F9387B2
+:107EE000278D9C4391C31CC0B24022444101828033
+:107EF000411122C42A842E85B285368697A7FF1F9A
+:107F000023A8078A06C67928FD576319F50097A7A5
+:107F1000FF1F9387E7899C4391C31CC0B240224452
+:107F20004101828093F5F50F2A966314C50001453F
+:107F300082801C21E38EB7FE0505C5BF828082804A
+:107F4000411122C42A842E85B285368697A7FF1F49
+:107F500023A0078606C6B928FD576319F50097A721
+:107F6000FF1F9387E7849C4391C31CC0B240224407
+:107F7000410182809307800517A7FF1F232AF782FC
+:107F80007D5582809307800517A7FF1F2322F78264
+:107F90007D5582809307800517A7FF1F232AF7804E
+:107FA000014582809307800517A7FF1F2322F780D2
+:107FB0007D558280930780051797FF1F232AF77E40
+:107FC0007D55828053797374656D436C6B3A25647B
+:107FD0000D0A00004368697049443A253038780D2D
+:107FE0000A00000043616C696272617474696F6EAB
+:107FF0005F56616C203A2025640A0000CDCC4C3DD0
+:108000006666663F0000F0439A9999999999A93F4D
+:10801000CDCCCCCCCCCCEC3F696E2074696D3120DA
+:108020006972712000000000000000413333D3402A
+:108030007836B241000030410000804000F07F45BA
+:108040000000000000000440000000000000E03FCD
+:1080500000000000000034401D130F130213F4123F
+:10806000E612D712C812B912AA129A128A127A12FA
+:108070006A12591248123712251213120112EE1108
+:10808000DB11C811B511A1118D11791164114F11B6
+:108090003A1125110F11F910E310CC10B5109E10F4
+:1080A00087106F1057103F1026100D10F40FDB0FC4
+:1080B000C20FA80F8E0F740F590F3F0F240F090F17
+:1080C000ED0ED20EB60E9A0E7E0E620E460E290EE2
+:1080D0000C0EF00DD30DB60D980D7B0D5E0D400D01
+:1080E000220D050DE70CC90CAB0C8D0C6F0C510C5F
+:1080F000330C150CF70BD90BBB0B9C0B7E0B600BD9
+:10810000420B240B060BE80ACA0AAD0A8F0A710A51
+:10811000540A360A190AFC09DF09C209A5098809A7
+:108120006C094F0933091709FB08DF08C308A808C1
+:108130008D08720857083C0821080708ED07D30787
+:10814000B907A00786076D0754073C0723070B07ED
+:10815000F306DB06C406AD0696067F0668065206E1
+:108160003C0626061006FB05E605D105BC05A7055D
+:1081700093057F056B055805450532051F050C0560
+:10818000FA04E804D604C404B304A10490047F04F0
+:108190006F045F044E043E042F041F041004010406
+:1081A000F203E303D503C703B903AB039D039003B5
+:1081B0008203750368035C034F03430336032A03FA
+:1081C0001F0313030703FC02F102E602DB02D102E4
+:1081D000C602BC02B202A7029E0294028A02810277
+:1081E00077026E0265025C0254024B0242023A02BE
+:1081F00032022A0222021A0212020B020302FC01BC
+:10820000F401ED01E601DF01D801D201CB01C40187
+:10821000BE01B801B101AB01A5019F019901940113
+:108220008E01880183017D01780173016E0169016E
+:1082300063015E015A015501500100005B494E4641
+:108240004F5D205B25733A25645D204D6174636842
+:108250005F6861726477617265494448592073753B
+:108260006363657373200D0A0D0A00005B494E4677
+:108270004F5D205B25733A25645D204D6174636812
+:108280005F42726F616463617374486172647761A5
+:108290007265494420737563636573730D0A0D0A33
+:1082A00000000000333363410AD7A33C000088413B
+:1082B00000007041666666410000C8420000B4429A
+:1082C00000004842535630315F323431303135305E
+:1082D00031000000534C00009A9999999999B9BFBF
+:1082E0006666666666662C4000009041000080412C
+:1082F0009A9999999999A9BF9A9999999999C93FE0
+:108300009A9999999999B93F0AD7A33BACC5273750
+:108310005B494E464F5D205B25733A25645D2052D4
+:108320006567697374726174696F6E2073756363D6
+:10833000657373200D0A0D0A000000005B45525260
+:108340004F525D205B25733A25645D20205265679E
+:1083500069737465725F4E756D62657220657272C5
+:108360006F723A2578200D0A0D0A00005B455252C3
+:108370004F525D205B25733A25645D20205265676E
+:1083800069737465725F53746172745F416464727F
+:10839000657373206572726F72203A202578200D04
+:1083A0000A0D0A005B494E464F5D205B25733A2556
+:1083B000645D2020534C5F52656164526567697348
+:1083C00074657242617474657279566F6C7461671A
+:1083D00065200D0A000000005B494E464F5D205BA2
+:1083E00025733A25645D2020534C5F5265616452C9
+:1083F0006567697374657243686172674375727209
+:10840000656E74200D0A00005B494E464F5D205B8F
+:1084100025733A25645D2020534C5F526561645298
+:1084200065676973746572446973636861726743F1
+:10843000757272656E74200D0A0000005B494E462D
+:108440004F5D205B25733A25645D2020534C5F52BD
+:1084500065616452656769737465724469736368C2
+:108460006172674D6F735374617465200D0A00006B
+:10847000000020415B494E464F5D205B25733A2545
+:10848000645D2020534C5F52656164526567697377
+:1084900074657248696768536964654D6F735465A4
+:1084A0006D7065726174757265200D0A00000000C0
+:1084B0005B494E464F5D205B25733A25645D202065
+:1084C000534C5F5265616452656769737465724DA0
+:1084D0005050544D6F6465200D0A00005B494E46B4
+:1084E0004F5D205B25733A25645D2020534C5F521D
+:1084F0006561645265676973746572536F6C61720C
+:108500004F70656E43697263756974566F6C746100
+:108510006765200D0A0000005B494E464F5D205BF9
+:1085200025733A25645D204D617463685F537461FF
+:108530007274666C61672073756363657373200D75
+:108540000A0D0A005B494E464F5D205B25733A25B4
+:10855000645D204D617463685F6164647265737308
+:108560002073756363657373200D0A0D0A000000A4
+:108570005B494E464F5D205B25733A25645D204D77
+:10858000617463685F42726F616463617374616494
+:10859000647265737320737563636573730D0A0D7D
+:1085A0000A0000005B494E464F5D205B25733A256B
+:1085B000645D20526561645F5265676973746572BA
+:1085C0000D0A0D0A000000005B494E464F5D205B1E
+:1085D00025733A25645D2057726974655F5265673B
+:1085E00069737465720D0A0D0A0000005B494E46FE
+:1085F0004F5D205B25733A25645D204F746865727A
+:10860000206672616D65730D0A0D0A005B494E4666
+:108610004F5D205B25733A25645D2042726F616473
+:10862000636173745F5363616E0D0A0D0A0000008D
+:108630005B494E464F5D205B25733A25645D2052B1
+:108640006567697374726174696F6E5F7265717565
+:108650006573740D0A0D0A005B494E464F5D205B41
+:1086600025733A25645D2066756E636F64652065C9
+:1086700072726F722025780D0A0D0A0000004040CA
+:10868000333333333333C33F0000803F00BA5B4A98
+:108690000000403F9CC9FFFF8EC8FFFF8EC8FFFF50
+:1086A0008CC8FFFF94C8FFFF94C8FFFF5AC8FFFFA4
+:1086B0008CC8FFFF94C8FFFF5AC8FFFF94C8FFFF94
+:1086C0008CC8FFFF88C9FFFF88C9FFFF88C9FFFF6B
+:1086D0005AC8FFFFD8D8FFFFFED7FFFFD2D8FFFF51
+:1086E00006D8FFFFD2D8FFFFCCD7FFFFD2D8FFFFBD
+:1086F00006D8FFFFFED7FFFFFED7FFFFCCD7FFFF57
+:1087000006D8FFFF0CD8FFFF0CD8FFFF0CD8FFFFE7
+:10871000CCD7FFFFBED7FFFFBED7FFFF92D8FFFF2A
+:108720006ED9FFFF92D8FFFF8CD7FFFF92D8FFFFD3
+:108730006ED9FFFFBED7FFFFBED7FFFF8CD7FFFF6D
+:108740006ED9FFFFCCD7FFFFCCD7FFFFCCD7FFFF01
+:108750008CD7FFFF42DCFFFF90DBFFFF90DBFFFFCA
+:108760008EDBFFFF94DBFFFF94DBFFFF64DBFFFF8B
+:108770008EDBFFFF94DBFFFF64DBFFFF94DBFFFF7B
+:108780008EDBFFFF30DCFFFF30DCFFFF30DCFFFF64
+:1087900064DBFFFF0001020203030303040404047B
+:1087A000040404040505050505050505050505057D
+:1087B000050505050606060606060606060606065D
+:1087C0000606060606060606060606060606060649
+:1087D000060606060707070707070707070707072D
+:1087E0000707070707070707070707070707070719
+:1087F0000707070707070707070707070707070709
+:1088000007070707070707070707070707070707F8
+:1088100007070707080808080808080808080808DC
+:1088200008080808080808080808080808080808C8
+:1088300008080808080808080808080808080808B8
+:1088400008080808080808080808080808080808A8
+:108850000808080808080808080808080808080898
+:108860000808080808080808080808080808080888
+:108870000808080808080808080808080808080878
+:108880000808080808080808080808080808080868
+:1088900008080808000000000000000000000000B8
+:1088A00000000000000000000000000000000000C8
+:1088B00000000000000000000000000000000000B8
+:1088C00000000000000000000000000000000000A8
+:1088D0000000000000000000000000000000000098
+:1088E0000000000000000000000000000000000088
+:1088F00000000000232D302B20000000686C4C008D
+:1089000065666745464700003031323334353637C7
+:10891000383941424344454600000000303132338B
+:1089200034353637383961626364656600000000AB
+:10893000000000000000000001020304060708090F
+:1089400000000000010203040102030406070809F5
+:10895000600000006C27000061000000B8260000E5
+:1089600062000000CE25000063000000EE2400003D
+:10897000640000009A23000065000000FE23000050
+:1089800066000000322400006C000000002400009B
+:108990006D000000022400007000000004240000AC
+:1089A0007400000006240000750000000824000088
+:1089B000760000000A2400007B0000000C24000068
+:1089C0007C0000000E2400007D000000FA2300005F
+:1089D0007E000000FC230000300000005A3600003A
+:1089E0001000000022320000A00000002834000027
+:1089F000A1000000C6330000D0000000CE3500000A
+:108A0000D100000042350000010100009033000059
+:108A1000020100005A33000003010000243300006B
+:108A200004010000EE32000005010000B832000031
+:108A300006010000963200000701000074320000B9
+:108A4000000000000300000080250000000000007E
+:108A50000000000000000000000000000000000016
+:108A6000040000008025000000000000000000005D
+:108A7000000000000000000000000000B4880000BA
+:108A8000D48800009488000000000000000000006E
+:108A900000000000000000000000000000000000D6
+:108AA00000000000000000000000000000000000C6
+:108AB00000000000000000000000000000000000B6
+:108AC00000000000000000000000000000000000A6
+:108AD0000000000000000000006CDC020204060838
+:108AE000B0170020805101004801002048010020FB
:00000001FF
diff --git a/obj/mppt_Nos_V0.4.lst b/obj/mppt_Nos_V0.4.lst
index a990821..8d9cd1e 100644
--- a/obj/mppt_Nos_V0.4.lst
+++ b/obj/mppt_Nos_V0.4.lst
@@ -7,10 +7,10 @@ start address 0x00000000
Program Header:
LOAD off 0x00001000 vaddr 0x00000000 paddr 0x00000000 align 2**12
- filesz 0x00001f64 memsz 0x00001f64 flags r-x
- LOAD off 0x00003000 vaddr 0x20000000 paddr 0x00001f64 align 2**12
- filesz 0x00000098 memsz 0x000000d0 flags rw-
- LOAD off 0x00003800 vaddr 0x20004800 paddr 0x20004800 align 2**12
+ filesz 0x00008930 memsz 0x00008930 flags r-x
+ LOAD off 0x0000a000 vaddr 0x20000000 paddr 0x00008930 align 2**12
+ filesz 0x000001c0 memsz 0x000017b0 flags rw-
+ LOAD off 0x0000a800 vaddr 0x20004800 paddr 0x20004800 align 2**12
filesz 0x00000000 memsz 0x00000800 flags rw-
Sections:
@@ -19,51 +19,51 @@ Idx Name Size VMA LMA File off Algn
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .vector 0000013c 00000004 00000004 00001004 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 2 .text 00001e24 00000140 00000140 00001140 2**2
+ 2 .text 000087f0 00000140 00000140 00001140 2**3
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 3 .fini 00000000 00001f64 00001f64 00003098 2**0
+ 3 .fini 00000000 00008930 00008930 0000a1c0 2**0
CONTENTS, ALLOC, LOAD, CODE
- 4 .dalign 00000000 20000000 20000000 00003098 2**0
+ 4 .dalign 00000000 20000000 20000000 0000a1c0 2**0
CONTENTS
- 5 .dlalign 00000000 00001f64 00001f64 00003098 2**0
+ 5 .dlalign 00000000 00008930 00008930 0000a1c0 2**0
CONTENTS
- 6 .data 00000098 20000000 00001f64 00003000 2**2
+ 6 .data 000001c0 20000000 00008930 0000a000 2**2
CONTENTS, ALLOC, LOAD, DATA
- 7 .bss 00000038 20000098 00001ffc 00003098 2**2
+ 7 .bss 000015f0 200001c0 00008af0 0000a1c0 2**2
ALLOC
- 8 .stack 00000800 20004800 20004800 00003800 2**0
+ 8 .stack 00000800 20004800 20004800 0000a800 2**0
ALLOC
- 9 .debug_info 00012475 00000000 00000000 00003098 2**0
+ 9 .debug_info 000263af 00000000 00000000 0000a1c0 2**0
CONTENTS, READONLY, DEBUGGING
- 10 .debug_abbrev 00003230 00000000 00000000 0001550d 2**0
+ 10 .debug_abbrev 00005f81 00000000 00000000 0003056f 2**0
CONTENTS, READONLY, DEBUGGING
- 11 .debug_aranges 00000978 00000000 00000000 00018740 2**3
+ 11 .debug_aranges 00000fb0 00000000 00000000 000364f0 2**3
CONTENTS, READONLY, DEBUGGING
- 12 .debug_ranges 000009d0 00000000 00000000 000190b8 2**3
+ 12 .debug_ranges 00001240 00000000 00000000 000374a0 2**3
CONTENTS, READONLY, DEBUGGING
- 13 .debug_line 0000b290 00000000 00000000 00019a88 2**0
+ 13 .debug_line 0001602e 00000000 00000000 000386e0 2**0
CONTENTS, READONLY, DEBUGGING
- 14 .debug_str 00002fb6 00000000 00000000 00024d18 2**0
+ 14 .debug_str 00005408 00000000 00000000 0004e70e 2**0
CONTENTS, READONLY, DEBUGGING
- 15 .comment 00000033 00000000 00000000 00027cce 2**0
+ 15 .comment 00000033 00000000 00000000 00053b16 2**0
CONTENTS, READONLY
- 16 .debug_frame 00001d20 00000000 00000000 00027d04 2**2
+ 16 .debug_frame 00003418 00000000 00000000 00053b4c 2**2
CONTENTS, READONLY, DEBUGGING
- 17 .debug_loc 00003e96 00000000 00000000 00029a24 2**0
+ 17 .debug_loc 00006ebe 00000000 00000000 00056f64 2**0
CONTENTS, READONLY, DEBUGGING
- 18 .stab 00000084 00000000 00000000 0002d8bc 2**2
+ 18 .stab 00000084 00000000 00000000 0005de24 2**2
CONTENTS, READONLY, DEBUGGING
- 19 .stabstr 00000117 00000000 00000000 0002d940 2**0
+ 19 .stabstr 00000117 00000000 00000000 0005dea8 2**0
CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
00000000 l d .init 00000000 .init
00000004 l d .vector 00000000 .vector
00000140 l d .text 00000000 .text
-00001f64 l d .fini 00000000 .fini
+00008930 l d .fini 00000000 .fini
20000000 l d .dalign 00000000 .dalign
-00001f64 l d .dlalign 00000000 .dlalign
+00008930 l d .dlalign 00000000 .dlalign
20000000 l d .data 00000000 .data
-20000098 l d .bss 00000000 .bss
+200001c0 l d .bss 00000000 .bss
20004800 l d .stack 00000000 .stack
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
@@ -81,38 +81,130 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 ch32l103_it.c
00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 system_ch32l103.c
+00000000 l df *ABS* 00000000 ch32l103_adc.c
00000000 l df *ABS* 00000000 ch32l103_dbgmcu.c
00000000 l df *ABS* 00000000 ch32l103_exti.c
00000000 l df *ABS* 00000000 ch32l103_gpio.c
00000000 l df *ABS* 00000000 ch32l103_misc.c
00000000 l df *ABS* 00000000 ch32l103_rcc.c
20000010 l O .data 00000010 PBHBPrescTable
-20000084 l O .data 00000004 ADCPrescTable
+200001ac l O .data 00000004 ADCPrescTable
+00000000 l df *ABS* 00000000 ch32l103_spi.c
00000000 l df *ABS* 00000000 ch32l103_tim.c
00000000 l df *ABS* 00000000 ch32l103_usart.c
+00000000 l df *ABS* 00000000 adc.c
+00000000 l df *ABS* 00000000 flash.c
00000000 l df *ABS* 00000000 gpio.c
+00000000 l df *ABS* 00000000 pwm.c
00000000 l df *ABS* 00000000 rs485.c
00000000 l df *ABS* 00000000 tim.c
00000000 l df *ABS* 00000000 timeSliceOffset.c
-200000b4 l O .bss 00000004 pTimeSliceList
+200001e8 l O .bss 00000004 pTimeSliceList
+00000000 l df *ABS* 00000000 ring_queue2.c
00000000 l df *ABS* 00000000 ring_queue.c
00000000 l df *ABS* 00000000 debug.c
-200000b8 l O .bss 00000002 p_ms
-200000ba l O .bss 00000002 p_us
-20000088 l O .data 00000004 curbrk.5007
+200001ec l O .bss 00000002 p_ms
+200001ee l O .bss 00000002 p_us
+200001b0 l O .data 00000004 curbrk.5007
+00000000 l df *ABS* 00000000 collect_Conversion.c
+00002134 l F .text 00000092 middleAverageFilter
+2000123c l O .bss 000000c8 CHG_buff
+20001304 l O .bss 000000c8 DSG_buff
+200001f0 l O .bss 00000004 P_CHG_CURR
+200001f4 l O .bss 00000004 P_DSG_CURR
+200001f8 l O .bss 00000004 P_PV1_VOLT_IN
+200001fc l O .bss 00000004 P_PV_VOLT_IN1
+20000200 l O .bss 00000004 P_PV_VOLT_OUT
+00000000 l df *ABS* 00000000 hy_protocol.c
+0000239a l F .text 00000002 HY_MsgProcFunc_chargingThresholdVoltageConfiguration
+0000239c l F .text 0000005e HY_matchHardwareID
+000023fa l F .text 00000002 HY_MsgProcFunc_modifyCommunicationID
+000023fc l F .text 00000002 HY_MsgProcFunc_checkMotherboardTemperature
+000023fe l F .text 00000002 HY_MsgProcFunc_chargingRangeVoltageQuery
+00002400 l F .text 00000002 HY_MsgProcFunc_chargingControlConfiguration
+00002402 l F .text 00000002 HY_MsgProcFunc_chargingControlQuery
+00002404 l F .text 00000002 HY_MsgProcFunc_configureProtocolType
+00002406 l F .text 00000002 HY_MsgProcFunc_queryControlBoxConfiguration
+00002408 l F .text 00000002 HY_MsgProcFunc_querySoftwareVersion
+0000240a l F .text 00000002 HY_MsgProcFunc_enterConfigurationMode
+0000240c l F .text 00000002 HY_MsgProcFunc_configureHardwareID
+0000240e l F .text 00000002 HY_MsgProcFunc_hardwareID_communicationIDQuery
+00002432 l F .text 000000bc HY_MsgProcFunc_resetInstruction
+000024ee l F .text 000000e0 HY_MsgProcFunc_sensorNumberInquiry
+000025ce l F .text 000000ea HY_MsgProcFunc_sensorNumberConfiguration
+000026b8 l F .text 000000b4 HY_MsgProcFunc_electricityStatistics
+0000276c l F .text 00000120 HY_MsgProcFunc_batteryStatus
+00000000 l df *ABS* 00000000 inflash.c
+00002b8c l F .text 00000034 configCheckFunc.constprop.1
+00000000 l df *ABS* 00000000 mppt_control.c
+00000000 l df *ABS* 00000000 sl_protocol.c
+00003222 l F .text 00000052 SL_MsgProcFunc_Write_Register
+00003274 l F .text 00000022 SL_ReadRegisterMPPTMode
+00003296 l F .text 00000022 SL_ReadRegisterDischargMosState
+000032b8 l F .text 00000036 SL_ReadRegisterHighSideMosTemperature
+000032ee l F .text 00000036 SL_ReadRegisterSolarOpenCircuitVoltage
+00003324 l F .text 00000036 SL_ReadRegisterDischargCurrent
+0000335a l F .text 00000036 SL_ReadRegisterChargCurrent
+00003390 l F .text 00000036 SL_ReadRegisterBatteryVoltage
+000033c6 l F .text 00000062 SL_MsgProcFunc_Registration_request
+00003428 l F .text 00000036 SL_MsgProcFunc_Broadcast_Scan
+00003542 l F .text 0000008c SL_MsgProcFunc_Remote_Upgrade
+000035ce l F .text 0000008c SL_MsgProcFunc_Update_Profile
+0000365a l F .text 00000192 SL_MsgProcFunc_Read_Register
+00000000 l df *ABS* 00000000 task.c
+20000204 l O .bss 00000004 currOne.6934
+20000208 l O .bss 00000004 currTwo.6936
+2000020c l O .bss 00000004 dutyRatio.6955
+20000210 l O .bss 00000004 enabBroadcastTimeFlag.6989
+20000214 l O .bss 00000001 flag.6923
+2000021c l O .bss 00000001 num.6933
+2000021d l O .bss 00000001 num.6943
+2000021e l O .bss 00000001 num.6948
+20000220 l O .bss 00000002 num.6954
+20000222 l O .bss 00000001 num.6960
+20000224 l O .bss 00000002 numLong.6949
+20000227 l O .bss 00000001 run_number.6978
+20000228 l O .bss 00000004 voltOne.6935
+200001b4 l O .data 00000004 temp.6924
+00000000 l df *ABS* 00000000 uart_dev.c
+000043cc l F .text 00000046 uart_putchar
+200015b8 l O .bss 000000c8 bat485_in_buff
+20001680 l O .bss 0000012c gw485_in_buff
+00000000 l df *ABS* 00000000 adddf3.c
+00000000 l df *ABS* 00000000 gedf2.c
+00000000 l df *ABS* 00000000 ledf2.c
+00000000 l df *ABS* 00000000 muldf3.c
+00000000 l df *ABS* 00000000 subdf3.c
+00000000 l df *ABS* 00000000 floatsidf.c
+00000000 l df *ABS* 00000000 addsf3.c
+00000000 l df *ABS* 00000000 divsf3.c
+00000000 l df *ABS* 00000000 eqsf2.c
+00000000 l df *ABS* 00000000 gesf2.c
+00000000 l df *ABS* 00000000 lesf2.c
+00000000 l df *ABS* 00000000 mulsf3.c
+00000000 l df *ABS* 00000000 subsf3.c
+00000000 l df *ABS* 00000000 fixunssfsi.c
+00000000 l df *ABS* 00000000 floatunsisf.c
+00000000 l df *ABS* 00000000 extendsfdf2.c
+00000000 l df *ABS* 00000000 truncdfsf2.c
+00000000 l df *ABS* 00000000 libgcc2.c
+00000000 l df *ABS* 00000000 memcpy.c
00000000 l df *ABS* 00000000 printf.c
00000000 l df *ABS* 00000000 puts.c
+00000000 l df *ABS* 00000000 rand.c
+00000000 l df *ABS* 00000000 strlcpy.c
00000000 l df *ABS* 00000000 wbuf.c
00000000 l df *ABS* 00000000 wsetup.c
00000000 l df *ABS* 00000000 fflush.c
00000000 l df *ABS* 00000000 findfp.c
-0000114c l F .text 00000066 std
+00007210 l F .text 00000066 std
00000000 l df *ABS* 00000000 fwalk.c
00000000 l df *ABS* 00000000 makebuf.c
+00000000 l df *ABS* 00000000 malloc.c
00000000 l df *ABS* 00000000 nano-mallocr.c
00000000 l df *ABS* 00000000 nano-mallocr.c
00000000 l df *ABS* 00000000 nano-vfprintf.c
-000015d2 l F .text 00000028 __sfputc_r
+000076ac l F .text 00000028 __sfputc_r
00000000 l df *ABS* 00000000 nano-vfprintf_i.c
00000000 l df *ABS* 00000000 sbrkr.c
00000000 l df *ABS* 00000000 stdio.c
@@ -129,204 +221,385 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 isatty.c
00000000 l df *ABS* 00000000 lseek.c
00000000 l df *ABS* 00000000 read.c
+00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 impure.c
-20000020 l O .data 00000060 impure_data
-00000000 l df *ABS* 00000000 uart_dev.c
+20000148 l O .data 00000060 impure_data
+00000000 l df *ABS* 00000000 parameter.c
00000000 l df *ABS* 00000000 reent.c
-00000aa8 g F .text 00000012 EXTI2_IRQHandler
-00001dbe g F .text 00000028 _isatty_r
-00000d22 g F .text 000000d4 _puts_r
-00001de6 g F .text 0000002c _lseek_r
-00000ce2 g F .text 00000040 printf
-20000880 g .data 00000000 __global_pointer$
+00001766 g F .text 00000086 EXTI2_IRQHandler
+20001508 g O .bss 00000010 g_dataJudgment
+00007ec0 g F .text 00000030 _isatty_r
+00001e36 g F .text 00000022 TimeSliceOffset_Start
+20001538 g O .bss 00000010 g_recvbroadcast
+000017ec g F .text 0000005a WORK_VOLT_INT_Init
+00006cc8 g F .text 000000d4 _puts_r
+00002f86 g F .text 00000046 MpptContorlChoice
+00007ef0 g F .text 00000034 _lseek_r
+00001be8 g F .text 0000005c TIM3_Int_Init
+0000345e g F .text 0000003e CheckFuncSL
+00001b42 g F .text 0000001a USARTx_SendByte
+00004412 g F .text 00000066 uart_dev_init
+00004384 g F .text 00000048 Task_sensorEnableBroadcast
+0000155c g F .text 00000052 SPI_Flash_Write_NoCheck
+000009de g F .text 0000000a GPIO_ReadOutputDataBit
+00006c88 g F .text 00000040 printf
+200009a8 g .data 00000000 __global_pointer$
00000148 g F .text 00000028 .hidden __riscv_save_8
-00000434 w .text 00000000 TIM1_CC_IRQHandler
-00001d08 g F .text 00000030 __sseek
-00001202 g F .text 00000066 __sinit
-00000e00 g F .text 000000bc __swbuf_r
+0000043c w .text 00000000 TIM1_CC_IRQHandler
+00007df2 g F .text 00000030 __sseek
+00001440 g F .text 0000004c SPI_Flash_Erase_Sector
+000072c6 g F .text 0000006c __sinit
+00000ec8 g F .text 00000004 SPI_I2S_SendData
+00006ec2 g F .text 000000bc __swbuf_r
0000024a g F .text 00000002 HardFault_Handler
-000011bc g F .text 00000046 __sfmoreglue
-00001e2c g F .text 00000002 __malloc_unlock
-00000be2 g F .text 0000002c InRingQueue
-00000434 w .text 00000000 USBPD_IRQHandler
+00007280 g F .text 00000046 __sfmoreglue
+00007f3e g F .text 00000002 __malloc_unlock
+00001ecc g F .text 0000002c InRingQueue
+0000043c w .text 00000000 USBPD_IRQHandler
00000194 g F .text 0000000c .hidden __riscv_restore_3
-00000b80 g F .text 0000000e SysTick_Handler
-00000434 w .text 00000000 PVD_IRQHandler
+20001568 g O .bss 00000010 m_WdiRunled
+00005df2 g F .text 000002b2 .hidden __divsf3
+00001c96 g F .text 00000058 TIM2_Int_Init
+000037ec g F .text 00000032 FRT_MsgHandler
+00001d8a g F .text 0000000e SysTick_Handler
+00000568 g F .text 0000000a ADC_StartCalibration
+0000453e g F .text 00000018 uart_dev_char_present
+00000ce4 g F .text 00000054 NVIC_Init
+0000401e g F .text 000000e8 Init
+0000043c w .text 00000000 PVD_IRQHandler
+000022aa g F .text 0000004c get_PV1_VOLT_IN
00000180 g F .text 00000020 .hidden __riscv_restore_10
+00002d24 g F .text 00000030 saveTotalPower
+00000ecc g F .text 00000004 SPI_I2S_ReceiveData
00000248 g F .text 00000002 NMI_Handler
-00000434 w .text 00000000 EXTI3_IRQHandler
+0000140a g F .text 0000000e SPI_Flash_Wait_Busy
+0000043c w .text 00000000 EXTI3_IRQHandler
00000148 g F .text 00000028 .hidden __riscv_save_11
-000004bc g F .text 00000006 DBGMCU_GetCHIPID
-00000a62 g F .text 0000000a USART_GetFlagStatus
-00001d94 g F .text 0000002a _fstat_r
-200000cc g O .bss 00000004 errno
-20000098 g .bss 00000000 _sbss
+0000087c g F .text 00000006 DBGMCU_GetCHIPID
+00003aee g F .text 00000060 Task_WdiRunled
+00004cbc g F .text 000000ae .hidden __gtdf2
+000011a4 g F .text 0000000a USART_GetFlagStatus
+00007e8e g F .text 00000032 _fstat_r
+200017ac g O .bss 00000004 errno
+000044ac g F .text 00000018 gw485_tx_enabla
+200001c0 g .bss 00000000 _sbss
00000800 g *ABS* 00000000 __stack_size
-00000c2e g F .text 00000054 USART_Printf_Init
-00000434 w .text 00000000 USBFS_IRQHandler
+00000652 g F .text 0000000a ADC_GetFlagStatus
+00001f84 g F .text 0000005a USART_Printf_Init
+0000457e g F .text 0000000e ring_queue_length
+00008058 g O .text 000001e2 mosTemperADC
+000064a6 g F .text 00000388 .hidden __subsf3
+0000043c w .text 00000000 USBFS_IRQHandler
00000194 g F .text 0000000c .hidden __riscv_restore_2
-000011b2 g F .text 0000000a _cleanup_r
-000005aa g F .text 0000012c GPIO_PinRemapConfig
-00000434 w .text 00000000 EXTI0_IRQHandler
-00000434 w .text 00000000 I2C2_EV_IRQHandler
-00000434 w .text 00000000 LPTIM_IRQHandler
-00000df6 g F .text 0000000a puts
-20000080 g O .data 00000004 SystemCoreClock
-00000a5a g F .text 00000008 USART_ReceiveData
-00001e66 g F .text 0000000c _fstat
+000044dc g F .text 00000062 uart_dev_write
+00002f30 g F .text 00000056 mppt_constantVoltageO
+00000fe4 g F .text 00000016 TIM_CtrlPWMOutputs
+00006bd6 g F .text 000000b2 memcpy
+00000546 g F .text 00000010 ADC_Cmd
+00007276 g F .text 0000000a _cleanup_r
+000009f6 g F .text 0000012c GPIO_PinRemapConfig
+00005a16 g F .text 00000072 .hidden __floatsidf
+00004d6a g F .text 000000b6 .hidden __ltdf2
+0000043c w .text 00000000 EXTI0_IRQHandler
+0000043c w .text 00000000 I2C2_EV_IRQHandler
+00000e5e g F .text 0000001e RCC_PB2PeriphResetCmd
+0000043c w .text 00000000 LPTIM_IRQHandler
+00001418 g F .text 00000028 SPI_FLASH_Write_Enable
+00004478 g F .text 0000001a bat485_tx_enabla
+200001d4 g O .bss 00000002 Calibrattion_Val
+00000fcc g F .text 00000018 TIM_Cmd
+000013d8 g F .text 00000032 SPI_Flash_ReadSR
+00006d9c g F .text 0000000c puts
+00001026 g F .text 00000016 TIM_OC4PreloadConfig
+200001a8 g O .data 00000004 SystemCoreClock
+0000119c g F .text 00000008 USART_ReceiveData
+00007526 g F .text 0000000a malloc
+000020a8 g F .text 00000062 adcChangeProportionalInit
+00007f84 g F .text 00000010 _fstat
+00002ed8 g F .text 00000058 mppt_constantVoltage
00000004 g .init 00000000 _einit
-00000976 g F .text 0000000c TIM_ClearITPendingBit
+00001082 g F .text 0000000c TIM_ClearITPendingBit
+00001052 g F .text 00000018 TIM_GetCounter
+00006186 g F .text 0000008c .hidden __lesf2
00000140 g F .text 00000030 .hidden __riscv_save_12
-000004ea g F .text 000000c0 GPIO_Init
-00000434 w .text 00000000 Break_Point_Handler
+00002046 g F .text 00000062 currBuffInit
+00000914 g F .text 000000c0 GPIO_Init
+00000d38 g F .text 00000014 RCC_ADCCLKConfig
+00001dca g F .text 0000003e TimeSliceOffset_Register
+0000043c w .text 00000000 Break_Point_Handler
+00002bf0 g F .text 0000010c checkFlashContent
+00002bc0 g F .text 00000014 save_config_info
00000180 g F .text 00000020 .hidden __riscv_restore_11
-200000bc g O .bss 00000004 g_bat485_uart3_handle
-200000a8 g O .bss 00000004 NVIC_Priority_Group
-00000434 w .text 00000000 SPI1_IRQHandler
-00000a3c g F .text 00000016 USART_Cmd
-00001c6a g F .text 0000002a _sbrk_r
-2000009c g O .bss 00000004 CHIPID
-00000434 w .text 00000000 TAMPER_IRQHandler
+2000022c g O .bss 00000004 g_bat485_uart3_handle
+200001d0 g O .bss 00000004 NVIC_Priority_Group
+0000043c w .text 00000000 SPI1_IRQHandler
+00000556 g F .text 0000000a ADC_ResetCalibration
+00001148 g F .text 00000016 USART_Cmd
+00007d4c g F .text 00000032 _sbrk_r
+200001c4 g O .bss 00000004 CHIPID
+0000043c w .text 00000000 TAMPER_IRQHandler
00000170 g F .text 0000000c .hidden __riscv_save_1
+00002bd4 g F .text 0000001c read_config_info
+000021c6 g F .text 0000004c get_CHG_CURR
+20001558 g O .bss 00000010 g_startMpptControl
+20000226 g O .bss 00000001 recvbroadcast_flag
00000194 g F .text 0000000c .hidden __riscv_restore_0
-00001e2e g F .text 0000002c _read_r
+00007f40 g F .text 00000034 _read_r
00000156 g F .text 0000001a .hidden __riscv_save_7
-00000434 w .text 00000000 Ecall_M_Mode_Handler
+00006952 g F .text 000000ac .hidden __extendsfdf2
+0000458c g F .text 00000730 .hidden __adddf3
+000060a4 g F .text 0000005c .hidden __nesf2
+0000043c w .text 00000000 Ecall_M_Mode_Handler
20004800 g .stack 00000000 _heap_end
-00001e72 g F .text 0000000c _isatty
-20000090 g O .data 00000004 _global_impure_ptr
+00004492 g F .text 0000001a bat485_tx_disenabla
+00007f94 g F .text 00000010 _isatty
+200000d8 g O .data 00000038 g_RegTblR
+00001e90 g F .text 0000002c InRingQueue2
+200001bc g O .data 00000004 _global_impure_ptr
0000018a g F .text 00000016 .hidden __riscv_restore_5
-20000098 g O .bss 00000002 ADC_Trim
-00000434 w .text 00000000 DMA1_Channel4_IRQHandler
-00000cbc g F .text 00000026 _sbrk
+200001c0 g O .bss 00000002 ADC_Trim
+00000ed0 g F .text 0000000a SPI_I2S_GetFlagStatus
+0000043c w .text 00000000 DMA1_Channel4_IRQHandler
+00000592 g F .text 000000b8 ADC_RegularChannelConfig
+0000201c g F .text 0000002a _sbrk
+00000686 g F .text 00000012 ADC_FIFO_Cmd
+0000064a g F .text 00000008 ADC_GetConversionValue
+0000349c g F .text 0000002c randomDelay
+00001ebc g F .text 00000010 InitRingQueue
+00001f1e g F .text 00000010 RingQueueLength
+0000170c g F .text 0000005a DSG_PROT_Init
+0000137e g F .text 0000005a SPI_ReadWriteByte
0000018a g F .text 00000016 .hidden __riscv_restore_6
-00000ac2 g F .text 00000042 USART3_IRQHandler
-000004e0 g F .text 0000000a EXTI_ClearITPendingBit
-00000434 w .text 00000000 RTC_IRQHandler
-200000d0 g .bss 00000000 _ebss
-00000a6c g F .text 0000003c USART_GetITStatus
-00000434 w .text 00000000 DMA1_Channel7_IRQHandler
-200000ac g O .bss 00000001 USART3_Rbuffer
-00000434 w .text 00000000 CAN1_RX1_IRQHandler
-00000c0e g F .text 00000020 Delay_Init
-00000940 g F .text 0000001e RCC_PB2PeriphClockCmd
-000006d6 g F .text 0000018e GPIO_IPD_Unused
-00000434 w .text 00000000 USBPDWakeUp_IRQHandler
-00000434 w .text 00000000 TIM4_IRQHandler
+00003176 g F .text 000000ac MpptContorl
+00001b5c g F .text 00000046 USART3_IRQHandler
+0000090a g F .text 0000000a EXTI_ClearITPendingBit
+0000225e g F .text 0000004c get_DSG_CURR
+0000043c w .text 00000000 RTC_IRQHandler
+00000572 g F .text 00000008 ADC_GetCalibrationStatus
+200017b0 g .bss 00000000 _ebss
+000011ae g F .text 0000003c USART_GetITStatus
+0000043c w .text 00000000 DMA1_Channel7_IRQHandler
+200001d8 g O .bss 00000001 USART3_Rbuffer
+0000057a g F .text 00000018 ADC_SoftwareStartConvCmd
+00000560 g F .text 00000008 ADC_GetResetCalibrationStatus
+0000043c w .text 00000000 CAN1_RX1_IRQHandler
+00003e0e g F .text 0000011e Task_impedanceCalculation
+00001f2e g F .text 00000020 Delay_Init
+2000142c g O .bss 00000078 g_otherParameter
+0000148c g F .text 00000068 SPI_Flash_Read
+00003c2a g F .text 00000140 Task_dataJudgment
+00001ef8 g F .text 00000026 OutRingQueue
+00000e22 g F .text 0000001e RCC_PB2PeriphClockCmd
+00000b4e g F .text 00000190 GPIO_IPD_Unused
+20001528 g O .bss 00000010 g_outputAgain
+00006100 g F .text 00000086 .hidden __gtsf2
+0000043c w .text 00000000 USBPDWakeUp_IRQHandler
+000009e8 g F .text 00000004 GPIO_SetBits
+0000043c w .text 00000000 TIM4_IRQHandler
+00004d6a g F .text 000000b6 .hidden __ledf2
+0000100c g F .text 0000001a TIM_ARRPreloadConfig
00000148 g F .text 00000028 .hidden __riscv_save_9
-00001ec8 g O .text 00000020 __sf_fake_stderr
+000009ec g F .text 0000000a GPIO_WriteBit
+00008894 g O .text 00000020 __sf_fake_stderr
+00001898 g F .text 00000048 PWM_GPIO_Configuration
00000156 g F .text 0000001a .hidden __riscv_save_4
-00000434 w .text 00000000 I2C1_EV_IRQHandler
-00000b04 g F .text 00000042 USART4_IRQHandler
-0000095e g F .text 00000018 TIM_GetITStatus
-0000086a g F .text 000000d6 RCC_GetClocksFreq
-00000434 w .text 00000000 DMA1_Channel6_IRQHandler
-00000bba g F .text 00000028 TimeSliceOffset_Produce
-000015fa g F .text 00000040 __sfputs_r
-200000a4 g O .bss 00000004 TS_Val
-00001e12 g F .text 00000018 memchr
-00000982 g F .text 000000ba USART_Init
-00001456 g F .text 000000a8 _free_r
-00000b46 g F .text 00000022 TIM3_IRQHandler
-00000434 w .text 00000000 RCC_IRQHandler
+0000043c w .text 00000000 I2C1_EV_IRQHandler
+00001ba2 g F .text 00000046 USART4_IRQHandler
+000019d2 g F .text 000000b2 GW_485_Init
+0000106a g F .text 00000018 TIM_GetITStatus
+00000d4c g F .text 000000d6 RCC_GetClocksFreq
+0000043c w .text 00000000 DMA1_Channel6_IRQHandler
+00006b68 g F .text 0000006e .hidden __clzsi2
+00001e58 g F .text 00000028 TimeSliceOffset_Produce
+000076d4 g F .text 00000042 __sfputs_r
+200001cc g O .bss 00000004 TS_Val
+00007f24 g F .text 00000018 memchr
+00004106 g F .text 00000062 Task_outputAgain
+0000108e g F .text 000000ba USART_Init
+00007530 g F .text 000000a8 _free_r
+00001c6c g F .text 0000002a TIM3_IRQHandler
+0000043c w .text 00000000 RCC_IRQHandler
+20001548 g O .bss 00000010 g_sensorEnableBroadcast
00000170 g F .text 0000000c .hidden __riscv_save_3
-00000434 w .text 00000000 TIM1_TRG_COM_IRQHandler
-00000434 w .text 00000000 DMA1_Channel1_IRQHandler
+0000043c w .text 00000000 TIM1_TRG_COM_IRQHandler
+0000043c w .text 00000000 DMA1_Channel1_IRQHandler
+0000166c g F .text 00000030 RUN_LED_Init
00000000 g .init 00000000 _start
-00001e7e g F .text 0000000c _lseek
-00000aba g F .text 00000008 EXTI15_10_IRQHandler
-00000434 w .text 00000000 ADC_IRQHandler
-200000a0 g O .bss 00000004 OPA_Trim
-00000434 w .text 00000000 DMA1_Channel8_IRQHandler
-00001d6c g F .text 00000028 _close_r
+00003d7a g F .text 00000010 Task_usartHY
+20001588 g O .bss 00000010 m_refreshRegister
+00006e00 g F .text 00000084 rand
+00007fa4 g F .text 00000010 _lseek
+200001e0 g O .bss 00000004 totalChargCapacity
+00000e40 g F .text 0000001e RCC_PB1PeriphClockCmd
+00001846 g F .text 00000052 EXTI15_10_IRQHandler
+00000ffa g F .text 00000012 TIM_ITConfig
+00006e84 g F .text 0000003e strlcpy
+0000043c w .text 00000000 ADC_IRQHandler
+0000115e g F .text 00000036 USART_ITConfig
+00000882 g F .text 0000006a EXTI_Init
+200001c8 g O .bss 00000004 OPA_Trim
+000060a4 g F .text 0000005c .hidden __eqsf2
+0000043c w .text 00000000 DMA1_Channel8_IRQHandler
+200013f4 g O .bss 00000038 g_controlParameter
+00007e5e g F .text 00000030 _close_r
20000000 g .dalign 00000000 _data_vma
-00000ebc g F .text 000000fc __swsetup_r
-00000434 w .text 00000000 EXTI9_5_IRQHandler
-00001268 g F .text 0000009c __sfp
+00004168 g F .text 000000f4 Task_excessiveLoad
+000016ce g F .text 0000003e POW_OUT_CON_Init
+00000f50 g F .text 0000007c TIM_OC4Init
+00006f7e g F .text 000000fc __swsetup_r
+0000043c w .text 00000000 EXTI9_5_IRQHandler
+00007332 g F .text 000000a0 __sfp
+00000b22 g F .text 0000002c GPIO_EXTILineConfig
+00004e20 g F .text 000004b8 .hidden __muldf3
00000148 g F .text 00000028 .hidden __riscv_save_10
-00001c94 g F .text 0000002c __sread
-00001e2a g F .text 00000002 __malloc_lock
+00007d7e g F .text 0000002c __sread
+20000110 g O .data 00000038 uart_devices
+00007f3c g F .text 00000002 __malloc_lock
0000018a g F .text 00000016 .hidden __riscv_restore_4
+00002212 g F .text 0000004c get_PV_VOLT_OUT
00000180 g F .text 00000020 .hidden __riscv_restore_8
-000010e8 g F .text 00000064 _fflush_r
+0000210a g F .text 0000002a Get_ConversionVal
+000071aa g F .text 00000066 _fflush_r
00000156 g F .text 0000001a .hidden __riscv_save_6
-000004c2 g F .text 0000001e EXTI_GetITStatus
-00000434 w .text 00000000 SPI2_IRQHandler
-00001ee8 g O .text 00000020 __sf_fake_stdin
+000008ec g F .text 0000001e EXTI_GetITStatus
+0000043c w .text 00000000 SPI2_IRQHandler
+000088b4 g O .text 00000020 __sf_fake_stdin
000001a0 g F .text 000000a8 memset
+00002410 g F .text 00000022 HY_CheckFunc
00000180 g F .text 00000020 .hidden __riscv_restore_9
0000018a g F .text 00000016 .hidden __riscv_restore_7
-0000024c g F .text 00000040 main
-00001d38 g F .text 00000006 __sclose
-000014fe g F .text 000000d4 _malloc_r
-00000434 w .text 00000000 DMA1_Channel5_IRQHandler
-00000434 w .text 00000000 EXTI4_IRQHandler
-00000434 w .text 00000000 USB_LP_CAN1_RX0_IRQHandler
-0000028c g F .text 00000104 SystemInit
-00000ce2 g F .text 00000040 iprintf
-200000b0 g O .bss 00000001 USART4_Rbuffer
-00000434 w .text 00000000 USB_HP_CAN1_TX_IRQHandler
+0000024c g F .text 00000046 main
+00001c44 g F .text 00000028 TIM3_Init
+00006da8 g F .text 00000058 srand
+000044c4 g F .text 00000018 gw485_tx_disenabla
+00006186 g F .text 0000008c .hidden __ltsf2
+00007e22 g F .text 00000006 __sclose
+000069fe g F .text 0000016a .hidden __truncdfsf2
+000075d8 g F .text 000000d4 _malloc_r
+00003d8a g F .text 00000084 Task_startMpptControl
+200013cc g O .bss 00000028 g_adcData
+000006a8 g F .text 000001d4 Get_CalibrationValue
+0000043c w .text 00000000 DMA1_Channel5_IRQHandler
+200015a8 g O .bss 00000010 m_usart
+0000043c w .text 00000000 EXTI4_IRQHandler
+00003f2c g F .text 000000f2 Task_softStart
+00001f4e g F .text 00000036 Delay_Ms
+0000043c w .text 00000000 USB_LP_CAN1_RX0_IRQHandler
+00006212 g F .text 00000294 .hidden __mulsf3
+0000103c g F .text 00000016 TIM_SetCompare4
+0000065c g F .text 00000018 ADC_BufferCmd
+00000eae g F .text 0000001a SPI_Cmd
+00000292 g F .text 00000106 SystemInit
+00000674 g F .text 00000012 ADC_DutyDelayCmd
+20001518 g O .bss 00000010 g_excessiveLoad
+000014f4 g F .text 00000068 SPI_Flash_Write_Page
+00006c88 g F .text 00000040 iprintf
+0000381e g F .text 000002d0 read_and_process_uart_data
+200001dc g O .bss 00000001 USART4_Rbuffer
+0000043c w .text 00000000 USB_HP_CAN1_TX_IRQHandler
+20001578 g O .bss 00000010 m_impedanceCalculation
+00008794 g O .text 00000100 .hidden __clz_tab
00000000 g .init 00000000 _sinit
-00000434 w .text 00000000 CMPWakeUp_IRQHandler
-00001d3e g F .text 0000002e _write_r
-00000434 w .text 00000000 DMA1_Channel3_IRQHandler
-000018be g F .text 0000010c _printf_common
-2000008c g O .data 00000004 _impure_ptr
-00000b8e g F .text 0000002c TIM1_UP_IRQHandler
-00000fb8 g F .text 00000130 __sflush_r
-00000434 w .text 00000000 LPTIMWakeUp_IRQHandler
-00000434 w .text 00000000 WWDG_IRQHandler
-00000434 w .text 00000000 Ecall_U_Mode_Handler
-00000b68 g F .text 00000018 TIM2_IRQHandler
+0000043c w .text 00000000 CMPWakeUp_IRQHandler
+0000288c g F .text 00000300 HY_read_and_process_uart_data
+00006100 g F .text 00000086 .hidden __gesf2
+00007e28 g F .text 00000036 _write_r
+0000043c w .text 00000000 DMA1_Channel3_IRQHandler
+0000799e g F .text 0000010c _printf_common
+200001b8 g O .data 00000004 _impure_ptr
+0000425c g F .text 00000128 Task_recvbroadcast
+00001d98 g F .text 00000032 TIM1_UP_IRQHandler
+0000707a g F .text 00000130 __sflush_r
+0000043c w .text 00000000 LPTIMWakeUp_IRQHandler
+0000043c w .text 00000000 WWDG_IRQHandler
+20001598 g O .bss 00000010 m_softStart
+00001e08 g F .text 0000002e TimeSliceOffset_Unregister
+0000043c w .text 00000000 Ecall_U_Mode_Handler
+00003b4e g F .text 000000dc Task_refreshRegister
+200000a8 g O .data 00000030 g_MsgTbl
+00000698 g F .text 00000010 ADC_Sample_ModeConfig
+00001d1c g F .text 0000006e TIM2_IRQHandler
+000022f6 g F .text 0000004c get_PV_VOLT_IN1
20005000 g .stack 00000000 _eusrstack
00000170 g F .text 0000000c .hidden __riscv_save_2
-00000434 w .text 00000000 SW_Handler
-00000434 w .text 00000000 TIM1_BRK_IRQHandler
-0000136e g F .text 00000058 __swhatbuf_r
-00000a52 g F .text 00000008 USART_SendData
-00000434 w .text 00000000 OPA_IRQHandler
-00000434 w .text 00000000 EXTI1_IRQHandler
+0000043c w .text 00000000 SW_Handler
+000004c8 g F .text 00000028 ADC_DeInit
+0000043c w .text 00000000 TIM1_BRK_IRQHandler
+0000743c g F .text 00000058 __swhatbuf_r
+000004f0 g F .text 00000056 ADC_Init
+00001194 g F .text 00000008 USART_SendData
+0000043c w .text 00000000 OPA_IRQHandler
+000034c8 g F .text 0000007a Check_485_bus_busy
+0000043c w .text 00000000 EXTI1_IRQHandler
00000156 g F .text 0000001a .hidden __riscv_save_5
-00000c82 g F .text 0000003a _write
-20000098 g .data 00000000 _edata
-200000d0 g .bss 00000000 _end
-00000434 w .text 00000000 RTCAlarm_IRQHandler
-00001f64 g .dlalign 00000000 _data_lma
-00000434 w .text 00000000 USART2_IRQHandler
-00001cc0 g F .text 00000048 __swrite
-0000163a g F .text 00000284 _vfiprintf_r
-00001304 g F .text 0000006a _fwalk_reent
-00000390 g F .text 000000a4 SystemCoreClockUpdate
-00000434 w .text 00000000 I2C2_ER_IRQHandler
-00000434 w .text 00000000 DMA1_Channel2_IRQHandler
-00001f08 g O .text 00000020 __sf_fake_stdout
+00001fde g F .text 0000003e _write
+200001c0 g .data 00000000 _edata
+200017b0 g .bss 00000000 _end
+200014a4 g O .bss 00000064 rs485_buff
+00000eda g F .text 00000076 TIM_TimeBaseInit
+0000043c w .text 00000000 RTCAlarm_IRQHandler
+00008930 g .dlalign 00000000 _data_lma
+0000043c w .text 00000000 USART2_IRQHandler
+00007daa g F .text 00000048 __swrite
+00001a84 g F .text 000000be BAT_485_Init
+000015ae g F .text 000000be SPI_Flash_Write
+00007716 g F .text 00000288 _vfiprintf_r
+000073d2 g F .text 0000006a _fwalk_reent
+00000398 g F .text 000000a4 SystemCoreClockUpdate
+00006884 g F .text 000000ce .hidden __floatunsisf
+00002cfc g F .text 00000028 saveLoopImpedance
+0000169c g F .text 00000032 WDI_INPUT_Init
+2000023c g O .bss 00001000 SPI_FLASH_BUF
+0000043c w .text 00000000 I2C2_ER_IRQHandler
+0000043c w .text 00000000 DMA1_Channel2_IRQHandler
+000018e0 g F .text 0000006c PWM_TIM_Configuration
+000088d4 g O .text 00000020 __sf_fake_stdout
20000000 g O .data 00000010 HBPrescTable
0000017c g F .text 00000024 .hidden __riscv_restore_12
-00001e8a g F .text 0000000c _read
-00000436 w .text 00000000 handle_reset
-00000434 w .text 00000000 CAN1_SCE_IRQHandler
-00000434 w .text 00000000 FLASH_IRQHandler
+00007fb4 g F .text 00000010 _read
+00002d54 g F .text 00000184 config_info_start
+00002fcc g F .text 000001aa MpptModeChoice
+0000043e w .text 00000000 handle_reset
+0000043c w .text 00000000 CAN1_SCE_IRQHandler
+00001e80 g F .text 00000010 InitRingQueue2
+0000682e g F .text 00000056 .hidden __fixunssfsi
+0000043c w .text 00000000 FLASH_IRQHandler
00000170 g F .text 0000000c .hidden __riscv_save_0
-00000434 w .text 00000000 USBFSWakeUp_IRQHandler
-00000434 w .text 00000000 USART1_IRQHandler
-000013c6 g F .text 00000090 __smakebuf_r
-000019ca g F .text 000002a0 _printf_i
-200000c8 g O .bss 00000004 __malloc_sbrk_start
-00000434 w .text 00000000 I2C1_ER_IRQHandler
-00000864 g F .text 00000006 NVIC_PriorityGroupConfig
-00000434 w .text 00000000 TKeyWakeUp_IRQHandler
-200000c4 g O .bss 00000004 __malloc_free_list
+0000043c w .text 00000000 USBFSWakeUp_IRQHandler
+20000218 g O .bss 00000004 g_recvBroadcastDevice
+00001cee g F .text 0000002e TIM2_Init
+0000043c w .text 00000000 USART1_IRQHandler
+00007494 g F .text 00000092 __smakebuf_r
+00007aaa g F .text 000002a2 _printf_i
+00004cbc g F .text 000000ae .hidden __gedf2
+20000238 g O .bss 00000004 __malloc_sbrk_start
+0000043c w .text 00000000 I2C1_ER_IRQHandler
+000012da g F .text 000000a4 SPI_Flash_Init
+00003d6a g F .text 00000010 Task_usartSL
+00000e7c g F .text 00000032 SPI_Init
+00000cde g F .text 00000006 NVIC_PriorityGroupConfig
+000011ea g F .text 000000f0 ADC_all_Init
+0000194c g F .text 00000086 Set_duty_ratio
+0000043c w .text 00000000 TKeyWakeUp_IRQHandler
+20000020 g O .data 00000088 g_hyMsgTbl
+20000234 g O .bss 00000004 __malloc_free_list
00000194 g F .text 0000000c .hidden __riscv_restore_1
-200000c0 g O .bss 00000004 g_gw485_uart4_handle
-0000163a g F .text 00000284 _vfprintf_r
-00001e5a g F .text 0000000c _close
+20000230 g O .bss 00000004 g_gw485_uart4_handle
+000052d8 g F .text 0000073e .hidden __subdf3
+00007716 g F .text 00000288 _vfprintf_r
+200001e4 g O .bss 00000004 totalElectricityConsumption
+000009d4 g F .text 0000000a GPIO_ReadInputDataBit
+00005a88 g F .text 0000036a .hidden __addsf3
+00002342 g F .text 00000058 get_MOSFET_Temper
+00007f74 g F .text 00000010 _close
+00004556 g F .text 00000028 uart_dev_in_char
Disassembly of section .init:
00000000 <_sinit>:
- 0: 4360006f j 436
+ 0: 43e0006f j 43e
Disassembly of section .vector:
@@ -338,127 +611,127 @@ Disassembly of section .vector:
12: 0000 unimp
14: 0000 unimp
16: 0000 unimp
- 18: 0434 addi a3,sp,520
+ 18: 043c addi a5,sp,520
...
22: 0000 unimp
- 24: 0434 addi a3,sp,520
+ 24: 043c addi a5,sp,520
26: 0000 unimp
- 28: 0434 addi a3,sp,520
+ 28: 043c addi a5,sp,520
...
32: 0000 unimp
- 34: 0b80 addi s0,sp,464
+ 34: 1d8a slli s11,s11,0x22
36: 0000 unimp
38: 0000 unimp
3a: 0000 unimp
- 3c: 0434 addi a3,sp,520
+ 3c: 043c addi a5,sp,520
3e: 0000 unimp
40: 0000 unimp
42: 0000 unimp
- 44: 0434 addi a3,sp,520
+ 44: 043c addi a5,sp,520
46: 0000 unimp
- 48: 0434 addi a3,sp,520
+ 48: 043c addi a5,sp,520
4a: 0000 unimp
- 4c: 0434 addi a3,sp,520
+ 4c: 043c addi a5,sp,520
4e: 0000 unimp
- 50: 0434 addi a3,sp,520
+ 50: 043c addi a5,sp,520
52: 0000 unimp
- 54: 0434 addi a3,sp,520
+ 54: 043c addi a5,sp,520
56: 0000 unimp
- 58: 0434 addi a3,sp,520
+ 58: 043c addi a5,sp,520
5a: 0000 unimp
- 5c: 0434 addi a3,sp,520
+ 5c: 043c addi a5,sp,520
5e: 0000 unimp
- 60: 0434 addi a3,sp,520
+ 60: 043c addi a5,sp,520
62: 0000 unimp
- 64: 0aa8 addi a0,sp,344
+ 64: 1766 slli a4,a4,0x39
66: 0000 unimp
- 68: 0434 addi a3,sp,520
+ 68: 043c addi a5,sp,520
6a: 0000 unimp
- 6c: 0434 addi a3,sp,520
+ 6c: 043c addi a5,sp,520
6e: 0000 unimp
- 70: 0434 addi a3,sp,520
+ 70: 043c addi a5,sp,520
72: 0000 unimp
- 74: 0434 addi a3,sp,520
+ 74: 043c addi a5,sp,520
76: 0000 unimp
- 78: 0434 addi a3,sp,520
+ 78: 043c addi a5,sp,520
7a: 0000 unimp
- 7c: 0434 addi a3,sp,520
+ 7c: 043c addi a5,sp,520
7e: 0000 unimp
- 80: 0434 addi a3,sp,520
+ 80: 043c addi a5,sp,520
82: 0000 unimp
- 84: 0434 addi a3,sp,520
+ 84: 043c addi a5,sp,520
86: 0000 unimp
- 88: 0434 addi a3,sp,520
+ 88: 043c addi a5,sp,520
8a: 0000 unimp
- 8c: 0434 addi a3,sp,520
+ 8c: 043c addi a5,sp,520
8e: 0000 unimp
- 90: 0434 addi a3,sp,520
+ 90: 043c addi a5,sp,520
92: 0000 unimp
- 94: 0434 addi a3,sp,520
+ 94: 043c addi a5,sp,520
96: 0000 unimp
- 98: 0434 addi a3,sp,520
+ 98: 043c addi a5,sp,520
9a: 0000 unimp
- 9c: 0434 addi a3,sp,520
+ 9c: 043c addi a5,sp,520
9e: 0000 unimp
- a0: 0434 addi a3,sp,520
+ a0: 043c addi a5,sp,520
a2: 0000 unimp
- a4: 0434 addi a3,sp,520
+ a4: 043c addi a5,sp,520
a6: 0000 unimp
- a8: 0b8e slli s7,s7,0x3
+ a8: 1d98 addi a4,sp,752
aa: 0000 unimp
- ac: 0434 addi a3,sp,520
+ ac: 043c addi a5,sp,520
ae: 0000 unimp
- b0: 0434 addi a3,sp,520
+ b0: 043c addi a5,sp,520
b2: 0000 unimp
- b4: 0b68 addi a0,sp,412
+ b4: 1d1c addi a5,sp,688
b6: 0000 unimp
- b8: 0b46 slli s6,s6,0x11
+ b8: 1c6c addi a1,sp,572
ba: 0000 unimp
- bc: 0434 addi a3,sp,520
+ bc: 043c addi a5,sp,520
be: 0000 unimp
- c0: 0434 addi a3,sp,520
+ c0: 043c addi a5,sp,520
c2: 0000 unimp
- c4: 0434 addi a3,sp,520
+ c4: 043c addi a5,sp,520
c6: 0000 unimp
- c8: 0434 addi a3,sp,520
+ c8: 043c addi a5,sp,520
ca: 0000 unimp
- cc: 0434 addi a3,sp,520
+ cc: 043c addi a5,sp,520
ce: 0000 unimp
- d0: 0434 addi a3,sp,520
+ d0: 043c addi a5,sp,520
d2: 0000 unimp
- d4: 0434 addi a3,sp,520
+ d4: 043c addi a5,sp,520
d6: 0000 unimp
- d8: 0434 addi a3,sp,520
+ d8: 043c addi a5,sp,520
da: 0000 unimp
- dc: 0434 addi a3,sp,520
+ dc: 043c addi a5,sp,520
de: 0000 unimp
- e0: 0ac2 slli s5,s5,0x10
+ e0: 1b5c addi a5,sp,436
e2: 0000 unimp
- e4: 0aba slli s5,s5,0xe
+ e4: 1846 slli a6,a6,0x31
e6: 0000 unimp
- e8: 0434 addi a3,sp,520
+ e8: 043c addi a5,sp,520
ea: 0000 unimp
- ec: 0434 addi a3,sp,520
+ ec: 043c addi a5,sp,520
ee: 0000 unimp
- f0: 0434 addi a3,sp,520
+ f0: 043c addi a5,sp,520
f2: 0000 unimp
- f4: 0434 addi a3,sp,520
+ f4: 043c addi a5,sp,520
f6: 0000 unimp
- f8: 0b04 addi s1,sp,400
+ f8: 1ba2 slli s7,s7,0x28
fa: 0000 unimp
- fc: 0434 addi a3,sp,520
+ fc: 043c addi a5,sp,520
fe: 0000 unimp
- 100: 0434 addi a3,sp,520
+ 100: 043c addi a5,sp,520
102: 0000 unimp
- 104: 0434 addi a3,sp,520
+ 104: 043c addi a5,sp,520
106: 0000 unimp
- 108: 0434 addi a3,sp,520
+ 108: 043c addi a5,sp,520
10a: 0000 unimp
- 10c: 0434 addi a3,sp,520
+ 10c: 043c addi a5,sp,520
10e: 0000 unimp
- 110: 0434 addi a3,sp,520
+ 110: 043c addi a5,sp,520
112: 0000 unimp
- 114: 0434 addi a3,sp,520
+ 114: 043c addi a5,sp,520
...
Disassembly of section .text:
@@ -592,2940 +865,11645 @@ Disassembly of section .text:
0000024c :
24c: f25ff2ef jal t0,170 <__riscv_save_0>
250: 4505 li a0,1
- 252: 2d09 jal 864
- 254: 2a35 jal 390
- 256: 1b9000ef jal ra,c0e
- 25a: 6571 lui a0,0x1c
- 25c: 20050513 addi a0,a0,512 # 1c200 <_data_lma+0x1a29c>
- 260: 1cf000ef jal ra,c2e
- 264: 200007b7 lui a5,0x20000
- 268: 0807a583 lw a1,128(a5) # 20000080
- 26c: 00002537 lui a0,0x2
- 270: e9850513 addi a0,a0,-360 # 1e98 <_read+0xe>
- 274: 26f000ef jal ra,ce2
- 278: 2491 jal 4bc
- 27a: 85aa mv a1,a0
- 27c: 00002537 lui a0,0x2
- 280: ea850513 addi a0,a0,-344 # 1ea8 <_read+0x1e>
- 284: 25f000ef jal ra,ce2
- 288: 4501 li a0,0
- 28a: b729 j 194 <__riscv_restore_0>
+ 252: 28d000ef jal ra,cde
+ 256: 2289 jal 398
+ 258: 4d7010ef jal ra,1f2e
+ 25c: 6571 lui a0,0x1c
+ 25e: 20050513 addi a0,a0,512 # 1c200 <_data_lma+0x138d0>
+ 262: 523010ef jal ra,1f84
+ 266: 200007b7 lui a5,0x20000
+ 26a: 1a87a583 lw a1,424(a5) # 200001a8
+ 26e: 00008537 lui a0,0x8
+ 272: fc450513 addi a0,a0,-60 # 7fc4 <_read+0x10>
+ 276: 213060ef jal ra,6c88
+ 27a: 2509 jal 87c
+ 27c: 85aa mv a1,a0
+ 27e: 00008537 lui a0,0x8
+ 282: fd450513 addi a0,a0,-44 # 7fd4 <_read+0x20>
+ 286: 203060ef jal ra,6c88
+ 28a: 595030ef jal ra,401e
+ 28e: 4501 li a0,0
+ 290: b711 j 194 <__riscv_restore_0>
-0000028c :
- 28c: ee5ff2ef jal t0,170 <__riscv_save_0>
- 290: 40021437 lui s0,0x40021
- 294: 401c lw a5,0(s0)
- 296: 08ff0737 lui a4,0x8ff0
- 29a: 1141 addi sp,sp,-16
- 29c: 0017e793 ori a5,a5,1
- 2a0: c01c sw a5,0(s0)
- 2a2: 405c lw a5,4(s0)
- 2a4: 8ff9 and a5,a5,a4
- 2a6: c05c sw a5,4(s0)
- 2a8: 401c lw a5,0(s0)
- 2aa: fef70737 lui a4,0xfef70
- 2ae: 176d addi a4,a4,-5
- 2b0: 8ff9 and a5,a5,a4
- 2b2: c01c sw a5,0(s0)
- 2b4: 401c lw a5,0(s0)
- 2b6: fffc0737 lui a4,0xfffc0
- 2ba: 177d addi a4,a4,-1
- 2bc: 8ff9 and a5,a5,a4
- 2be: c01c sw a5,0(s0)
- 2c0: 405c lw a5,4(s0)
- 2c2: ff010737 lui a4,0xff010
- 2c6: 177d addi a4,a4,-1
- 2c8: 8ff9 and a5,a5,a4
- 2ca: c05c sw a5,4(s0)
- 2cc: 009f07b7 lui a5,0x9f0
- 2d0: c41c sw a5,8(s0)
- 2d2: 2111 jal 6d6
- 2d4: c402 sw zero,8(sp)
- 2d6: c602 sw zero,12(sp)
- 2d8: 400227b7 lui a5,0x40022
- 2dc: 4705 li a4,1
- 2de: c398 sw a4,0(a5)
- 2e0: 401c lw a5,0(s0)
- 2e2: 6741 lui a4,0x10
- 2e4: 400216b7 lui a3,0x40021
- 2e8: 8fd9 or a5,a5,a4
- 2ea: c01c sw a5,0(s0)
- 2ec: 00020637 lui a2,0x20
- 2f0: 6705 lui a4,0x1
- 2f2: 429c lw a5,0(a3)
- 2f4: 8ff1 and a5,a5,a2
- 2f6: c63e sw a5,12(sp)
- 2f8: 47a2 lw a5,8(sp)
- 2fa: 0785 addi a5,a5,1
- 2fc: c43e sw a5,8(sp)
- 2fe: 47b2 lw a5,12(sp)
- 300: e781 bnez a5,308
- 302: 47a2 lw a5,8(sp)
- 304: fee797e3 bne a5,a4,2f2
- 308: 400217b7 lui a5,0x40021
- 30c: 439c lw a5,0(a5)
- 30e: 00e79713 slli a4,a5,0xe
- 312: 06075763 bgez a4,380
- 316: 4785 li a5,1
- 318: c63e sw a5,12(sp)
- 31a: 4732 lw a4,12(sp)
- 31c: 4785 li a5,1
- 31e: 06f71363 bne a4,a5,384
- 322: 400217b7 lui a5,0x40021
- 326: 43d8 lw a4,4(a5)
- 328: ffc106b7 lui a3,0xffc10
- 32c: 16fd addi a3,a3,-1
- 32e: c3d8 sw a4,4(a5)
- 330: 43d8 lw a4,4(a5)
- 332: c3d8 sw a4,4(a5)
- 334: 43d8 lw a4,4(a5)
- 336: 40076713 ori a4,a4,1024
+00000292 :
+ 292: edfff2ef jal t0,170 <__riscv_save_0>
+ 296: 40021437 lui s0,0x40021
+ 29a: 401c lw a5,0(s0)
+ 29c: 08ff0737 lui a4,0x8ff0
+ 2a0: 1141 addi sp,sp,-16
+ 2a2: 0017e793 ori a5,a5,1
+ 2a6: c01c sw a5,0(s0)
+ 2a8: 405c lw a5,4(s0)
+ 2aa: 8ff9 and a5,a5,a4
+ 2ac: c05c sw a5,4(s0)
+ 2ae: 401c lw a5,0(s0)
+ 2b0: fef70737 lui a4,0xfef70
+ 2b4: 176d addi a4,a4,-5
+ 2b6: 8ff9 and a5,a5,a4
+ 2b8: c01c sw a5,0(s0)
+ 2ba: 401c lw a5,0(s0)
+ 2bc: fffc0737 lui a4,0xfffc0
+ 2c0: 177d addi a4,a4,-1
+ 2c2: 8ff9 and a5,a5,a4
+ 2c4: c01c sw a5,0(s0)
+ 2c6: 405c lw a5,4(s0)
+ 2c8: ff010737 lui a4,0xff010
+ 2cc: 177d addi a4,a4,-1
+ 2ce: 8ff9 and a5,a5,a4
+ 2d0: c05c sw a5,4(s0)
+ 2d2: 009f07b7 lui a5,0x9f0
+ 2d6: c41c sw a5,8(s0)
+ 2d8: 077000ef jal ra,b4e
+ 2dc: c402 sw zero,8(sp)
+ 2de: c602 sw zero,12(sp)
+ 2e0: 400227b7 lui a5,0x40022
+ 2e4: 4705 li a4,1
+ 2e6: c398 sw a4,0(a5)
+ 2e8: 401c lw a5,0(s0)
+ 2ea: 6741 lui a4,0x10
+ 2ec: 400216b7 lui a3,0x40021
+ 2f0: 8fd9 or a5,a5,a4
+ 2f2: c01c sw a5,0(s0)
+ 2f4: 00020637 lui a2,0x20
+ 2f8: 6705 lui a4,0x1
+ 2fa: 429c lw a5,0(a3)
+ 2fc: 8ff1 and a5,a5,a2
+ 2fe: c63e sw a5,12(sp)
+ 300: 47a2 lw a5,8(sp)
+ 302: 0785 addi a5,a5,1
+ 304: c43e sw a5,8(sp)
+ 306: 47b2 lw a5,12(sp)
+ 308: e781 bnez a5,310
+ 30a: 47a2 lw a5,8(sp)
+ 30c: fee797e3 bne a5,a4,2fa
+ 310: 400217b7 lui a5,0x40021
+ 314: 439c lw a5,0(a5)
+ 316: 00e79713 slli a4,a5,0xe
+ 31a: 06075763 bgez a4,388
+ 31e: 4785 li a5,1
+ 320: c63e sw a5,12(sp)
+ 322: 4732 lw a4,12(sp)
+ 324: 4785 li a5,1
+ 326: 06f71363 bne a4,a5,38c
+ 32a: 400217b7 lui a5,0x40021
+ 32e: 43d8 lw a4,4(a5)
+ 330: ffc106b7 lui a3,0xffc10
+ 334: 16fd addi a3,a3,-1
+ 336: c3d8 sw a4,4(a5)
+ 338: 43d8 lw a4,4(a5)
33a: c3d8 sw a4,4(a5)
33c: 43d8 lw a4,4(a5)
- 33e: 8f75 and a4,a4,a3
- 340: c3d8 sw a4,4(a5)
- 342: 43d8 lw a4,4(a5)
- 344: 001106b7 lui a3,0x110
- 348: 8f55 or a4,a4,a3
- 34a: c3d8 sw a4,4(a5)
- 34c: 4398 lw a4,0(a5)
- 34e: 010006b7 lui a3,0x1000
- 352: 8f55 or a4,a4,a3
- 354: c398 sw a4,0(a5)
- 356: 4398 lw a4,0(a5)
- 358: 00671693 slli a3,a4,0x6
- 35c: fe06dde3 bgez a3,356
- 360: 43d8 lw a4,4(a5)
- 362: 400216b7 lui a3,0x40021
- 366: 9b71 andi a4,a4,-4
- 368: c3d8 sw a4,4(a5)
- 36a: 43d8 lw a4,4(a5)
- 36c: 00276713 ori a4,a4,2
+ 33e: 40076713 ori a4,a4,1024
+ 342: c3d8 sw a4,4(a5)
+ 344: 43d8 lw a4,4(a5)
+ 346: 8f75 and a4,a4,a3
+ 348: c3d8 sw a4,4(a5)
+ 34a: 43d8 lw a4,4(a5)
+ 34c: 001106b7 lui a3,0x110
+ 350: 8f55 or a4,a4,a3
+ 352: c3d8 sw a4,4(a5)
+ 354: 4398 lw a4,0(a5)
+ 356: 010006b7 lui a3,0x1000
+ 35a: 8f55 or a4,a4,a3
+ 35c: c398 sw a4,0(a5)
+ 35e: 4398 lw a4,0(a5)
+ 360: 00671693 slli a3,a4,0x6
+ 364: fe06dde3 bgez a3,35e
+ 368: 43d8 lw a4,4(a5)
+ 36a: 400216b7 lui a3,0x40021
+ 36e: 9b71 andi a4,a4,-4
370: c3d8 sw a4,4(a5)
- 372: 4721 li a4,8
- 374: 42dc lw a5,4(a3)
- 376: 8bb1 andi a5,a5,12
- 378: fee79ee3 bne a5,a4,374
- 37c: 0141 addi sp,sp,16
- 37e: bd19 j 194 <__riscv_restore_0>
- 380: c602 sw zero,12(sp)
- 382: bf61 j 31a
- 384: 40022737 lui a4,0x40022
- 388: 431c lw a5,0(a4)
- 38a: 9bf1 andi a5,a5,-4
- 38c: c31c sw a5,0(a4)
- 38e: b7fd j 37c
+ 372: 43d8 lw a4,4(a5)
+ 374: 00276713 ori a4,a4,2
+ 378: c3d8 sw a4,4(a5)
+ 37a: 4721 li a4,8
+ 37c: 42dc lw a5,4(a3)
+ 37e: 8bb1 andi a5,a5,12
+ 380: fee79ee3 bne a5,a4,37c
+ 384: 0141 addi sp,sp,16
+ 386: b539 j 194 <__riscv_restore_0>
+ 388: c602 sw zero,12(sp)
+ 38a: bf61 j 322
+ 38c: 40022737 lui a4,0x40022
+ 390: 431c lw a5,0(a4)
+ 392: 9bf1 andi a5,a5,-4
+ 394: c31c sw a5,0(a4)
+ 396: b7fd j 384
-00000390 :
- 390: 400216b7 lui a3,0x40021
- 394: 42dc lw a5,4(a3)
- 396: 20000737 lui a4,0x20000
- 39a: 4611 li a2,4
- 39c: 8bb1 andi a5,a5,12
- 39e: 08070713 addi a4,a4,128 # 20000080
- 3a2: 02c78f63 beq a5,a2,3e0
- 3a6: 4621 li a2,8
- 3a8: 04c78163 beq a5,a2,3ea
- 3ac: eb95 bnez a5,3e0
- 3ae: 429c lw a5,0(a3)
- 3b0: 8b91 andi a5,a5,4
- 3b2: c79d beqz a5,3e0
- 3b4: 000f47b7 lui a5,0xf4
- 3b8: 24078793 addi a5,a5,576 # f4240 <_data_lma+0xf22dc>
- 3bc: c31c sw a5,0(a4)
- 3be: 400217b7 lui a5,0x40021
- 3c2: 43dc lw a5,4(a5)
- 3c4: 8391 srli a5,a5,0x4
- 3c6: 00f7f693 andi a3,a5,15
- 3ca: 200007b7 lui a5,0x20000
- 3ce: 00078793 mv a5,a5
- 3d2: 97b6 add a5,a5,a3
- 3d4: 2394 lbu a3,0(a5)
- 3d6: 431c lw a5,0(a4)
- 3d8: 00d7d7b3 srl a5,a5,a3
- 3dc: c31c sw a5,0(a4)
- 3de: 8082 ret
- 3e0: 007a17b7 lui a5,0x7a1
- 3e4: 20078793 addi a5,a5,512 # 7a1200 <_data_lma+0x79f29c>
- 3e8: bfd1 j 3bc
- 3ea: 42dc lw a5,4(a3)
- 3ec: 42d4 lw a3,4(a3)
- 3ee: 6641 lui a2,0x10
- 3f0: 83c9 srli a5,a5,0x12
- 3f2: 8bbd andi a5,a5,15
- 3f4: 8ef1 and a3,a3,a2
- 3f6: 0789 addi a5,a5,2
- 3f8: 4645 li a2,17
- 3fa: 00c79363 bne a5,a2,400
- 3fe: 47c9 li a5,18
- 400: ee81 bnez a3,418
- 402: 400246b7 lui a3,0x40024
- 406: 8006a683 lw a3,-2048(a3) # 40023800 <_eusrstack+0x2001e800>
- 40a: 8ac1 andi a3,a3,16
- 40c: ce89 beqz a3,426
- 40e: 007a16b7 lui a3,0x7a1
- 412: 20068693 addi a3,a3,512 # 7a1200 <_data_lma+0x79f29c>
- 416: a821 j 42e
- 418: 400216b7 lui a3,0x40021
- 41c: 42d4 lw a3,4(a3)
- 41e: 00e69613 slli a2,a3,0xe
- 422: fe0656e3 bgez a2,40e
- 426: 003d16b7 lui a3,0x3d1
- 42a: 90068693 addi a3,a3,-1792 # 3d0900 <_data_lma+0x3ce99c>
- 42e: 02d787b3 mul a5,a5,a3
- 432: b769 j 3bc
+00000398 :
+ 398: 400216b7 lui a3,0x40021
+ 39c: 42dc lw a5,4(a3)
+ 39e: 20000737 lui a4,0x20000
+ 3a2: 4611 li a2,4
+ 3a4: 8bb1 andi a5,a5,12
+ 3a6: 1a870713 addi a4,a4,424 # 200001a8
+ 3aa: 02c78f63 beq a5,a2,3e8
+ 3ae: 4621 li a2,8
+ 3b0: 04c78163 beq a5,a2,3f2
+ 3b4: eb95 bnez a5,3e8
+ 3b6: 429c lw a5,0(a3)
+ 3b8: 8b91 andi a5,a5,4
+ 3ba: c79d beqz a5,3e8
+ 3bc: 000f47b7 lui a5,0xf4
+ 3c0: 24078793 addi a5,a5,576 # f4240 <_data_lma+0xeb910>
+ 3c4: c31c sw a5,0(a4)
+ 3c6: 400217b7 lui a5,0x40021
+ 3ca: 43dc lw a5,4(a5)
+ 3cc: 8391 srli a5,a5,0x4
+ 3ce: 00f7f693 andi a3,a5,15
+ 3d2: 200007b7 lui a5,0x20000
+ 3d6: 00078793 mv a5,a5
+ 3da: 97b6 add a5,a5,a3
+ 3dc: 2394 lbu a3,0(a5)
+ 3de: 431c lw a5,0(a4)
+ 3e0: 00d7d7b3 srl a5,a5,a3
+ 3e4: c31c sw a5,0(a4)
+ 3e6: 8082 ret
+ 3e8: 007a17b7 lui a5,0x7a1
+ 3ec: 20078793 addi a5,a5,512 # 7a1200 <_data_lma+0x7988d0>
+ 3f0: bfd1 j 3c4
+ 3f2: 42dc lw a5,4(a3)
+ 3f4: 42d4 lw a3,4(a3)
+ 3f6: 6641 lui a2,0x10
+ 3f8: 83c9 srli a5,a5,0x12
+ 3fa: 8bbd andi a5,a5,15
+ 3fc: 8ef1 and a3,a3,a2
+ 3fe: 0789 addi a5,a5,2
+ 400: 4645 li a2,17
+ 402: 00c79363 bne a5,a2,408
+ 406: 47c9 li a5,18
+ 408: ee81 bnez a3,420
+ 40a: 400246b7 lui a3,0x40024
+ 40e: 8006a683 lw a3,-2048(a3) # 40023800 <_eusrstack+0x2001e800>
+ 412: 8ac1 andi a3,a3,16
+ 414: ce89 beqz a3,42e
+ 416: 007a16b7 lui a3,0x7a1
+ 41a: 20068693 addi a3,a3,512 # 7a1200 <_data_lma+0x7988d0>
+ 41e: a821 j 436
+ 420: 400216b7 lui a3,0x40021
+ 424: 42d4 lw a3,4(a3)
+ 426: 00e69613 slli a2,a3,0xe
+ 42a: fe0656e3 bgez a2,416
+ 42e: 003d16b7 lui a3,0x3d1
+ 432: 90068693 addi a3,a3,-1792 # 3d0900 <_data_lma+0x3c7fd0>
+ 436: 02d787b3 mul a5,a5,a3
+ 43a: b769 j 3c4
-00000434 :
- 434: a001 j 434
+0000043c :
+ 43c: a001 j 43c
-00000436 :
- 436: 20000197 auipc gp,0x20000
- 43a: 44a18193 addi gp,gp,1098 # 20000880 <__global_pointer$>
- 43e: 20005117 auipc sp,0x20005
- 442: bc210113 addi sp,sp,-1086 # 20005000 <_eusrstack>
- 446: 00002517 auipc a0,0x2
- 44a: b1e50513 addi a0,a0,-1250 # 1f64 <_data_lma>
- 44e: 20000597 auipc a1,0x20000
- 452: bb258593 addi a1,a1,-1102 # 20000000 <_data_vma>
- 456: 81818613 addi a2,gp,-2024 # 20000098 <_edata>
- 45a: 00c5fa63 bgeu a1,a2,46e
- 45e: 00052283 lw t0,0(a0)
- 462: 0055a023 sw t0,0(a1)
- 466: 0511 addi a0,a0,4
- 468: 0591 addi a1,a1,4
- 46a: fec5eae3 bltu a1,a2,45e
- 46e: 81818513 addi a0,gp,-2024 # 20000098 <_edata>
- 472: 85018593 addi a1,gp,-1968 # 200000d0 <_ebss>
- 476: 00b57763 bgeu a0,a1,484
- 47a: 00052023 sw zero,0(a0)
- 47e: 0511 addi a0,a0,4
- 480: feb56de3 bltu a0,a1,47a
- 484: 42fd li t0,31
- 486: bc029073 csrw 0xbc0,t0
- 48a: 428d li t0,3
- 48c: 80429073 csrw 0x804,t0
- 490: 08800293 li t0,136
- 494: 30029073 csrw mstatus,t0
- 498: 00000297 auipc t0,0x0
- 49c: b6c28293 addi t0,t0,-1172 # 4 <_einit>
- 4a0: 0032e293 ori t0,t0,3
- 4a4: 30529073 csrw mtvec,t0
- 4a8: de5ff0ef jal ra,28c
- 4ac: 00000297 auipc t0,0x0
- 4b0: da028293 addi t0,t0,-608 # 24c
- 4b4: 34129073 csrw mepc,t0
- 4b8: 30200073 mret
+0000043e :
+ 43e: 20000197 auipc gp,0x20000
+ 442: 56a18193 addi gp,gp,1386 # 200009a8 <__global_pointer$>
+ 446: 20005117 auipc sp,0x20005
+ 44a: bba10113 addi sp,sp,-1094 # 20005000 <_eusrstack>
+ 44e: 00008517 auipc a0,0x8
+ 452: 4e250513 addi a0,a0,1250 # 8930 <_data_lma>
+ 456: 20000597 auipc a1,0x20000
+ 45a: baa58593 addi a1,a1,-1110 # 20000000 <_data_vma>
+ 45e: 81818613 addi a2,gp,-2024 # 200001c0 <_edata>
+ 462: 00c5fa63 bgeu a1,a2,476
+ 466: 00052283 lw t0,0(a0)
+ 46a: 0055a023 sw t0,0(a1)
+ 46e: 0511 addi a0,a0,4
+ 470: 0591 addi a1,a1,4
+ 472: fec5eae3 bltu a1,a2,466
+ 476: 81818513 addi a0,gp,-2024 # 200001c0 <_edata>
+ 47a: 20001597 auipc a1,0x20001
+ 47e: 33658593 addi a1,a1,822 # 200017b0 <_ebss>
+ 482: 00b57763 bgeu a0,a1,490
+ 486: 00052023 sw zero,0(a0)
+ 48a: 0511 addi a0,a0,4
+ 48c: feb56de3 bltu a0,a1,486
+ 490: 42fd li t0,31
+ 492: bc029073 csrw 0xbc0,t0
+ 496: 428d li t0,3
+ 498: 80429073 csrw 0x804,t0
+ 49c: 08800293 li t0,136
+ 4a0: 30029073 csrw mstatus,t0
+ 4a4: 00000297 auipc t0,0x0
+ 4a8: b6028293 addi t0,t0,-1184 # 4 <_einit>
+ 4ac: 0032e293 ori t0,t0,3
+ 4b0: 30529073 csrw mtvec,t0
+ 4b4: ddfff0ef jal ra,292
+ 4b8: 00000297 auipc t0,0x0
+ 4bc: d9428293 addi t0,t0,-620 # 24c
+ 4c0: 34129073 csrw mepc,t0
+ 4c4: 30200073 mret
-000004bc :
- 4bc: 81c1a503 lw a0,-2020(gp) # 2000009c
- 4c0: 8082 ret
+000004c8 :
+ 4c8: 400127b7 lui a5,0x40012
+ 4cc: 40078793 addi a5,a5,1024 # 40012400 <_eusrstack+0x2000d400>
+ 4d0: 00f51f63 bne a0,a5,4ee
+ 4d4: c9dff2ef jal t0,170 <__riscv_save_0>
+ 4d8: 4585 li a1,1
+ 4da: 20000513 li a0,512
+ 4de: 181000ef jal ra,e5e
+ 4e2: 4581 li a1,0
+ 4e4: 20000513 li a0,512
+ 4e8: 177000ef jal ra,e5e
+ 4ec: b165 j 194 <__riscv_restore_0>
+ 4ee: 8082 ret
-000004c2 :
- 4c2: 400107b7 lui a5,0x40010
- 4c6: 40078713 addi a4,a5,1024 # 40010400 <_eusrstack+0x2000b400>
- 4ca: 4007a783 lw a5,1024(a5)
- 4ce: 4b58 lw a4,20(a4)
- 4d0: 8f69 and a4,a4,a0
- 4d2: c709 beqz a4,4dc
- 4d4: 8d7d and a0,a0,a5
- 4d6: 00a03533 snez a0,a0
- 4da: 8082 ret
- 4dc: 4501 li a0,0
- 4de: 8082 ret
+000004f0 :
+ 4f0: 415c lw a5,4(a0)
+ 4f2: e0f10737 lui a4,0xe0f10
+ 4f6: eff70713 addi a4,a4,-257 # e0f0feff <_eusrstack+0xc0f0aeff>
+ 4fa: 4d94 lw a3,24(a1)
+ 4fc: 8f7d and a4,a4,a5
+ 4fe: 419c lw a5,0(a1)
+ 500: 8fd5 or a5,a5,a3
+ 502: 4dd4 lw a3,28(a1)
+ 504: 8fd5 or a5,a5,a3
+ 506: 41d4 lw a3,4(a1)
+ 508: 06a2 slli a3,a3,0x8
+ 50a: 8fd5 or a5,a5,a3
+ 50c: 8fd9 or a5,a5,a4
+ 50e: c15c sw a5,4(a0)
+ 510: 451c lw a5,8(a0)
+ 512: fff1f737 lui a4,0xfff1f
+ 516: 7fd70713 addi a4,a4,2045 # fff1f7fd <_eusrstack+0xdff1a7fd>
+ 51a: 45d4 lw a3,12(a1)
+ 51c: 8f7d and a4,a4,a5
+ 51e: 499c lw a5,16(a1)
+ 520: 8fd5 or a5,a5,a3
+ 522: 4594 lw a3,8(a1)
+ 524: 0686 slli a3,a3,0x1
+ 526: 8fd5 or a5,a5,a3
+ 528: 8fd9 or a5,a5,a4
+ 52a: c51c sw a5,8(a0)
+ 52c: 555c lw a5,44(a0)
+ 52e: ff100737 lui a4,0xff100
+ 532: 177d addi a4,a4,-1
+ 534: 8f7d and a4,a4,a5
+ 536: 29dc lbu a5,20(a1)
+ 538: 17fd addi a5,a5,-1
+ 53a: 0ff7f793 andi a5,a5,255
+ 53e: 07d2 slli a5,a5,0x14
+ 540: 8fd9 or a5,a5,a4
+ 542: d55c sw a5,44(a0)
+ 544: 8082 ret
-000004e0 :
- 4e0: 400107b7 lui a5,0x40010
- 4e4: 40a7aa23 sw a0,1044(a5) # 40010414 <_eusrstack+0x2000b414>
- 4e8: 8082 ret
+00000546 :
+ 546: 451c lw a5,8(a0)
+ 548: c589 beqz a1,552
+ 54a: 0017e793 ori a5,a5,1
+ 54e: c51c sw a5,8(a0)
+ 550: 8082 ret
+ 552: 9bf9 andi a5,a5,-2
+ 554: bfed j 54e
-000004ea :
- 4ea: 459c lw a5,8(a1)
- 4ec: 0107f713 andi a4,a5,16
- 4f0: 00f7f813 andi a6,a5,15
- 4f4: c701 beqz a4,4fc
- 4f6: 41d8 lw a4,4(a1)
- 4f8: 00e86833 or a6,a6,a4
- 4fc: 218e lhu a1,0(a1)
- 4fe: 0ff5f713 andi a4,a1,255
- 502: c339 beqz a4,548
- 504: 4118 lw a4,0(a0)
- 506: 4681 li a3,0
- 508: 4e85 li t4,1
- 50a: 4f3d li t5,15
- 50c: 02800f93 li t6,40
- 510: 04800293 li t0,72
- 514: 4e21 li t3,8
- 516: 00de9633 sll a2,t4,a3
- 51a: 00c5f8b3 and a7,a1,a2
- 51e: 03161163 bne a2,a7,540
- 522: 00269893 slli a7,a3,0x2
- 526: 011f1333 sll t1,t5,a7
- 52a: fff34313 not t1,t1
- 52e: 00e37733 and a4,t1,a4
- 532: 011818b3 sll a7,a6,a7
- 536: 00e8e733 or a4,a7,a4
- 53a: 05f79f63 bne a5,t6,598
- 53e: c950 sw a2,20(a0)
- 540: 0685 addi a3,a3,1
- 542: fdc69ae3 bne a3,t3,516
- 546: c118 sw a4,0(a0)
- 548: 0ff00713 li a4,255
- 54c: 04b77563 bgeu a4,a1,596
- 550: 4154 lw a3,4(a0)
- 552: 4621 li a2,8
- 554: 4e85 li t4,1
- 556: 4f3d li t5,15
- 558: 02800f93 li t6,40
- 55c: 04800293 li t0,72
- 560: 4e41 li t3,16
- 562: 00ce98b3 sll a7,t4,a2
- 566: 0115f733 and a4,a1,a7
- 56a: 02e89263 bne a7,a4,58e
- 56e: 00261713 slli a4,a2,0x2
- 572: 1701 addi a4,a4,-32
- 574: 00ef1333 sll t1,t5,a4
- 578: fff34313 not t1,t1
- 57c: 00d376b3 and a3,t1,a3
- 580: 00e81733 sll a4,a6,a4
- 584: 8ed9 or a3,a3,a4
- 586: 01f79d63 bne a5,t6,5a0
- 58a: 01152a23 sw a7,20(a0)
- 58e: 0605 addi a2,a2,1
- 590: fdc619e3 bne a2,t3,562
- 594: c154 sw a3,4(a0)
- 596: 8082 ret
- 598: fa5794e3 bne a5,t0,540
- 59c: c910 sw a2,16(a0)
- 59e: b74d j 540
- 5a0: fe5797e3 bne a5,t0,58e
- 5a4: 01152823 sw a7,16(a0)
- 5a8: b7dd j 58e
+00000556 :
+ 556: 451c lw a5,8(a0)
+ 558: 0087e793 ori a5,a5,8
+ 55c: c51c sw a5,8(a0)
+ 55e: 8082 ret
-000005aa :
- 5aa: c0000737 lui a4,0xc0000
- 5ae: 00e577b3 and a5,a0,a4
- 5b2: 08e79563 bne a5,a4,63c
- 5b6: 40010737 lui a4,0x40010
- 5ba: 435c lw a5,4(a4)
- 5bc: 01b55693 srli a3,a0,0x1b
- 5c0: 4f58 lw a4,28(a4)
- 5c2: 8a9d andi a3,a3,7
- 5c4: e69d bnez a3,5f2
- 5c6: 9bf9 andi a5,a5,-2
- 5c8: ff0006b7 lui a3,0xff000
- 5cc: 16fd addi a3,a3,-1
- 5ce: 8f75 and a4,a4,a3
- 5d0: c989 beqz a1,5e2
- 5d2: 01051693 slli a3,a0,0x10
- 5d6: 82c1 srli a3,a3,0x10
- 5d8: 8fd5 or a5,a5,a3
- 5da: 01ff06b7 lui a3,0x1ff0
- 5de: 8d75 and a0,a0,a3
- 5e0: 8f49 or a4,a4,a0
- 5e2: 070006b7 lui a3,0x7000
- 5e6: 8fd5 or a5,a5,a3
- 5e8: 400106b7 lui a3,0x40010
- 5ec: c2dc sw a5,4(a3)
- 5ee: ced8 sw a4,28(a3)
- 5f0: 8082 ret
- 5f2: 4605 li a2,1
- 5f4: 00c69663 bne a3,a2,600
- 5f8: 9bf5 andi a5,a5,-3
- 5fa: ff8006b7 lui a3,0xff800
- 5fe: b7f9 j 5cc
- 600: 4609 li a2,2
- 602: 00c69663 bne a3,a2,60e
- 606: 9bed andi a5,a5,-5
- 608: ffe806b7 lui a3,0xffe80
- 60c: b7c1 j 5cc
- 60e: 460d li a2,3
- 610: 00c69663 bne a3,a2,61c
- 614: 9bdd andi a5,a5,-9
- 616: fffc06b7 lui a3,0xfffc0
- 61a: bf4d j 5cc
- 61c: 4611 li a2,4
- 61e: 00c69763 bne a3,a2,62c
- 622: f3f7f793 andi a5,a5,-193
- 626: ffc006b7 lui a3,0xffc00
- 62a: b74d j 5cc
- 62c: 4615 li a2,5
- 62e: fac691e3 bne a3,a2,5d0
- 632: cff7f793 andi a5,a5,-769
- 636: ffe006b7 lui a3,0xffe00
- 63a: bf49 j 5cc
- 63c: 40000737 lui a4,0x40000
- 640: 02e79163 bne a5,a4,662
- 644: 400107b7 lui a5,0x40010
- 648: 4fd8 lw a4,28(a5)
- 64a: 0542 slli a0,a0,0x10
- 64c: 00a767b3 or a5,a4,a0
- 650: e589 bnez a1,65a
- 652: fff54513 not a0,a0
- 656: 00e577b3 and a5,a0,a4
- 65a: 40010737 lui a4,0x40010
- 65e: cf5c sw a5,28(a4)
- 660: 8082 ret
- 662: e3a9 bnez a5,6a4
- 664: 40010837 lui a6,0x40010
- 668: 003007b7 lui a5,0x300
- 66c: 00482603 lw a2,4(a6) # 40010004 <_eusrstack+0x2000b004>
- 670: 01051713 slli a4,a0,0x10
- 674: 00f576b3 and a3,a0,a5
- 678: 8341 srli a4,a4,0x10
- 67a: 02f69663 bne a3,a5,6a6
- 67e: f90006b7 lui a3,0xf9000
- 682: 16fd addi a3,a3,-1
- 684: 00d677b3 and a5,a2,a3
- 688: 00482603 lw a2,4(a6)
- 68c: 8ef1 and a3,a3,a2
- 68e: 00d82223 sw a3,4(a6)
- 692: c591 beqz a1,69e
- 694: 8155 srli a0,a0,0x15
- 696: 0512 slli a0,a0,0x4
- 698: 00a71533 sll a0,a4,a0
- 69c: 8fc9 or a5,a5,a0
- 69e: 40010737 lui a4,0x40010
- 6a2: c35c sw a5,4(a4)
- 6a4: 8082 ret
- 6a6: 00b51793 slli a5,a0,0xb
- 6aa: 0207d063 bgez a5,6ca
- 6ae: 01055793 srli a5,a0,0x10
- 6b2: 00f7f693 andi a3,a5,15
- 6b6: 478d li a5,3
- 6b8: 00d797b3 sll a5,a5,a3
- 6bc: fff7c793 not a5,a5
- 6c0: 8ff1 and a5,a5,a2
- 6c2: 070006b7 lui a3,0x7000
- 6c6: 8fd5 or a5,a5,a3
- 6c8: b7e9 j 692
- 6ca: 01555793 srli a5,a0,0x15
- 6ce: 0792 slli a5,a5,0x4
- 6d0: 00f717b3 sll a5,a4,a5
- 6d4: b7e5 j 6bc
+00000560 :
+ 560: 4508 lw a0,8(a0)
+ 562: 810d srli a0,a0,0x3
+ 564: 8905 andi a0,a0,1
+ 566: 8082 ret
-000006d6 :
- 6d6: a9bff2ef jal t0,170 <__riscv_save_0>
- 6da: 1ffff437 lui s0,0x1ffff
- 6de: 72442703 lw a4,1828(s0) # 1ffff724 <_data_lma+0x1fffd7c0>
- 6e2: 3e000637 lui a2,0x3e000
- 6e6: 1141 addi sp,sp,-16
- 6e8: 01971793 slli a5,a4,0x19
- 6ec: fff74693 not a3,a4
- 6f0: 8ff1 and a5,a5,a2
- 6f2: 0706 slli a4,a4,0x1
- 6f4: 003e0637 lui a2,0x3e0
- 6f8: 8f71 and a4,a4,a2
+00000568 :
+ 568: 451c lw a5,8(a0)
+ 56a: 0047e793 ori a5,a5,4
+ 56e: c51c sw a5,8(a0)
+ 570: 8082 ret
+
+00000572 :
+ 572: 4508 lw a0,8(a0)
+ 574: 8109 srli a0,a0,0x2
+ 576: 8905 andi a0,a0,1
+ 578: 8082 ret
+
+0000057a :
+ 57a: 451c lw a5,8(a0)
+ 57c: c591 beqz a1,588
+ 57e: 00500737 lui a4,0x500
+ 582: 8fd9 or a5,a5,a4
+ 584: c51c sw a5,8(a0)
+ 586: 8082 ret
+ 588: ffb00737 lui a4,0xffb00
+ 58c: 177d addi a4,a4,-1
+ 58e: 8ff9 and a5,a5,a4
+ 590: bfd5 j 584
+
+00000592 :
+ 592: 47a5 li a5,9
+ 594: 04b7f763 bgeu a5,a1,5e2
+ 598: 478d li a5,3
+ 59a: ff658713 addi a4,a1,-10
+ 59e: 02f70733 mul a4,a4,a5
+ 5a2: 00c52803 lw a6,12(a0)
+ 5a6: 479d li a5,7
+ 5a8: 00e797b3 sll a5,a5,a4
+ 5ac: fff7c793 not a5,a5
+ 5b0: 0107f7b3 and a5,a5,a6
+ 5b4: 00e696b3 sll a3,a3,a4
+ 5b8: 8edd or a3,a3,a5
+ 5ba: c554 sw a3,12(a0)
+ 5bc: 4799 li a5,6
+ 5be: 04c7e363 bltu a5,a2,604
+ 5c2: 4795 li a5,5
+ 5c4: 167d addi a2,a2,-1
+ 5c6: 02f60633 mul a2,a2,a5
+ 5ca: 5958 lw a4,52(a0)
+ 5cc: 47fd li a5,31
+ 5ce: 00c797b3 sll a5,a5,a2
+ 5d2: fff7c793 not a5,a5
+ 5d6: 8ff9 and a5,a5,a4
+ 5d8: 00c59633 sll a2,a1,a2
+ 5dc: 8e5d or a2,a2,a5
+ 5de: d950 sw a2,52(a0)
+ 5e0: 8082 ret
+ 5e2: 470d li a4,3
+ 5e4: 02e58733 mul a4,a1,a4
+ 5e8: 01052803 lw a6,16(a0)
+ 5ec: 479d li a5,7
+ 5ee: 00e797b3 sll a5,a5,a4
+ 5f2: fff7c793 not a5,a5
+ 5f6: 0107f7b3 and a5,a5,a6
+ 5fa: 00e696b3 sll a3,a3,a4
+ 5fe: 8edd or a3,a3,a5
+ 600: c914 sw a3,16(a0)
+ 602: bf6d j 5bc
+ 604: 47b1 li a5,12
+ 606: 02c7e263 bltu a5,a2,62a
+ 60a: 4795 li a5,5
+ 60c: 1665 addi a2,a2,-7
+ 60e: 02f60633 mul a2,a2,a5
+ 612: 5918 lw a4,48(a0)
+ 614: 47fd li a5,31
+ 616: 00c797b3 sll a5,a5,a2
+ 61a: fff7c793 not a5,a5
+ 61e: 8ff9 and a5,a5,a4
+ 620: 00c59633 sll a2,a1,a2
+ 624: 8e5d or a2,a2,a5
+ 626: d910 sw a2,48(a0)
+ 628: 8082 ret
+ 62a: 4795 li a5,5
+ 62c: 164d addi a2,a2,-13
+ 62e: 02f60633 mul a2,a2,a5
+ 632: 5558 lw a4,44(a0)
+ 634: 47fd li a5,31
+ 636: 00c797b3 sll a5,a5,a2
+ 63a: fff7c793 not a5,a5
+ 63e: 8ff9 and a5,a5,a4
+ 640: 00c595b3 sll a1,a1,a2
+ 644: 8ddd or a1,a1,a5
+ 646: d54c sw a1,44(a0)
+ 648: 8082 ret
+
+0000064a :
+ 64a: 4568 lw a0,76(a0)
+ 64c: 0542 slli a0,a0,0x10
+ 64e: 8141 srli a0,a0,0x10
+ 650: 8082 ret
+
+00000652 :
+ 652: 4108 lw a0,0(a0)
+ 654: 8d6d and a0,a0,a1
+ 656: 00a03533 snez a0,a0
+ 65a: 8082 ret
+
+0000065c :
+ 65c: 415c lw a5,4(a0)
+ 65e: c591 beqz a1,66a
+ 660: 04000737 lui a4,0x4000
+ 664: 8fd9 or a5,a5,a4
+ 666: c15c sw a5,4(a0)
+ 668: 8082 ret
+ 66a: fc000737 lui a4,0xfc000
+ 66e: 177d addi a4,a4,-1
+ 670: 8ff9 and a5,a5,a4
+ 672: bfd5 j 666
+
+00000674 :
+ 674: 493c lw a5,80(a0)
+ 676: c589 beqz a1,680
+ 678: 0807e793 ori a5,a5,128
+ 67c: c93c sw a5,80(a0)
+ 67e: 8082 ret
+ 680: f7f7f793 andi a5,a5,-129
+ 684: bfe5 j 67c
+
+00000686 :
+ 686: 493c lw a5,80(a0)
+ 688: c589 beqz a1,692
+ 68a: 0407e793 ori a5,a5,64
+ 68e: c93c sw a5,80(a0)
+ 690: 8082 ret
+ 692: fbf7f793 andi a5,a5,-65
+ 696: bfe5 j 68e
+
+00000698 :
+ 698: 493c lw a5,80(a0)
+ 69a: fdf7f793 andi a5,a5,-33
+ 69e: c93c sw a5,80(a0)
+ 6a0: 493c lw a5,80(a0)
+ 6a2: 8ddd or a1,a1,a5
+ 6a4: c92c sw a1,80(a0)
+ 6a6: 8082 ret
+
+000006a8 :
+ 6a8: ac9ff2ef jal t0,170 <__riscv_save_0>
+ 6ac: 456706b7 lui a3,0x45670
+ 6b0: 400227b7 lui a5,0x40022
+ 6b4: 12368693 addi a3,a3,291 # 45670123 <_eusrstack+0x2566b123>
+ 6b8: cdef9737 lui a4,0xcdef9
+ 6bc: c3d4 sw a3,4(a5)
+ 6be: 9ab70713 addi a4,a4,-1621 # cdef89ab <_eusrstack+0xadef39ab>
+ 6c2: c3d8 sw a4,4(a5)
+ 6c4: d3d4 sw a3,36(a5)
+ 6c6: 1101 addi sp,sp,-32
+ 6c8: c798 sw a4,8(a5)
+ 6ca: 5bd4 lw a3,52(a5)
+ 6cc: 03478713 addi a4,a5,52 # 40022034 <_eusrstack+0x2001d034>
+ 6d0: 00269613 slli a2,a3,0x2
+ 6d4: fe064be3 bltz a2,6ca
+ 6d8: 57d4 lw a3,44(a5)
+ 6da: 40012537 lui a0,0x40012
+ 6de: 40050513 addi a0,a0,1024 # 40012400 <_eusrstack+0x2000d400>
+ 6e2: 2006e693 ori a3,a3,512
+ 6e6: d7d4 sw a3,44(a5)
+ 6e8: 5bdc lw a5,52(a5)
+ 6ea: 200006b7 lui a3,0x20000
+ 6ee: 8fd5 or a5,a5,a3
+ 6f0: c31c sw a5,0(a4)
+ 6f2: 431c lw a5,0(a4)
+ 6f4: 451c lw a5,8(a0)
+ 6f6: 000e0737 lui a4,0xe0
6fa: 8fd9 or a5,a5,a4
- 6fc: 01000637 lui a2,0x1000
- 700: 00969713 slli a4,a3,0x9
- 704: 8f71 and a4,a4,a2
- 706: 8fd9 or a5,a5,a4
- 708: 82bd srli a3,a3,0xf
- 70a: 6741 lui a4,0x10
- 70c: 8ef9 and a3,a3,a4
- 70e: 8fd5 or a5,a5,a3
- 710: c202 sw zero,4(sp)
- 712: c402 sw zero,8(sp)
- 714: c602 sw zero,12(sp)
- 716: 82f1a023 sw a5,-2016(gp) # 200000a0
- 71a: 72845703 lhu a4,1832(s0)
- 71e: 4585 li a1,1
- 720: 80e19c23 sh a4,-2024(gp) # 20000098 <_edata>
- 724: 72042703 lw a4,1824(s0)
- 728: 03d00513 li a0,61
- 72c: 82e1a223 sw a4,-2012(gp) # 200000a4
- 730: 70442703 lw a4,1796(s0)
- 734: 80e1ae23 sw a4,-2020(gp) # 2000009c
- 738: 2421 jal 940
- 73a: 70442783 lw a5,1796(s0)
- 73e: 103a0737 lui a4,0x103a0
- 742: 70070713 addi a4,a4,1792 # 103a0700 <_data_lma+0x1039e79c>
- 746: f0f7f793 andi a5,a5,-241
- 74a: 0ee78f63 beq a5,a4,848 <__stack_size+0x48>
- 74e: 02f76063 bltu a4,a5,76e
- 752: 10320737 lui a4,0x10320
- 756: 70070713 addi a4,a4,1792 # 10320700 <_data_lma+0x1031e79c>
- 75a: 04e78f63 beq a5,a4,7b8
- 75e: 10370737 lui a4,0x10370
- 762: 70070713 addi a4,a4,1792 # 10370700 <_data_lma+0x1036e79c>
- 766: 08e78663 beq a5,a4,7f2
- 76a: 0141 addi sp,sp,16
- 76c: b425 j 194 <__riscv_restore_0>
- 76e: 103b0737 lui a4,0x103b0
- 772: 70070713 addi a4,a4,1792 # 103b0700 <_data_lma+0x103ae79c>
- 776: 0ae78b63 beq a5,a4,82c <__stack_size+0x2c>
- 77a: 103d0737 lui a4,0x103d0
- 77e: 70070713 addi a4,a4,1792 # 103d0700 <_data_lma+0x103ce79c>
- 782: fee794e3 bne a5,a4,76a
- 786: 4585 li a1,1
- 788: 6521 lui a0,0x8
- 78a: 3505 jal 5aa
- 78c: 400114b7 lui s1,0x40011
- 790: 77e1 lui a5,0xffff8
- 792: 04800413 li s0,72
- 796: 004c addi a1,sp,4
- 798: 80048513 addi a0,s1,-2048 # 40010800 <_eusrstack+0x2000b800>
- 79c: 827c sh a5,4(sp)
- 79e: c622 sw s0,12(sp)
- 7a0: 33a9 jal 4ea
- 7a2: 6785 lui a5,0x1
- 7a4: 33c78793 addi a5,a5,828 # 133c <_fwalk_reent+0x38>
- 7a8: 004c addi a1,sp,4
- 7aa: c0048513 addi a0,s1,-1024
- 7ae: 827c sh a5,4(sp)
- 7b0: c622 sw s0,12(sp)
- 7b2: 3b25 jal 4ea
- 7b4: 77f9 lui a5,0xffffe
- 7b6: a00d j 7d8
- 7b8: 4585 li a1,1
- 7ba: 6521 lui a0,0x8
- 7bc: 33fd jal 5aa
- 7be: 400114b7 lui s1,0x40011
- 7c2: e0000793 li a5,-512
- 7c6: 04800413 li s0,72
- 7ca: 004c addi a1,sp,4
- 7cc: c0048513 addi a0,s1,-1024 # 40010c00 <_eusrstack+0x2000bc00>
- 7d0: 827c sh a5,4(sp)
- 7d2: c622 sw s0,12(sp)
- 7d4: 3b19 jal 4ea
- 7d6: 6789 lui a5,0x2
- 7d8: 004c addi a1,sp,4
- 7da: 40011537 lui a0,0x40011
- 7de: 827c sh a5,4(sp)
- 7e0: c622 sw s0,12(sp)
- 7e2: 3321 jal 4ea
- 7e4: 478d li a5,3
- 7e6: 827c sh a5,4(sp)
- 7e8: c622 sw s0,12(sp)
- 7ea: 004c addi a1,sp,4
- 7ec: 40048513 addi a0,s1,1024
- 7f0: a825 j 828 <__stack_size+0x28>
- 7f2: 400114b7 lui s1,0x40011
- 7f6: 77e1 lui a5,0xffff8
- 7f8: 70078793 addi a5,a5,1792 # ffff8700 <_eusrstack+0xdfff3700>
- 7fc: 04800413 li s0,72
- 800: 004c addi a1,sp,4
- 802: 80048513 addi a0,s1,-2048 # 40010800 <_eusrstack+0x2000b800>
- 806: 827c sh a5,4(sp)
- 808: c622 sw s0,12(sp)
- 80a: 31c5 jal 4ea
- 80c: e3d00793 li a5,-451
- 810: 004c addi a1,sp,4
- 812: c0048513 addi a0,s1,-1024
- 816: 827c sh a5,4(sp)
- 818: c622 sw s0,12(sp)
- 81a: 39c1 jal 4ea
- 81c: 77f9 lui a5,0xffffe
- 81e: 827c sh a5,4(sp)
- 820: c622 sw s0,12(sp)
- 822: 004c addi a1,sp,4
- 824: 40011537 lui a0,0x40011
- 828: 31c9 jal 4ea
- 82a: b781 j 76a
- 82c: 400114b7 lui s1,0x40011
- 830: 77e1 lui a5,0xffff8
- 832: 04800413 li s0,72
- 836: 004c addi a1,sp,4
- 838: 80048513 addi a0,s1,-2048 # 40010800 <_eusrstack+0x2000b800>
- 83c: 827c sh a5,4(sp)
- 83e: c622 sw s0,12(sp)
- 840: 316d jal 4ea
- 842: 20400793 li a5,516
- 846: b78d j 7a8
- 848: 400114b7 lui s1,0x40011
- 84c: 77e1 lui a5,0xffff8
- 84e: 04800413 li s0,72
- 852: 004c addi a1,sp,4
- 854: 80048513 addi a0,s1,-2048 # 40010800 <_eusrstack+0x2000b800>
- 858: 827c sh a5,4(sp)
- 85a: c622 sw s0,12(sp)
- 85c: 3179 jal 4ea
- 85e: 6789 lui a5,0x2
- 860: 17f5 addi a5,a5,-3
- 862: b799 j 7a8
+ 6fc: c51c sw a5,8(a0)
+ 6fe: 451c lw a5,8(a0)
+ 700: 0017e793 ori a5,a5,1
+ 704: c51c sw a5,8(a0)
+ 706: 493c lw a5,80(a0)
+ 708: 0407e793 ori a5,a5,64
+ 70c: c93c sw a5,80(a0)
+ 70e: 451c lw a5,8(a0)
+ 710: 0087e793 ori a5,a5,8
+ 714: c51c sw a5,8(a0)
+ 716: 842a mv s0,a0
+ 718: 8522 mv a0,s0
+ 71a: 3599 jal 560
+ 71c: fd75 bnez a0,718
+ 71e: 40012537 lui a0,0x40012
+ 722: 40852783 lw a5,1032(a0) # 40012408 <_eusrstack+0x2000d408>
+ 726: 40050513 addi a0,a0,1024
+ 72a: 0047e793 ori a5,a5,4
+ 72e: c51c sw a5,8(a0)
+ 730: 842a mv s0,a0
+ 732: 8522 mv a0,s0
+ 734: 3d3d jal 572
+ 736: fd75 bnez a0,732
+ 738: 40012537 lui a0,0x40012
+ 73c: 4605 li a2,1
+ 73e: 45c9 li a1,18
+ 740: 4681 li a3,0
+ 742: 40050513 addi a0,a0,1024 # 40012400 <_eusrstack+0x2000d400>
+ 746: 35b1 jal 592
+ 748: 4625 li a2,9
+ 74a: 00010423 sb zero,8(sp)
+ 74e: 40012737 lui a4,0x40012
+ 752: 005005b7 lui a1,0x500
+ 756: 841c lbu a5,8(sp)
+ 758: 04f67f63 bgeu a2,a5,7b6
+ 75c: 00010423 sb zero,8(sp)
+ 760: 46a5 li a3,9
+ 762: 4621 li a2,8
+ 764: 841c lbu a5,8(sp)
+ 766: 06f6ff63 bgeu a3,a5,7e4
+ 76a: 00011523 sh zero,10(sp)
+ 76e: 00010423 sb zero,8(sp)
+ 772: 4695 li a3,5
+ 774: 841c lbu a5,8(sp)
+ 776: 0ef6f163 bgeu a3,a5,858 <__stack_size+0x58>
+ 77a: 8538 lhu a4,10(sp)
+ 77c: 853c lhu a5,10(sp)
+ 77e: 4699 li a3,6
+ 780: 460d li a2,3
+ 782: 02d7f7b3 remu a5,a5,a3
+ 786: 6505 lui a0,0x1
+ 788: 80050513 addi a0,a0,-2048 # 800 <__stack_size>
+ 78c: 02d75733 divu a4,a4,a3
+ 790: 02c7d7b3 divu a5,a5,a2
+ 794: 97ba add a5,a5,a4
+ 796: 07c2 slli a5,a5,0x10
+ 798: 83c1 srli a5,a5,0x10
+ 79a: 857c sh a5,10(sp)
+ 79c: 400127b7 lui a5,0x40012
+ 7a0: 4087a703 lw a4,1032(a5) # 40012408 <_eusrstack+0x2000d408>
+ 7a4: 9b79 andi a4,a4,-2
+ 7a6: 40e7a423 sw a4,1032(a5)
+ 7aa: 853c lhu a5,10(sp)
+ 7ac: 6105 addi sp,sp,32
+ 7ae: 8d1d sub a0,a0,a5
+ 7b0: 0542 slli a0,a0,0x10
+ 7b2: 8541 srai a0,a0,0x10
+ 7b4: b2c5 j 194 <__riscv_restore_0>
+ 7b6: 40872783 lw a5,1032(a4) # 40012408 <_eusrstack+0x2000d408>
+ 7ba: 8fcd or a5,a5,a1
+ 7bc: 40f72423 sw a5,1032(a4)
+ 7c0: 40072783 lw a5,1024(a4)
+ 7c4: 8b89 andi a5,a5,2
+ 7c6: dfed beqz a5,7c0
+ 7c8: 841c lbu a5,8(sp)
+ 7ca: 44c72683 lw a3,1100(a4)
+ 7ce: 1008 addi a0,sp,32
+ 7d0: 0786 slli a5,a5,0x1
+ 7d2: 97aa add a5,a5,a0
+ 7d4: fed79623 sh a3,-20(a5)
+ 7d8: 841c lbu a5,8(sp)
+ 7da: 0785 addi a5,a5,1
+ 7dc: 0ff7f793 andi a5,a5,255
+ 7e0: 845c sb a5,8(sp)
+ 7e2: bf95 j 756
+ 7e4: 000104a3 sb zero,9(sp)
+ 7e8: 849c lbu a5,9(sp)
+ 7ea: 00f67863 bgeu a2,a5,7fa
+ 7ee: 841c lbu a5,8(sp)
+ 7f0: 0785 addi a5,a5,1
+ 7f2: 0ff7f793 andi a5,a5,255
+ 7f6: 845c sb a5,8(sp)
+ 7f8: b7b5 j 764
+ 7fa: 8498 lbu a4,9(sp)
+ 7fc: 849c lbu a5,9(sp)
+ 7fe: 100c addi a1,sp,32
+ 800: 0706 slli a4,a4,0x1
+ 802: 0785 addi a5,a5,1
+ 804: 0786 slli a5,a5,0x1
+ 806: 972e add a4,a4,a1
+ 808: 97ae add a5,a5,a1
+ 80a: fec75703 lhu a4,-20(a4)
+ 80e: fec7d783 lhu a5,-20(a5)
+ 812: 02e7fd63 bgeu a5,a4,84c <__stack_size+0x4c>
+ 816: 849c lbu a5,9(sp)
+ 818: 0786 slli a5,a5,0x1
+ 81a: 97ae add a5,a5,a1
+ 81c: fec7d783 lhu a5,-20(a5)
+ 820: 857c sh a5,10(sp)
+ 822: 849c lbu a5,9(sp)
+ 824: 8498 lbu a4,9(sp)
+ 826: 0785 addi a5,a5,1
+ 828: 0786 slli a5,a5,0x1
+ 82a: 97ae add a5,a5,a1
+ 82c: fec7d583 lhu a1,-20(a5)
+ 830: 00171793 slli a5,a4,0x1
+ 834: 1018 addi a4,sp,32
+ 836: 97ba add a5,a5,a4
+ 838: feb79623 sh a1,-20(a5)
+ 83c: 849c lbu a5,9(sp)
+ 83e: 8538 lhu a4,10(sp)
+ 840: 100c addi a1,sp,32
+ 842: 0785 addi a5,a5,1
+ 844: 0786 slli a5,a5,0x1
+ 846: 97ae add a5,a5,a1
+ 848: fee79623 sh a4,-20(a5)
+ 84c: 849c lbu a5,9(sp)
+ 84e: 0785 addi a5,a5,1
+ 850: 0ff7f793 andi a5,a5,255
+ 854: 84dc sb a5,9(sp)
+ 856: bf49 j 7e8
+ 858: 841c lbu a5,8(sp)
+ 85a: 1010 addi a2,sp,32
+ 85c: 8538 lhu a4,10(sp)
+ 85e: 0789 addi a5,a5,2
+ 860: 0786 slli a5,a5,0x1
+ 862: 97b2 add a5,a5,a2
+ 864: fec7d783 lhu a5,-20(a5)
+ 868: 97ba add a5,a5,a4
+ 86a: 07c2 slli a5,a5,0x10
+ 86c: 83c1 srli a5,a5,0x10
+ 86e: 857c sh a5,10(sp)
+ 870: 841c lbu a5,8(sp)
+ 872: 0785 addi a5,a5,1
+ 874: 0ff7f793 andi a5,a5,255
+ 878: 845c sb a5,8(sp)
+ 87a: bded j 774
-00000864 :
- 864: 82a1a423 sw a0,-2008(gp) # 200000a8
- 868: 8082 ret
+0000087c :
+ 87c: 81c1a503 lw a0,-2020(gp) # 200001c4
+ 880: 8082 ret
-0000086a :
- 86a: 40021737 lui a4,0x40021
- 86e: 435c lw a5,4(a4)
- 870: 4691 li a3,4
- 872: 8bb1 andi a5,a5,12
- 874: 06d78c63 beq a5,a3,8ec
- 878: 46a1 li a3,8
- 87a: 06d78e63 beq a5,a3,8f6
- 87e: e7bd bnez a5,8ec
- 880: 431c lw a5,0(a4)
- 882: 8b91 andi a5,a5,4
- 884: c7a5 beqz a5,8ec
- 886: 000f47b7 lui a5,0xf4
- 88a: 24078793 addi a5,a5,576 # f4240 <_data_lma+0xf22dc>
- 88e: c11c sw a5,0(a0)
- 890: 40021637 lui a2,0x40021
- 894: 425c lw a5,4(a2)
- 896: 20000737 lui a4,0x20000
- 89a: 01070713 addi a4,a4,16 # 20000010
- 89e: 8391 srli a5,a5,0x4
- 8a0: 8bbd andi a5,a5,15
- 8a2: 97ba add a5,a5,a4
- 8a4: 2394 lbu a3,0(a5)
- 8a6: 411c lw a5,0(a0)
- 8a8: 00d7d7b3 srl a5,a5,a3
- 8ac: c15c sw a5,4(a0)
- 8ae: 4254 lw a3,4(a2)
- 8b0: 82a1 srli a3,a3,0x8
- 8b2: 8a9d andi a3,a3,7
- 8b4: 96ba add a3,a3,a4
- 8b6: 2294 lbu a3,0(a3)
- 8b8: 00d7d6b3 srl a3,a5,a3
- 8bc: c514 sw a3,8(a0)
- 8be: 4254 lw a3,4(a2)
- 8c0: 82ad srli a3,a3,0xb
- 8c2: 8a9d andi a3,a3,7
- 8c4: 9736 add a4,a4,a3
- 8c6: 2314 lbu a3,0(a4)
- 8c8: 00d7d6b3 srl a3,a5,a3
- 8cc: c554 sw a3,12(a0)
- 8ce: 4258 lw a4,4(a2)
- 8d0: 00074c63 bltz a4,8e8
- 8d4: 425c lw a5,4(a2)
- 8d6: 83b9 srli a5,a5,0xe
- 8d8: 0037f713 andi a4,a5,3
- 8dc: 80418793 addi a5,gp,-2044 # 20000084
- 8e0: 97ba add a5,a5,a4
- 8e2: 239c lbu a5,0(a5)
- 8e4: 02f6d7b3 divu a5,a3,a5
- 8e8: c91c sw a5,16(a0)
+00000882 :
+ 882: 4158 lw a4,4(a0)
+ 884: 00052803 lw a6,0(a0)
+ 888: 454c lw a1,12(a0)
+ 88a: 40010637 lui a2,0x40010
+ 88e: 40060793 addi a5,a2,1024 # 40010400 <_eusrstack+0x2000b400>
+ 892: 973e add a4,a4,a5
+ 894: fff84693 not a3,a6
+ 898: c5b1 beqz a1,8e4
+ 89a: 40062583 lw a1,1024(a2)
+ 89e: 8df5 and a1,a1,a3
+ 8a0: 40b62023 sw a1,1024(a2)
+ 8a4: 43d0 lw a2,4(a5)
+ 8a6: 8ef1 and a3,a3,a2
+ 8a8: c3d4 sw a3,4(a5)
+ 8aa: 4314 lw a3,0(a4)
+ 8ac: 0106e6b3 or a3,a3,a6
+ 8b0: c314 sw a3,0(a4)
+ 8b2: 4118 lw a4,0(a0)
+ 8b4: 4790 lw a2,8(a5)
+ 8b6: fff74693 not a3,a4
+ 8ba: 8e75 and a2,a2,a3
+ 8bc: c790 sw a2,8(a5)
+ 8be: 47d0 lw a2,12(a5)
+ 8c0: 8ef1 and a3,a3,a2
+ 8c2: c7d4 sw a3,12(a5)
+ 8c4: 4514 lw a3,8(a0)
+ 8c6: 4641 li a2,16
+ 8c8: 00c69963 bne a3,a2,8da
+ 8cc: 4794 lw a3,8(a5)
+ 8ce: 8ed9 or a3,a3,a4
+ 8d0: c794 sw a3,8(a5)
+ 8d2: 47d4 lw a3,12(a5)
+ 8d4: 8f55 or a4,a4,a3
+ 8d6: c7d8 sw a4,12(a5)
+ 8d8: 8082 ret
+ 8da: 97b6 add a5,a5,a3
+ 8dc: 4394 lw a3,0(a5)
+ 8de: 8f55 or a4,a4,a3
+ 8e0: c398 sw a4,0(a5)
+ 8e2: 8082 ret
+ 8e4: 431c lw a5,0(a4)
+ 8e6: 8ff5 and a5,a5,a3
+ 8e8: c31c sw a5,0(a4)
8ea: 8082 ret
- 8ec: 007a17b7 lui a5,0x7a1
- 8f0: 20078793 addi a5,a5,512 # 7a1200 <_data_lma+0x79f29c>
- 8f4: bf69 j 88e
- 8f6: 435c lw a5,4(a4)
- 8f8: 4358 lw a4,4(a4)
- 8fa: 66c1 lui a3,0x10
- 8fc: 83c9 srli a5,a5,0x12
- 8fe: 8bbd andi a5,a5,15
- 900: 8f75 and a4,a4,a3
- 902: 0789 addi a5,a5,2
- 904: 46c5 li a3,17
- 906: 00d79363 bne a5,a3,90c
- 90a: 47c9 li a5,18
- 90c: ef01 bnez a4,924
- 90e: 40024737 lui a4,0x40024
- 912: 80072703 lw a4,-2048(a4) # 40023800 <_eusrstack+0x2001e800>
- 916: 8b41 andi a4,a4,16
- 918: cf09 beqz a4,932
- 91a: 007a1737 lui a4,0x7a1
- 91e: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79f29c>
- 922: a821 j 93a
- 924: 40021737 lui a4,0x40021
- 928: 4358 lw a4,4(a4)
- 92a: 00e71693 slli a3,a4,0xe
- 92e: fe06d6e3 bgez a3,91a
- 932: 003d1737 lui a4,0x3d1
- 936: 90070713 addi a4,a4,-1792 # 3d0900 <_data_lma+0x3ce99c>
- 93a: 02e787b3 mul a5,a5,a4
- 93e: bf81 j 88e
-00000940 :
- 940: c599 beqz a1,94e
- 942: 40021737 lui a4,0x40021
- 946: 4f1c lw a5,24(a4)
- 948: 8d5d or a0,a0,a5
- 94a: cf08 sw a0,24(a4)
- 94c: 8082 ret
- 94e: 400217b7 lui a5,0x40021
- 952: 4f98 lw a4,24(a5)
- 954: fff54513 not a0,a0
- 958: 8d79 and a0,a0,a4
- 95a: cf88 sw a0,24(a5)
- 95c: 8082 ret
+000008ec :
+ 8ec: 400107b7 lui a5,0x40010
+ 8f0: 40078713 addi a4,a5,1024 # 40010400 <_eusrstack+0x2000b400>
+ 8f4: 4007a783 lw a5,1024(a5)
+ 8f8: 4b58 lw a4,20(a4)
+ 8fa: 8f69 and a4,a4,a0
+ 8fc: c709 beqz a4,906
+ 8fe: 8d7d and a0,a0,a5
+ 900: 00a03533 snez a0,a0
+ 904: 8082 ret
+ 906: 4501 li a0,0
+ 908: 8082 ret
-0000095e :
- 95e: 291e lhu a5,16(a0)
- 960: 254a lhu a0,12(a0)
- 962: 8fed and a5,a5,a1
- 964: 0542 slli a0,a0,0x10
- 966: 8141 srli a0,a0,0x10
- 968: c789 beqz a5,972
- 96a: 8d6d and a0,a0,a1
- 96c: 00a03533 snez a0,a0
- 970: 8082 ret
- 972: 4501 li a0,0
- 974: 8082 ret
+0000090a :
+ 90a: 400107b7 lui a5,0x40010
+ 90e: 40a7aa23 sw a0,1044(a5) # 40010414 <_eusrstack+0x2000b414>
+ 912: 8082 ret
-00000976 :
- 976: fff5c593 not a1,a1
- 97a: 05c2 slli a1,a1,0x10
- 97c: 81c1 srli a1,a1,0x10
- 97e: a90e sh a1,16(a0)
- 980: 8082 ret
+00000914 :
+ 914: 459c lw a5,8(a1)
+ 916: 0107f713 andi a4,a5,16
+ 91a: 00f7f813 andi a6,a5,15
+ 91e: c701 beqz a4,926
+ 920: 41d8 lw a4,4(a1)
+ 922: 00e86833 or a6,a6,a4
+ 926: 218e lhu a1,0(a1)
+ 928: 0ff5f713 andi a4,a1,255
+ 92c: c339 beqz a4,972
+ 92e: 4118 lw a4,0(a0)
+ 930: 4681 li a3,0
+ 932: 4e85 li t4,1
+ 934: 4f3d li t5,15
+ 936: 02800f93 li t6,40
+ 93a: 04800293 li t0,72
+ 93e: 4e21 li t3,8
+ 940: 00de9633 sll a2,t4,a3
+ 944: 00c5f8b3 and a7,a1,a2
+ 948: 03161163 bne a2,a7,96a
+ 94c: 00269893 slli a7,a3,0x2
+ 950: 011f1333 sll t1,t5,a7
+ 954: fff34313 not t1,t1
+ 958: 00e37733 and a4,t1,a4
+ 95c: 011818b3 sll a7,a6,a7
+ 960: 00e8e733 or a4,a7,a4
+ 964: 05f79f63 bne a5,t6,9c2
+ 968: c950 sw a2,20(a0)
+ 96a: 0685 addi a3,a3,1
+ 96c: fdc69ae3 bne a3,t3,940
+ 970: c118 sw a4,0(a0)
+ 972: 0ff00713 li a4,255
+ 976: 04b77563 bgeu a4,a1,9c0
+ 97a: 4154 lw a3,4(a0)
+ 97c: 4621 li a2,8
+ 97e: 4e85 li t4,1
+ 980: 4f3d li t5,15
+ 982: 02800f93 li t6,40
+ 986: 04800293 li t0,72
+ 98a: 4e41 li t3,16
+ 98c: 00ce98b3 sll a7,t4,a2
+ 990: 0115f733 and a4,a1,a7
+ 994: 02e89263 bne a7,a4,9b8
+ 998: 00261713 slli a4,a2,0x2
+ 99c: 1701 addi a4,a4,-32
+ 99e: 00ef1333 sll t1,t5,a4
+ 9a2: fff34313 not t1,t1
+ 9a6: 00d376b3 and a3,t1,a3
+ 9aa: 00e81733 sll a4,a6,a4
+ 9ae: 8ed9 or a3,a3,a4
+ 9b0: 01f79d63 bne a5,t6,9ca
+ 9b4: 01152a23 sw a7,20(a0)
+ 9b8: 0605 addi a2,a2,1
+ 9ba: fdc619e3 bne a2,t3,98c
+ 9be: c154 sw a3,4(a0)
+ 9c0: 8082 ret
+ 9c2: fa5794e3 bne a5,t0,96a
+ 9c6: c910 sw a2,16(a0)
+ 9c8: b74d j 96a
+ 9ca: fe5797e3 bne a5,t0,9b8
+ 9ce: 01152823 sw a7,16(a0)
+ 9d2: b7dd j 9b8
-00000982 :
- 982: feeff2ef jal t0,170 <__riscv_save_0>
- 986: 2916 lhu a3,16(a0)
- 988: 77f5 lui a5,0xffffd
- 98a: 17fd addi a5,a5,-1
- 98c: 8ff5 and a5,a5,a3
- 98e: 21f6 lhu a3,6(a1)
- 990: 25da lhu a4,12(a1)
- 992: 7179 addi sp,sp,-48
- 994: 8fd5 or a5,a5,a3
- 996: a91e sh a5,16(a0)
- 998: 2556 lhu a3,12(a0)
- 99a: 77fd lui a5,0xfffff
- 99c: 9f378793 addi a5,a5,-1549 # ffffe9f3 <_eusrstack+0xdfff99f3>
- 9a0: 8ff5 and a5,a5,a3
- 9a2: 21d6 lhu a3,4(a1)
- 9a4: 842a mv s0,a0
- 9a6: c62e sw a1,12(sp)
- 9a8: 8fd5 or a5,a5,a3
- 9aa: 2596 lhu a3,8(a1)
- 9ac: 8fd5 or a5,a5,a3
- 9ae: 25b6 lhu a3,10(a1)
- 9b0: 8fd5 or a5,a5,a3
- 9b2: a55e sh a5,12(a0)
- 9b4: 295e lhu a5,20(a0)
- 9b6: 07c2 slli a5,a5,0x10
- 9b8: 83c1 srli a5,a5,0x10
- 9ba: cff7f793 andi a5,a5,-769
- 9be: 8fd9 or a5,a5,a4
- 9c0: a95e sh a5,20(a0)
- 9c2: 0868 addi a0,sp,28
- 9c4: 355d jal 86a
- 9c6: 400147b7 lui a5,0x40014
- 9ca: 80078793 addi a5,a5,-2048 # 40013800 <_eusrstack+0x2000e800>
- 9ce: 45b2 lw a1,12(sp)
- 9d0: 04f41a63 bne s0,a5,a24
- 9d4: 57a2 lw a5,40(sp)
- 9d6: 2456 lhu a3,12(s0)
- 9d8: 4765 li a4,25
- 9da: 02e787b3 mul a5,a5,a4
- 9de: 06c2 slli a3,a3,0x10
- 9e0: 86c1 srai a3,a3,0x10
- 9e2: 4198 lw a4,0(a1)
- 9e4: 0406d263 bgez a3,a28
- 9e8: 0706 slli a4,a4,0x1
- 9ea: 2452 lhu a2,12(s0)
- 9ec: 0642 slli a2,a2,0x10
- 9ee: 02e7d7b3 divu a5,a5,a4
- 9f2: 06400713 li a4,100
- 9f6: 8641 srai a2,a2,0x10
- 9f8: 02e7d6b3 divu a3,a5,a4
- 9fc: 02e7f7b3 remu a5,a5,a4
- a00: 0692 slli a3,a3,0x4
- a02: 02065563 bgez a2,a2c
- a06: 078e slli a5,a5,0x3
- a08: 03278793 addi a5,a5,50
- a0c: 02e7d7b3 divu a5,a5,a4
- a10: 0077f713 andi a4,a5,7
- a14: 00d767b3 or a5,a4,a3
- a18: 07c2 slli a5,a5,0x10
- a1a: 83c1 srli a5,a5,0x10
- a1c: a41e sh a5,8(s0)
- a1e: 6145 addi sp,sp,48
- a20: f74ff06f j 194 <__riscv_restore_0>
- a24: 5792 lw a5,36(sp)
- a26: bf45 j 9d6