diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e68c7dd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+#
+
+obj/
+
+*.o
+*.elf
+*.hex
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/.cproject b/CH32V303-FreeRTOS/.cproject
index e496c79..3f7b7cc 100644
--- a/CH32V303-FreeRTOS/.cproject
+++ b/CH32V303-FreeRTOS/.cproject
@@ -109,6 +109,8 @@
+
+
@@ -136,6 +138,11 @@
+
+
+
+
+
diff --git a/CH32V303-FreeRTOS/.mrs/launch.json b/CH32V303-FreeRTOS/.mrs/launch.json
new file mode 100644
index 0000000..247b8ac
--- /dev/null
+++ b/CH32V303-FreeRTOS/.mrs/launch.json
@@ -0,0 +1,65 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "mrs-debugger",
+ "request": "launch",
+ "name": "CH32V303-FreeRTOS",
+ "cwd": "d:\\psx\\su806\\2.software\\mcu_git\\CH32V303-FreeRTOS",
+ "openOCDCfg": {
+ "useLocalOpenOCD": true,
+ "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe",
+ "configOptions": [
+ "-f \"c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/wch-riscv.cfg\" -c \"chip_id CH32V30x\""
+ ],
+ "gdbport": 3333,
+ "telnetport": 4444,
+ "tclport": 6666,
+ "host": "localhost",
+ "port": 3333,
+ "skipDownloadBeforeDebug": false,
+ "enablePageEraser": false,
+ "enableNoZeroWaitingAreaFlash": false
+ },
+ "gdbCfg": {
+ "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/Toolchain/RISC-V Embedded GCC/bin/riscv-none-embed-gdb.exe",
+ "commands": [
+ "set mem inaccessible-by-default off",
+ "set architecture riscv:rv32",
+ "set remotetimeout unlimited",
+ "set disassembler-options xw"
+ ],
+ "options": []
+ },
+ "startup": {
+ "initCommands": {
+ "initReset": true,
+ "initResetType": "init",
+ "armSemihosting": false,
+ "additionalCommands": []
+ },
+ "loadedFiles": {
+ "executableFile": "d:\\psx\\su806\\2.software\\mcu_git\\CH32V303-FreeRTOS\\obj\\CH32V303-FreeRTOS.elf",
+ "symbolFile": "d:\\psx\\su806\\2.software\\mcu_git\\CH32V303-FreeRTOS\\obj\\CH32V303-FreeRTOS.elf",
+ "executableFileOffset": 0,
+ "symbolFileOffset": 0
+ },
+ "runCommands": {
+ "runReset": true,
+ "runResetType": "halt",
+ "additionalCommands": [],
+ "setBreakAt": "handle_reset",
+ "continue": true,
+ "setProgramCounterAt": 0
+ },
+ "debugInRAM": false
+ },
+ "svdpath": "c:\\MounRiver\\MounRiver_Studio2\\resources\\app\\resources\\win32\\components\\WCH\\SDK\\default/RISC-V/CH32V307/NoneOS/CH32V307xx.svd",
+ "output": {
+ "showDebugGDBTrace": true,
+ "saveDebugOutputToFile": false,
+ "showDebugOutputTimestamps": true
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/.mrs/preferredEncoding.json b/CH32V303-FreeRTOS/.mrs/preferredEncoding.json
new file mode 100644
index 0000000..8d898b2
--- /dev/null
+++ b/CH32V303-FreeRTOS/.mrs/preferredEncoding.json
@@ -0,0 +1,8 @@
+{
+ "details": [
+ {
+ "file": "App/hardwareDriver/Inc/HD_GPIO.h",
+ "encoding": "gbk"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/application/Inc/freerotsTask.h b/CH32V303-FreeRTOS/App/application/Inc/freerotsTask.h
new file mode 100644
index 0000000..1c41881
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/application/Inc/freerotsTask.h
@@ -0,0 +1,11 @@
+#ifndef APP_FREERTOS_TASK_H_
+#define APP_FREERTOS_TASK_H_
+
+#include "pDebug.h"
+#include "FreeRTOS.h"
+#include "task.h"
+
+void startApp(void);
+
+
+#endif
diff --git a/CH32V303-FreeRTOS/App/application/Src/freerotsTask.c b/CH32V303-FreeRTOS/App/application/Src/freerotsTask.c
new file mode 100644
index 0000000..f3220d8
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/application/Src/freerotsTask.c
@@ -0,0 +1,53 @@
+
+#include "freerotsTask.h"
+
+
+#include "uart_dev.h"
+#include "HD_UART.h"
+#include "FM_GPIO.h"
+#include "FM_ADC.h"
+
+#define TASK1_TASK_PRIO 5
+#define TASK1_STK_SIZE 256
+
+TaskHandle_t Task1Task_Handler;
+uint8_t data[20] = "hello world\n";
+
+void task1_task(void *pvParameters)
+{
+ writePwrCtrlState(Android_PwrCtrl, PwrCtrlOpen);
+ proportionalInt();
+ while(1) {
+ // printf("task1 entry\r\n");
+ printf_adc_data();
+ USART_ITConfig(UART5, USART_IT_TXE, ENABLE);
+ uartInterruptSend(g_Upward_uart5_handle, data, 12);
+ vTaskDelay(1000);
+ }
+}
+
+
+/**
+ * @brief
+ * @param
+ * @retval
+ */
+void startApp(void)
+{
+ Init_Upward_uart(115200);
+ FM_GPIO_Init();
+ FM_ADC_Init();
+
+ /* create task */
+ xTaskCreate((TaskFunction_t )task1_task,
+ (const char* )"task1",
+ (uint16_t )TASK1_STK_SIZE,
+ (void* )NULL,
+ (UBaseType_t )TASK1_TASK_PRIO,
+ (TaskHandle_t* )&Task1Task_Handler);
+ vTaskStartScheduler();
+}
+
+
+
+
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_ADC.h b/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_ADC.h
new file mode 100644
index 0000000..0db2bdb
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_ADC.h
@@ -0,0 +1,13 @@
+#ifndef FM_ADC_H_
+#define FM_ADC_H_
+
+#include "HD_ADC.h"
+
+void FM_ADC_Init(void);
+void printf_adc_data(void);
+void proportionalInt(void);
+float getSOCPwrOnVoltage(void);
+float getInCurrent(void);
+float getInVoltage(void);
+
+#endif
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_GPIO.h b/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_GPIO.h
new file mode 100644
index 0000000..95fe421
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Inc/FM_GPIO.h
@@ -0,0 +1,32 @@
+#ifndef FM_GPIO_H_
+#define FM_GPIO_H_
+
+#include "HD_GPIO.h"
+#include "stdio.h"
+
+typedef enum _pwrCtrl{
+ J1_PwrCtrl = 1,
+ J2_PwrCtrl,
+ J3_PwrCtrl,
+ J4_PwrCtrl,
+ J5_PwrCtrl,
+ J6_PwrCtrl,
+ J7_PwrCtrl,
+ J8_PwrCtrl,
+ J9_PwrCtrl,
+ Android_PwrCtrl,
+}pwrCtrl;
+
+typedef enum _pwrCtrlState{
+ PwrCtrlClose = 0,
+ PwrCtrlOpen
+}pwrCtrlState;
+
+void FM_GPIO_Init(void);
+void feedDog(void);
+void writePwrCtrlState(uint8_t type, uint8_t State);
+uint8_t readPwrCtrlState(uint8_t type);
+void startResetAndroidModule(void);
+void stopResetAndroidModule(void);
+
+#endif
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Inc/flash.h b/CH32V303-FreeRTOS/App/functionalModule/Inc/flash.h
new file mode 100644
index 0000000..5ee758f
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Inc/flash.h
@@ -0,0 +1,16 @@
+
+#ifndef FM_FLASH_H_
+#define FM_FLASH_H_
+
+#include "ch32v30x.h"
+#include "HD_Flash.h"
+// #include "w25q256.h"
+
+void Flash_Init(void);
+void read_Flash(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead);
+void write_Flash(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);
+void erase_Sector_Flash(uint32_t secpos);
+
+
+
+#endif
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Inc/uart_dev.h b/CH32V303-FreeRTOS/App/functionalModule/Inc/uart_dev.h
new file mode 100644
index 0000000..8e810e1
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Inc/uart_dev.h
@@ -0,0 +1,66 @@
+#ifndef FM_UART_DEV_H_
+#define FM_UART_DEV_H_
+
+#include "ch32v30x.h"
+#include "HD_UART.h"
+#include "comm_types.h"
+#include "ring_queue.h"
+
+/* 是否使用中断发送,后期可能改为DMA发送 */
+#define UARTINTERRUPTSEND
+
+#define ASCII_CHAR_BACKSPACE 0x08 /* '\b' */
+#define ASCII_CHAR_CHARACTER_TABULATION 0x09 /* '\t' */
+#define ASCII_CHAR_LINE_FEED 0x0A /* '\n' */
+#define ASCII_CHAR_LINE_TABULATION 0x0B /* '\v' */
+#define ASCII_CHAR_FORM_FEED 0x0C /* '\f' */
+#define ASCII_CHAR_CARRIAGE_RETURN 0x0D /* '\r' */
+
+typedef enum{
+ J1_485_INDEX = 6,
+ J2_485_INDEX = 7,
+ J3_485_INDEX = 2,
+ J4_485_INDEX = 8,
+ J5_0_485_INDEX = 3,
+ Upward_UART_INDEX = 5,
+}uartIndex_e;
+
+typedef struct _uartSendInfo {
+ uint8_t *data; //指向数据
+#ifdef UARTINTERRUPTSEND
+ uint16_t count; //已经发送数据字节个数
+ uint16_t len; //数据长度
+#endif
+}uartSendInfo;
+
+/* UART 驱动数据结构,对应一个uart设备 */
+typedef struct _uart_device_info{
+ uint8_t init;
+ uartIndex_e uart_index;
+ uint32_t uart_baudrate;
+ RingQueue uart_ring_queue;
+ uartSendInfo uart_send_data;
+}uart_device_info;
+
+typedef uint32_t device_handle;
+extern device_handle g_J1_uart6_handle;
+extern device_handle g_J2_uart7_handle;
+extern device_handle g_J3_usart2_handle;
+extern device_handle g_J4_uart8_handle;
+extern device_handle g_J5_0_usart3_handle;
+extern device_handle g_Upward_uart5_handle;
+
+uint8_t uart_dev_in_char(device_handle device);
+int uart_dev_char_present(device_handle device);
+void Init_J1_485(uint32_t baud);
+void Init_J2_485(uint32_t baud);
+void Init_J3_485(uint32_t baud);
+void Init_J4_485(uint32_t baud);
+void Init_J5_0_485(uint32_t baud);
+void Init_Upward_uart(uint32_t baud);
+
+#ifdef UARTINTERRUPTSEND
+uint8_t uartInterruptSend(device_handle device, uint8_t *data, uint16_t len);
+#endif
+
+#endif
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Src/FM_ADC.c b/CH32V303-FreeRTOS/App/functionalModule/Src/FM_ADC.c
new file mode 100644
index 0000000..51d7ae8
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Src/FM_ADC.c
@@ -0,0 +1,94 @@
+
+#include "FM_ADC.h"
+
+/* adcɼתı */
+/* ϵͳѹ */
+static float P_PwrOn_Voltage;
+/* صĵѹ */
+static float P_In_Voltage;
+/* صĵ */
+static float P_In_Current;
+
+/* οѹĴС */
+#define referenceVoltage 3.3f
+
+/**
+ * @brief ɼadcУ
+ * @param val ɼadc
+ * @retval Уadc
+ */
+static uint16_t Get_ConversionVal(int16_t val)
+{
+ if((val + Calibrattion_Val) < 0 || val == 0)
+ return 0;
+ if((Calibrattion_Val + val) > 4095 || val == 4095)
+ return 4095;
+ return (val + Calibrattion_Val);
+}
+
+/**
+ * @brief ʼadc
+ * @param
+ * @retval
+ */
+void FM_ADC_Init(void)
+{
+ HD_ADC_InIt();
+ ADC_DMA_Init();
+ startAdcCapture();
+}
+
+/**
+ * @brief ӡadcɵ
+ * @param
+ * @retval
+ */
+void printf_adc_data(void)
+{
+ printf("adc : %d, %d, %d\n", adcData[0], adcData[1], adcData[2]);
+ printf("getSOCPwrOnVoltage: %d\n", (int)(getSOCPwrOnVoltage() * 1000.0f));
+ printf("getInCurrent: %d\n", (int)(getInCurrent() * 1000.0f));
+ printf("getInVoltage: %d\n", (int)(getInVoltage() * 1000.0f));
+}
+
+/**
+ * @brief ʼתı
+ * @param
+ * @retval
+ */
+void proportionalInt(void)
+{
+ P_PwrOn_Voltage = referenceVoltage / 4095.0f;
+ P_In_Voltage = ((100.0f + 10.0f) / 10.0f) * referenceVoltage / 4095.0f;
+ P_In_Current = ((1.0f / 50.0f) / (0.01f)) * referenceVoltage / 4095.0f;
+}
+
+/**
+ * @brief õsocѹ
+ * @param
+ * @retval
+ */
+float getSOCPwrOnVoltage(void)
+{
+ return (Get_ConversionVal(adcData[0]) * P_PwrOn_Voltage);
+}
+
+/**
+ * @brief õغӵĵ
+ * @param
+ * @retval
+ */
+float getInCurrent(void)
+{
+ return (Get_ConversionVal(adcData[1]) * P_In_Current);
+}
+
+/**
+ * @brief õغӵĵѹ
+ * @param
+ * @retval
+ */
+float getInVoltage(void)
+{
+ return (Get_ConversionVal(adcData[2]) * P_In_Voltage);
+}
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Src/FM_GPIO.c b/CH32V303-FreeRTOS/App/functionalModule/Src/FM_GPIO.c
new file mode 100644
index 0000000..6bca8de
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Src/FM_GPIO.c
@@ -0,0 +1,108 @@
+#include "FM_GPIO.h"
+
+
+/**
+ * @brief ʼGPIO
+ * @param
+ * @retval
+ */
+void FM_GPIO_Init(void)
+{
+ HD_GPIO_Init();
+}
+
+/**
+ * @brief ι
+ * @param
+ * @retval
+ */
+void feedDog(void)
+{
+ HD_GPIO_Write(WDI_GPIO_PROT, WDI_GPIO_PIN, GPIO_RESET);
+ HD_GPIO_Write(WDI_GPIO_PROT, WDI_GPIO_PIN, GPIO_SET);
+}
+
+/**
+ * @brief Դ״̬
+ * @param type Դӿ
+ state ״̬
+ * @retval
+ */
+void writePwrCtrlState(uint8_t type, uint8_t State)
+{
+ if (type == J1_PwrCtrl) {
+ HD_GPIO_Write(J1_PwrCtrl_GPIO_PROT, J1_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J2_PwrCtrl) {
+ HD_GPIO_Write(J2_PwrCtrl_GPIO_PROT, J2_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J3_PwrCtrl) {
+ HD_GPIO_Write(J3_PwrCtrl_GPIO_PROT, J3_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J4_PwrCtrl) {
+ HD_GPIO_Write(J4_PwrCtrl_GPIO_PROT, J4_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J5_PwrCtrl) {
+ HD_GPIO_Write(J5_PwrCtrl_GPIO_PROT, J5_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J6_PwrCtrl) {
+ HD_GPIO_Write(J6_PwrCtrl_GPIO_PROT, J6_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J7_PwrCtrl) {
+ HD_GPIO_Write(J7_PwrCtrl_GPIO_PROT, J7_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J8_PwrCtrl) {
+ HD_GPIO_Write(J8_PwrCtrl_GPIO_PROT, J8_PwrCtrl_GPIO_PIN, State);
+ } else if (type == J9_PwrCtrl) {
+ HD_GPIO_Write(J9_PwrCtrl_GPIO_PROT, J9_PwrCtrl_GPIO_PIN, State);
+ } else if (type == Android_PwrCtrl) {
+ HD_GPIO_Write(GPIO_PwrCtrl_GPIO_PROT, GPIO_PwrCtrl_GPIO_PIN, State);
+ }
+}
+
+/**
+ * @brief ȡԴ״̬
+ * @param type Դӿ
+ * @retval state ״̬
+ 0xFF ʹ
+ PwrCtrlClose ر״̬
+ PwrCtrlOpen ״̬
+ */
+uint8_t readPwrCtrlState(uint8_t type)
+{
+ if (type == J1_PwrCtrl) {
+ return HD_OutputGPIO_Read(J1_PwrCtrl_GPIO_PROT, J1_PwrCtrl_GPIO_PIN);
+ } else if (type == J2_PwrCtrl) {
+ return HD_OutputGPIO_Read(J2_PwrCtrl_GPIO_PROT, J2_PwrCtrl_GPIO_PIN);
+ } else if (type == J3_PwrCtrl) {
+ return HD_OutputGPIO_Read(J3_PwrCtrl_GPIO_PROT, J3_PwrCtrl_GPIO_PIN);
+ } else if (type == J4_PwrCtrl) {
+ return HD_OutputGPIO_Read(J4_PwrCtrl_GPIO_PROT, J4_PwrCtrl_GPIO_PIN);
+ } else if (type == J5_PwrCtrl) {
+ return HD_OutputGPIO_Read(J5_PwrCtrl_GPIO_PROT, J5_PwrCtrl_GPIO_PIN);
+ } else if (type == J6_PwrCtrl) {
+ return HD_OutputGPIO_Read(J6_PwrCtrl_GPIO_PROT, J6_PwrCtrl_GPIO_PIN);
+ } else if (type == J7_PwrCtrl) {
+ return HD_OutputGPIO_Read(J7_PwrCtrl_GPIO_PROT, J7_PwrCtrl_GPIO_PIN);
+ } else if (type == J8_PwrCtrl) {
+ return HD_OutputGPIO_Read(J8_PwrCtrl_GPIO_PROT, J8_PwrCtrl_GPIO_PIN);
+ } else if (type == J9_PwrCtrl) {
+ return HD_OutputGPIO_Read(J9_PwrCtrl_GPIO_PROT, J9_PwrCtrl_GPIO_PIN);
+ } else if (type == Android_PwrCtrl) {
+ return HD_OutputGPIO_Read(GPIO_PwrCtrl_GPIO_PROT, GPIO_PwrCtrl_GPIO_PIN);
+ }
+ return 0xFF;
+}
+
+/**
+ * @brief ʼλģ飬7-10SģḴλ
+ * @param
+ * @retval
+ */
+void startResetAndroidModule(void)
+{
+ HD_GPIO_Write(GPIO_PwrKey_GPIO_PROT, GPIO_PwrKey_GPIO_PIN, GPIO_SET);
+}
+
+/**
+ * @brief ֹͣλģ飬ʹÿʼλģ麯7-10Sģ鸴λʹøú
+ * @param
+ * @retval
+ */
+void stopResetAndroidModule(void)
+{
+ HD_GPIO_Write(GPIO_PwrKey_GPIO_PROT, GPIO_PwrKey_GPIO_PIN, GPIO_RESET);
+}
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Src/flash.c b/CH32V303-FreeRTOS/App/functionalModule/Src/flash.c
new file mode 100644
index 0000000..9b54d38
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Src/flash.c
@@ -0,0 +1,42 @@
+#include "flash.h"
+
+/**
+ * @brief flash初始化
+ * @param
+ */
+void Flash_Init(void)
+{
+ SPI_Flash_Init();
+}
+
+/**
+ * @brief 读取flash中的数据
+ * @param pBuffer 保存读取的数据
+ * @param ReadAddr 读取数据的位置
+ * @param NumByteToRead 读取数据的长度
+ */
+void read_Flash(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead)
+{
+ SPI_Flash_Read(pBuffer, ReadAddr, NumByteToRead);
+}
+
+/**
+ * @brief 将数据写入到flash中
+ * @param pBuffer 要写入的数据
+ * @param ReadAddr 要写入数据的位置
+ * @param NumByteToRead 要写入数据的长度
+ */
+void write_Flash(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite)
+{
+ SPI_Flash_Write(pBuffer, WriteAddr, NumByteToWrite);
+}
+
+
+/**
+ * @brief 清除flash中secpos扇区的数据
+ *
+ */
+void erase_Sector_Flash(uint32_t secpos)
+{
+ SPI_Flash_Erase_Sector(secpos);
+}
diff --git a/CH32V303-FreeRTOS/App/functionalModule/Src/uart_dev.c b/CH32V303-FreeRTOS/App/functionalModule/Src/uart_dev.c
new file mode 100644
index 0000000..3e7124b
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/functionalModule/Src/uart_dev.c
@@ -0,0 +1,646 @@
+#include "uart_dev.h"
+#include
+#include
+#include
+#include "pDebug.h"
+
+device_handle g_J1_uart6_handle;
+device_handle g_J2_uart7_handle;
+device_handle g_J3_usart2_handle;
+device_handle g_J4_uart8_handle;
+device_handle g_J5_0_usart3_handle;
+device_handle g_Upward_uart5_handle;
+
+/* 接收缓冲区数组 */
+uint8_t J1_Rbuffer[1] = {0x00};
+uint8_t J2_Rbuffer[1] = {0x00};
+uint8_t J3_Rbuffer[1] = {0x00};
+uint8_t J4_Rbuffer[1] = {0x00};
+uint8_t J5_0_Rbuffer[1] = {0x00};
+uint8_t Upward_Rbuffer[1] = {0x00};
+
+/* 环形buff */
+#define J485BuffLen 256
+uint8_t J1_inBuff[J485BuffLen];
+uint8_t J2_inBuff[J485BuffLen];
+uint8_t J3_inBuff[J485BuffLen];
+uint8_t J4_inBuff[J485BuffLen];
+uint8_t J5_0_inBuff[J485BuffLen];
+#define UpwardBuffLen 1024
+uint8_t Upward_inBuff[UpwardBuffLen];
+
+/* 用于当做发送时的标志位 8个位,分别对应各个串口 */
+#define J1_485_Send 0x01
+#define J2_485_Send 0x02
+#define J3_485_Send 0x04
+#define J4_485_Send 0x08
+#define J5_0_485_Send 0x20
+#define Upward_uart_Send 0x40
+static uint8_t uartInterruptSendFlag = 0;
+
+// static uint8_t getJ1_485_SendState(void);
+static void setJ1_485_SendState(uint8_t state);
+// static uint8_t getJ2_485_SendState(void);
+static void setJ2_485_SendState(uint8_t state);
+// static uint8_t getJ3_485_SendState(void);
+static void setJ3_485_SendState(uint8_t state);
+// static uint8_t getJ4_485_SendState(void);
+static void setJ4_485_SendState(uint8_t state);
+// static uint8_t getJ5_0_485_SendState(void);
+static void setJ5_0_485_SendState(uint8_t state);
+// static uint8_t getUpward_uart_SendState(void);
+static void setUpward_uart_SendState(uint8_t state);
+
+
+/**
+ * @brief 串口信息初始化,串口号及波特率.
+ * @param uart_index 对应的硬件串口号
+ * @param uart_baudrate 波特率
+ */
+uart_device_info uart_devices[]={
+ [0] = {
+ .init = 0,
+ .uart_index = J1_485_INDEX,
+ .uart_baudrate = 9600,
+ },
+ [1] = {
+ .init = 0,
+ .uart_index = J2_485_INDEX,
+ .uart_baudrate = 9600,
+ },
+ [2] = {
+ .init = 0,
+ .uart_index = J3_485_INDEX,
+ .uart_baudrate = 9600,
+ },
+ [3] = {
+ .init = 0,
+ .uart_index = J4_485_INDEX,
+ .uart_baudrate = 9600,
+ },
+ [4] = {
+ .init = 0,
+ .uart_index = J5_0_485_INDEX,
+ .uart_baudrate = 9600,
+ },
+ [5] = {
+ .init = 0,
+ .uart_index = Upward_UART_INDEX,
+ .uart_baudrate = 115200,
+ },
+};
+
+static device_handle uart_dev_init(uartIndex_e uart_index, uint8_t *buff, int buff_size);
+static void uart_init(uartIndex_e uart_index, uint32_t baud);
+
+
+/**
+ * @brief 初始化串口设备.
+ * @param uart_index 初始化串口号
+ * @param buff 串口循环buff地址
+ * @param buff_size 串口循环buff对应大小
+ * @retval 串口句柄
+ */
+device_handle uart_dev_init(uartIndex_e uart_index, uint8_t *buff, int buff_size)
+{
+ int i = 0;
+ for (; i < ELEMENT_OF(uart_devices); i++) {
+ if (uart_devices[i].uart_index == uart_index) {
+ if (!uart_devices[i].init) {
+ InitRingQueue(&uart_devices[i].uart_ring_queue, buff, buff_size);
+ uart_init(uart_index, uart_devices[i].uart_baudrate);
+
+ uart_devices[i].init = 1;
+ }
+ return (device_handle)(&uart_devices[i]);
+ }
+ }
+ return 0;
+}
+
+/**
+ * @brief 串口硬件初始化.
+ * @param uart_index 串口号
+ * @param baud 波特率
+ * @retval None
+ */
+void uart_init(uartIndex_e uart_index, uint32_t baud)
+{
+ if (uart_index == J1_485_INDEX) {
+ J1_485_Init(baud);
+ } else if (uart_index == J2_485_INDEX) {
+ J2_485_Init(baud);
+ } else if (uart_index == J3_485_INDEX) {
+ J3_485_Init(baud);
+ } else if (uart_index == J4_485_INDEX) {
+ J4_485_Init(baud);
+ } else if (uart_index == J5_0_485_INDEX) {
+ J5_0_485_Init(baud);
+ } else if (uart_index == Upward_UART_INDEX) {
+ Upward_UART5_Init(baud);
+ }
+}
+
+/**
+ * @brief 从串口设备循环buff读取一个数据.
+ * @param device 串口句柄
+ * @retval 读取到的字符
+ */
+uint8_t uart_dev_in_char(device_handle device)
+{
+ uart_device_info *device_info = (uart_device_info *)device;
+ char c = 0;
+
+ if (uart_dev_char_present(device))
+ OutRingQueue(&device_info->uart_ring_queue, (u_int8_t*)&c);
+ return c;
+}
+
+/**
+ * @brief 判断串口设备循环buff是否有数据.
+ * @param device 串口句柄
+ * @retval 0 空 1有数据
+ */
+int uart_dev_char_present(device_handle device)
+{
+ uart_device_info *device_info = (uart_device_info *)device;
+
+ if((!device) || (!device_info->init))
+ return 0;
+
+ return !RingQueueEmpty(&device_info->uart_ring_queue);
+}
+
+/* 初始化 */
+void Init_J1_485(uint32_t baud)
+{
+ uart_devices[0].uart_baudrate = baud;
+ g_J1_uart6_handle = uart_dev_init(J1_485_INDEX, J1_inBuff, J485BuffLen);
+}
+
+void Init_J2_485(uint32_t baud)
+{
+ uart_devices[1].uart_baudrate = baud;
+ g_J2_uart7_handle = uart_dev_init(J2_485_INDEX, J2_inBuff, J485BuffLen);
+}
+
+void Init_J3_485(uint32_t baud)
+{
+ uart_devices[2].uart_baudrate = baud;
+ g_J3_usart2_handle = uart_dev_init(J3_485_INDEX, J3_inBuff, J485BuffLen);
+}
+
+void Init_J4_485(uint32_t baud)
+{
+ uart_devices[3].uart_baudrate = baud;
+ g_J4_uart8_handle = uart_dev_init(J4_485_INDEX, J4_inBuff, J485BuffLen);
+}
+
+void Init_J5_0_485(uint32_t baud)
+{
+ uart_devices[4].uart_baudrate = baud;
+ g_J5_0_usart3_handle = uart_dev_init(J5_0_485_INDEX, J5_0_inBuff, J485BuffLen);
+}
+
+void Init_Upward_uart(uint32_t baud)
+{
+ uart_devices[5].uart_baudrate = baud;
+ g_Upward_uart5_handle = uart_dev_init(Upward_UART_INDEX, Upward_inBuff, UpwardBuffLen);
+}
+
+/**
+ * @brief 得到串口的发送状态
+ * @param device 设备
+ * @retval 0:发生完成 1:发送中 0xFF:错误
+ */
+uint8_t getUartSendState(device_handle device)
+{
+ if (device == g_J1_uart6_handle) {
+ return uartInterruptSendFlag & J1_485_Send;
+ }
+ else if (device == g_J2_uart7_handle) {
+ return uartInterruptSendFlag & J2_485_Send;
+ }
+ else if (device == g_J3_usart2_handle) {
+ return uartInterruptSendFlag & J3_485_Send;
+ }
+ else if (device == g_J4_uart8_handle) {
+ return uartInterruptSendFlag & J4_485_Send;
+ }
+ else if (device == g_J5_0_usart3_handle) {
+ return uartInterruptSendFlag & J5_0_485_Send;
+ }
+ else if (device == g_Upward_uart5_handle) {
+ return uartInterruptSendFlag & Upward_uart_Send;
+ }
+ else {
+ return 0xFF;
+ }
+}
+
+// /**
+// * @brief 设置设备的发送状态
+// * @param
+// state 0:发生完成 1:发送中
+// * @retval
+// */
+// void setUartSendState(device_handle device, uint8_t state)
+// {
+// if (device == g_J1_uart6_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= J1_485_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~J1_485_Send);
+// }
+// }
+// else if (device == g_J2_uart7_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= J2_485_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~J2_485_Send);
+// }
+// }
+// else if (device == g_J3_usart2_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= J3_485_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~J3_485_Send);
+// }
+// }
+// else if (device == g_J4_uart8_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= J4_485_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~J4_485_Send);
+// }
+// }
+// else if (device == g_J5_0_usart3_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= J5_0_485_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~J5_0_485_Send);
+// }
+// }
+// else if (device == g_Upward_uart5_handle) {
+// if (state == 1) {
+// uartInterruptSendFlag |= Upward_uart_Send;
+// }
+// else if (state == 0) {
+// uartInterruptSendFlag &= (~Upward_uart_Send);
+// }
+// }
+// }
+
+/**
+ * @brief 得到J2_485的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getJ1_485_SendState(void)
+{
+ return uartInterruptSendFlag & J1_485_Send;
+}
+
+/**
+ * @brief 设置J2_485的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setJ1_485_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= J1_485_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~J1_485_Send);
+ }
+}
+
+/**
+ * @brief 得到J2_485的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getJ2_485_SendState(void)
+{
+ return uartInterruptSendFlag & J2_485_Send;
+}
+
+/**
+ * @brief 设置J2_485的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setJ2_485_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= J2_485_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~J2_485_Send);
+ }
+}
+
+/**
+ * @brief 得到J3_485的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getJ3_485_SendState(void)
+{
+ return uartInterruptSendFlag & J3_485_Send;
+}
+
+/**
+ * @brief 设置J3_485的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setJ3_485_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= J3_485_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~J3_485_Send);
+ }
+}
+
+/**
+ * @brief 得到J4_485的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getJ4_485_SendState(void)
+{
+ return uartInterruptSendFlag & J4_485_Send;
+}
+
+/**
+ * @brief 设置J4_485的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setJ4_485_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= J4_485_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~J4_485_Send);
+ }
+}
+
+/**
+ * @brief 得到J5_0_485的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getJ5_0_485_SendState(void)
+{
+ return uartInterruptSendFlag & J5_0_485_Send;
+}
+
+/**
+ * @brief 设置J1_485的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setJ5_0_485_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= J5_0_485_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~J5_0_485_Send);
+ }
+}
+
+/**
+ * @brief 得到Upward_uart的发送状态
+ * @param
+ * @retval 0:发生完成 1:发送中
+ */
+uint8_t getUpward_uart_SendState(void)
+{
+ return uartInterruptSendFlag & Upward_uart_Send;
+}
+
+/**
+ * @brief 设置Upward_uart的发送状态
+ * @param 0:发生完成 1:发送中
+ * @retval
+ */
+void setUpward_uart_SendState(uint8_t state)
+{
+ if (state == 1) {
+ uartInterruptSendFlag |= Upward_uart_Send;
+ }
+ else if (state == 0) {
+ uartInterruptSendFlag &= (~Upward_uart_Send);
+ }
+}
+
+/* 串口中断处理函数 */
+void J3_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(J3_USART, USART_IT_RXNE) != RESET) {
+ J3_Rbuffer[0] = USART_ReceiveData(J3_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_J3_usart2_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, J3_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(J3_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_J3_usart2_handle;
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(J3_USART, USART_IT_TXE, DISABLE);
+ setJ3_485_SendState(0);
+ return;
+ }
+ USART_SendData(J3_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+void J5_0_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(J5_0_USART, USART_IT_RXNE) != RESET) { //中断产生
+ J5_0_Rbuffer[0] = USART_ReceiveData(J5_0_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_J5_0_usart3_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, J5_0_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(J5_0_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_J5_0_usart3_handle;
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(J5_0_USART, USART_IT_TXE, DISABLE);
+ setJ5_0_485_SendState(0);
+ return;
+ }
+ USART_SendData(J5_0_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+void Upward_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(Upward_USART, USART_IT_RXNE) != RESET) { //中断产生
+ Upward_Rbuffer[0] = USART_ReceiveData(Upward_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_Upward_uart5_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, Upward_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(Upward_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_Upward_uart5_handle;
+ // log_info("%d \n", dev->uart_send_data.count);
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(Upward_USART, USART_IT_TXE, DISABLE);
+ setUpward_uart_SendState(0);
+ return;
+ }
+ USART_SendData(Upward_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+void J1_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(J1_USART, USART_IT_RXNE) != RESET) { //中断产生
+ J1_Rbuffer[0] = USART_ReceiveData(J1_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_J1_uart6_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, J1_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(J1_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_J1_uart6_handle;
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(J1_USART, USART_IT_TXE, DISABLE);
+ setJ1_485_SendState(0);
+ return;
+ }
+ USART_SendData(J1_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+void J2_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(J2_USART, USART_IT_RXNE) != RESET) { //中断产生
+ J2_Rbuffer[0] = USART_ReceiveData(J2_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_J2_uart7_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, J2_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(J2_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_J2_uart7_handle;
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(J2_USART, USART_IT_TXE, DISABLE);
+ setJ2_485_SendState(0);
+ return;
+ }
+ USART_SendData(J2_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+void J4_Interrupt()
+{
+ /* 数据接收中断 */
+ if (USART_GetITStatus(J4_USART, USART_IT_RXNE) != RESET) { //中断产生
+ J4_Rbuffer[0] = USART_ReceiveData(J4_USART); //接收数据
+ uart_device_info *dev = (uart_device_info *)g_J4_uart8_handle;
+ if(!RingQueueFull(&dev->uart_ring_queue))
+ InRingQueue(&dev->uart_ring_queue, J4_Rbuffer[0]);
+ }
+
+#ifdef UARTINTERRUPTSEND
+ /* 数据发送中断 */
+ if (USART_GetITStatus(J4_USART, USART_IT_TXE) != RESET) {
+ uart_device_info *dev = (uart_device_info *)g_J4_uart8_handle;
+ if (dev->uart_send_data.count >= dev->uart_send_data.len) {
+ USART_ITConfig(J4_USART, USART_IT_TXE, DISABLE);
+ setJ4_485_SendState(0);
+ return;
+ }
+ USART_SendData(J4_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+#endif
+}
+
+#ifdef UARTINTERRUPTSEND
+/**
+ * @brief 通过中断发送
+ * @param device 设备
+ data 指向数据的指针
+ len 数据长度
+ * @retval 0:成功
+ 1:上次数据还未发送完成
+ 0xFF:错误
+ */
+uint8_t uartInterruptSend(device_handle device,uint8_t *data, uint16_t len)
+{
+ /* 上次未发送完,或设备不存在 */
+ if (getUartSendState(device)) {
+ return getUartSendState(device);
+ }
+
+ /* 指向数据 */
+ uart_device_info *dev = (uart_device_info *)device;
+ dev->uart_send_data.data = data;
+ dev->uart_send_data.count = 0;
+ dev->uart_send_data.len = len;
+
+ /* 开始发送 */
+ if (device == g_J1_uart6_handle) {
+ USART_ITConfig(J1_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(J1_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+ else if (device == g_J2_uart7_handle) {
+ USART_ITConfig(J2_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(J2_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+ else if (device == g_J3_usart2_handle) {
+ USART_ITConfig(J3_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(J3_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+ else if (device == g_J4_uart8_handle) {
+ USART_ITConfig(J4_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(J4_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+ else if (device == g_J5_0_usart3_handle) {
+ USART_ITConfig(J5_0_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(J5_0_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+ else if (device == g_Upward_uart5_handle) {
+ USART_ITConfig(Upward_USART, USART_IT_TXE, ENABLE);
+ USART_SendData(Upward_USART, dev->uart_send_data.data[dev->uart_send_data.count++]);
+ }
+
+ return 0;
+}
+#endif
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_ADC.h b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_ADC.h
new file mode 100644
index 0000000..dc3e8e0
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_ADC.h
@@ -0,0 +1,19 @@
+#ifndef HD_ADC_H_
+#define HD_ADC_H_
+
+#include "ch32v30x.h"
+
+extern uint16_t adcData[];
+extern int16_t Calibrattion_Val;
+
+/* adcɼݵӦ */
+#define PwrOnNum 0
+#define CurrentNum 1
+#define VoltageNum 2
+
+void HD_ADC_InIt(void);
+void ADC_DMA_Init(void);
+void startAdcCapture(void);
+
+
+#endif
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_Flash.h b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_Flash.h
new file mode 100644
index 0000000..9897169
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_Flash.h
@@ -0,0 +1,98 @@
+/*
+ * Flash.h
+ *
+ * Created on: 2024516
+ * Author: 34509
+ */
+
+#ifndef HARDWARE_SPI_FLASH_H_
+#define HARDWARE_SPI_FLASH_H_
+
+#include "ch32v30x.h"
+
+
+/*****************************************
+
+*@Note
+
+ Winbond W25Qxx SPIFLASH
+
+pins:
+
+ CS PA15(SPI3_NSS)
+
+ DO PB4(SPI3_MISO)
+
+ WP 3.3V
+
+ DI PB5(SPI3_MOSI)
+
+ CLK PB3(SPI3_SCK)
+
+ HOLD 3.3V
+
+*******************************************/
+#define RCC_APB2Periph_GPIOX RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
+#define RCC_APB1Periph_SPIX RCC_APB1Periph_SPI3
+
+#define CS_PIN GPIO_Pin_15
+#define CS_GPIO GPIOA
+
+#define DO_PIN GPIO_Pin_4
+#define DO_GPIO GPIOB
+
+#define DI_PIN GPIO_Pin_5
+#define DI_GPIO GPIOB
+
+#define CLK_PIN GPIO_Pin_3
+#define CLK_GPIO GPIOB
+
+#define SPIX SPI3
+
+/* Winbond SPI Falsh ID */
+#define W25Q80 0XEF13
+#define W25Q16 0XEF14
+#define W25Q32 0XEF15
+#define W25Q64 0XEF16
+#define W25Q128 0XEF17
+
+
+
+/* Winbond SPIFalsh Instruction List ָ */
+#define W25X_WriteEnable 0x06
+#define W25X_WriteDisable 0x04
+#define W25X_ReadStatusReg 0x05
+#define W25X_WriteStatusReg 0x01
+#define W25X_ReadData 0x03
+#define W25X_FastReadData 0x0B
+#define W25X_FastReadDual 0x3B
+#define W25X_PageProgram 0x02
+#define W25X_BlockErase 0xD8
+#define W25X_SectorErase 0x20
+#define W25X_ChipErase 0xC7
+#define W25X_PowerDown 0xB9
+#define W25X_ReleasePowerDown 0xAB
+#define W25X_DeviceID 0xAB
+#define W25X_ManufactDeviceID 0x90
+#define W25X_JedecDeviceID 0x9F
+
+void SPI_Flash_Init(void);
+u8 SPI_ReadWriteByte(u8 TxData);
+u8 SPI_Flash_ReadSR(void);
+void SPI_FLASH_Write_SR(u8 sr);
+void SPI_Flash_Wait_Busy(void);
+void SPI_FLASH_Write_Enable(void);
+void SPI_FLASH_Write_Disable(void);
+u16 SPI_Flash_ReadID(void);
+void SPI_Flash_Erase_Sector(u32 Dst_Addr);
+void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 size);
+void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 size);
+void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 size);
+void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 size);
+void SPI_Flash_Erase_Chip(void);
+void SPI_Flash_PowerDown(void);
+void SPI_Flash_WAKEUP(void);
+
+void SPI_Flash_TEST(void);
+
+#endif /* HARDWARE_SPI_FLASH_H_ */
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_GPIO.h b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_GPIO.h
new file mode 100644
index 0000000..7c6d9fe
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_GPIO.h
@@ -0,0 +1,54 @@
+#ifndef HD_GPIO_H_
+#define HD_GPIO_H_
+
+#include "ch32v30x.h"
+
+/* Դ */
+#define J1_PwrCtrl_GPIO_PROT GPIOE
+#define J1_PwrCtrl_GPIO_PIN GPIO_Pin_7
+#define J2_PwrCtrl_GPIO_PROT GPIOE
+#define J2_PwrCtrl_GPIO_PIN GPIO_Pin_8
+#define J3_PwrCtrl_GPIO_PROT GPIOE
+#define J3_PwrCtrl_GPIO_PIN GPIO_Pin_9
+#define J4_PwrCtrl_GPIO_PROT GPIOE
+#define J4_PwrCtrl_GPIO_PIN GPIO_Pin_10
+#define J5_PwrCtrl_GPIO_PROT GPIOE
+#define J5_PwrCtrl_GPIO_PIN GPIO_Pin_11
+#define J6_PwrCtrl_GPIO_PROT GPIOE
+#define J6_PwrCtrl_GPIO_PIN GPIO_Pin_12
+#define J7_PwrCtrl_GPIO_PROT GPIOE
+#define J7_PwrCtrl_GPIO_PIN GPIO_Pin_13
+#define J8_PwrCtrl_GPIO_PROT GPIOE
+#define J8_PwrCtrl_GPIO_PIN GPIO_Pin_14
+#define J9_PwrCtrl_GPIO_PROT GPIOE
+#define J9_PwrCtrl_GPIO_PIN GPIO_Pin_15
+
+/* ģ鹩ʹ */
+#define GPIO_PwrCtrl_GPIO_PROT GPIOE
+#define GPIO_PwrCtrl_GPIO_PIN GPIO_Pin_3
+
+/* ģλ */
+#define GPIO_PwrKey_GPIO_PROT GPIOE
+#define GPIO_PwrKey_GPIO_PIN GPIO_Pin_2
+
+/* ι */
+#define WDI_GPIO_PROT GPIOC
+#define WDI_GPIO_PIN GPIO_Pin_13
+
+#define GPIOTypeDef GPIO_TypeDef
+#define GPIOPin uint16_t
+
+/* Bit_SET and Bit_RESET enumeration */
+typedef enum {
+ GPIO_RESET = 0,
+ GPIO_SET
+}BitOperation;
+
+
+
+void HD_GPIO_Init(void);
+void HD_GPIO_Write(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin, BitOperation BitVal);
+uint8_t HD_InputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin);
+uint8_t HD_OutputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin);
+
+#endif
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_UART.h b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_UART.h
new file mode 100644
index 0000000..9727f4c
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Inc/HD_UART.h
@@ -0,0 +1,103 @@
+#ifndef HARDWARE_RS485_UART_H_
+#define HARDWARE_RS485_UART_H_
+
+#include "ch32v30x.h"
+
+// #define uart4_enable
+
+
+#define J1_USART UART6
+#define J2_USART UART7
+#define J3_USART USART2
+#define J4_USART UART8
+#define J5_0_USART USART3
+#define Upward_USART UART5
+
+/* 6 PE5 */
+#define J1_DE_PROT GPIOE
+#define J1_DE_PIN GPIO_Pin_5
+
+/* 7 PE6 */
+#define J2_DE_PROT GPIOE
+#define J2_DE_PIN GPIO_Pin_6
+
+/* 2 PA1 */
+#define J3_DE_PROT GPIOA
+#define J3_DE_PIN GPIO_Pin_1
+
+/* 8 PE5 */
+#define J4_DE_PROT GPIOB
+#define J4_DE_PIN GPIO_Pin_0
+
+/* 3 ʱ */
+/*
+| A - B - C - YX |
+| 0 - 0 - 0 - J0 |
+| 0 - 0 - 1 - J5 |
+| 0 - 1 - 0 - J6 |
+| 0 - 1 - 1 - J7 |
+| 1 - 0 - 0 - J8 |
+| 1 - 0 - 1 - J9 |
+*/
+#define J5_0_DE_PROT GPIOD
+#define J5_0_DE_PIN GPIO_Pin_8
+#define J5_0_A_PROT GPIOD
+#define J5_0_A_PIN GPIO_Pin_9
+#define J5_0_B_PROT GPIOD
+#define J5_0_B_PIN GPIO_Pin_10
+#define J5_0_C_PROT GPIOD
+#define J5_0_C_PIN GPIO_Pin_11
+
+#define write485 Bit_SET
+#define read485 Bit_RESET
+
+/* J1_UART6 */
+void J1_485_Init(uint32_t baud);
+#define readJ1_485 GPIO_WriteBit(J1_DE_PROT, J1_DE_PIN, read485);
+#define writeJ1_485 GPIO_WriteBit(J1_DE_PROT, J1_DE_PIN, write485);
+
+/* J2_UART7 */
+void J2_485_Init(uint32_t baud);
+#define readJ2_485 GPIO_WriteBit(J2_DE_PROT, J2_DE_PIN, read485);
+#define writeJ2_485 GPIO_WriteBit(J2_DE_PROT, J2_DE_PIN, write485);
+
+/* J3_USART2 */
+void J3_485_Init(uint32_t baud);
+#define readJ3_485 GPIO_WriteBit(J3_DE_PROT, J3_DE_PIN, read485);
+#define writeJ3_485 GPIO_WriteBit(J3_DE_PROT, J3_DE_PIN, write485);
+
+/* J4_UART8 */
+void J4_485_Init(uint32_t baud);
+#define readJ4_485 GPIO_WriteBit(J4_DE_PROT, J4_DE_PIN, read485);
+#define writeJ4_485 GPIO_WriteBit(J4_DE_PROT, J4_DE_PIN, write485);
+
+/* J0-5_USART3 */
+void J5_0_485_Init(uint32_t baud);
+#define readJ5_0_485 GPIO_WriteBit(J5_0_DE_PROT, J5_0_DE_PIN, read485);
+#define writeJ5_0_485 GPIO_WriteBit(J5_0_DE_PROT, J5_0_DE_PIN, write485);
+void USART_CONNET_J0(void);
+void USART_CONNET_J5(void);
+void USART_CONNET_J6(void);
+void USART_CONNET_J7(void);
+void USART_CONNET_J8(void);
+void USART_CONNET_J9(void);
+
+#ifdef uart4_enable
+/* LORA_UART4 */
+void LORA_UART4_Init(uint32_t baud);
+#endif
+
+/* Upward_UART5 */
+void Upward_UART5_Init(uint32_t baud);
+
+extern void J3_Interrupt();
+extern void J5_0_Interrupt();
+extern void Upward_Interrupt();
+extern void J1_Interrupt();
+extern void J2_Interrupt();
+extern void J4_Interrupt();
+
+void USARTx_SendByte(USART_TypeDef* pUSARTx, uint8_t data);
+void USARTx_SendStr_Len(USART_TypeDef* pUSARTx, char *str, int len);
+
+#endif /* HARDWARE_RS485_UART_H_ */
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_ADC.c b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_ADC.c
new file mode 100644
index 0000000..7bb5272
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_ADC.c
@@ -0,0 +1,100 @@
+
+#include "HD_ADC.h"
+
+/* adcУֵ */
+int16_t Calibrattion_Val = 0;
+#define adcNum 3
+/* ͨdmaadcɼݴ */
+uint16_t adcData[adcNum] = {0};
+
+/**
+ * @brief ʼadc
+ * @param
+ * @retval
+ */
+void HD_ADC_InIt(void)
+{
+ ADC_InitTypeDef ADC_InitStructure={0};
+ GPIO_InitTypeDef GPIO_InitStructure={0};
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
+ RCC_ADCCLKConfig(RCC_PCLK2_Div4);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ ADC_DeInit(ADC1);
+ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
+ ADC_InitStructure.ADC_ScanConvMode = ENABLE;
+ ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
+ ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
+ ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
+ ADC_InitStructure.ADC_NbrOfChannel = adcNum;
+ ADC_Init(ADC1, &ADC_InitStructure);
+
+ ADC_DMACmd(ADC1, ENABLE);
+ ADC_Cmd(ADC1, ENABLE);
+
+ ADC_BufferCmd(ADC1, DISABLE); //disable buffer
+ ADC_ResetCalibration(ADC1);
+ while(ADC_GetResetCalibrationStatus(ADC1));
+ ADC_StartCalibration(ADC1);
+ while(ADC_GetCalibrationStatus(ADC1));
+ Calibrattion_Val = Get_CalibrationValue(ADC1);
+}
+
+/**
+ * @brief ʼadcdma
+ * @param
+ * @retval
+ */
+void ADC_DMA_Init(void)
+{
+ DMA_InitTypeDef DMA_InitStructure={0};
+
+ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
+
+ DMA_DeInit(DMA1_Channel1);
+ DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->RDATAR;
+ DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)adcData;
+ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
+ DMA_InitStructure.DMA_BufferSize = adcNum;
+ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
+ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
+ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
+ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
+ DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
+ DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
+ DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
+ DMA_Init(DMA1_Channel1, &DMA_InitStructure);
+}
+
+/**
+ * @brief adcɼ
+ * @param
+ * @retval
+ */
+void startAdcCapture(void)
+{
+ /* ʹadcͨ */
+ DMA_Cmd(DMA1_Channel1 , ENABLE);
+
+ /* ת˳ */
+ ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);
+ ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 2, ADC_SampleTime_239Cycles5);
+ ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 3, ADC_SampleTime_239Cycles5);
+
+ /* ʹADCdma */
+ ADC_DMACmd(ADC1, ENABLE);
+
+ /* adc */
+ ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+}
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_Flash.c b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_Flash.c
new file mode 100644
index 0000000..969344c
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_Flash.c
@@ -0,0 +1,456 @@
+/*
+ * Flash.c
+ *
+ * Created on: 2024516
+ * Author: 34509
+ */
+#include "HD_Flash.h"
+#include "pDebug.h"
+
+/* Global Variable */
+uint8_t SPI_FLASH_BUF[4096];
+
+void delay_us(uint32_t us) {
+ volatile uint32_t cycles = us * SystemCoreClock / 4000000; // ʵ
+ while (cycles--) {
+ __asm__ volatile ("nop"); // ֹѭŻ
+ }
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Init
+* Description : Configuring the SPI for operation flash.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+ SPI_InitTypeDef SPI_InitStructure;
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOX, ENABLE );
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPIX, ENABLE );
+
+ GPIO_InitStructure.GPIO_Pin = CS_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(CS_GPIO, &GPIO_InitStructure);
+ GPIO_SetBits(CS_GPIO, CS_PIN); //CSPA15øߵƽ
+
+ GPIO_InitStructure.GPIO_Pin = CLK_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(CLK_GPIO, &GPIO_InitStructure );
+
+ GPIO_InitStructure.GPIO_Pin = DO_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //
+ GPIO_Init(DO_GPIO, &GPIO_InitStructure );
+
+ GPIO_InitStructure.GPIO_Pin = DI_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(DI_GPIO, &GPIO_InitStructure );
+
+ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPIͨѶΪ˫ȫ˫ʽ
+ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPIΪģʽ
+ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPIͨѶ֡СΪ8λ
+ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //SPIʱӼΪߵƽ
+ SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //SPIʱλΪSCKżزɼ
+ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSSţƬѡţʹģʽΪģʽ
+ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //òʷƵΪ4Ƶ
+ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //ݴΪλǰ
+ SPI_InitStructure.SPI_CRCPolynomial = 7; //SPICRCУжʽֵ
+ SPI_Init(SPIX, &SPI_InitStructure); //ʼSPI
+
+ SPI_Cmd(SPIX, ENABLE); //ʹSPI3
+}
+
+/*******************************************************************************
+* Function Name : SPIX_ReadWriteByte
+* Description : SPIX read or write one byte.
+* Input : TxData: write one byte data.
+* Return : Read one byte data.
+*******************************************************************************/
+u8 SPI_ReadWriteByte(u8 TxData)
+{
+ u8 i=0;
+ while (SPI_I2S_GetFlagStatus(SPIX, SPI_I2S_FLAG_TXE) == RESET) //ȴͻΪգTXE¼
+ {
+ i++;
+ if(i>200)return 0;
+ }
+ SPI_I2S_SendData(SPIX, TxData); //дݼĴҪдд뷢ͻͨSPI1һ
+ i=0;
+ while (SPI_I2S_GetFlagStatus(SPIX, SPI_I2S_FLAG_RXNE) == RESET) //ȴջǿգRXNE¼
+ {
+ i++;
+ if(i>200)return 0;
+ }
+ return SPI_I2S_ReceiveData(SPIX); //ȡݼĴȡջݣSPI1յ
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_ReadSR
+* Description : Read W25Qxx status register.
+* BIT7 6 5 4 3 2 1 0
+* SPR RV TB BP2 BP1 BP0 WEL BUSY
+* Input : None
+* Return : byte: status register value.
+*******************************************************************************/
+u8 SPI_Flash_ReadSR(void)
+{
+ u8 byte=0;
+
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0); //PA2=0,ʹƬѡź
+ SPI_ReadWriteByte(W25X_ReadStatusReg); //Ͷ״̬Ĵ
+ byte=SPI_ReadWriteByte(0Xff); //ȡһֽ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1); //ȡƬѡź
+
+ return byte;
+}
+
+/*******************************************************************************
+* Function Name : SPI_FLASH_Write_SR
+* Description : Write W25Qxx status register.
+* Input : sr:status register value.
+* Return : None
+*******************************************************************************/
+void SPI_FLASH_Write_SR(u8 sr)
+{
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_WriteStatusReg); //д״̬Ĵ
+ SPI_ReadWriteByte(sr); //дһֽ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Wait_Busy
+* Description : Wait flash free.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Wait_Busy(void)
+{
+ while((SPI_Flash_ReadSR()&0x01)==0x01); //ȴFLASH
+}
+
+/*******************************************************************************
+* Function Name : SPI_FLASH_Write_Enable
+* Description : Enable flash write.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_FLASH_Write_Enable(void)
+{
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_WriteEnable); //дʹ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+}
+
+/*******************************************************************************
+* Function Name : SPI_FLASH_Write_Disable
+* Description : Disable flash write.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_FLASH_Write_Disable(void)
+{
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_WriteDisable); //дָֹ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_ReadID
+* Description : Read flash ID.
+* Input : None
+* Return : Temp: FLASH ID.
+*******************************************************************************/
+u16 SPI_Flash_ReadID(void)
+{
+ u16 Temp = 0;
+
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_ManufactDeviceID); //ͶȡID
+ SPI_ReadWriteByte(0x00);
+ SPI_ReadWriteByte(0x00);
+ SPI_ReadWriteByte(0x00);
+ Temp|=SPI_ReadWriteByte(0xFF)<<8;
+ Temp|=SPI_ReadWriteByte(0xFF);
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+
+ return Temp;
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Erase_Sector
+* Description : Erase one sector(4Kbyte).
+* Input : Dst_Addr: 0 2047
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Erase_Sector(u32 Dst_Addr)
+{
+ Dst_Addr*=4096;
+ SPI_FLASH_Write_Enable();
+ SPI_Flash_Wait_Busy();
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_SectorErase); //ָ
+ SPI_ReadWriteByte((u8)((Dst_Addr)>>16)); //24bitַ
+ SPI_ReadWriteByte((u8)((Dst_Addr)>>8));
+ SPI_ReadWriteByte((u8)Dst_Addr);
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+ SPI_Flash_Wait_Busy(); //ȴ
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Read
+* Description : Read data from flash.
+* Input : pBuffer:
+* ReadAddr:Initial address(24bit).
+* size: Data length.
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 size)
+{
+ u16 i;
+
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_ReadData); //Ͷȡ
+ SPI_ReadWriteByte((u8)((ReadAddr)>>16)); //24bitַ
+ SPI_ReadWriteByte((u8)((ReadAddr)>>8));
+ SPI_ReadWriteByte((u8)ReadAddr);
+
+ for(i=0;i>16)); //24bitַ
+ SPI_ReadWriteByte((u8)((WriteAddr)>>8));
+ SPI_ReadWriteByte((u8)WriteAddr);
+
+ for(i=0;i256)pageremain=256; //һοд256ֽ
+ else pageremain=size; //256ֽ
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Write
+* Description : Write data to flash.(no need Erase)
+* Input : pBuffer:
+* WriteAddr: Initial address(24bit).
+* size: Data length.
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 size)
+{
+ u32 secpos;
+ u16 secoff;
+ u16 secremain;
+ u16 i;
+
+ secpos=WriteAddr/4096; //ַ
+ secoff=WriteAddr%4096; //ڵı
+ secremain=4096-secoff; //ʣռС
+
+ if(size<=secremain)secremain=size; //4096ֽ
+
+ while(1)
+ {
+ SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096); //
+
+ for(i=0;i4096)
+ {
+ secremain=4096; //һд
+ }
+ else
+ {
+ secremain=size; //һд
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_Erase_Chip
+* Description : Erase all FLASH pages.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_Flash_Erase_Chip(void)
+{
+ SPI_FLASH_Write_Enable();
+ SPI_Flash_Wait_Busy();
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_ChipErase); //Ƭָ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+ SPI_Flash_Wait_Busy();
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_PowerDown
+* Description : Enter power down mode.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_Flash_PowerDown(void)
+{
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_PowerDown); //ͽϵģʽ֮
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+ delay_us(3);
+}
+
+/*******************************************************************************
+* Function Name : SPI_Flash_WAKEUP
+* Description : Power down wake up.
+* Input : None
+* Return : None
+*******************************************************************************/
+void SPI_Flash_WAKEUP(void)
+{
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 0);
+ SPI_ReadWriteByte(W25X_ReleasePowerDown); //Ͷϵ绽ָ
+ GPIO_WriteBit(CS_GPIO, CS_PIN, 1);
+ delay_us(3);
+}
+
+void SPI_Flash_TEST(void)
+{
+ const int SIZE = 100;
+ u8 TEXT_Buf[100] = "hello world \n";
+ u8 datap[SIZE];
+ u16 Flash_Model;
+ SPI_Flash_Init();
+ Flash_Model = SPI_Flash_ReadID();
+ log_info("SPI_Flash_ReadID = %x \n", Flash_Model);
+ switch(Flash_Model)
+ {
+ case W25Q80:
+ log_info("W25Q80 OK!\r\n");
+ break;
+ case W25Q16:
+ log_info("W25Q16 OK!\r\n");
+ break;
+ case W25Q32:
+ log_info("W25Q32 OK!\r\n");
+ break;
+ case W25Q64:
+ log_info("W25Q64 OK!\r\n");
+ break;
+ case W25Q128:
+ log_info("W25Q128 OK!\r\n");
+ break;
+ default:
+ log_info("Fail!\r\n");
+ break;
+ }
+
+ log_info("Start Erase W25Qxx....\r\n");
+ SPI_Flash_Erase_Sector(0);
+ log_info("W25Qxx Erase Finished!\r\n");
+
+ delay_us(500);
+ log_info("Start Write W25Qxx....\r\n");
+ SPI_Flash_Write((u8*)TEXT_Buf,0,SIZE);
+ log_info("W25Qxx Write Finished!\r\n");
+
+ delay_us(500);
+ log_info("Start Read W25Qxx....\r\n");
+ SPI_Flash_Read(datap,0x0,SIZE);
+ log_info("READ:%s\r\n", datap );
+}
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_GPIO.c b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_GPIO.c
new file mode 100644
index 0000000..f0df871
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_GPIO.c
@@ -0,0 +1,95 @@
+#include "HD_GPIO.h"
+
+void HD_GPIO_Init(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ /* ģԴʹţĬϲʹ */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
+ GPIO_InitStructure.GPIO_Pin = GPIO_PwrCtrl_GPIO_PIN;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_Init(GPIO_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(GPIO_PwrCtrl_GPIO_PROT, GPIO_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ /* λģţĬϵ͵ƽ */
+ GPIO_InitStructure.GPIO_Pin = GPIO_PwrKey_GPIO_PIN;
+ GPIO_Init(GPIO_PwrKey_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(GPIO_PwrKey_GPIO_PROT, GPIO_PwrKey_GPIO_PIN, Bit_RESET);
+
+ /* ԴţĬϲԴ */
+ GPIO_InitStructure.GPIO_Pin = J1_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J1_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J1_PwrCtrl_GPIO_PROT, J1_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J2_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J2_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J2_PwrCtrl_GPIO_PROT, J2_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J3_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J3_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J3_PwrCtrl_GPIO_PROT, J3_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J4_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J4_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J4_PwrCtrl_GPIO_PROT, J4_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J5_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J5_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J5_PwrCtrl_GPIO_PROT, J5_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J6_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J6_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J6_PwrCtrl_GPIO_PROT, J6_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J7_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J7_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J7_PwrCtrl_GPIO_PROT, J7_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J8_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J8_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J8_PwrCtrl_GPIO_PROT, J8_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ GPIO_InitStructure.GPIO_Pin = J9_PwrCtrl_GPIO_PIN;
+ GPIO_Init(J9_PwrCtrl_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(J9_PwrCtrl_GPIO_PROT, J9_PwrCtrl_GPIO_PIN, Bit_RESET);
+
+ /* ι */
+ GPIO_InitStructure.GPIO_Pin = WDI_GPIO_PIN;
+ GPIO_Init(WDI_GPIO_PROT, &GPIO_InitStructure);
+ GPIO_WriteBit(WDI_GPIO_PROT, WDI_GPIO_PIN, Bit_SET);
+}
+
+/**
+ * @brief IOƽ
+ * @param GPIOx
+ GPIO_Pin
+ BitVal
+ * @retval
+ */
+void HD_GPIO_Write(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin, BitOperation BitVal)
+{
+ GPIO_WriteBit(GPIOx, GPIO_Pin, BitVal);
+}
+
+/**
+ * @brief õIOƽ
+ * @param GPIOx
+ GPIO_Pin
+ * @retval
+ */
+uint8_t HD_InputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin)
+{
+ return GPIO_ReadInputDataBit(GPIOx, GPIO_Pin);
+}
+
+/**
+ * @brief õIOƽ
+ * @param GPIOx
+ GPIO_Pin
+ * @retval
+ */
+uint8_t HD_OutputGPIO_Read(GPIOTypeDef *GPIOx, GPIOPin GPIO_Pin)
+{
+ return GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin);
+}
diff --git a/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_UART.c b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_UART.c
new file mode 100644
index 0000000..2f0ebfe
--- /dev/null
+++ b/CH32V303-FreeRTOS/App/hardwareDriver/Src/HD_UART.c
@@ -0,0 +1,562 @@
+#include "HD_UART.h"
+
+void USART2_IRQHandler(void) __attribute__((interrupt()));
+void USART3_IRQHandler(void) __attribute__((interrupt()));
+#ifdef uart4_enable
+// void UART4_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
+void UART4_IRQHandler(void) __attribute__((interrupt()));
+#endif
+void UART5_IRQHandler(void) __attribute__((interrupt()));
+void UART6_IRQHandler(void) __attribute__((interrupt()));
+void UART7_IRQHandler(void) __attribute__((interrupt()));
+void UART8_IRQHandler(void) __attribute__((interrupt()));
+
+#define write Bit_SET
+#define read Bit_RESET
+
+/*
+ * @brief ʼUART6ӦJ1_485,ĬΪ
+ * @param baud
+ * @retval
+ *
+ */
+void J1_485_Init(uint32_t baud)
+{
+ /* ʼDE */
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
+ GPIO_InitStructure.GPIO_Pin = J1_DE_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ GPIO_Init(J1_DE_PROT, &GPIO_InitStructure);
+ readJ1_485;
+
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* UART6 TX --> PC0 RX --> PC1 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART6, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PC0Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PC1Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(UART6, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = UART6_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //ռȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(UART6, USART_IT_RXNE, ENABLE);
+
+ USART_Cmd(UART6,ENABLE);
+}
+
+
+/*
+ * @brief ʼUART7ӦJ2_485,ĬΪգԴر״̬
+ * @param baud
+ * @retval
+ *
+ */
+void J2_485_Init(uint32_t baud)
+{
+ /* ʼDE */
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
+ GPIO_InitStructure.GPIO_Pin = J2_DE_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ GPIO_Init(J2_DE_PROT, &GPIO_InitStructure);
+ readJ2_485;
+
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* UART7 TX --> PC2 RX --> PC3 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART7, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PC2Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PC3Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(UART7, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = UART7_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //ռȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(UART7, USART_IT_RXNE, ENABLE);
+
+ USART_Cmd(UART7,ENABLE);
+}
+
+/*
+ * @brief ʼUSART2ӦJ3_485,ĬΪգԴر״̬
+ * @param baud
+ * @retval
+ *
+ */
+void J3_485_Init(uint32_t baud)
+{
+ /* ʼDE */
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
+ GPIO_InitStructure.GPIO_Pin = J3_DE_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ GPIO_Init(J3_DE_PROT, &GPIO_InitStructure);
+ readJ3_485;
+
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* USART2 TX --> PA2 RX --> PA3 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PA2Ϊ
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PA3Ϊ
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(USART2, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //ռȼΪ1
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ1
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
+
+ USART_Cmd(USART2,ENABLE);
+}
+
+/*
+ * @brief ʼUART8ӦJ4_485,ĬΪգԴر״̬
+ * @param baud
+ * @retval
+ *
+ */
+void J4_485_Init(uint32_t baud)
+{
+ /* ʼDE */
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+ GPIO_InitStructure.GPIO_Pin = J4_DE_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ GPIO_Init(J4_DE_PROT, &GPIO_InitStructure);
+ readJ4_485;
+
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* UART8 TX --> PC4 RX --> PC5 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART8, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PC4Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PC5Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(UART8, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = UART8_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //ռȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(UART8, USART_IT_RXNE, ENABLE);
+
+ USART_Cmd(UART8,ENABLE);
+}
+
+/*
+ * @brief ʼUSART3ڿJ5-06485ӿ,ÿƵ485ΪJ0Դȫر
+ * @param baud
+ * @retval
+ *
+ */
+void J5_0_485_Init(uint32_t baud)
+{
+ /* ʼDE */
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
+ GPIO_InitStructure.GPIO_Pin = J5_0_DE_PIN;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ readJ5_0_485;
+ GPIO_InitStructure.GPIO_Pin = J5_0_A_PIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ GPIO_InitStructure.GPIO_Pin = J5_0_B_PIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ GPIO_InitStructure.GPIO_Pin = J5_0_C_PIN;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+ USART_CONNET_J0();
+
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* USART3 TX --> PB10 RX --> PB11 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB10Ϊ
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PB11Ϊ
+ GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(USART3, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //ռȼΪ1
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //ȼΪ1
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
+// USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);
+
+ USART_Cmd(USART3,ENABLE);
+}
+/*
+ * Function Name : USART_CONNET_J0
+ * Description : ƴ3J0Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J0(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_RESET);
+}
+
+/*
+ * Function Name : USART_CONNET_J5
+ * Description : ƴ3J5Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J5(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_SET);
+}
+
+/*
+ * Function Name : USART_CONNET_J6
+ * Description : ƴ3J6Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J6(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_SET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_RESET);
+}
+
+/*
+ * Function Name : USART_CONNET_J7
+ * Description : ƴ3J7Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J7(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_SET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_SET);
+}
+
+/*
+ * Function Name : USART_CONNET_J8
+ * Description : ƴ3J8Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J8(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_SET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_RESET);
+}
+
+/*
+ * Function Name : USART_CONNET_J9
+ * Description : ƴ3J9Ӧ485.
+ * Input : None
+ * Return : None
+ **/
+void USART_CONNET_J9(void)
+{
+ GPIO_WriteBit(J5_0_A_PROT, J5_0_A_PIN, Bit_SET);
+ GPIO_WriteBit(J5_0_B_PROT, J5_0_B_PIN, Bit_RESET);
+ GPIO_WriteBit(J5_0_C_PROT, J5_0_C_PIN, Bit_SET);
+}
+
+
+#ifdef uart4_enable
+/*
+ * @brief ʼUART4ӦLORA
+ * @param baud
+ * @retval
+ *
+ */
+void LORA_UART4_Init(uint32_t baud)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* UART4 TX --> PC10 RX --> PC11 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PC10Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PC11Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(UART4, &USART_InitStructure);
+
+ NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //ռȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
+
+ USART_Cmd(UART4,ENABLE);
+}
+#endif
+
+/*
+ * @brief ʼUART5ӦĶϴ
+ * @param baud
+ * @retval
+ *
+ */
+void Upward_UART5_Init(uint32_t baud)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+ USART_InitTypeDef USART_InitStructure;
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* UART5 TX --> PC12 RX --> PD2 */
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PC12Ϊ
+ GPIO_Init(GPIOC, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PD2Ϊ
+ GPIO_Init(GPIOD, &GPIO_InitStructure);
+
+ USART_InitStructure.USART_BaudRate = baud;
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
+ USART_Init(UART5, &USART_InitStructure);
+
+ USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);
+
+ NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //ռȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //ȼΪ3
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨʹ
+ NVIC_Init(&NVIC_InitStructure); //жȼʼ
+
+ USART_Cmd(UART5,ENABLE);
+}
+
+
+
+void USART2_IRQHandler(void)
+{
+ J3_Interrupt();
+}
+
+void USART3_IRQHandler(void)
+{
+ J5_0_Interrupt();
+}
+
+#ifdef uart4_enable
+void UART4_IRQHandler(void)
+{
+
+}
+#endif
+
+void UART5_IRQHandler(void)
+{
+ Upward_Interrupt();
+}
+
+void UART6_IRQHandler(void)
+{
+ J1_Interrupt();
+}
+
+void UART7_IRQHandler(void)
+{
+ J2_Interrupt();
+}
+
+void UART8_IRQHandler(void)
+{
+ J4_Interrupt();
+}
+
+
+/*
+ * @brief һַ
+ * @param pUSARTx
+ data ַ
+ * @retval
+ *
+ */
+void USARTx_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
+{
+ while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET) /* waiting for sending finish */
+ {
+ }
+ USART_SendData(pUSARTx, data);
+}
+
+/*
+ * @brief ַ
+ * @param pUSARTx
+ data ַ
+ len ַij
+ * @retval
+ *
+ */
+void USARTx_SendStr_Len(USART_TypeDef* pUSARTx, char *str, int len)
+{
+ if (pUSARTx == J1_USART) {
+ writeJ1_485;
+ } else if (pUSARTx == J2_USART) {
+ writeJ2_485;
+ } else if (pUSARTx == J3_USART) {
+ writeJ3_485;
+ } else if (pUSARTx == J4_USART) {
+ writeJ4_485;
+ } else if (pUSARTx == J5_0_USART) {
+ writeJ5_0_485;
+ }
+
+ for (int i = 0; i < len; i++) {
+ USARTx_SendByte(pUSARTx, str[i]);
+ }
+
+ if (pUSARTx == J1_USART) {
+ readJ1_485;
+ } else if (pUSARTx == J2_USART) {
+ readJ2_485;
+ } else if (pUSARTx == J3_USART) {
+ readJ3_485;
+ } else if (pUSARTx == J4_USART) {
+ readJ4_485;
+ } else if (pUSARTx == J5_0_USART) {
+ readJ5_0_485;
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CH32V303-FreeRTOS/App/tools/comm_types.h b/CH32V303-FreeRTOS/App/tools/comm_types.h
index a8f100a..7065781 100644
--- a/CH32V303-FreeRTOS/App/tools/comm_types.h
+++ b/CH32V303-FreeRTOS/App/tools/comm_types.h
@@ -5,13 +5,13 @@
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
-typedef unsigned char u_int8_t;
+// typedef unsigned char u_int8_t;
typedef unsigned char uint8_t;
-typedef unsigned short int u_int16_t;
+// typedef unsigned short int u_int16_t;
typedef unsigned short int uint16_t;
-typedef unsigned int u_int32_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long u_int64_t;
+// typedef unsigned int u_int32_t;
+// typedef unsigned int uint32_t;
+// typedef unsigned long long u_int64_t;
typedef unsigned long long uint64_t;
typedef unsigned char BOOL;
typedef float float_t;
diff --git a/CH32V303-FreeRTOS/App/tools/pDebug.h b/CH32V303-FreeRTOS/App/tools/pDebug.h
index 4cdae3f..abab635 100644
--- a/CH32V303-FreeRTOS/App/tools/pDebug.h
+++ b/CH32V303-FreeRTOS/App/tools/pDebug.h
@@ -29,9 +29,13 @@
#define log_warn(M, ...) do {}while(0)
#define log_info(M, ...) do {}while(0)
#else
-#define log_info(M, ...) {if(log_info_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[INFO] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
-#define log_warn(M, ...) {if(log_warn_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[WARN] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
-#define log_error(M, ...) {if(log_error_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[ERROR] [%s:%d] " M "\r\n", p+1, __LINE__,##__VA_ARGS__);}}
+// #define log_info(M, ...) {if(log_info_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[INFO] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
+// #define log_warn(M, ...) {if(log_warn_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[WARN] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
+// #define log_error(M, ...) {if(log_error_enable){char *p = strrchr(__FILE__, '\\'); debug_printf("[ERROR] [%s:%d] " M "\r\n", p+1, __LINE__,##__VA_ARGS__);}}
+
+#define log_info(M, ...) {if(log_info_enable){char *p = strrchr(__FILE__, '\\'); printf("[INFO] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
+#define log_warn(M, ...) {if(log_warn_enable){char *p = strrchr(__FILE__, '\\'); printf("[WARN] [%s:%d] " M "\r\n", p+1, __LINE__, ##__VA_ARGS__);}}
+#define log_error(M, ...) {if(log_error_enable){char *p = strrchr(__FILE__, '\\'); printf("[ERROR] [%s:%d] " M "\r\n", p+1, __LINE__,##__VA_ARGS__);}}
#endif
#endif
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/CH32V303-FreeRTOS.wvproj b/CH32V303-FreeRTOS/CH32V303-FreeRTOS.wvproj
index c9dd285..e20531d 100644
--- a/CH32V303-FreeRTOS/CH32V303-FreeRTOS.wvproj
+++ b/CH32V303-FreeRTOS/CH32V303-FreeRTOS.wvproj
@@ -127,7 +127,9 @@
"${project}/FreeRTOS/portable/MemMang",
"${project}/App/hardwareDriver/Inc",
"${project}/App/tools",
- "${project}/App/tools/RingQueue"
+ "${project}/App/tools/RingQueue",
+ "${project}/App",
+ "${project}/App/functionalModule/Inc"
],
"include_system_paths": [],
"include_files": []
@@ -159,7 +161,12 @@
"${project}/FreeRTOS/portable/Common",
"${project}/FreeRTOS/portable/GCC/RISC-V",
"${project}/FreeRTOS/portable/GCC/RISC-V/chip_specific_extensions/RV32I_PFIC_no_extensions",
- "${project}/FreeRTOS/portable/MemMang"
+ "${project}/FreeRTOS/portable/MemMang",
+ "${project}/App/hardwareDriver/Inc",
+ "${project}/App/tools",
+ "${project}/App/tools/RingQueue",
+ "${project}/App/functionalModule/Inc",
+ "${project}/App/application/Inc"
],
"include_system_paths": [],
"include_files": []
@@ -718,10 +725,8 @@
"ATTR_BUILD_BEFORE_LAUNCH_ATTR": 2,
"GdbServerAllocateConsole": true,
"GdbServerAllocateTelnetConsole": false,
- "SkipDownloadBeforeDebug": false,
"StartGdbCLient": true,
- "UPDATE_THREADLIST_ON_SUSPEND": false,
- "DebugInRam": false
+ "UPDATE_THREADLIST_ON_SUSPEND": false
}
}
}
\ No newline at end of file
diff --git a/CH32V303-FreeRTOS/Ld/Link.ld b/CH32V303-FreeRTOS/Ld/Link.ld
index 7748497..9969e15 100644
--- a/CH32V303-FreeRTOS/Ld/Link.ld
+++ b/CH32V303-FreeRTOS/Ld/Link.ld
@@ -1 +1,186 @@
-ENTRY( _start )
__stack_size = 2048;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* CH32V30x_D8C - CH32V305RB-CH32V305FB
CH32V30x_D8 - CH32V303CB-CH32V303RB
*/
/**/
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC-CH32V305CC
CH32V30x_D8 - CH32V303VC-CH32V303RC
FLASH + RAM supports the following configuration
For specific choices, please refer :CH32FV2x_V3xRM.PDF\Table 32-3
FLASH-192K + RAM-128K
FLASH-224K + RAM-96K
FLASH-256K + RAM-64K
FLASH-288K + RAM-32K
FLASH-128K + RAM-192K
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K*/
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.vector :
{
*(.vector);
. = ALIGN(64);
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 );
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
.stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
{
PROVIDE( _heap_end = . );
. = ALIGN(4);
PROVIDE(_susrstack = . );
. = . + __stack_size;
PROVIDE( _eusrstack = .);
__freertos_irq_stack_top = .;
} >RAM
}
\ No newline at end of file
+ENTRY( _start )
+
+__stack_size = 2048;
+
+PROVIDE( _stack_size = __stack_size );
+
+
+MEMORY
+{
+/* CH32V30x_D8C - CH32V305RB-CH32V305FB
+ CH32V30x_D8 - CH32V303CB-CH32V303RB
+*/
+/**/
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
+
+
+/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC-CH32V305CC
+ CH32V30x_D8 - CH32V303VC-CH32V303RC
+ FLASH + RAM supports the following configuration
+ For specific choices, please refer :CH32FV2x_V3xRM.PDF\Table 32-3
+ FLASH-192K + RAM-128K
+ FLASH-224K + RAM-96K
+ FLASH-256K + RAM-64K
+ FLASH-288K + RAM-32K
+ FLASH-128K + RAM-192K
+
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K*/
+}
+
+
+SECTIONS
+{
+
+ .init :
+ {
+ _sinit = .;
+ . = ALIGN(4);
+ KEEP(*(SORT_NONE(.init)))
+ . = ALIGN(4);
+ _einit = .;
+ } >FLASH AT>FLASH
+
+ .vector :
+ {
+ *(.vector);
+ . = ALIGN(64);
+ } >FLASH AT>FLASH
+
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text)
+ *(.text.*)
+ *(.rodata)
+ *(.rodata*)
+ *(.gnu.linkonce.t.*)
+ . = ALIGN(4);
+ } >FLASH AT>FLASH
+
+ .fini :
+ {
+ KEEP(*(SORT_NONE(.fini)))
+ . = ALIGN(4);
+ } >FLASH AT>FLASH
+
+ PROVIDE( _etext = . );
+ PROVIDE( _eitcm = . );
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } >FLASH AT>FLASH
+
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+ KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } >FLASH AT>FLASH
+
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+ KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } >FLASH AT>FLASH
+
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ KEEP (*crtbegin?.o(.ctors))
+ /* We don't want to include the .ctor section from
+ the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ } >FLASH AT>FLASH
+
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*crtbegin?.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ } >FLASH AT>FLASH
+
+ .dalign :
+ {
+ . = ALIGN(4);
+ PROVIDE(_data_vma = .);
+ } >RAM AT>FLASH
+
+ .dlalign :
+ {
+ . = ALIGN(4);
+ PROVIDE(_data_lma = .);
+ } >FLASH AT>FLASH
+
+ .data :
+ {
+ *(.gnu.linkonce.r.*)
+ *(.data .data.*)
+ *(.gnu.linkonce.d.*)
+ . = ALIGN(8);
+ PROVIDE( __global_pointer$ = . + 0x800 );
+ *(.sdata .sdata.*)
+ *(.sdata2.*)
+ *(.gnu.linkonce.s.*)
+ . = ALIGN(8);
+ *(.srodata.cst16)
+ *(.srodata.cst8)
+ *(.srodata.cst4)
+ *(.srodata.cst2)
+ *(.srodata .srodata.*)
+ . = ALIGN(4);
+ PROVIDE( _edata = .);
+ } >RAM AT>FLASH
+
+ .bss :
+ {
+ . = ALIGN(4);
+ PROVIDE( _sbss = .);
+ *(.sbss*)
+ *(.gnu.linkonce.sb.*)
+ *(.bss*)
+ *(.gnu.linkonce.b.*)
+ *(COMMON*)
+ . = ALIGN(4);
+ PROVIDE( _ebss = .);
+ } >RAM AT>FLASH
+
+ PROVIDE( _end = _ebss);
+ PROVIDE( end = . );
+
+ .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
+ {
+ PROVIDE( _heap_end = . );
+ . = ALIGN(4);
+ PROVIDE(_susrstack = . );
+ . = . + __stack_size;
+ PROVIDE( _eusrstack = .);
+ __freertos_irq_stack_top = .;
+ } >RAM
+
+}
+
+
+
diff --git a/CH32V303-FreeRTOS/Startup/startup_ch32v30x_D8.S b/CH32V303-FreeRTOS/Startup/startup_ch32v30x_D8.S
index 2ea4898..a23e320 100644
--- a/CH32V303-FreeRTOS/Startup/startup_ch32v30x_D8.S
+++ b/CH32V303-FreeRTOS/Startup/startup_ch32v30x_D8.S
@@ -337,6 +337,7 @@ handle_reset:
csrw 0xbc0, t0
/* Enable interrupt nesting and hardware stack */
li t0, 0x1f
+ // li t0, 0x1e
csrw 0x804, t0
/* Enable floating point and global interrupt, configure privileged mode */
li t0, 0x7800
diff --git a/CH32V303-FreeRTOS/User/main.c b/CH32V303-FreeRTOS/User/main.c
index fc153f2..1ae12c7 100644
--- a/CH32V303-FreeRTOS/User/main.c
+++ b/CH32V303-FreeRTOS/User/main.c
@@ -19,6 +19,8 @@
#include "FreeRTOS.h"
#include "task.h"
+#include "freerotsTask.h"
+
/*********************************************************************
@@ -38,7 +40,8 @@ int main(void)
printf("SystemClk:%d\r\n", SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
printf("FreeRTOS Kernel Version:%s\r\n", tskKERNEL_VERSION_NUMBER);
-
+
+ startApp();
while(1) {
printf("shouldn't run at here!!\n");
diff --git a/CH32V303-FreeRTOS/obj/App/tools/RingQueue/subdir.mk b/CH32V303-FreeRTOS/obj/App/tools/RingQueue/subdir.mk
index bffa3f7..6252892 100644
--- a/CH32V303-FreeRTOS/obj/App/tools/RingQueue/subdir.mk
+++ b/CH32V303-FreeRTOS/obj/App/tools/RingQueue/subdir.mk
@@ -17,4 +17,4 @@ OBJS += \
# Each subdirectory must supply rules for building sources it contributes
App/tools/RingQueue/%.o: ../App/tools/RingQueue/%.c
- @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -fmax-errors=20 -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Debug" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Core" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/User" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Peripheral/inc" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/include" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/Common" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/GCC/RISC-V" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/GCC/RISC-V/chip_specific_extensions/RV32I_PFIC_no_extensions" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/MemMang" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
+ @ riscv-none-embed-gcc -march=rv32imacxw -mabi=ilp32 -msmall-data-limit=8 -msave-restore -fmax-errors=20 -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -Wunused -Wuninitialized -g -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Debug" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Core" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/User" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/Peripheral/inc" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/include" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/Common" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/GCC/RISC-V" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/GCC/RISC-V/chip_specific_extensions/RV32I_PFIC_no_extensions" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/FreeRTOS/portable/MemMang" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/App/hardwareDriver/Inc" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/App/tools" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/App/tools/RingQueue" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/App/functionalModule/Inc" -I"d:/psx/su806/2.software/mcu_git/CH32V303-FreeRTOS/App/application/Inc" -std=gnu99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
diff --git a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.elf b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.elf
index 8e564ef..e2c204e 100644
Binary files a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.elf and b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.elf differ
diff --git a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.hex b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.hex
index 0e01f90..8c07058 100644
--- a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.hex
+++ b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.hex
@@ -1,39 +1,39 @@
-:040000006F009008F5
+:040000006F00F00895
:100004000000000000000000EE050000F005000004
-:10001400000000008608000000000000000000004E
-:1000240086080000860800000000000000000000B0
-:10003400320C00000000000000020000000000007C
-:100044008608000086080000860800008608000074
-:100054008608000086080000860800008608000064
-:100064008608000086080000860800008608000054
-:100074008608000086080000860800008608000044
-:100084008608000086080000860800008608000034
-:100094008608000086080000860800008608000024
-:1000A4008608000086080000860800008608000014
-:1000B4008608000086080000860800008608000004
-:1000C40086080000860800008608000086080000F4
-:1000D40086080000860800008608000086080000E4
-:1000E40086080000860800008608000086080000D4
-:1000F40086080000860800008608000086080000C4
-:100104000000000086080000860800008608000041
-:1001140086080000860800008608000086080000A3
-:100124008608000086080000860800008608000093
-:100134008608000086080000860800008608000083
-:100144008608000086080000860800008608000073
-:100154008608000086080000860800008608000063
-:100164008608000086080000860800008608000053
-:100174008608000086080000860800008608000043
-:100184008608000086080000860800008608000033
-:100194008608000086080000860800008608000023
+:10001400000000008C080000000000000000000048
+:100024008C0800008C0800000000000000000000A4
+:100034007015000000000000000200000000000035
+:100044008C0800008C0800008C0800008C0800005C
+:100054008C0800008C0800008C0800008C0800004C
+:100064008C0800008C0800008C0800008C0800003C
+:100074008C0800008C0800008C0800008C0800002C
+:100084008C0800008C0800008C0800008C0800001C
+:100094008C0800008C0800008C0800008C0800000C
+:1000A4008C0800008C0800008C0800008C080000FC
+:1000B4008C0800008C0800008C0800008C080000EC
+:1000C4008C0800008C0800008C0800008C080000DC
+:1000D4008C0800008C080000083100005231000038
+:1000E4008C0800008C0800008C0800008C080000BC
+:1000F4008C0800008C0800008C0800008C080000AC
+:10010400000000008C0800008C0800008C0800002F
+:100114008C0800009C3100008C0800008C08000052
+:100124008C0800008C0800008C0800008C0800007B
+:100134008C0800008C0800008C0800008C0800006B
+:100144008C0800008C0800008C0800008C0800005B
+:100154008C0800008C0800008C080000E6310000C8
+:10016400303200007A3200008C0800008C08000055
+:100174008C0800008C0800008C0800008C0800002B
+:100184008C0800008C0800008C0800008C0800001B
+:100194008C0800008C0800008C0800008C0800000B
:1001A400000000000000000000000000000000004B
:0C01B4000000000000000000000000003F
:10020000130181F806C216C41AC61EC822CA26CC1B
:100210002ACE2ED032D236D43AD63ED842DA46DC76
:100220004ADECEC0D2C2D6C4DAC6DEC8E2CAE6CC46
:10023000EACEEED0F2D2F6D4FAD6FED8F3220030CF
-:1002400096DA9702002083A2A2E523A02200F325DC
-:1002500010342EC09305000273A0458003A10181D4
-:10026000EF00503D17030020032383E30321030025
+:1002400096DA9702002083A222F723A02200F3254A
+:1002500010342EC09305000273A0458003A1818154
+:10026000EF10707117030020032303F5032103002F
:10027000824273901234D652739002309240A2425E
:100280003243C2435244E244724582551256A2564A
:100290003257C2575258E25872598649164AA64AEE
@@ -43,8 +43,8 @@
:1002D00013000000130000001300000013000000D2
:1002E00013000000130000001300000013000000C2
:1002F00013000000130000001300000013000000B2
-:1003000083A20181938202E07390023417010020DE
-:10031000032101D9024182403243C2435244E244A4
+:1003000083A28181938202E073900234170100205E
+:10031000032181EA024182403243C2435244E24413
:10032000724582551256A2563257C2575258E25859
:1003300072598649164AA64A364BC64B564CE64C6D
:10034000764D865D165EA65E365FC65FD652A1020A
@@ -91,473 +91,1311 @@
:1005D000939627009702000096968682E78086FA17
:1005E0009680C1171D8F3E96E374C3F8A5B701A08E
:1005F000B707EFBE37E700E0938707083CC701A0C5
-:10060000EFF27FF10945E92E812AEF00300C716588
-:1006100013050520EF00B00EB707002083A50708DB
-:10062000372500001305C517EF009018ED24AA85A3
-:10063000372500001305C518EF009017B7250000F7
-:10064000372500009385C5191305451AEF0050168C
-:10065000372400001305441CEF00D026E5BFB71770
-:1006600002409843B706FFF041111367170098C383
-:10067000D84337060200758FD8C39843B706F7FEF4
-:10068000FD16758F98C39843B706FCFFFD16758F4E
-:1006900098C3D843B70601FFFD16758FD8C398439A
-:1006A000B70600ECFD16758F98C33707FF0098C793
-:1006B00023A6070202C402C69843C166558F98C399
-:1006C000B716024005679C42F18F3EC6A2478507D8
-:1006D0003EC4B24781E7A247E397E7FEB71702405F
-:1006E0009C431397E7006357070685473EC632478A
-:1006F0008547631FF704B7170240D843B706C1FF09
-:10070000FD16D8C3D843D8C3D84313670740D8C30E
-:10071000D843758FD8C3D843B7061100558FD8C3B7
-:100720009843B7060001558F98C398439316670006
-:10073000E3DD06FED843B7160240719BD8C3D84309
-:1007400013672700D8C32147DC42B18BE39EE7FE45
-:100750004101828002C661BFB7160240D842B70786
-:1007600000201146318B938707086305C700214697
-:100770006308C70237177A001307072098C3371793
-:100780000240584311839376F70037070020130780
-:1007900007003697142398433357D70098C38280B5
-:1007A000D842D442416649833D8BF18E130627001F
-:1007B00015CF3D47630FE6024147630FE602454709
-:1007C00081456313E6004146A1E237470240032713
-:1007D0000780418B0DC737177A00130707203306B0
-:1007E000C70290C3C9DD9843058349BF8145494687
-:1007F000E1BF85453546C9BF81453D46F1B737174D
-:100800003D0013070790E1BF371502405855931676
-:10081000F700585563DF060411833D8B93061700DC
-:1008200037177A00130707203357D70298C3545558
-:10083000A182BD8A8DE295463307D702058398C30E
-:1008400037170240585794433D8B050733D7E602CC
-:1008500098C3984369B705456394A600E546E9BF88
-:100860003D456396A600D1463387E602C9BF890697
-:10087000E5BF3D8B9306170037177A001307072053
-:100880003357D702F1B701A097010020938181FF70
-:10089000177100201301017717250000130585A1AA
-:1008A00097F5FF1F938505761386818163FAC5004E
-:1008B0008322050023A0550011059105E3EAC5FE3A
-:1008C00017F5FF1F1305857D938501986377B500A4
-:1008D000232005001105E36DB5FEFD42739002BCB7
-:1008E000FD4273904280B782000093820280739031
-:1008F000023097F2FFFF9382227193E232007390ED
-:100900005230EFF0DFD5970200009382A2CF7390B0
-:10091000123473002030B7F7FF1F03A547708280A1
-:100920009C4513F7070113F8F70001C7D841336856
-:10093000E8008E2113F7F50F39C318418146854E23
-:100940003D4F930F800293028004214E3396DE00C8
-:10095000B3F8C500631116039398260033131F01E3
-:100960001343F3FF3377E300B318180133E7E800CC
-:10097000639FF70550C98506E39AC6FD18C11307A2
-:10098000F00F6375B70454412146854E3D4F930FD8
-:10099000800293028004414EB398CE0033F71501D4
-:1009A0006392E8021317260001173313EF00134375
-:1009B000F3FFB376D3003317E800D98E639DF701B8
-:1009C000232A15010506E319C6FD54C18280E3946C
-:1009D00057FA10C94DB7E39757FE23281501DDB725
-:1009E000B707002023ACA7088280371702405C437A
-:1009F0009146B18B6385D700A1466382D706B717AE
-:100A00007A00938707201CC1371602405C423707E3
-:100A10000020130707019183BD8BBA9794231C41D3
-:100A2000B3D7D7005CC15442A1829D8ABA96942262
-:100A3000B3D6D70014C55442AD829D8A3697182389
-:100A4000B3D7E7005CC558423983937637001387E4
-:100A5000418036971823B3D7E7021CC982805C43D4
-:100A60005843C166C983758FB7F6FF1F83A6C6704A
-:100A7000BD8B89071396160163480600C5460146DB
-:100A80006392D702C94739A88946638FD702BD460A
-:100A9000638ED702C146638ED702C5460146639373
-:100AA000D700C1471DEF3747024003270780418B1E
-:100AB00005C737177A0013070720B307F7021CC1D1
-:100AC00021D61C41858381B701466DBF0546B547D8
-:100AD000D1BF0146BD47F9B737173D00130707904F
-:100AE000E9BFB7150240D8559316F700D85563DF14
-:100AF000060411833D8B9306170037177A001307FE
-:100B000007203357D70218C1D455A182BD8A8DE280
-:100B100095463307D702058318C137170240585747
-:100B200014413D8B050733D7E60218C1184171B750
-:100B300085456394B600E546E9BFBD456396B600BA
-:100B4000D1463387E602C9BF8906E5BF3D8B9306D0
-:100B5000170037177A00130707203357D702F1B76A
-:100B600099C5371702401C4F5D8D08CF8280B7179B
-:100B70000240984F1345F5FF798D88CF8280EFF2C0
-:100B80009F991629F577FD17F58FF621DA257971EA
-:100B9000D58F1EA95625FD779387379FF58FD621D0
-:100BA0002A842EC6D58F9625D58FB625D58F5EA5DE
-:100BB0005E29C207C18393F7F7CFD98F5EA9680872
-:100BC0002D35B747014093870780B245631DF40276
-:100BD000A2576547B387E7029841930640060A0784
-:100BE000B3D7E70233D7D702B3F7D702120792077A
-:100BF00093872703B3D7D702BD8BD98FC207C18391
-:100C00001EA445611DBA9257E9B791C55E250967D3
-:100C1000D98F5EA582805A25F977FD17F98FD5BF48
-:100C200093F5F51F4EA182800A216D8D3335A0000A
-:100C3000828073110134A167938707807390073016
-:100C4000B7F700E023A20700912011C5B7E700E045
-:100C5000116723A0E720A1679387878873900730E7
-:100C60007311013473002030370700201307070A7F
-:100C70001C439443B70700209387070B81E67D57F9
-:100C800098C38280184358471843DDBFB707002038
-:100C900083A7870A63970718EFF2FF87B70700203B
-:100CA0009387C70B8043050480C331E8B707002052
-:100CB0009387070A984318431DC3A167938707804A
-:100CC000739007303726000085653725000013062E
-:100CD000C61D938575AC1305051FD92C01A03707D8
-:100CE00000201307470A9443104390C3B70700201E
-:100CF00014C39387470B9843050798C3B537370646
-:100D000000209307060B9C4337070020B7050020FF
-:100D10001306060B1307070D9385C5090145637577
-:100D2000F4029C41D146DC57B387D7023E97184363
-:100D3000854763F3E7000545B707002083A7070C45
-:100D400091C305456FF06FFF370E0020B70E0020EE
-:100D5000514F93070E0A9443944281E6FD571CC2FB
-:100D6000C9B79C43DC47DC47D4436374D40014C246
-:100D70004DBF83A8870003A8C700D44B1383470047
-:100D800023A408012322180183A846006394680065
-:100D900023A2060103A8060023AA07007D1823A0AA
-:100DA0000601945795CA03A8C70183A8070283AF19
-:100DB00046002324180183A8070223A208011388F0
-:100DC000870163940F0123A2160103A8060023A440
-:100DD00007027D1823A006019386CE0A03A8C70246
-:100DE00083A8060063F4080123A00601B306E80304
-:100DF000BA9683A8460083AF880023A4170123A6D0
-:100E0000F70183AF880023A26F0023A46800D4CB2E
-:100E10009C4285079CC29C41DC57E36CF8F2054577
-:100E20000DBFB70700209387870B9843014505073F
-:100E300098C38280B707002003A7870AB70700205E
-:100E40009387070C01C7054798C3828023A007003A
-:100E5000B70700201387C70A18431386C70AB707C6
-:100E600000209387070D5148B3060703B385D700C9
-:100E7000884115C5C841A106BE964841C8C1631442
-:100E8000D5005441D4C1D146B306D702B697DC434E
-:100E9000D447B707002023AED70818C282800DE7D9
-:100EA000EFF26FE7A16793870780739007303726CB
-:100EB00000008565372500001306C61D938525C0F3
-:100EC0001305051FF52001A07D1779BFB707002086
-:100ED00083A7070837177A0013070720B3D7E7025D
-:100EE0003707002093F7F70F2303F70C1307803E13
-:100EF000B387E702370700202312F70C8280EFF256
-:100F00008FE12A84116501118545110591399307F7
-:100F100000207C82371501408D473EC44C00E147DC
-:100F2000130505803EC6ED3A22C837440140B70795
-:100F300008000C08130504803ECC02CA231E0100E1
-:100F40003D39854513050480C93105616FF0EFDE39
-:100F5000EFF2CFDAB7440140AE893289014493847D
-:100F60000480634524014A856FF08FDC93050004FB
-:100F700026855D3965DDB387890083850700268571
-:100F80000504C205C1816939E9BF138781801C430B
-:100F9000938601983E95636BD500B78600209386B3
-:100FA000068063E5A60008C33E858280FD57EDBF3D
-:100FB00039713EDA2ED232D436D63AD842DC46DE09
-:100FC0009387C18022CC804326CA06CEAA8409C456
-:100FD0001C4C99E32285ED290C4454102686228569
-:100FE00036C6EF00F013F2406244D24421618280A1
-:100FF000011126CA4AC806CE22CC4EC652C4AA84C3
-:101000002E8901C51C4D91E3E1219C4C804499E35C
-:1010100026857D299717000093870722631BF4021A
-:10102000C0405E24A18BB1C71C48A1C7FD59294A05
-:101030001C4483450900FD17B1E91CC463DD0706A4
-:101040002286A94526856120FD576308F5022945BA
-:1010500035A097170000938727206314F40080447D
-:10106000C9B7971700009387271BE31CF4FAC04405
-:101070004DBFA2852685112A55D97D55F24062447F
-:10108000D2444249B249224A056182801CC4050902
-:1010900063D70700184C63CAE700638845011C400A
-:1010A0001387170018C08CA361B7228626850520F8
-:1010B000E31035F9D9B71C401387170018C029472A
-:1010C00098A371B79387C180AA85884315B701118A
-:1010D00022CC26CA4AC806CE4EC6AA842E8932849D
-:1010E00001C51C4D91E3ED26971700009387C714A7
-:1010F0006317F406C0401C4C1CC45E24A18BC1C302
-:101100001C48B5CF1C4808409379F90F1379F90FA3
-:101110001D8D5C486346F500A2852685692C25E572
-:101120001C440505FD171CC41C401387170018C07C
-:10113000238037015C486388A7005E24858B81CBC0
-:10114000A9476316F900A2852685B5240DEDF24066
-:1011500062444A85D2444249B24905618280971768
-:1011600000009387670F6314F400804469B79717F2
-:1011700000009387670AE310F4F8C044ADBFA2856E
-:101180002685212041D17D59D9B741119387C1804E
-:1011900026C2844322C44AC006C62A892E8489C432
-:1011A0009C4C99E326852D26971700009387C70846
-:1011B000631BF402C0400317C40093170701C183E7
-:1011C00093F68700ADEA93F6070195EEA547232035
-:1011D000F900136707045AA47D55B2402244924493
-:1011E000024941018280971700009387E706631444
-:1011F000F4008044C9B7971700009387E701E31C08
-:10120000F4FAC0444DBF918B9DC34C5889C99307D4
-:1012100044046384F5004A853123232A04025E24B2
-:101220002322040093F7B7FD5EA41C481CC05E2473
-:1012300093E787005EA41C4899EB5E241307002007
-:1012400093F707286385E700A2854A85A1215E24DC
-:1012500013F717001DC35C4823240400B307F040B4
-:101260001CCC1C480145B5FB8317C40013F70708C5
-:101270002DD793E707045EA485B7898B014791E3D7
-:10128000584818C4F9BFDE25011122CC26CA06CE63
-:101290004AC84EC613F78700AA842E8479EBD8413A
-:1012A000634DE000B841634AE0000145F24062440A
-:1012B000D2444249B2490561828058547DD703A97E
-:1012C00004009396370123A0040063DB06067048F0
-:1012D0005E24918B99C75C401D8E5C5899C33C403D
-:1012E0001D8E5C540C50814626858297FD575A24EA
-:1012F000631DF5009440F54763E8D706B707402023
-:101300008507B3D7D700858BA5C31C4823220400CB
-:101310001CC09317370163D80700FD576314F5000D
-:101320009C4091E368C84C5823A02401BDDD93077D
-:1013300044046384F5002685F526232A0402B5B704
-:101340000C500146854626850297FD572A86E311F3
-:10135000F5F89C40B5DF75476385E700594763930F
-:10136000E70423A0240191B7136707045AA47D550D
-:1013700035BF83A90501E38A09F203A905008D8B16
-:1013800023A0350133093941014791E3D84918C4F5
-:10139000E35D20F11C540C50CA864E862685829748
-:1013A0006347A0005E2493E707045EA4C9B7AA9927
-:1013B0003309A940F1BF9C49B9CF011122CC06CE17
-:1013C0002A8411C51C4D81E72EC61922B2459717F4
-:1013D0000000938767E6639BF5004C408397C50048
-:1013E00095C722856244F240056171BD97170000E0
-:1013F000938787E66394F5000C44CDB797170000F8
-:10140000938787E1E39CF5FC4C44C9BFF2406244FA
-:1014100001450561828001458280411122C406C6D2
-:101420002A844EA572A5232005002322050023242B
-:1014300005002322050623280500232A0500232C66
-:101440000500214681451305C505EFF0CF8F97179D
-:1014500000009387C7B25CD0971700009387E7B46A
-:101460001CD4971700009387C7B85CD49717000067
-:10147000938727BB00D01CD8B24022444101828010
-:1014800097050000938565F3A9A2411126C21306B2
-:1014900080069384F5FFB384C4024AC02E8922C417
-:1014A00006C6938544073D262A8401CD23200500E6
-:1014B00023222501310508C4138684068145EFF0F7
-:1014C0008F882285B24022449244024941018280A1
-:1014D0001C4DADE3411106C622C497070000938757
-:1014E00067FA1CD5938741819C4323240504232656
-:1014F0000504232805046314F50085471CCD2A84C0
-:101500001D2848C02285052808C422852D2048C4EE
-:10151000484001469145113708440546A545F53D2B
-:1015200048440946C945D53D85471CCCB2402244B4
-:1015300041018280828041119387418126C2844388
-:101540004AC006C69C4C22C42A8999E3268549379D
-:10155000938484048044DC40FD1763D607009C40DC
-:10156000B9CF8440C5BF0317C40039E7C1778507E9
-:101570002322040623200400232204002324040041
-:101580005CC423280400232A0400232C04002146E1
-:1015900081451305C405EFE01FFB232A0402232C19
-:1015A000040223240404232604042285B240224496
-:1015B00092440249410182801304840671BF91451F
-:1015C0004A85E13588C051FDB1472320F900014427
-:1015D000E9BF797122D44AD052CC56CA5AC85EC6E5
-:1015E00006D626D24ECE2A8AAE8A13048504014935
-:1015F000054BFD5B09ECB25022544A8592540259C6
-:10160000F249624AD24A424BB24B4561828004445D
-:1016100083294400FD1963D409000040E1BFDE24A2
-:10162000637BFB008397E40063877701A68552857F
-:10163000829A3369A90093848406E9BF1971A6DAF6
-:10164000AE848395E500A2DC86DE328463DB050090
-:10165000DE2423A0060093F7070885E793070040E0
-:101660001DA0300836C6EF005021B246E34205FE09
-:101670007247BD67F98F7977BA9793B717009CC205
-:10168000F1BF930700041CC0F6506654D6540145C0
-:1016900009618280DE25011122CC06CE26CA4AC805
-:1016A000898B2E8489CF930774041CC01CC885477E
-:1016B0005CC8F2406244D2444249056182807400B1
-:1016C0003000AA84A53FA2452A892685212219E94E
-:1016D0008317C40013F7072069FFF19B93E72700E6
-:1016E0005EA4D1B7970700009387C7D99CD45E2426
-:1016F00008C008C893E707085EA4A2475CC8B247C1
-:1017000081CF8315E4002685EF00D01911C55E2432
-:10171000F19B93E717005EA45E243369F90023165A
-:10172000240141BFDDC583A7C5FF411122C406C600
-:1017300026C21384C5FF63D307003E94AA84EF003A
-:10174000301D97F7FF1F938767989C4391EF2322E3
-:10175000040097F7FF1F23AB87962244B2402685EB
-:10176000924441016F00F01A637EF4001440330785
-:10177000D4006396E7009843DC43369718C05CC0FA
-:10178000C9BFBA87D84319C3E37DE4FE94433386C7
-:10179000D700631F86001040B29694C33386D700EB
-:1017A000E31DC7FA10435843B29694C3D8C375B724
-:1017B0006375C400B1479CC04DB71040B306C40068
-:1017C0006316D70014435843B29614C058C0C0C320
-:1017D00069B78280011126CA93843500F19806CE3C
-:1017E00022CC4AC84EC6A104B14763F9F404B144FF
-:1017F00063E8B4042A89EF00B01197F7FF1F9387BD
-:10180000E78C98433A8439E497F7FF1F9387478C16
-:101810009C4381EB81454A85252F97F7FF1F23A91C
-:10182000A78AA6854A852D27FD59631B3507B14731
-:101830002320F9004A85EF00D00D29A0E3DA04FA4D
-:10184000B1471CC10145F2406244D2444249B24909
-:10185000056182801C40858F63C10704AD4663F635
-:10186000F6001CC03E9404C001A85C4063158702CA
-:1018700017F7FF1F232CF7844A85EF009009130503
-:10188000B4009307440061993307F5404DDF3A9463
-:10189000898F1CC04DBF5CC3C5B722874040A5B728
-:1018A000130435007198E30085FCB305A4404A8514
-:1018B0004525E31A35FBA5BF1C46FD171CC663DA98
-:1018C0000700184E63C5E700A9476394F5006FF061
-:1018D0001F801C422E851387170018C28CA382809C
-:1018E000011122CC26CA4AC84EC652C406CE2A8945
-:1018F000AE893284B304D6007D5A63149400014546
-:1019000001A80C204E864A85453F0504E31745FF94
-:10191000F2406244D2444249B249224A056182807F
-:10192000357122CD26CB4AC94EC706CF52C556C304
-:101930005AC1DEDEE2DCE6DAAA89AE843289368478
-:1019400001C51C4D91E36936971700009387C78E38
-:101950006397F40C83A44900DE24A18BFDC39C484B
-:10196000EDC393070002A304F1029307000302D220
-:101970002305F10222C6930B5002971A0000938AA6
-:10198000AA8F054C294B4A841C2099C3639E770D6E
-:10199000B30C2441638D0C00E6864A86A6854E85ED
-:1019A0008137FD57630FF51C9256E69636D21C2000
-:1019B0006389071CFD571309140002C802CE3ECAF2
-:1019C00002CCA309010482D483450900154656853B
-:1019D000252713041900C24751E913F7070109C766
-:1019E00013070002A309E10413F7870009C71307CF
-:1019F000B002A309E104834609001307A002638F24
-:101A0000E606F2474A8481462546182093051400CD
-:101A1000130707FD6377E60AB5CA3ECE85A8971778
-:101A20000000938767836395F40083A489002DB732
-:101A3000970700009387477EE390F4F283A4C900E0
-:101A400021BFA6854E85EFF04FF401DD7D55FA40AC
-:101A50006A44DA444A49BA492A4A9A4A0A4BF65B26
-:101A6000665CD65C0D618280050439BF3305554143
-:101A70003315AC00C98F3EC82289B9B732479306E7
-:101A80004700184336C6634707023ACE182093072B
-:101A9000E002631DF70418309307A002631BF702EE
-:101AA000B2470904138747009C433AC663C1070243
-:101AB0003ECA2DA83307E04093E727003ACE3EC840
-:101AC000F1B7B387670385462E84BA973DBFFD57AC
-:101AD000C5B7050402CA81468147254618209305EB
-:101AE0001400130707FD6374E606F9F20C200D4697
-:101AF000170500001305C578012511CD97070000D3
-:101B0000938707781D8D93070004B397A70042457C
-:101B100005045D8D2AC80C20194617050000130521
-:101B20006576130914002304B102F92335C197E740
-:101B3000FFFF9387274D95E74247B247137707107A
-:101B400009CF91073EC69257D2973ED22DBDB3879B
-:101B5000670385462E84BA9751B79D07E19BA1077D
-:101B6000D5B77800970600009386C6D726860C085E
-:101B70004E8597000000E7000000FD572A8AE31415
-:101B8000F5FCDE2493F70704E39207EC1255C1B588
-:101B90007800970600009386E6D426860C084E85CA
-:101BA000012AE1BF797156CA9C49BA8A984522D464
-:101BB00026D24ECE52CC06D64AD05AC85EC6AA8984
-:101BC0002E84B284368A63D3E700BA879CC0034769
-:101BD000340419C385079CC01C4093F7070281C7D2
-:101BE0009C4089079CC00329040013796900631A8B
-:101BF0000900130B9401FD5B5C449840998F634C82
-:101C0000F9041C408346340493F70702B336D0002E
-:101C1000A5EB13063404D2854E85829AFD576303E3
-:101C2000F5041C4011469840998B544481446397B5
-:101C3000C700B384E64063D3040081441C441848C1
-:101C40006354F700998FBE94014969047D5B6398E2
-:101C50002405014509A885465A86D2854E85829A73
-:101C6000631E75017D55B250225492540259F249B7
-:101C7000624AD24A424BB24B456182800509ADBFF0
-:101C80003307D40013060003A301C7040347540419
-:101C900093871600A2978906A381E7049DBF854616
-:101CA0002286D2854E85829AE30E65FB050945B7EB
-:101CB000797122D426D24AD04ECE06D652CC56CAFC
-:101CC0005AC8B689942D930790063289AA842E8427
-:101CD00013863504638DF60263E2D7069307800509
-:101CE0006385F61863EDD700638D062093073004F3
-:101CF000638EF60A930A24042301D404C9A093072F
-:101D000030066385F60A93074006E395F6FE1C400D
-:101D1000084393F6070893054500C5C61C410CC34C
-:101D200063D807001307D002B307F040A301E4040F
-:101D30009706000093868655294765A893070007F4
-:101D40006381F61663E5D7029307E0066388F61809
-:101D50009307F006E390F6FA0C401C4313F80508CD
-:101D6000138547006307080608C39C4385A89307AB
-:101D70005007E383F6FE930780076388F612930704
-:101D80003007E399F6F61C43D0418145938647001E
-:101D900014C383AA07005685852601C5330555411E
-:101DA00048C05C401CC8A301040461A81C43930AFA
-:101DB0002404938647009C4314C32301F4048547FD
-:101DC000D5B793F607041C410CC3B9DAC207C18723
-:101DD00081BF93F5050408C3C9D99E231307F006F4
-:101DE0006386E60E970600009386464A2947A301BC
-:101DF00004044C400CC463C5050008406D9908C03C
-:101E000099E3B28A89CDB28AB3F5E702FD1AB69595
-:101E10008C212380BA00B3D5E70263FFE70AA1470C
-:101E2000631EF7001C40858B91CB58401C4863C74C
-:101E3000E70093070003A38FFAFEFD1A330656410D
-:101E400010C84E87CA867000A2852685A13B7D5AA0
-:101E5000631D450B7D55B250225492540259F249EC
-:101E6000624AD24A424B45618280A382D5049706DA
-:101E700000009386A6410C40084313F805081C4156
-:101E80001105630D080208C313F7150001C793E598
-:101E900005020CC04147A1FF0C4093F5F5FD0CC0B5
-:101EA000B9B79C4193E707029CC193078007A3023F
-:101EB000F404970600009386A63E75BF13F8050448
-:101EC00008C3E30308FCC207C1837DBF9706000077
-:101ED0009386C63B214721BFAE873DB794411C4343
-:101EE000CC4913F80608138547006306080008C3A9
-:101EF0009C438CC339A008C393F606049C43F5DACF
-:101F00008EA323280400B28A2DBF14485686CA85A2
-:101F100026858299E30045F51C40898B8DE7B24701
-:101F20004844E35AF5F23E853DB785465686CA8554
-:101F300026858299E30065F3050A5C443247998F50
-:101F4000E345FAFEE9BF014A930A94017D5BF5B7C8
-:101F5000411122C42A842E8523AE019606C6EFF0D5
-:101F6000CF82FD576317F5009387C1979C4391C3B8
-:101F70001CC0B240224441018280411122C42E84FF
-:101F80008395E50006C67922634905007C48AA9737
-:101F90007CC8B2402244410182805E247D777D1757
-:101FA000F98F5EA4FDB7DE25011122CC26CA4AC8EE
-:101FB0004EC606CE93F70710AA842E843289B689BE
-:101FC00091C78395E5008946014609225E247D7705
-:101FD0007D17F98F5EA48315E4006244F240CE863B
-:101FE0004A86B24942492685D244056125A8411155
-:101FF00022C42E848395E50006C6C928FD575A24BD
-:10200000631AF500FD77FD17F98F5EA4B2402244F4
-:10201000410182808567D98F5EA468C8C5BF83955A
-:10202000E50005A8411122C42A842E85B285368692
-:1020300023AE019606C6EFE0BFF1FD576317F5002A
-:102040009387C1979C4391C31CC0B2402244410175
-:102050008280411122C42A842E8523AE019606C6B1
-:10206000C520FD576317F5009387C1979C4391C323
-:102070001CC0B240224441018280411122C42A8402
-:102080002E85B28523AE019606C6C920FD5763177B
-:10209000F5009387C1979C4391C31CC0B240224472
-:1020A00041018280411122C42A842E8523AE0196EB
-:1020B00006C65D20FD576317F5009387C1979C43C3
-:1020C00091C31CC0B240224441018280411122C40C
-:1020D0002A842E85B285368623AE019606C65920FF
-:1020E000FD576317F5009387C1979C4391C31CC0AC
-:1020F000B24022444101828093F5F50F2A96631481
-:10210000C500014582801C21E38EB7FE0505C5BFD1
-:1021100082808280411122C42A842E85B28536862F
-:1021200023AE019606C6A920FD576317F5009387D5
-:10213000C1979C4391C31CC0B2402244410182809C
-:102140009307800523AEF1967D5582809307800525
-:1021500023AEF1967D5582809307800523AEF196DC
-:10216000014582809307800523AEF1967D558280DC
-:102170009307800523AEF1967D5582805379737461
-:10218000656D436C6B3A25640D0A00004368697005
-:1021900049443A253038780D0A0000005631302E77
-:1021A000342E36004672656552544F53204B65728B
-:1021B0006E656C2056657273696F6E3A25730D0AF1
-:1021C0000000000073686F756C646E277420727570
-:1021D0006E20617420686572652121002E2E2F46C5
-:1021E00072656552544F532F7461736B732E630085
-:1021F000657272206174206C696E65202564206FA1
-:10220000662066696C6520222573222E200D0A2027
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:1022700000000000232D302B20000000686C4C0073
-:1022800065666745464700003031323334353637AE
-:102290003839414243444546000000003031323372
-:1022A0003435363738396162636465660000000092
-:1022B00000000000000000000102030406070809F6
-:1022C00000000000010203040102030406070809DC
-:1022D00000000000342200005422000014220000FC
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000006CDC02020406080002002020000020DD
-:082340000080002020000020B5
+:10060000EFF27FF10945EF007009912AEF20401EBB
+:10061000716513050520EF20C020B707002083A5D2
+:1006200007173755000013058528EF30F022CD233A
+:10063000AA853755000013058529EF30F021B755FD
+:100640000000375500009385852A1305052BEF30F0
+:10065000B020EF30C04E375400001305042DEF30AA
+:10066000F030E5BFB71702409843B706FFF04111DD
+:100670001367170098C3D84337060200758FD8C395
+:100680009843B706F7FEFD16758F98C39843B706D3
+:10069000FCFFFD16758F98C3D843B70601FFFD1602
+:1006A000758FD8C39843B70600ECFD16758F98C3B5
+:1006B0003707FF0098C723A6070202C402C6984363
+:1006C000C166558F98C3B716024005679C42F18FEB
+:1006D0003EC6A24785073EC4B24781E7A247E397DB
+:1006E000E7FEB71702409C431397E70063570706DE
+:1006F00085473EC632478547631FF704B717024058
+:10070000D843B706C1FFFD16D8C3D843D8C3D843D2
+:1007100013670740D8C3D843758FD8C3D843B706EB
+:100720001100558FD8C39843B7060001558F98C361
+:10073000984393166700E3DD06FED843B7160240E0
+:10074000719BD8C3D84313672700D8C32147DC4225
+:10075000B18BE39EE7FE4101828002C661BFB716FE
+:100760000240D842B70700201146318B9387071704
+:100770006305C70021466308C70237177A001307CD
+:10078000072098C337170240584311839376F70028
+:100790003707002013070700369714239843335771
+:1007A000D70098C38280D842D442416649833D8BAA
+:1007B000F18E1306270015CF3D47630FE602414730
+:1007C000630FE602454781456313E6004146A1E217
+:1007D0003747024003270780418B0DC737177A0040
+:1007E000130707203306C70290C3C9DD984305836A
+:1007F00049BF81454946E1BF85453546C9BF814569
+:100800003D46F1B737173D0013070790E1BF371595
+:10081000024058559316F700585563DF06041183BC
+:100820003D8B9306170037177A00130707203357BD
+:10083000D70298C35455A182BD8A8DE295463307ED
+:10084000D702058398C337170240585794433D8B0E
+:10085000050733D7E60298C3984369B70545639403
+:10086000A600E546E9BF3D456396A600D14633871D
+:10087000E602C9BF8906E5BF3D8B9306170037170F
+:100880007A00130707203357D702F1B701A0970169
+:1008900000209381210E177100201301A1761755B6
+:1008A0000000130525D897F5FF1F9385A5751386BE
+:1008B000018263FAC5008322050023A055001105BB
+:1008C0009105E3EAC5FE170500201305A58C9735B1
+:1008D00000209385E5F86377B50023200500110516
+:1008E000E36DB5FEFD42739002BCFD427390428001
+:1008F000B7820000938202807390023097F2FFFF6C
+:100900009382827093E2320073905230EFF09FD561
+:1009100097020000938202CF73901234730020304C
+:10092000EFF27FBFB727014093870740631BF500B5
+:100930008545130500205527814513050020712F9B
+:10094000EDBEB737014093870780E31BF5FE854571
+:10095000130500405927814513050040CDB75C4180
+:100960003707F1E01307F7EF944D7D8F9C41D58F4A
+:10097000D44DD58FD441A206D58FD98F5CC11C45EB
+:1009800037F7F1FF1307D77FD4457D8F9C49D58F6B
+:1009900094458606D58FD98F1CC55C55370710FF47
+:1009A0007D177D8FDC29FD1793F7F70FD207D98FBD
+:1009B0005CD582801C4589C593E717001CC58280E1
+:1009C000F99BEDBF1C4589C593E707101CC58280C4
+:1009D00093F7F7EFE5BF1C4593E787001CC58280BE
+:1009E00008450D81058982801C4593E747001CC599
+:1009F000828008450981058982801C4591C5370799
+:100A00005000D98F1CC582803707B0FF7D17F98F42
+:100A1000D5BFA54763F7B7048D47138765FF330735
+:100A2000F7020328C5009D47B397E70093C7F7FF78
+:100A3000B3F70701B396E600DD8E54C5994763E32B
+:100A4000C70495477D163306F6025859FD47B397FC
+:100A5000C70093C7F7FFF98F3396C5005D8E50D955
+:100A600082800D473387E502032805019D47B39730
+:100A7000E70093C7F7FFB3F70701B396E600DD8EF3
+:100A800014C96DBFB14763E2C702954765163306C7
+:100A9000F6021859FD47B397C70093C7F7FFF98FC0
+:100AA0003396C5005D8E10D9828095474D1633066A
+:100AB000F6025855FD47B397C70093C7F7FFF98F64
+:100AC000B395C500DD8D4CD582805C4191C537075B
+:100AD0000004D98F5CC18280370700FC7D17F98F35
+:100AE000D5BFEFF25FA301112A8423040100A544BE
+:100AF0001C8463F8F40423040100A54621461C84E9
+:100B000063FCF606231501002304010095461C84AE
+:100B100063FEF60C38853C8599460D46B3F7D7023F
+:100B2000056513050580B3D7C7023357D702BA97B7
+:100B3000C207C1837C853C8505611D8D42054185C9
+:100B4000EDBA1C4493E787001CC42285513D75FD16
+:100B50001C4493E747001CC42285613D75FD784421
+:100B60001C8414108607B6972396E7FE1C8485071D
+:100B700093F7F70F5C84ADBFA30401009C846378F6
+:100B8000F6001C84850793F7F70F5C848DBF98846B
+:100B90009C840C100607850786072E97AE9703578F
+:100BA000C7FE83D7C7FE63FDE7029C848607AE9726
+:100BB00083D7C7FE7C859C84988485078607AE977B
+:100BC00083D5C7FE931717001810BA972396B7FE60
+:100BD0009C8438850C1085078607AE972396E7FE20
+:100BE0009C84850793F7F70FDC8449BF1C841010A1
+:100BF000388589078607B29783D7C7FEBA97C20799
+:100C0000C1837C851C84850793F7F70F5C8401B74B
+:100C1000B7F7FF1F03A5477082801C414167791712
+:100C2000F98F1CC123200500232205002324050081
+:100C3000B707024023260500138787006317E500E6
+:100C4000D8431367F700D8C382801387C7016316A0
+:100C5000E500D8431367070FFDB713870703631831
+:100C6000E500D8438566938606F0558FE9BF138764
+:100C700047046315E500D843BD66C5BF13878705E4
+:100C80006316E500D843B7060F00C5B71387C7063C
+:100C90006316E500D843B706F000C1BF1387070805
+:100CA0006316E500D843B706000FC1B71387874026
+:100CB0006319E50003A747401367F70023A2E74045
+:100CC00082801387C7416317E50003A74740136776
+:100CD000070FEDB793870743631BF500B707024083
+:100CE00003A747408566938606F0558FC1BFB707B7
+:100CF0000240138747446316E50003A74740BD66DB
+:100D0000EDB7138787456317E50003A74740B7068C
+:100D10000F00E1BF1387C7466317E50003A74740ED
+:100D2000B706F000D9B7138707486317E50003A794
+:100D30004740B706000F55BF138707496319E50001
+:100D400003A7474D1367F70023AAE74C8280138758
+:100D5000074A6317E50003A7474D1367070FEDB771
+:100D60001387074B6319E50003A7474D85669386F4
+:100D700006F0558FD1BF1387074CE319E5FC03A795
+:100D8000474DBD66FDB71C4161773D0794517D8F8E
+:100D90009C45D58F9449D58FD449D58F944DD58F07
+:100DA000D44DD58FD451D58F9455D58FD98F1CC1A3
+:100DB000DC455CC19C411CC5DC415CC582801C419A
+:100DC00089C593E717001CC1828041677917F98FA5
+:100DD000DDBF9C4513F7070113F8F70001C7D841A1
+:100DE0003368E8008E2113F7F50F39C318418146A7
+:100DF000854E3D4F930F800293028004214E33961F
+:100E0000DE00B3F8C5006311160393982600331370
+:100E10001F011343F3FF3377E300B318180133E7DF
+:100E2000E800639FF70550C98506E39AC6FD18C11F
+:100E30001307F00F6375B70454412146854E3D4FAB
+:100E4000930F800293028004414EB398CE0033F793
+:100E500015016392E8021317260001173313EF0000
+:100E60001343F3FFB376D3003317E800D98E639DA5
+:100E7000F701232A15010506E319C6FD54C1828036
+:100E8000E39457FA10C94DB7E39757FE232815018D
+:100E9000DDB719C20CC982804CC98280B707002017
+:100EA00023A8A7188280B707002003A7071989473E
+:100EB00010216311F70214318D4763EDD7003C21F7
+:100EC0009A0637E700E09607D58F93F7F70F32972A
+:100ED0002300F74054410547935756003317C70086
+:100EE00089CA938707048A07B7E600E0B69798C3D4
+:100EF000828093870706C5BFB7160240DC42517750
+:100F00007D17F98F5D8DC8C28280371702405C4320
+:100F10009146B18B6385D700A1466382D706B71788
+:100F20007A00938707201CC1371602405C423707BE
+:100F30000020130707019183BD8BBA9794231C41AE
+:100F4000B3D7D7005CC15442A1829D8ABA9694223D
+:100F5000B3D6D70014C55442AD829D8A3697182364
+:100F6000B3D7E7005CC558423983937637001387BF
+:100F7000418036971823B3D7E7021CC982805C43AF
+:100F80005843C166C983758FB7F6FF1F83A6C67025
+:100F9000BD8B89071396160163480600C5460146B6
+:100FA0006392D702C94739A88946638FD702BD46E5
+:100FB000638ED702C146638ED702C546014663934E
+:100FC000D700C1471DEF3747024003270780418BF9
+:100FD00005C737177A0013070720B307F7021CC1AC
+:100FE00021D61C41858381B701466DBF0546B547B3
+:100FF000D1BF0146BD47F9B737173D00130707902A
+:10100000E9BFB7150240D8559316F700D85563DFEE
+:10101000060411833D8B9306170037177A001307D8
+:1010200007203357D70218C1D455A182BD8A8DE25B
+:1010300095463307D702058318C137170240585722
+:1010400014413D8B050733D7E60218C1184171B72B
+:1010500085456394B600E546E9BFBD456396B60095
+:10106000D1463387E602C9BF8906E5BF3D8B9306AB
+:10107000170037177A00130707203357D702F1B745
+:1010800099C5371702405C4B5D8D48CB8280B717FE
+:101090000240D84B1345F5FF798DC8CB828099C5A6
+:1010A000371702401C4F5D8D08CF8280B717024072
+:1010B000984F1345F5FF798D88CF828099C53717F2
+:1010C00002405C4F5D8D48CF8280B7170240D84FF9
+:1010D0001345F5FF798DC8CF828099C53717024037
+:1010E0005C475D8D48C78280B7170240D8471345DB
+:1010F000F5FF798DC8C78280EFF2EFC11629F57729
+:10110000FD17F58FF621DA257971D58F1EA95625A1
+:10111000FD779387379FF58FD6212A842EC6D58FEA
+:101120009625D58FB625D58F5EA55E29C207C183CA
+:1011300093F7F7CFD98F5EA96808C13BB747014045
+:1011400093870780B245631EF402A2576547B387B1
+:10115000E7029841930640060A07B3D7E70233D760
+:10116000D702B3F7D7021207920793872703B3D7A3
+:10117000D702BD8BD98FC207C1831EA445616FF012
+:10118000CFBB9257E1B791C55E250967D98F5EA5A0
+:1011900082805A25F977FD17F98FD5BF13F7F50F20
+:1011A00085471583B395B7006319F7009307C5000A
+:1011B000984301CED98D8CC382808946930745011F
+:1011C000E318D7FE93070501E5B793C5F5FFF98D41
+:1011D000DDB793F5F51F4EA182804A211375F51FE7
+:1011E00082800A216D8D3335A000828013F7F50FC0
+:1011F00085461583B397B6006311D7025A25F98F38
+:101200001A2101454207418381CB0545A181B315D0
+:10121000B5006D8F3335E000828089466314D700B6
+:101220001A29F1BF5A29E1BFB70700209387C71ACF
+:101230009843636FA702D043B386C7006316D500F7
+:1012400054413E85B296D4C35041B306C500631CD9
+:10125000D700B706002083A646196306D70054437B
+:101260001843B29654C118C16303F50088C3828045
+:10127000BA877DBFEFF28FA841112AC6EF00F03682
+:10128000B706002083A74619370600209386461923
+:10129000130686193245A1EF37070020930707266A
+:1012A00093F5F7001307072681C51387F700419BC5
+:1012B000B70500209385C51A23A2050098C18D6546
+:1012C000C115AE97C19B23A2070023A00700B385D9
+:1012D000E7409CC21CC3B707002023A0B71AB7077A
+:1012E000002023AEB718B70700804CC31CC2032AE6
+:1012F0000600B377AA0085E39307F5FF3957636CBF
+:10130000F7009307050113F7F70041C313F707FF31
+:10131000410763EBE706814489A022872E8461A000
+:1013200058C15CC011375840B70600209386061A92
+:101330009042B307E94023A0F90063F3C7009CC2C1
+:10134000B70700203367EA009387471A58C09843CD
+:10135000C10423200400050798C3EF00504593F70C
+:10136000F400D1CBA167938707807390073037567D
+:101370000000375500001306862E93050011130553
+:101380000531EF20704D01A0BA87370700200329EF
+:10139000C7199309C719E360F9F837070020032438
+:1013A000C71A1307C71A50406374F6000C40B5F50E
+:1013B0009442E38286F61440044314C33307F64094
+:1013C00093060002E3F1E6F63305F4009376F500A8
+:1013D000A1DAA16793870780739007303756000022
+:1013E000375500001306862E9305F00C13050531C2
+:1013F000EF20904601A0268541016FF06F9355C103
+:10140000EFF26F91B7070020032745FF83A78719E5
+:101410002A84B376F7009DE2A167938707807390D3
+:10142000073037560000375500001306862E930507
+:10143000401213050531EF20304201A0832605FF3D
+:101440009DC2A167938707807390073037560000CD
+:10145000375500001306862E9305501213050531EB
+:10146000EF20903F01A093C7F7FFF98F232AF5FEE5
+:10147000EF00B017B70700209387C71994430327DD
+:1014800044FF130504FF369798C3793BB707002044
+:101490009387871A9843050798C3EF0050316FF080
+:1014A000CF898280B7E700E041572387E740238652
+:1014B000E740B7F700E023A0070023A2070081461A
+:1014C00094C70147D8C7370700208325071713079C
+:1014D000401F814633D6E5023D4790CBD4CB98C31D
+:1014E0008280EFF24F83411102C6F32750303EC68F
+:1014F000B2470D478D8B6384E702A167938707800E
+:1015000073900730375600003755000013064633F6
+:101510009305600B13050531EF20103401A0B78748
+:10152000002093870700BD8B9DC3A1679387078029
+:1015300073900730375600003755000013064633C6
+:101540009305B00B13050531EF20103101A0993F31
+:10155000B7E700E0056723A0E710116723A0E710B5
+:1015600023A40180EFE0DFD9014541016FE0FFFCDA
+:1015700073110134A1679387078073900730B7F721
+:1015800000E023A20700EF00F00711C5B7E700E075
+:10159000116723A0E720A16793878788739007309E
+:1015A0007311013473002030A16793870780739013
+:1015B0000730938781809843050798C382801387FB
+:1015C00081801C438DE7EFE21FF5A16793870780B9
+:1015D0007390073037560000375500001306463326
+:1015E0009305201013050531EF20102701A0FD17EA
+:1015F0001CC391E7A1679387878873900730828027
+:10160000930785007D575CC118C55CC51CC92320A4
+:10161000050082802328050082809841FD569307AB
+:101620008500631ED7001C49D843D8C10CC79CC590
+:10163000CCC31C4188C985071CC18280B687D443AE
+:101640009042E37DC7FECDB7544118451C4998C66A
+:1016500054C3D4436393A600D8C3984323280500FA
+:101660007D1798C388438280EFE2FFEA41112AC6C2
+:10167000253F3245005DA1371335140041016FE06D
+:10168000DFEB304115C2EFE21FE958451445AA8748
+:10169000329758C56364D700184158C52E85CC478A
+:1016A000EF2070106FE07FE98280EFE2DFE62A84AE
+:1016B000E53D8344540413094402E204E184634594
+:1016C0009002FD57A302F404DD3DF93D8344440438
+:1016D00013090401E204E18463449002FD572302EC
+:1016E000F404F13D6FE07FE55C50E1DF4A85EF00F7
+:1016F000103E19C1EF00505AFD14E204E184C1B755
+:101700001C48E9DF4A85EF00903C19C1EF00D05832
+:10171000FD14E204E184C9B7EFE2FFDF41111DE1EE
+:10172000A1679387078073900730375600003755BD
+:1017300000001306C6359305001113050531EF208F
+:10174000B01101A05C5D2EC62A84BDC33841B3B779
+:10175000E702B9EF913D3040585C1440232C04025D
+:10176000B307E602B24554C03387F600918FB697AF
+:101770005CC4FD572302F40418C4A302F40495E1E9
+:101780001C4899CB13050401EF00703411C5B7E76D
+:1017900000E0116723A0E7201D35054541016FE0FA
+:1017A000DFD913050401A93D13054402913DEDB7AE
+:1017B000A16793870780739007303756000037552D
+:1017C00000001306C6359305501413050531EF20AC
+:1017D000B00801A0EFE23FD4411121C1B3B7A50287
+:1017E000AA8485EF3305B502930770FB63E7A70270
+:1017F000130585042EC6BD3C2A8401CDB245AA87B7
+:1018000099C1930785042CC01CC044DC8545228502
+:101810002137228541016FE05FD2A167938707805E
+:101820007390073037560000375500001306C63551
+:101830009305601C13050531EF20100201A0EFE2B3
+:101840001FCB011132C61DE1A167938707807390FA
+:10185000073037560000375500001306C63593058C
+:10186000105513050531EF20207F01A02A84AE8991
+:101870008DE53C419DC3A167938707807390073036
+:1018800037560000375500001306C63593055055EE
+:1018900013050531EF20407C01A0EF00B04015E5B5
+:1018A000B247014985C7A1679387078073900730C6
+:1018B00037560000375500001306C6359305A0556E
+:1018C00013050531EF20407901A001497D5A930AA3
+:1018D000440237EB00E0916B95A0B24781E7C53138
+:1018E000014559A0631509002808EF00102DC139E2
+:1018F000ED295D3983474404E207E187639447019A
+:101900002302040483475404E207E18763944701F8
+:10191000A30204046D316C002808EF00702B21ED48
+:101920002285993329C5B2455685EF00700E228570
+:10193000AD3BB52D19E123207B210549B531045C70
+:10194000C9DCCE852285FD142D3B04DC1C4899CBD7
+:1019500013050401EF00B01711C5B7E700E01167E8
+:1019600023A0E720A939054505616FE0DFBB22858B
+:101970002D3B352DD9B722850D3B152D2285ED3117
+:101980004DDDB9BF15E5EFE21FB9A1679387078069
+:1019900073900730375600008565375500001306F1
+:1019A000C635938585AC13050531EF20E06A01A0AB
+:1019B0009DCD373600209306062681470147130642
+:1019C0000626214883A846006398A800931737008D
+:1019D000B2978CC3C8C321A891E783A8060063937C
+:1019E0000800B6870507A106E31E07FDFDF3828008
+:1019F000EFE27FB241112A842EC632C47536834786
+:101A000044047D572246E207E187B2456394E7002C
+:101A100023020404834754047D57E207E18763945B
+:101A2000E700A302040432C62EC4513E1C5CA2454A
+:101A3000324689E713054402EF0010022285B531D2
+:101A400041016FE09FAF370700201307871B1C433E
+:101A50009443B70700209387871D81E67D5798C37D
+:101A60008280184358471843DDBFEFE23FA937098A
+:101A70000020B70700209304491B83A9871E2A84EE
+:101A80009C4088404111A388070411052EC66D3E75
+:101A90007D579307491BB245631CE40295C9B737CC
+:101AA0000020938787409440D84398C610479440BD
+:101AB000D0C694401047910654C29440910614C772
+:101AC00098405CCB9843050798C341016FE05FA63F
+:101AD00098434E9440C3637A3401370700200325AE
+:101AE000C71B8C439105153ECDB737070020032552
+:101AF000871B8C4391051536B70700209387871DF8
+:101B00009843E374E4FC80C3C9B7EFE23F9F3734E6
+:101B10000020B70900201304C441370A0020938431
+:101B2000491C9C40EDDF49345C4403A9C700130500
+:101B30004900193E13070A1C1C43FD171CC39C4097
+:101B4000FD179CC0AD3C03250903EFF05F8B4A8570
+:101B5000EFF0FF8AE9B7EFE29F9913192600AA8AEE
+:101B60004A852E8A368BBA8BBE89EFF0AFF01DC145
+:101B7000AA8413054005EFF0EFEF2A8409C904D9C0
+:101B80008147C146631A0A00230A050225A026855B
+:101B9000EFF0FF867D5565A23307FA0003070700C3
+:101BA0003306F400230AE60201C78507E396D7FE51
+:101BB000A3010404B94763F47703A16793870780FF
+:101BC000739007303756000037550000130606376C
+:101BD0009305703913050531EF20004801A0130A61
+:101BE000440052852326740323227405232404040D
+:101BF000EFF05FA213058401EFF0DFA13D4713056D
+:101C0000C9FF33077741269500C818CC40D023067A
+:101C10000404A306040423070404A30704042308FC
+:101C20000404A30804045A86D6854199EFE04FFDC9
+:101C300008C06384090023A08900EFF0FF96B7076E
+:101C400000209387071C9843B7040020B739002071
+:101C5000050798C31387441B18439384441B1389B7
+:101C6000092A6310070E80C0984385476316F7065C
+:101C70009389092A930AC9124E85D109EFF05F981A
+:101C8000E39C3AFF37350020930AC53C1305C53C59
+:101C9000EFF01F97373500209309053E1305053EE9
+:101CA000EFF01F96373500201305453FEFF05F95A5
+:101CB000373500201305C541EFF09F9437350020DC
+:101CC00013058540EFF0DF93B707002023AC571BC7
+:101CD000B707002023AE371BB70700209387C71C28
+:101CE0009843050798C3370700201307071D5C5466
+:101CF000144363F3F6001CC35147B387E702CA9746
+:101D0000D843144718C454C4144723A246012324BB
+:101D1000470198435CC8050798C3EFF05F8AB7078F
+:101D2000002083A7471E054599CB9C40D8575C549B
+:101D30006377F700B7E700E0116723A0E7206FE0C3
+:101D40008FFEB707002083A7471ED9F79C40D857BE
+:101D50005C54E3E3E7F880C041B7EFE2CFFBB7079D
+:101D60000020B7550000372500009387471D014725
+:101D7000814613060010938545381305A5B0E13B55
+:101D80000544631E8502EF00D020631A8502A16717
+:101D90009387078073900730B70700207D5723ACE7
+:101DA000E71CB707002023A2A71EB707002023A423
+:101DB000071EEFF00FF383A7C1806FE00FF8FD5708
+:101DC000E31BF5FEA16793870780739007303756B2
+:101DD0000000856537550000130606379385058496
+:101DE00013050531EF20402701A0B7070020938796
+:101DF000871C9843050798C38280B707002003A576
+:101E0000871E8280B707002083A7871C6398071866
+:101E1000EFE26FF0B70700209387871E8043050429
+:101E200080C339E8B70700209387871B984318437E
+:101E300005C7A16793870780739007303756000066
+:101E400085653755000013060637938575AC130575
+:101E50000531EF20602001A0370700201307C71BC2
+:101E60009443104390C3B707002014C39387C71D42
+:101E70009843050798C3C13E370600209307861D87
+:101E80009C4337370020B70500201306861D130733
+:101E9000072A9385451B01456375F4029C41D14691
+:101EA000DC57B387D7023E971843854763F3E700B3
+:101EB0000545B707002083A7C71E91C305456FE0FE
+:101EC000CFE7370E0020B70E0020514F93078E1B2F
+:101ED0009443944281E6FD571CC2C9B79C43DC473A
+:101EE000DC47D4436374D40014C24DBF83A8870079
+:101EF00003A8C700D44B1383470023A4080123225F
+:101F0000180183A846006394680023A2060103A871
+:101F1000060023AA07007D1823A00601945795CA3E
+:101F200003A8C70183A8070283AF46002324180132
+:101F300083A8070223A208011388870163940F0175
+:101F400023A2160103A8060023A407027D1823A0DC
+:101F5000060193860E1D03A8C70283A8060063F43A
+:101F6000080123A00601B306E803BA9683A8460039
+:101F700083AF880023A4170123A6F70183AF88004D
+:101F800023A26F0023A46800D4CB9C4285079CC287
+:101F90009C41DC57E36CF8F205450DBFB707002004
+:101FA0009387071E98430145050798C38280EFE297
+:101FB000EFD4370400201304841C1C40411185E732
+:101FC000A1679387078073900730375600008565B7
+:101FD00037550000130606379385358B13050531F9
+:101FE000EF20800701A0EFF02FDC1C40FD171CC084
+:101FF0001C4089CB01452AC6EFF06FDC3245410118
+:102000006FE00FD3B707002083A7071CE5D7B736CB
+:1020100000203735002081479386463F370F002048
+:102020001305052AD14837030020370E0020854EBE
+:1020300059A8DC46DC47CC4F9053985790C503A86D
+:1020400007022322B8000328470093858701631302
+:10205000B80050C3104323A407027D1610C38C4759
+:10206000D047D84B1388470090C54CC24C4363936C
+:10207000050150C3104323AA07007D1610C31307A0
+:102080000F1DD0570C4363F3C50010C3330716036D
+:102090002A974C4383AF85008CC723A6F70183AFF3
+:1020A000850023A20F0123A405010C43D8CB85058D
+:1020B0000CC31307431B184358576366E600130706
+:1020C000CE1E2320D70198422DF799C3EFF0BF977A
+:1020D000B70700201387071E04431384071E91CC03
+:1020E000370900208549393B09C59307C91E23A03C
+:1020F0003701FD14EDF823200400B707002083A763
+:10210000C71EE38907EEB7E700E0116723A0E720C9
+:102110000545D5B519E5B7E700E0116723A0E7202D
+:102120008280EFE24FBFB707002083A7871C4111D1
+:102130009DC3A167938707807390073037560000CF
+:1021400037550000130606379305905413050531E3
+:10215000EF10907001A02AC6493932458145EFF051
+:10216000DF90B13511E5B7E700E0116723A0E72064
+:1021700041016FE08FBCB707002003A7871CB7079A
+:1021800000209387C71E01C7054798C3828023A0FC
+:102190000700B70700201387071D18431386071D84
+:1021A000B73700209387072A5148B3060703B38542
+:1021B000D700884115C5C841A106BE964841C8C18F
+:1021C0006314D5005441D4C1D146B306D702B697A3
+:1021D000DC43D447B707002023AAD71A18C282804D
+:1021E00015E7EFE24FB3A16793870780739007303D
+:1021F000375600008565375500001306063793856E
+:1022000025C013050531EF10306501A07D1771BFA2
+:10221000EFE26FB005E5A167938707807390073001
+:10222000375600008565375500001306063793853D
+:10223000C5C113050531EF10306201A0B7070020BA
+:102240002E8483A5471BE105EFF02FBD8545228530
+:10225000EFF0BF816FE06FAEEFE2EFAB2A8705E5ED
+:10226000A167938707807390073037560000856514
+:102270003755000013060637938525C5130505312C
+:10228000EF10905D01A0B70700209387471B5443D0
+:102290002E858C4303A88600D4CD8C4323A0050350
+:1022A00003A807008C46610823A2050103A80700C4
+:1022B0009C43610823A4060198D71C4385071CC3CF
+:1022C00011C27D55B285EFF04FFA6FE00FA75C4564
+:1022D000DC4795E7EFE22FA4A1679387078073900F
+:1022E000073037560000856537550000130606375E
+:1022F000938525C813050531EF10105601A0D04F66
+:10230000945398579385870114C6D0C250436313E2
+:10231000B60054C3144323A40702FD1614C33707A1
+:1023200000200327871CD45725EF8C47D047D84B74
+:1023300090C5D04748434CC2938547006313B5000E
+:1023400050C3104323AA07007D1610C3370700208F
+:102350001307071D10436373D60014C35147338618
+:10236000E602373700201307072A32975043084602
+:1023700090C7C8C708464CC10CC6D8CB1C43014502
+:1023800085071CC3B707002083A7471BDC5763F8EA
+:10239000D700B7070020054723A6E71E0545828022
+:1023A000373700201307473F50430846D0CF88D324
+:1023B00008464CC10CC698D7D1B7B707002083A7F1
+:1023C000C71D1CC1B707002083A7871E5CC1828080
+:1023D000EFE26F94411105E5A16793870780739041
+:1023E000073037560000856537550000130606375D
+:1023F0009385D5CF13050531EF10104601A085E573
+:10240000A167938707807390073037560000856572
+:1024100037550000130606379385E5CF13050531C0
+:10242000EF10904301A02EC62AC4EFF0EF973707B4
+:102430000020B70700201307471B83A6871E1C43F5
+:102440002245B24583C7170599CB1C43A3880704CF
+:102450000544EFF0CF96228541016FE00F8E9C413D
+:102460007D570144E387E7FE370600200326C61D9B
+:102470000328050058416307C80063E5E60023A070
+:102480000500F9B73386E640E37BF6FE958FBA97F1
+:102490009CC12537014475BFB7070020054723A617
+:1024A000E71E8280B707002083A7471E054581CB22
+:1024B000B707002003A5871C133515000605828089
+:1024C000EFE26F8537040020EFF00F8E1304C41F76
+:1024D0001C40B1E7373500201309054313050543B8
+:1024E000EFF00F923735002093044544130545441F
+:1024F000EFF00F91B707002023A8271F0146B70769
+:102500000020C145114523AA971EEFF0AFAC08C0CB
+:1025100019C5B75500009385053BEFF0AFC6EFF046
+:102520000F8A6FE08F81EFD21FFF4CC108C9AA87C5
+:102530006362B602184D158E0545637BE6009385F0
+:102540004700B707002003A5471FEFF00F8D014597
+:102550006FD0BFFE6375D6000545E3FBD5FE9385BE
+:102560004700B707002003A5071FC5B7EFD2BFFA82
+:102570002A84AE8432890C4CA6864A86A69522858A
+:102580005D3719E16FD07FFB1C4C2285BE941C5037
+:102590008297D5B7EFD23FF8B707002083A7071F70
+:1025A0004111AA84DC472EC6C04713054400EFF052
+:1025B000AF8983474402324613F7470011CBA68503
+:1025C00022856D371C502285829741016FD0FFF61E
+:1025D000F99B2302F402FDB7EFD2FFF3370400208A
+:1025E0009306041F98421C4391EBB7070020938782
+:1025F000471F904398C390C26FD03FF45C47FD558E
+:102600008843493FF1BFEFD29FEE15694111B70AE8
+:102610000020B7090020370B0020B70B002013095A
+:10262000C93883A70A1F984329CBDC47814C03ACE8
+:102630000700EFF08FFBEFF04FFC83A7891F2A8480
+:102640009384891F130ACB1F636CF50288C0638FC4
+:102650000C0283A74B1F90431336160003250A0074
+:10266000B3058C40EFF0CFB8EFF07F9411EDB7E7F2
+:1026700000E0116723A0E72001A8854C014C55BF5D
+:10268000A13F80C0EFF0BF92214C05A00146E36757
+:1026900085FDEFF0DF91A2856285ED3DF5B79247AC
+:1026A000B2458297824763DD070003250A00014691
+:1026B0008A85EFF0CF9835D582472245E3C107FEE2
+:1026C00022445C4895E3EFF04FF39C40AA8C63737F
+:1026D000F5001937824723A09401FD17E367FCFC3E
+:1026E0008A07CA979C43828713054400EFE0DFF511
+:1026F000D9BF834744020C4C924693E7170023024C
+:10270000F4026686B6952285393D45D18347440259
+:1027100013F7470019CB1C4C924566862285BE955F
+:10272000B1351C502285829749B7F99B2302F402E8
+:10273000CDBF83474402F99B2302F402BDB7834710
+:102740004402924593E717002302F4020CCC9DE16A
+:10275000A16793870780739007303756000037557D
+:1027600000001306863B9305903513050531EF10E5
+:10277000B00E01A0E6866686E69522856D3335B7F4
+:102780008347440213F727005DF72285EFE03FC738
+:1027900029BFEFD25FD82D33B707002083A7C71F0B
+:1027A0009DE3A16793870780739007303756000039
+:1027B000375500001306863B93059011130505312C
+:1027C000EF10900901A0B7070020B755000037258A
+:1027D0000000938707203947814613060010938530
+:1027E000053D13056560EFF00FB745DD6FD0FFD4F1
+:1027F000B707002083A7071737177A0013070720AA
+:10280000B3D7E7023707002093F7F70F2303F7202A
+:102810001307803EB387E702370700202312F72013
+:102820008280EFD25FCF2A841165011185451105A1
+:10283000EFE0FF86930700207C82371501408D472B
+:102840003EC44C00E147130505803EC6EFE06FD85B
+:1028500022C837440140B70708000C08130504805C
+:102860003ECC02CA231E0100EFE01F8985451305F7
+:102870000480EFE05F9105616FD03FCCEFD21FC8BD
+:10288000B7440140AE893289014493840480634592
+:1028900024014A856FD0DFC9930500042685EFE047
+:1028A0005F947DD9B3878900838507002685050459
+:1028B000C205C181EFE0FF91D9BF138701811C439D
+:1028C000B74600209386C6853E95636BD500B786D4
+:1028D00000209386068063E5A60008C33E858280BB
+:1028E000FD57EDBF232605000CC150C12324050070
+:1028F000054582805C45544118458507B3E7D702FA
+:10290000638EE70058451C41BA978CA35C4558413B
+:102910008507B3E7E7025CC505458280795582806B
+:10292000EFD27FBF79711306000281450808EFD00E
+:102930009FC18545114502C202C402C6EFE02FF6D1
+:10294000854513050020EFE08FF51165EFE0CFDA44
+:10295000371401408547130504804C007C8202C671
+:10296000EFE02FC7C147130504804C007C8202C6EC
+:10297000EFE02FC6930700024C00130504807C8211
+:102980003724014002C6EFE0CFC413050440EFD066
+:102990003FF985473ECA3ECCB7070E003ECE0C0835
+:1029A0008D47130504402302F10202C802D0EFD084
+:1029B0001FFB854513050440EFE0CF8085451305D7
+:1029C0000440EFD03FFF814513050440EFE0EF8F57
+:1029D00013050440EFE02F80930404402685EFE0C8
+:1029E0002F806DFD1305044037240140EFD0DFFF39
+:1029F000930404402685EFD0DFFF6DFD13050440EE
+:102A0000EFE02F8EB70700202394A72045616FD0F9
+:102A1000DFB2EFD25FB079711306C0028145480082
+:102A2000EFD07FB285450545EFE08FE537040240E2
+:102A300013058400EFE06F9EB72701409387C744DA
+:102A40003EC2B70700209387C7203EC48D473EC8CB
+:102A5000930700083ECC930700103ECE930700403A
+:102A60003ED0930700023ED24C008D6713058400D0
+:102A70003ED402C602CA02D6EFE0EFB045616FD085
+:102A8000DFABEFD25FA9370502408545210537242A
+:102A90000140EFE0CFB2130504409D460546814555
+:102AA000EFD03FF7130504409D4609469145EFD00E
+:102AB0005FF69D460D46130504409545EFD07FF522
+:102AC000130504408545EFD0FFEF8545130504400D
+:102AD000EFD0BFF26FD07FA6EFD2FFA341118545A3
+:102AE00013050004EFE0AFDBA147372401407C82EF
+:102AF00085473EC44C00C147130504803EC6EFE045
+:102B00004FAD014613050480A145EFE08FB8914712
+:102B10004C00130504807C82EFE0AFAB0146130547
+:102B200004809145EFE0EFB6930700084C001305D1
+:102B300004807C82EFE0EFA9014613050480930531
+:102B40000008EFE00FB5930700104C001305048058
+:102B50007C82EFE00FA80146130504809305001066
+:102B6000EFE02FB3930700204C00130504807C8214
+:102B7000EFE02FA601461305048093050020EFE047
+:102B80004FB1930700404C00130504807C82EFE0B6
+:102B90004FA401461305048093050040EFE06FAF9A
+:102BA0008567938707804C00130504807C828564C9
+:102BB000EFE02FA201469385048013050480EFE027
+:102BC0004FAD4C00130504806482EFE08FA00146F6
+:102BD000130504808565EFE0CFAB89644C001305D5
+:102BE00004806482EFE0EF9E01461305048089654E
+:102BF000EFE02FAA91674C00130504807C82EFE080
+:102C00004F9D0146130504809165EFE08FA8E177A1
+:102C10004C00130504807C82EFE0AF9B0146130556
+:102C20000480A165EFE0EFA64C00371501406482F7
+:102C3000EFE02F9A0546896537150140EFE06FA553
+:102C400041016FD09F8FEFD21F8DEFE08FA46FD027
+:102C5000DF8EEFD25F8C79712A89854513050004D8
+:102C6000EFE0EFC337240140930700028D44FC825C
+:102C70004C08C147130504803ECE26CCEFE06F958B
+:102C800001461305048093050002EFE08FA08545FF
+:102C90004145EFE0CFC0854513050004EFE00FC2CA
+:102CA0008547FC824C08E1473715014026CC3ECED3
+:102CB000EFE02F928947FC824C089147371501407D
+:102CC000372400403ECEEFE0CF900C10B7070C0049
+:102CD000130504804AD03ED402D223160102EFE04D
+:102CE000AFC1930770357C86680085473EC844872E
+:102CF000EFE06F9B05461305048093055052EFE00B
+:102D0000EFC9854513050480EFE0EFC745616FD03B
+:102D1000DF82EFD25F8079712A898545130500042F
+:102D2000EFE0EFB737240140930700048D44FC82A5
+:102D30004C08C147130504803ECE26CCEFE06F89D6
+:102D400001461305048093050004EFE08F94854548
+:102D50004145EFE0CFB4854513050008EFE00FB61D
+:102D60009147FC824C08E1473715014026CC3ECE06
+:102D7000EFE02F86A147FC824C08914737150140B0
+:102D8000372400403ECEEFE0CF840C10B7070C0094
+:102D9000130504C04AD03ED402D223160102EFE04C
+:102DA000AFB5930780357C86680085473EC8448769
+:102DB000EFE06F8F0546130504C093055052EFE016
+:102DC000EFBD8545130504C0EFE0EFBB45616FD053
+:102DD000CFF6EFD24FF479712A8985451145EFE09E
+:102DE0000FAC3714014089478D44FC824C08C14721
+:102DF000130504803ECE26CCEFD0BFFD014613055F
+:102E000004808945EFE0EF8885451145EFE02FA963
+:102E1000854537050200EFE06FAA9147FC824C0818
+:102E2000E1471305048026CC3ECEEFD09FFAA147A0
+:102E3000FC824C089147130504803ECE3744004085
+:102E4000EFD03FF90C10B7070C00130504404AD02F
+:102E50003ED402D223160102EFE00FAA930760339B
+:102E60007C86680085473EC84487EFE0CF830546EF
+:102E70001305044093055052EFE04FB2854513050A
+:102E80000440EFE04FB045616FD02FEBEFD20FE77A
+:102E90007971AA8985452145EFE06FA03719014076
+:102EA00085470D44C1444C08130509C0FC8226CE59
+:102EB00022CCEFD01FF20146130509C08545EFD0A3
+:102EC0005FFD85454145EFE08F9D85451305001069
+:102ED000EFE0CF9EE1474C0837150140E48222CC59
+:102EE0003ECEEFD01FEF93070002FC824C089147C3
+:102EF000371501403ECEEFD0DFED0C10B7070C00C8
+:102F0000372500404ED03ED402D223160102EFE016
+:102F1000AF9E930790357C86680085473EC8408702
+:102F2000EFD07FF805469305505237250040EFE07B
+:102F3000EFA6854537250040EFE0EFA445616FD04F
+:102F40002FDFEFD24FDD3714014013050440014657
+:102F500093050020EFD0FFF31305044001469305CD
+:102F60000040EFD01FF3856501469385058013056A
+:102F70000440EFD01FF26FD04FDCEFD22FD8797121
+:102F80002A8A854513050002EFE06F91371401404E
+:102F900093070010FC820D49C1474C0813050480BB
+:102FA0003ECE4ACCEFD0FFE2014613050440930524
+:102FB0000010EFD01FEE930700204C08130504808B
+:102FC000FC82EFD01FE1930900404C0813050480F8
+:102FD000231A31018564EFD0DFDF4C08130504802C
+:102FE00093840480E482EFD0DFDEA13F8545214554
+:102FF000EFE0EF8A854537050400EFE02F8CE147CD
+:103000004C08130504C0231A31014ACC3ECEEFD040
+:103010005FDC91474C08130504C0E482375400403C
+:103020003ECEEFD01FDB0C10B7070C001305048059
+:1030300052D03ED402D223160102EFE0EF8B930769
+:1030400070137C8685475C87680085473EC8EFD053
+:103050009FE505461305048093055052EFE00F9459
+:10306000854513050480EFE00F9245616FD04FCC8A
+:10307000EFD26FCA7971AA8485454145EFE02F826E
+:10308000854513050002EFE08F8185453705100067
+:10309000EFE0CF8285670D44FC824C08E14737158D
+:1030A000014022CC3ECEEFD0DFD291473715014010
+:1030B000FC824C089147130505403ECEEFD07FD1EE
+:1030C000B7070C000C10375500403ED426D002D272
+:1030D00023160102EFE04F82054693055052375503
+:1030E0000040EFE0AF8B930750147C866800854763
+:1030F0003EC84087EFD03FDB854537550040EFE0C5
+:103100008F8845616FD06FC3397106DE16DC1ADA1D
+:103110001ED82AD62ED432D236D03ACE3ECC42CA8F
+:1031200046C872C676C47AC27EC0F929F250E2520D
+:103130005253C2533255A255125682567247E24735
+:103140005248C248324EA24E124F824F2161730044
+:103150002030397106DE16DC1ADA1ED82AD62ED4B3
+:1031600032D236D03ACE3ECC42CA46C872C676C4B7
+:103170007AC27EC01D2BF250E2525253C2533255D6
+:10318000A255125682567247E2475248C248324E02
+:10319000A24E124F824F216173002030397106DE3A
+:1031A00016DC1ADA1ED82AD62ED432D236D03ACE2F
+:1031B0003ECC42CA46C872C676C47AC27EC0412B93
+:1031C000F250E2525253C2533255A2551256825611
+:1031D0007247E2475248C248324EA24E124F824FC7
+:1031E000216173002030397106DE16DC1ADA1ED830
+:1031F0002AD62ED432D236D03ACE3ECC42CA46C897
+:1032000072C676C47AC27EC0CD23F250E2525253C7
+:10321000C2533255A255125682567247E24752485F
+:10322000C248324EA24E124F824F216173002030AD
+:10323000397106DE16DC1ADA1ED82AD62ED432D21E
+:1032400036D03ACE3ECC42CA46C872C676C47AC29E
+:103250007EC02D2DF250E2525253C2533255A25528
+:10326000125682567247E2475248C248324EA24E28
+:10327000124F824F216173002030397106DE16DC57
+:103280001ADA1ED82AD62ED432D236D03ACE3ECC36
+:1032900042CA46C872C676C47AC27EC0EF002069B0
+:1032A000F250E2525253C2533255A2551256825630
+:1032B0007247E2475248C248324EA24E124F824FE6
+:1032C000216173002030B7070020039787208147D2
+:1032D0002A97634F070009CD05669306F6FFB68768
+:1032E0006358C700AA876305D50093170701C183F8
+:1032F0003E858280EFD22FA2EFF08FE2EFF06FF1E8
+:10330000EFF02FF86FD06FA3375700000327074364
+:10331000B707002023AEE7203757000003274743B5
+:10332000B707002023ACE720375700000327874367
+:10333000B707002023AAE7208280EFD2CF9DB707EE
+:1033400000200395C7204137EF00B032B7070020B7
+:1033500083A5C721EF00D0026FD02F9EEFD2AF9B85
+:10336000B70700200395E720B93FEF009030B7077B
+:10337000002083A54721EF00B0006FD00F9CEFD253
+:103380008F99B707002003950721353FEF00702E76
+:10339000B707002083A58721EF00807E6FD0EF99CB
+:1033A000EFD26F97B70700201387C72083D5C720B8
+:1033B00056233223375500001305C53DEF00D04991
+:1033C000375400009D3F8325843DEF00607BEF0074
+:1033D0003024AA85375500001305053FEF00D0477C
+:1033E000B53F8325843DEF00A079EF007022AA85C8
+:1033F0003755000013058540EF00104649378325F7
+:10340000843DEF00E077EF00B020AA85375500003B
+:103410001305C541EF0050446FD02F92EFD2AF8F0C
+:10342000EFF08FEB6FD06F91EFD2EF8E85472E8646
+:10343000930500086307F5028947930500106302AE
+:10344000F5028D4793050020630DF5009147930524
+:1034500000406308F5009547631DF5008565938579
+:1034600005803725014013050580EFF0CFFD6FD0B3
+:10347000CF8C99478565E306F5FE9D478965E30294
+:10348000F5FEA1479165E30EF5FCA547A165E30AAA
+:10349000F5FCA947E31DF5FCA145E1B7EFD20F8686
+:1034A000370400209307040201491304040219475A
+:1034B000D4436392A60893094002B3093903330A3F
+:1034C000340183470A0095E7AA841385C900229531
+:1034D000EFF04FC1994703258A006390F402EFF0A3
+:1034E0004FF7930740023309F902854722992300D9
+:1034F000F900330534016FD0AF839D476395F40025
+:10350000EFF03F81F9BF89476395F400EFF07F8CBE
+:10351000C9BFA1476395F400EFF05F97D9B78D4716
+:103520006395F400EFF07FA56DBF9547E39BF4FA38
+:10353000EFF01FB47DB7050993874702E31AE9F658
+:10354000014555BFEFC23FFDB7070020B73500204A
+:1035500023AEA70C13060040938585451545EFF073
+:10356000FFF3B707002023A6A7246FC01FFDB707EE
+:10357000002083A787236399A700B707002083C78C
+:103580000725858B3E858280B707002083A7C72348
+:103590006398A700B707002083C70725898BDDB78D
+:1035A000B707002083A707246398A700B707002068
+:1035B00083C70725918BF9B7B707002083A7472456
+:1035C0006398A700B707002083C70725A18B5DBFBD
+:1035D000B707002083A787246399A700B7070020B7
+:1035E00083C7072593F7070271BFB707002003A71A
+:1035F000C7249307F00FE317E5F8B707002083C748
+:10360000072593F70704BDBFEFC2FFF03744004022
+:103610009305505213050440EFD05FBD15C9130543
+:103620000440EFD09FBB9375F50FB70700202384AC
+:10363000B722B707002003A507241C4D10495449A1
+:103640008507B3E7C7026385D7003105EFF08FAA7E
+:10365000374400409305707213050440EFD01FB942
+:103660001DC5B707002083A707249633BA3363E24A
+:10367000E60201469305707213050440EFD01FB2B5
+:10368000B70700209387072598236D9B98A36FC0E9
+:10369000DFEAD84F1386160092B3B307D7008C2306
+:1036A00013050440EFD0FFB2DDB7EFC2DFE63754B9
+:1036B00000409305505213050480EFD03FB315C965
+:1036C00013050480EFD07FB19375F50FB707002085
+:1036D0002388B722B707002003A587241C4D104973
+:1036E00054498507B3E7C7026385D7003105EFF07A
+:1036F0006FA0375400409305707213050480EFD01B
+:10370000FFAE05C9B707002083A787249633BA33D5
+:1037100063E3E60201469305707213050480EFD05F
+:10372000FFA7B70700209387072598231377F7FD96
+:1037300098A36FC09FE0D84F1386160092B3B307CB
+:10374000D7008C2313050480EFD0BFA8DDB7EFC2EC
+:103750009FDC9305505237550040EFD03FA915C963
+:1037600037550040EFD07FA79375F50FB7070020BE
+:10377000238AB722B707002003A5C7241C4D104990
+:1037800054498507B3E7C7026385D7003105EFF0D9
+:103790006F969305707237550040EFD03FA505C96D
+:1037A000B707002083A7C7249633BA3363E3E60242
+:1037B00001469305707237550040EFD03F9EB70722
+:1037C00000209387072598231377F7FB98A36FC0F2
+:1037D000DFD6D84F1386160092B3B307D7008C23D9
+:1037E00037550040EFD0FF9EDDB7EFC2DFD2372460
+:1037F00000409305505213050480EFD03F9F15C938
+:1038000013050480EFD07F9D9375F50FB707002057
+:103810002380B722B707002003A587231C4D10493A
+:1038200054498507B3E7C7026385D7003105EFF038
+:103830006F8C372400409305707213050480EFD01D
+:10384000FF9A1DC5B707002083A787239633BA3395
+:1038500063E2E60201469305707213050480EFD01F
+:10386000FF93B7070020938707259823799B98A398
+:103870006FC0BFCCD84F1386160092B3B307D700E2
+:103880008C2313050480EFD0DF94DDB7EFC2BFC8EF
+:103890003724004093055052130504C0EFD01F9504
+:1038A00015C9130504C0EFD05F939375F50FB707E3
+:1038B00000202382B722B707002003A5C7231C4D91
+:1038C000104954498507B3E7C7026385D70031051E
+:1038D000EFF04F823724004093057072130504C047
+:1038E000EFD0DF901DC5B707002083A7C72396330D
+:1038F000BA3363E2E602014693057072130504C011
+:10390000EFD0DF89B7070020938707259823759BA1
+:1039100098A36FC09FC2D84F1386160092B3B30707
+:10392000D7008C23130504C0EFD0BF8ADDB7EFC2E8
+:103930009FBE9305505237250040EFD03F8B15C9ED
+:1039400037250040EFD07F899375F50FB70700202A
+:103950002386B722B707002003A547241C4D104932
+:1039600054498507B3E7C7026385D7003105EFE007
+:103970007FF89305707237250040EFD03F871DC553
+:10398000B707002083A747249633BA3363E2E602E1
+:1039900001469305707237250040EFD03F80B7078E
+:1039A00000209387072598235D9B98A36FC0FFB8DD
+:1039B000D84F1386160092B3B307D7008C23372550
+:1039C0000040EFD01F81DDB7EFC2FFB441112A8460
+:1039D0002EC632C4EFF0BFB92A8935E9B245224676
+:1039E000B707002083A487234CCC2310040232B0F5
+:1039F00063958402054693057072372400401305D1
+:103A00000480EFD0AFF99A30DC4C130504809306A4
+:103A1000170096B0BA978C230DA8B707002083A48F
+:103A2000C723639A840237240040930570721305FC
+:103A300004C00546EFD08FF69A30DC4C130504C065
+:103A40009306170096B0BA978C23EFD08FF84A856B
+:103A500041016FC09FAEB707002083A40724639580
+:103A600084023744004093057072130504400546F4
+:103A7000EFD0CFF29A30DC4C1305044093061700C8
+:103A800096B0BA978C23D1B7B707002083A44724F8
+:103A90006393840293057072372500400546EFD08A
+:103AA000EFEF9A30DC4C372500409306170096B0B4
+:103AB000BA978C2359BFB707002083A48724639843
+:103AC0008400054693057072375400400DBFB70758
+:103AD000002083A4C724E39C84F6930570723755B5
+:103AE00000400546EFD08FEB9A30DC4C3755004054
+:103AF0009306170096B0BA978C2381BFEFC2BFA17F
+:103B000085452945EFF05F92B7040020EFF0CFFF25
+:103B100037040020EFF0DF880546930570723755B3
+:103B20000040EFD0AFE70325C42431469385840FCE
+:103B3000EFF09FE91305803EEFE0CFDDE1BFEFC27C
+:103B40009F9D716513050520EFF0DF9FEFF01F8D3E
+:103B5000EFF04FFAB7070020B755000037450000D7
+:103B60009387472515478146130600109385C54363
+:103B70001305C5AFEFD03FFEEFE02F9E6FC0FF9B58
+:103B8000797122D4135475014ECE52CC93199500FD
+:103B900006D626D24AD056CA5AC81374F40F93D9FF
+:103BA0009900135AF50169C49307F00F6308F40EE6
+:103BB0009397390037070004B3E9E700130414F8BA
+:103BC0008144014B13D77501939A95001377F70F32
+:103BD00093DA9A0013D9F50145CF9307F00F630CE0
+:103BE000F7028E0A130717F8B7070004B3EAFA00C2
+:103BF0003A94014633452A01BD47AA86930514002D
+:103C000063E0971017270000130707848A04BA940B
+:103C10009C40BA9782871304F40F63960A0C93E4CE
+:103C200024000946C1BF01451307F00FB707400044
+:103C3000B2502254A6075E07A5837E05D98F925401
+:103C40000259F249624AD24A424B5D8D45618280F7
+:103C5000CA86D689328B8947630FFB088D47E304F8
+:103C6000FBFC854736856310FB1A01478147C9B7BE
+:103C7000639D090413D77501939A95001377F70F85
+:103C800091440144054B93DA9A0013D9F50131F7B9
+:103C9000639D0A0093E414000546A9BF63920902DC
+:103CA000A1441304F00F094B31BF568571249307CB
+:103CB000B5FF098CB39AFA001304A4F801461DBF9E
+:103CC000B1441304F00F0D4BF5BD4E852EC6AD2447
+:103CD0009307B5FF1304A0F8B399F900098C814448
+:103CE000014BB245C5B593E434000D4621B7894771
+:103CF000D286E315FBF636851307F00F81470DBF1B
+:103D000041639306F3FF13D6090193D80A01B3F771
+:103D1000D900B3FADA0033885703B389F80213578E
+:103D20000801B30A5603D6994E97330616036373F8
+:103D300057011A96C167FD17B376F7003378F8007C
+:103D4000C206C2969399660093570701B3393001B2
+:103D5000E982B2979A07B3E6D900B3E9D7009397FF
+:103D6000490063D9070013D7190093F71900B36905
+:103D7000F7002E841307F4076350E00493F77900EB
+:103D800099C793F7F90091466383D70091099397F8
+:103D9000490063D90700B70700F8FD17B3F9F90028
+:103DA000130704089307E00F63CBE70493976900B8
+:103DB000A5831377F70FADBD8547B386E74011C7DD
+:103DC0006D4601478147E345D6E61307E40933977B
+:103DD000E9003337E000B3D7D900D98F13F7770064
+:103DE00019C713F7F70091466303D700910713979C
+:103DF0005700634C07009A07A583014715BD1307B9
+:103E0000F00F814735B52E84B5B7054781470DB50D
+:103E100037068000135775019307F6FF1377F70FE6
+:103E20009305E007B3F6A7009357F50163FCE5009F
+:103E30009305D00963FAE500370500801345F5FFC7
+:103E40003E9582800145828093055009D18E63CDD5
+:103E5000E500130660093307E64033D7E600330573
+:103E6000E040F5F33A8582801307A7F63397E60022
+:103E7000FDB7411106C622C426C20DCD9357F541A8
+:103E800033C4A7001D8CAA8422857D209307E009F6
+:103E90003387A74093076009FD8063CCE702A14602
+:103EA0009377F70F63D5A60061153314A400260499
+:103EB000258021A0814481470144260413559400A4
+:103EC000B2402244DE07FE045D8D458D92444101DF
+:103ED00082809307900963DDE7009307B50195465B
+:103EE000B317F400898E3354D400B337F0005D8CDF
+:103EF000954763D6A7009307B5FF3314F400B706C0
+:103F000000FCFD16937774003376D40085C3937755
+:103F1000F4009145638CB70011069317560063D7E0
+:103F200007009307F009758E3387A74013146600C6
+:103F300025809377F70F51B7C167637CF50293072C
+:103F4000F00F1307000263EBA70097170000938799
+:103F5000A753AA9788233305A7408280218197170A
+:103F6000000093876752AA97882361473305A740CB
+:103F70008280B7070001636DF5006181971700002B
+:103F800093878750AA97882321473305A7408280CB
+:103F90004181971700009387274FAA9788234147AD
+:103FA0003305A7408280B3C7A5008D8B3307C500BA
+:103FB00081E78D4763EDC700AA87637EE5089421FA
+:103FC00085078505A38FD7FEE3EBE7FE8280937616
+:103FD0003500AA8789CA942185078505A38FD7FE56
+:103FE00093F63700C5BF9376C7FF138606FE63F0CE
+:103FF000C70683A3050083A2450083AF850003AFF6
+:10400000C50083AE050103AE450103A3850183A866
+:10401000C5019385450223A0770003A8C5FF23A20D
+:10402000570023A4F70123A6E70123A8D70123AA59
+:10403000C70123AC670023AE17019387470223AE65
+:1040400007FF75B790419107910523AEC7FEE3EBDB
+:10405000D7FEE3E6E7F6828039713EDA2ED232D41B
+:1040600036D63AD842DC46DE9387418122CC804363
+:1040700026CA06CEAA8409C41C4C99E32285FD29D0
+:104080000C4454102686228536C6EF001015F240E7
+:104090006244D24421618280011126CA4AC806CEF8
+:1040A00022CC4EC652C4AA842E8901C51C4D91E370
+:1040B000F1219C4C804499E32685C9219717000083
+:1040C0009387874E631BF402C0405E24A18BB1C767
+:1040D0001C48A1C7FD59294A1C4483450900FD1706
+:1040E000B1E91CC463DD07062286A945268569203F
+:1040F000FD576308F502294535A0971700009387FF
+:10410000A74C6314F4008044C9B797170000938745
+:10411000A747E31CF4FAC0444DBFA2852685192A9F
+:1041200055D97D55F2406244D2444249B249224AAF
+:10413000056182801CC4050963D70700184C63CA57
+:10414000E700638845011C401387170018C08CA343
+:1041500061B7228626850D20E31035F9D9B71C40BA
+:104160001387170018C0294798A371B79387418117
+:10417000AA8588436FF05FF2011122CC26CA4AC893
+:1041800006CE4EC6AA842E89328401C51C4D91E309
+:10419000F52697170000938727416317F406C04060
+:1041A0001C4C1CC45E24A18BC1C31C48B5CF1C4849
+:1041B00008409379F90F1379F90F1D8D5C48634618
+:1041C000F500A2852685692C25E51C440505FD170B
+:1041D0001CC41C401387170018C0238037015C489B
+:1041E0006388A7005E24858B81CBA9476316F900FD
+:1041F000A2852685B5240DEDF24062444A85D2445D
+:104200004249B24905618280971700009387C73BF6
+:104210006314F400804469B7971700009387C7368A
+:10422000E310F4F8C044ADBFA2852685212041D11A
+:104230007D59D9B741119387418126C2844322C455
+:104240004AC006C62A892E8489C49C4C99E32685D7
+:1042500035269717000093872735631BF402C0406B
+:104260000317C40093170701C18393F68700ADEAD3
+:1042700093F6070195EEA5472320F900136707047D
+:104280005AA47D55B24022449244024941018280A1
+:1042900097170000938747336314F4008044C9B72D
+:1042A000971700009387472EE31CF4FAC0444DBFD4
+:1042B000918B9DC34C5889C9930744046384F500CE
+:1042C0004A85292B232A04025E242322040093F723
+:1042D000B7FD5EA41C481CC05E2493E787005EA463
+:1042E0001C4899EB5E241307002093F70728638589
+:1042F000E700A2854A8591295E2413F717001DC3A4
+:104300005C4823240400B307F0401CCC1C48014542
+:10431000B5FB8317C40013F707082DD793E70704ED
+:104320005EA485B7898B014791E3584818C4F9BF4B
+:10433000DE25011122CC26CA06CE4AC84EC613F786
+:104340008700AA842E8479EBD841634DE000B84100
+:10435000634AE0000145F2406244D2444249B24916
+:104360000561828058547DD703A9040093963701D4
+:1043700023A0040063DB060670485E24918B99C776
+:104380005C401D8E5C5899C33C401D8E5C540C50A3
+:10439000814626858297FD575A24631DF500944077
+:1043A000F54763E8D706B70740208507B3D7D7009E
+:1043B000858BA5C31C48232204001CC0931737011A
+:1043C00063D80700FD576314F5009C4091E368C86B
+:1043D0004C5823A02401BDDD930744046384F500F9
+:1043E0002685ED2E232A0402B5B70C5001468546DA
+:1043F00026850297FD572A86E311F5F89C40B5DF24
+:1044000075476385E70059476393E70423A02401B8
+:1044100091B7136707045AA47D5535BF83A90501D9
+:10442000E38A09F203A905008D8B23A03501330926
+:104430003941014791E3D84918C4E35D20F11C5488
+:104440000C50CA864E86268582976347A0005E245C
+:1044500093E707045EA4C9B7AA993309A940F1BF3D
+:104460009C49A5C3011122CC06CE2A8411C51C4D3E
+:1044700081E72EC62122B245971700009387C71205
+:10448000639CF5004C408397C5009DC7228562441C
+:10449000F24005616FF0DFE9971700009387C712BC
+:1044A0006394F5000C44C5B7971700009387C70DB8
+:1044B000E39BF5FC4C44C1BFF240624401450561F9
+:1044C000828001458280411122C406C62A844EA5FD
+:1044D00072A52320050023220500232405002322A2
+:1044E000050623280500232A0500232C0500214664
+:1044F00081451305C505EFC00F8597170000938709
+:1045000087B45CD0971700009387A7B61CD4971781
+:104510000000938787BA5CD4971700009387E7BCA5
+:1045200000D01CD8B240224441018280970500008F
+:10453000938545F391AA411126C213068006938400
+:10454000F5FFB384C4024AC02E8922C406C69385EF
+:1045500044072D2E2A8401CD232005002322250186
+:10456000310508C4138684068145EFB0DFFD22853E
+:10457000B240224492440249410182801C4DA5E789
+:10458000411106C622C497070000938767FA1CD51D
+:104590009387C1819C4323240504232605042328F3
+:1045A00005046314F50085471CCD2A84352848C0CE
+:1045B00022851D2808C42285052848C44840014694
+:1045C0009145EFF05FF008440546A545EFF0BFEFD9
+:1045D00048440946C945EFF01FEF85471CCCB2405F
+:1045E000224441018280828041119387C18126C289
+:1045F00084434AC006C69C4C22C42A8981E726858A
+:10460000EFF0DFF7938484048044DC40FD1763D629
+:1046100007009C40B9CF8440C5BF0317C40039E7E9
+:10462000C1778507232204062320040023220400E7
+:10463000232404005CC423280400232A0400232C20
+:104640000400214681451305C405EFB0DFEF232A9E
+:104650000402232C040223240404232604042285B8
+:10466000B2402244924402494101828013048406EC
+:1046700071BF91454A85EFF01FEC88C049FDB147F5
+:104680002320F9000144E1BF797122D44AD052CCF1
+:1046900056CA5AC85EC606D626D24ECE2A8AAE8AD8
+:1046A000130485040149054BFD5B09ECB25022540B
+:1046B0004A8592540259F249624AD24A424BB24B5D
+:1046C00045618280044483294400FD1963D40900B4
+:1046D0000040E1BFDE24637BFB008397E400638737
+:1046E0007701A6855285829A3369A900938484064E
+:1046F000E9BF1971A6DAAE848395E500A2DC86DEF7
+:10470000328463DB0500DE2423A0060093F707084C
+:1047100085E7930700401DA0300836C6EF007023E0
+:10472000B246E34205FE7247BD67F98F7977BA97C3
+:1047300093B717009CC2F1BF930700041CC0F6504A
+:104740006654D654014509618280DE25011122CCD0
+:1047500006CE26CA4AC8898B2E8489CF9307740453
+:104760001CC01CC885475CC8F2406244D244424920
+:104770000561828074003000AA84EFF09FF7A245A3
+:104780002A892685212219E98317C40013F70720F7
+:1047900061FFF19B93E727005EA4C9B7970700006C
+:1047A000938707D99CD45E2408C008C893E70708FC
+:1047B0005EA4A2475CC8B24781CF8315E40026857A
+:1047C000EF00501C11C55E24F19B93E717005EA417
+:1047D0005E243369F9002316240179B7DDC583A768
+:1047E000C5FF411122C406C626C21384C5FF63D388
+:1047F00007003E94AA84EF00B02097C7FF1F93875D
+:10480000E7A59C4391EF2322040097C7FF1F23A72E
+:1048100087A42244B2402685924441016F00701E55
+:10482000637EF40014403307D4006396E700984396
+:10483000DC43369718C05CC0C9BFBA87D84319C3D8
+:10484000E37DE4FE94433386D700631F8600104067
+:10485000B29694C33386D700E31DC7FA104358437A
+:10486000B29694C3D8C375B76375C400B1479CC0F2
+:104870004DB71040B306C4006316D7001443584325
+:10488000B29614C058C0C0C369B78280011126CA4D
+:1048900093843500F19806CE22CC4AC84EC6A104B6
+:1048A000B14763F9F404B14463E8B4042A89EF0022
+:1048B000301597C7FF1F9387679A98433A8439E466
+:1048C00097C7FF1F9387C7999C4381EB81454A8512
+:1048D000812797C7FF1F23A5A798A6854A850D2F77
+:1048E000FD59631B3507B1472320F9004A85EF00C6
+:1048F000501129A0E3DA04FAB1471CC10145F24086
+:104900006244D2444249B249056182801C40858F8D
+:1049100063C10704AD4663F6F6001CC03E9404C0B4
+:1049200001A85C406315870217C7FF1F2328F79271
+:104930004A85EF00100D1305B400930744006199F8
+:104940003307F5404DDF3A94898F1CC04DBF5CC3DF
+:10495000C5B722874040A5B7130435007198E3001E
+:1049600085FCB305A4404A856525E31A35FBA5BF40
+:104970001C46FD171CC663DA0700184E63C5E70026
+:10498000A9476394F5006FF02FFF1C422E85138713
+:10499000170018C28CA38280011122CC26CA4AC8F3
+:1049A0004EC652C406CE2A89AE893284B304D600DC
+:1049B0007D5A63149400014509A80C204E864A854F
+:1049C000EFF01FFB0504E31645FFF2406244D244BA
+:1049D0004249B249224A05618280357122CD26CBF7
+:1049E0004AC94EC706CF52C556C35AC1DEDEE2DC05
+:1049F000E6DAAA89AE843289368409C51C4D99E36A
+:104A0000EFF0DFB797170000938707BA6398F40CAD
+:104A100083A44900DE24A18BE5C79C48F5C3930716
+:104A20000002A304F1029307000302D22305F1025E
+:104A300022C6930B5002971A0000938AEABA054CDB
+:104A4000294B4A841C2099C3639F770DB30C2441E2
+:104A5000638E0C00E6864A86A6854E85EFF0DFF36E
+:104A6000FD57630FF51C9256E69636D21C206389DB
+:104A7000071CFD571309140002C802CE3ECA02CC1F
+:104A8000A309010482D48345090015465685A92F40
+:104A900013041900C24751E913F7070109C71307A7
+:104AA0000002A309E10413F7870009C71307B00246
+:104AB000A309E104834609001307A002638FE606F9
+:104AC000F2474A84814625461820930514001307AF
+:104AD00007FD6377E60AB5CA3ECE85A897170000A2
+:104AE000938787AE6395F40083A4890025B7971751
+:104AF0000000938767A9E39FF4F083A4C90019BF5E
+:104B0000A6854E85EFF00FF319D97D55FA406A441A
+:104B1000DA444A49BA492A4A9A4A0A4BF65B665C21
+:104B2000D65C0D618280050431BF330555413315D4
+:104B3000AC00C98F3EC82289B9B7324793064700F7
+:104B4000184336C6634707023ACE18209307E0029F
+:104B5000631DF70418309307A002631BF702B247E6
+:104B60000904138747009C433AC663C107023ECA43
+:104B70002DA83307E04093E727003ACE3EC8F1B7AF
+:104B8000B387670385462E84BA973DBFFD57C5B7E7
+:104B9000050402CA81468147254618209305140062
+:104BA000130707FD6374E606F9F20C200D4617158E
+:104BB00000001305E5A30D2D11CD97170000938775
+:104BC00027A31D8D93070004B397A7004245050452
+:104BD0005D8D2AC80C20194617150000130585A104
+:104BE000130914002304B102012535C197B7FFFF53
+:104BF0009387474195E74247B2471377071009CF9C
+:104C000091073EC69257D2973ED225BDB387670320
+:104C100085462E84BA9751B79D07E19BA107D5B76A
+:104C2000780097060000938666D726860C084E8586
+:104C300097000000E7000000FD572A8AE314F5FC06
+:104C4000DE2493F70704E39207EC1255C1B5780010
+:104C500097060000938686D426860C084E85012A86
+:104C6000E1BF797156CA9C49BA8A984522D426D2A6
+:104C70004ECE52CC06D64AD05AC85EC6AA892E84D9
+:104C8000B284368A63D3E700BA879CC003473404F2
+:104C900019C385079CC01C4093F7070281C79C403D
+:104CA00089079CC00329040013796900631A09006D
+:104CB000130B9401FD5B5C449840998F634CF9049D
+:104CC0001C408346340493F70702B336D000A5EBAB
+:104CD00013063404D2854E85829AFD576303F5048A
+:104CE0001C4011469840998B544481446397C700F7
+:104CF000B384E64063D3040081441C4418486354E1
+:104D0000F700998FBE94014969047D5B639824057F
+:104D1000014509A885465A86D2854E85829A631E2A
+:104D200075017D55B250225492540259F249624A9B
+:104D3000D24A424BB24B456182800509ADBF330771
+:104D4000D40013060003A301C70403475404938748
+:104D50001600A2978906A381E7049DBF8546228697
+:104D6000D2854E85829AE30E65FB050945B77971B8
+:104D700022D426D24AD04ECE06D652CC56CA5AC8D3
+:104D8000B689942D930790063289AA842E841386BF
+:104D90003504638DF60263E2D706930780056386C8
+:104DA000F61863EDD700638E062093073004638EF8
+:104DB000F60A930A24042301D404C9A093073006F9
+:104DC0006385F60A93074006E395F6FE1C40084308
+:104DD00093F6070893054500C5C61C410CC363D86C
+:104DE00007001307D002B307F040A301E4049716AD
+:104DF00000009386A680294765A893070007638271
+:104E0000F61663E5D7029307E0066389F618930761
+:104E1000F006E390F6FA0C401C4313F805081385DE
+:104E200047006307080608C39C4385A893075007FB
+:104E3000E383F6FE930780076389F6129307300732
+:104E4000E399F6F61C43D04181459386470014C38D
+:104E500083AA07005685492E01C53305554148C030
+:104E60005C401CC8A301040461A81C43930A2404E9
+:104E7000938647009C4314C32301F4048547D5B7A8
+:104E800093F607041C410CC3B9DAC207C18781BF7E
+:104E900093F5050408C3C9D99E231307F006638759
+:104EA000E60E97060000938666752947A301040461
+:104EB0004C400CC463C5050008406D9908C099E3D7
+:104EC000B28A89CDB28AB3F5E702FD1AB6958C2174
+:104ED0002380BA00B3D5E70263F0E70CA147631E55
+:104EE000F7001C40858B91CB58401C4863C7E700F6
+:104EF00093070003A38FFAFEFD1A3306564110C82C
+:104F00004E87CA867000A2852685EFF09FD57D5A10
+:104F1000631D450B7D55B250225492540259F249FB
+:104F2000624AD24A424B45618280A382D5049706E9
+:104F300000009386A66C0C40084313F805081C413A
+:104F40001105630D080208C313F7150001C793E5A7
+:104F500005020CC04147B9FB0C4093F5F5FD0CC0B0
+:104F6000B1B79C4193E707029CC193078007A30256
+:104F7000F404970600009386A66975BF13F805042C
+:104F800008C3E30308FCC207C1837DBF9706000086
+:104F90009386C666214719BFAE8735B794411C4337
+:104FA000CC4913F80608138547006306080008C3B8
+:104FB0009C438CC339A008C393F606049C43F5DADE
+:104FC0008EA323280400B28A25BF14485686CA85BA
+:104FD00026858299E30045F51C40898B8DE7B24711
+:104FE0004844E35AF5F23E853DB785465686CA8564
+:104FF00026858299E30065F3050A5C443247998F60
+:10500000E345FAFEE9BF014A930A94017D5BF5B7D7
+:10501000411122C42A842E8597F7FF1F23A00784FD
+:1050200006C6EFD09F89FD576319F50097F7FF1F5C
+:105030009387C7829C4391C31CC0B2402244410164
+:105040008280411122C42E848395E50006C65D2A24
+:10505000634905007C48AA977CC8B24022444101BC
+:1050600082805E247D777D17F98F5EA4FDB7DE25F3
+:10507000011122CC26CA4AC84EC606CE93F70710A5
+:10508000AA842E843289B68991C78395E500894622
+:1050900001460D225E247D777D17F98F5EA483156E
+:1050A000E4006244F240CE864A86B24942492685EF
+:1050B000D244056125A8411122C42E848395E500C0
+:1050C00006C6CD28FD575A24631AF500FD77FD1753
+:1050D000F98F5EA4B2402244410182808567D98F56
+:1050E0005EA468C8C5BF8395E50025A8411122C408
+:1050F0002A842E85B285368697E7FF1F23A0077680
+:1051000006C6EFD0AFF7FD576319F50097E7FF1F0D
+:105110009387C7749C4391C31CC0B2402244410191
+:105120008280411122C42A842E8597E7FF1F23A77E
+:10513000077206C61122FD576319F50097E7FF1F96
+:105140009387C7719C4391C31CC0B2402244410164
+:105150008280411122C42A842E85B28597E7FF1FE1
+:1051600023AE076E06C6CD20FD576319F50097E7FD
+:10517000FF1F9387A76E9C4391C31CC0B24022447B
+:1051800041018280411122C42A842E8597E7FF1FA6
+:1051900023A6076C06C6C920FD576319F50097E7DB
+:1051A000FF1F9387A76B9C4391C31CC0B24022444E
+:1051B00041018280411122C42A842E85B28536861F
+:1051C00097E7FF1F23AC076806C67928FD576319C8
+:1051D000F50097E7FF1F938767689C4391C31CC046
+:1051E000B24022444101828093F5F50F2A96631460
+:1051F000C500014582801C21E38EB7FE0505C5BFB1
+:1052000082808280411122C42A842E85B28536860E
+:1052100097E7FF1F23A4076406C6B928FD57631943
+:10522000F50097E7FF1F938767639C4391C31CC0FA
+:10523000B2402244410182809307800517E7FF1F97
+:10524000232EF7607D5582809307800517E7FF1FA7
+:105250002326F7607D5582809307800517E7FF1F9F
+:10526000232EF75E014582809307800517E7FF1F15
+:105270002326F75E7D5582809307800517E7FF1F81
+:10528000232EF75C7D55828053797374656D436C72
+:105290006B3A25640D0A00004368697049443A2559
+:1052A0003038780D0A0000005631302E342E36008A
+:1052B0004672656552544F53204B65726E656C2083
+:1052C00056657273696F6E3A25730D0A000000000F
+:1052D00073686F756C646E27742072756E206174CC
+:1052E00020686572652121002E2E2F467265655259
+:1052F000544F532F706F727461626C652F4D656DE2
+:105300004D616E672F686561705F342E6300000029
+:10531000657272206174206C696E65202564206F4F
+:10532000662066696C6520222573222E200D0A20D6
+:10533000000000002E2E2F4672656552544F532FE9
+:10534000706F727461626C652F4743432F524953EB
+:10535000432D562F706F72742E6300002E2E2F4631
+:1053600072656552544F532F71756575652E6300D4
+:105370002E2E2F4672656552544F532F7461736BF6
+:10538000732E630049444C4500000000F2260000E3
+:10539000F2260000322700003E2700008027000090
+:1053A000F2260000F2260000322700003E2700000F
+:1053B000546D7251000000002E2E2F46726565520A
+:1053C000544F532F74696D6572732E630000000093
+:1053D000546D72205376630000007A446164632048
+:1053E0003A2025642C2025642C2025640A00000026
+:1053F000676574534F435077724F6E566F6C74618C
+:1054000067653A2025640A00676574496E437572C2
+:1054100072656E743A2025640A000000676574495D
+:105420006E566F6C746167653A2025640A0000004F
+:105430006740533A473C113C6740D33A7461736B01
+:1054400031000000BCE8FFFF0EE8FFFF0EE8FFFFA1
+:105450000CE8FFFF12E8FFFF12E8FFFFE2E7FFFFA3
+:105460000CE8FFFF12E8FFFFE2E7FFFF12E8FFFF93
+:105470000CE8FFFFAAE8FFFFAAE8FFFFAAE8FFFF8A
+:10548000E2E7FFFF00010202030303030404040434
+:1054900004040404050505050505050505050505C0
+:1054A00005050505060606060606060606060606A0
+:1054B000060606060606060606060606060606068C
+:1054C0000606060607070707070707070707070770
+:1054D000070707070707070707070707070707075C
+:1054E000070707070707070707070707070707074C
+:1054F000070707070707070707070707070707073C
+:10550000070707070808080808080808080808081F
+:10551000080808080808080808080808080808080B
+:1055200008080808080808080808080808080808FB
+:1055300008080808080808080808080808080808EB
+:1055400008080808080808080808080808080808DB
+:1055500008080808080808080808080808080808CB
+:1055600008080808080808080808080808080808BB
+:1055700008080808080808080808080808080808AB
+:1055800008080808000000000000000000000000FB
+:10559000000000000000000000000000000000000B
+:1055A00000000000000000000000000000000000FB
+:1055B00000000000000000000000000000000000EB
+:1055C00000000000000000000000000000000000DB
+:1055D00000000000000000000000000000000000CB
+:1055E00000000000232D302B20000000686C4C00D0
+:1055F000656667454647000030313233343536370B
+:1056000038394142434445460000000030313233CE
+:1056100034353637383961626364656600000000EE
+:105620000000000000000000010203040607080952
+:105630000000000001020304010203040607080938
+:1056400000000000060000008025000000000000AF
+:10565000000000000000000000000000000000004A
+:10566000000000000000000007000000802500008E
+:10567000000000000000000000000000000000002A
+:105680000000000000000000000000000200000018
+:105690008025000000000000000000000000000065
+:1056A00000000000000000000000000000000000FA
+:1056B000080000008025000000000000000000003D
+:1056C00000000000000000000000000000000000DA
+:1056D0000000000003000000802500000000000022
+:1056E00000000000000000000000000000000000BA
+:1056F00000000000000000000500000000C20100E2
+:105700000000000000000000000000000000000099
+:10571000000000000000000068656C6C6F20776F6F
+:10572000726C640A0000000000000000000000002D
+:10573000A4550000C455000084550000000000007E
+:105740000000000000000000000000000000000059
+:105750000000000000000000000000000000000049
+:105760000000000000000000000000000000000039
+:105770000000000000000000000000000000000029
+:105780000000000000000000000000000000000019
+:10579000006CDC0202040608AAAAAAAA0E000000F5
+:1057A0005C3800200C010020008000200C0100204B
:00000001FF
diff --git a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.lst b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.lst
index bc75cb7..09953a5 100644
--- a/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.lst
+++ b/CH32V303-FreeRTOS/obj/CH32V303-FreeRTOS.lst
@@ -7,10 +7,10 @@ start address 0x00000000
Program Header:
LOAD off 0x00001000 vaddr 0x00000000 paddr 0x00000000 align 2**12
- filesz 0x000022b0 memsz 0x000022b0 flags r-x
- LOAD off 0x00004000 vaddr 0x20000000 paddr 0x000022b0 align 2**12
- filesz 0x00000098 memsz 0x00000200 flags rw-
- LOAD off 0x00004800 vaddr 0x20007800 paddr 0x20007800 align 2**12
+ filesz 0x00005620 memsz 0x00005620 flags r-x
+ LOAD off 0x00007000 vaddr 0x20000000 paddr 0x00005620 align 2**12
+ filesz 0x00000190 memsz 0x0000385c flags rw-
+ LOAD off 0x00007800 vaddr 0x20007800 paddr 0x20007800 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 000001bc 00000004 00000004 00001004 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 2 .text 000020b0 00000200 00000200 00001200 2**8
+ 2 .text 00005420 00000200 00000200 00001200 2**8
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 3 .fini 00000000 000022b0 000022b0 00004098 2**0
+ 3 .fini 00000000 00005620 00005620 00007190 2**0
CONTENTS, ALLOC, LOAD, CODE
- 4 .dalign 00000000 20000000 20000000 00004098 2**0
+ 4 .dalign 00000000 20000000 20000000 00007190 2**0
CONTENTS
- 5 .dlalign 00000000 000022b0 000022b0 00004098 2**0
+ 5 .dlalign 00000000 00005620 00005620 00007190 2**0
CONTENTS
- 6 .data 00000098 20000000 000022b0 00004000 2**2
+ 6 .data 00000190 20000000 00005620 00007000 2**2
CONTENTS, ALLOC, LOAD, DATA
- 7 .bss 00000168 20000098 00002348 00004098 2**2
+ 7 .bss 000036cc 20000190 000057b0 00007190 2**2
ALLOC
- 8 .stack 00000800 20007800 20007800 00004800 2**0
+ 8 .stack 00000800 20007800 20007800 00007800 2**0
ALLOC
- 9 .debug_info 0000d541 00000000 00000000 00004098 2**0
+ 9 .debug_info 0001edb5 00000000 00000000 00007190 2**0
CONTENTS, READONLY, DEBUGGING
- 10 .debug_abbrev 00002276 00000000 00000000 000115d9 2**0
+ 10 .debug_abbrev 00004dea 00000000 00000000 00025f45 2**0
CONTENTS, READONLY, DEBUGGING
- 11 .debug_aranges 000006d0 00000000 00000000 00013850 2**3
+ 11 .debug_aranges 00000dc0 00000000 00000000 0002ad30 2**3
CONTENTS, READONLY, DEBUGGING
- 12 .debug_ranges 000008e8 00000000 00000000 00013f20 2**3
+ 12 .debug_ranges 00001238 00000000 00000000 0002baf0 2**3
CONTENTS, READONLY, DEBUGGING
- 13 .debug_line 0000bab9 00000000 00000000 00014808 2**0
+ 13 .debug_line 0001889b 00000000 00000000 0002cd28 2**0
CONTENTS, READONLY, DEBUGGING
- 14 .debug_str 00002c59 00000000 00000000 000202c1 2**0
+ 14 .debug_str 00004b19 00000000 00000000 000455c3 2**0
CONTENTS, READONLY, DEBUGGING
- 15 .comment 00000033 00000000 00000000 00022f1a 2**0
+ 15 .comment 00000033 00000000 00000000 0004a0dc 2**0
CONTENTS, READONLY
- 16 .debug_frame 000018c0 00000000 00000000 00022f50 2**2
+ 16 .debug_frame 00002f54 00000000 00000000 0004a110 2**2
CONTENTS, READONLY, DEBUGGING
- 17 .debug_loc 0000414f 00000000 00000000 00024810 2**0
+ 17 .debug_loc 00008692 00000000 00000000 0004d064 2**0
CONTENTS, READONLY, DEBUGGING
- 18 .stab 00000084 00000000 00000000 00028960 2**2
+ 18 .stab 00000084 00000000 00000000 000556f8 2**2
CONTENTS, READONLY, DEBUGGING
- 19 .stabstr 00000117 00000000 00000000 000289e4 2**0
+ 19 .stabstr 00000117 00000000 00000000 0005577c 2**0
CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
00000000 l d .init 00000000 .init
00000004 l d .vector 00000000 .vector
00000200 l d .text 00000000 .text
-000022b0 l d .fini 00000000 .fini
+00005620 l d .fini 00000000 .fini
20000000 l d .dalign 00000000 .dalign
-000022b0 l d .dlalign 00000000 .dlalign
+00005620 l d .dlalign 00000000 .dlalign
20000000 l d .data 00000000 .data
-20000098 l d .bss 00000000 .bss
+20000190 l d .bss 00000000 .bss
20007800 l d .stack 00000000 .stack
00000000 l d .debug_info 00000000 .debug_info
00000000 l d .debug_abbrev 00000000 .debug_abbrev
@@ -84,43 +84,106 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 ch32v30x_it.c
00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 system_ch32v30x.c
+00000000 l df *ABS* 00000000 ch32v30x_adc.c
00000000 l df *ABS* 00000000 ch32v30x_dbgmcu.c
+00000000 l df *ABS* 00000000 ch32v30x_dma.c
00000000 l df *ABS* 00000000 ch32v30x_gpio.c
00000000 l df *ABS* 00000000 ch32v30x_misc.c
00000000 l df *ABS* 00000000 ch32v30x_rcc.c
20000010 l O .data 00000010 APBAHBPrescTable
-20000084 l O .data 00000004 ADCPrescTable
+20000174 l O .data 00000004 ADCPrescTable
00000000 l df *ABS* 00000000 ch32v30x_usart.c
+00000000 l df *ABS* 00000000 heap_4.c
+00001228 l F .text 0000004c prvInsertBlockIntoFreeList
+20000260 l O .bss 00003000 ucHeap
+20000194 l O .bss 00000004 pxEnd
+20000198 l O .bss 00000004 xBlockAllocatedBit
+2000019c l O .bss 00000004 xFreeBytesRemaining
+200001a0 l O .bss 00000004 xMinimumEverFreeBytesRemaining
+200001a4 l O .bss 00000004 xNumberOfSuccessfulAllocations
+200001a8 l O .bss 00000004 xNumberOfSuccessfulFrees
+200001ac l O .bss 00000008 xStart
00000000 l df *ABS* 00000000 port.c
+20000178 l O .data 00000004 uxCriticalNesting
+00000000 l df *ABS* 00000000 list.c
+00000000 l df *ABS* 00000000 queue.c
+00001668 l F .text 0000001a prvIsQueueEmpty
+00001682 l F .text 00000028 prvCopyDataFromQueue
+000016aa l F .text 0000006e prvUnlockQueue
00000000 l df *ABS* 00000000 tasks.c
-00000c68 l F .text 00000024 prvResetNextTaskUnblockTime
-200000d0 l O .bss 0000012c pxReadyTasksLists
-200000a0 l O .bss 00000004 pxDelayedTaskList
-200000a4 l O .bss 00000004 pxOverflowDelayedTaskList
-200000a8 l O .bss 00000004 uxSchedulerSuspended
-200000ac l O .bss 00000004 uxTopReadyPriority
-200000b0 l O .bss 00000004 xNextTaskUnblockTime
-200000b4 l O .bss 00000004 xNumOfOverflows
-200000b8 l O .bss 00000004 xPendedTicks
-200000bc l O .bss 00000004 xTickCount
-200000c0 l O .bss 00000004 xYieldPending
+00001a46 l F .text 00000024 prvResetNextTaskUnblockTime
+00001a6a l F .text 000000a0 prvAddCurrentTaskToDelayedList
+00001b0a l F .text 0000004c prvIdleTask
+200032a0 l O .bss 0000012c pxReadyTasksLists
+200033cc l O .bss 00000014 xDelayedTaskList1
+200033e0 l O .bss 00000014 xDelayedTaskList2
+200033f4 l O .bss 00000014 xPendingReadyList
+20003408 l O .bss 00000014 xSuspendedTaskList
+2000341c l O .bss 00000014 xTasksWaitingTermination
+200001b8 l O .bss 00000004 pxDelayedTaskList
+200001bc l O .bss 00000004 pxOverflowDelayedTaskList
+200001c0 l O .bss 00000004 uxCurrentNumberOfTasks
+200001c4 l O .bss 00000004 uxDeletedTasksWaitingCleanUp
+200001c8 l O .bss 00000004 uxSchedulerSuspended
+200001cc l O .bss 00000004 uxTaskNumber
+200001d0 l O .bss 00000004 uxTopReadyPriority
+200001d4 l O .bss 00000004 xIdleTaskHandle
+200001d8 l O .bss 00000004 xNextTaskUnblockTime
+200001dc l O .bss 00000004 xNumOfOverflows
+200001e0 l O .bss 00000004 xPendedTicks
+200001e4 l O .bss 00000004 xSchedulerRunning
+200001e8 l O .bss 00000004 xTickCount
+200001ec l O .bss 00000004 xYieldPending
+00000000 l df *ABS* 00000000 timers.c
+000024c0 l F .text 00000066 prvCheckForValidListAndQueue
+00002526 l F .text 00000046 prvInsertTimerInActiveList
+0000256c l F .text 00000028 prvReloadTimer
+00002594 l F .text 00000044 prvProcessExpiredTimer
+000025d8 l F .text 0000002e prvSwitchTimerLists
+00002606 l F .text 0000018c prvTimerTask
+20003430 l O .bss 00000014 xActiveTimerList1
+20003444 l O .bss 00000014 xActiveTimerList2
+200001f0 l O .bss 00000004 pxCurrentTimerList
+200001f4 l O .bss 00000004 pxOverflowTimerList
+200001f8 l O .bss 00000004 xLastTime.6323
+200001fc l O .bss 00000004 xTimerQueue
+20000200 l O .bss 00000004 xTimerTaskHandle
00000000 l df *ABS* 00000000 debug.c
-200000c4 l O .bss 00000002 p_ms
-200000c6 l O .bss 00000001 p_us
-20000088 l O .data 00000004 curbrk.5274
+20000204 l O .bss 00000002 p_ms
+20000206 l O .bss 00000001 p_us
+20000180 l O .data 00000004 curbrk.5274
+00000000 l df *ABS* 00000000 ring_queue.c
+00000000 l df *ABS* 00000000 HD_ADC.c
+00000000 l df *ABS* 00000000 HD_GPIO.c
+00000000 l df *ABS* 00000000 HD_UART.c
+00000000 l df *ABS* 00000000 FM_ADC.c
+000032c6 l F .text 0000002e Get_ConversionVal
+20000214 l O .bss 00000004 P_In_Current
+20000218 l O .bss 00000004 P_In_Voltage
+2000021c l O .bss 00000004 P_PwrOn_Voltage
+00000000 l df *ABS* 00000000 FM_GPIO.c
+00000000 l df *ABS* 00000000 uart_dev.c
+0000349c l F .text 000000a8 uart_dev_init
+20000250 l O .bss 00000001 uartInterruptSendFlag
+00000000 l df *ABS* 00000000 freerotsTask.c
+00000000 l df *ABS* 00000000 mulsf3.c
+00000000 l df *ABS* 00000000 fixsfsi.c
+00000000 l df *ABS* 00000000 floatsisf.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 wbuf.c
00000000 l df *ABS* 00000000 wsetup.c
00000000 l df *ABS* 00000000 fflush.c
00000000 l df *ABS* 00000000 findfp.c
-0000141a l F .text 00000066 std
+000044c6 l F .text 00000066 std
00000000 l df *ABS* 00000000 fwalk.c
00000000 l df *ABS* 00000000 makebuf.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
-000018b8 l F .text 00000028 __sfputc_r
+00004970 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
@@ -137,226 +200,339 @@ 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
+2000010c l O .data 00000060 impure_data
00000000 l df *ABS* 00000000 reent.c
-00000886 w .text 00000000 EXTI2_IRQHandler
-00000886 w .text 00000000 TIM8_TRG_COM_IRQHandler
-00000886 w .text 00000000 TIM8_CC_IRQHandler
-000020a4 g F .text 00000028 _isatty_r
-00000ff0 g F .text 000000d4 _puts_r
-000020cc g F .text 0000002c _lseek_r
-00000886 w .text 00000000 UART8_IRQHandler
-00000fb0 g F .text 00000040 printf
-20000880 g .data 00000000 __global_pointer$
+0000088c w .text 00000000 EXTI2_IRQHandler
+0000088c w .text 00000000 TIM8_TRG_COM_IRQHandler
+0000088c w .text 00000000 TIM8_CC_IRQHandler
+00005184 g F .text 00000030 _isatty_r
+00004098 g F .text 000000d4 _puts_r
+00003428 g F .text 00000074 writePwrCtrlState
+000051b4 g F .text 00000034 _lseek_r
+00000dbe g F .text 00000014 DMA_Cmd
+0000327a g F .text 0000004c UART8_IRQHandler
+000015be g F .text 00000042 vPortExitCritical
+00004058 g F .text 00000040 printf
+20000970 g .data 00000000 __global_pointer$
000004ee g F .text 00000028 .hidden __riscv_save_8
-00000886 w .text 00000000 TIM1_CC_IRQHandler
-00001fee g F .text 00000030 __sseek
-000014d0 g F .text 00000066 __sinit
-000010ce g F .text 000000bc __swbuf_r
+0000088c w .text 00000000 TIM1_CC_IRQHandler
+000050b6 g F .text 00000030 __sseek
+0000457c g F .text 0000006c __sinit
+00004178 g F .text 000000bc __swbuf_r
+20000244 g O .bss 00000004 g_J4_uart8_handle
000005f0 g F .text 00000010 HardFault_Handler
-0000148a g F .text 00000046 __sfmoreglue
-00002112 g F .text 00000002 __malloc_unlock
+000019f0 g F .text 00000056 vQueueWaitForMessageRestricted
+00004536 g F .text 00000046 __sfmoreglue
+20000224 g O .bss 00000001 J2_Rbuffer
+00005202 g F .text 00000002 __malloc_unlock
+000009c4 g F .text 00000012 ADC_DMACmd
+000028f4 g F .text 0000002c InRingQueue
0000053a g F .text 0000000c .hidden __riscv_restore_3
-00000886 w .text 00000000 TIM6_IRQHandler
-00000c32 g F .text 00000036 SysTick_Handler
-00000886 w .text 00000000 PVD_IRQHandler
-00000886 w .text 00000000 SDIO_IRQHandler
-00000886 w .text 00000000 TIM9_BRK_IRQHandler
+0000088c w .text 00000000 TIM6_IRQHandler
+00001570 g F .text 00000038 SysTick_Handler
+000009e8 g F .text 0000000a ADC_StartCalibration
+00003b3e g F .text 00000042 startApp
+00000ea6 g F .text 00000052 NVIC_Init
+0000088c w .text 00000000 PVD_IRQHandler
+0000088c w .text 00000000 SDIO_IRQHandler
+0000088c w .text 00000000 TIM9_BRK_IRQHandler
00000526 g F .text 00000020 .hidden __riscv_restore_10
-00000886 w .text 00000000 DMA2_Channel8_IRQHandler
+0000088c w .text 00000000 DMA2_Channel8_IRQHandler
000005ee g F .text 00000002 NMI_Handler
-00000886 w .text 00000000 CAN2_RX1_IRQHandler
-00000886 w .text 00000000 EXTI3_IRQHandler
+00003e10 g F .text 00000062 .hidden __fixsfsi
+0000088c w .text 00000000 CAN2_RX1_IRQHandler
+0000088c w .text 00000000 EXTI3_IRQHandler
000004ee g F .text 00000028 .hidden __riscv_save_11
-00000916 g F .text 0000000a DBGMCU_GetCHIPID
-2000009c g O .bss 00000004 pxCurrentTCB
-00000886 w .text 00000000 USBHS_IRQHandler
-00000c28 g F .text 0000000a USART_GetFlagStatus
-00000886 w .text 00000000 DMA2_Channel9_IRQHandler
-0000207a g F .text 0000002a _fstat_r
-00000886 w .text 00000000 TIM10_CC_IRQHandler
-200001fc g O .bss 00000004 errno
-20000098 g .bss 00000000 _sbss
+00000c10 g F .text 0000000a DBGMCU_GetCHIPID
+200001b4 g O .bss 00000004 pxCurrentTCB
+0000088c w .text 00000000 USBHS_IRQHandler
+000011e2 g F .text 0000000a USART_GetFlagStatus
+0000088c w .text 00000000 DMA2_Channel9_IRQHandler
+00005152 g F .text 00000032 _fstat_r
+0000088c w .text 00000000 TIM10_CC_IRQHandler
+20003858 g O .bss 00000004 errno
+20000190 g .bss 00000000 _sbss
00000800 g *ABS* 00000000 __stack_size
-00000efe g F .text 00000052 USART_Printf_Init
-00000886 w .text 00000000 USBFS_IRQHandler
+0000337e g F .text 00000022 getInVoltage
+00002822 g F .text 0000005a USART_Printf_Init
+00000d86 g F .text 00000038 DMA_Init
+0000088c w .text 00000000 USBFS_IRQHandler
+20000234 g O .bss 00000001 Upward_Rbuffer
+000023ba g F .text 00000016 vTaskInternalSetTimeOutState
0000053a g F .text 0000000c .hidden __riscv_restore_2
-00001480 g F .text 0000000a _cleanup_r
-00000886 w .text 00000000 EXTI0_IRQHandler
-00000886 w .text 00000000 I2C2_EV_IRQHandler
-00000886 w .text 00000000 TIM10_TRG_COM_IRQHandler
-000010c4 g F .text 0000000a puts
-20000080 g O .data 00000004 SystemCoreClock
+000014e2 g F .text 0000008e xPortStartScheduler
+00003fa6 g F .text 000000b2 memcpy
+00002210 g F .text 00000048 vTaskPlaceOnEventList
+000009b4 g F .text 00000010 ADC_Cmd
+0000452c g F .text 0000000a _cleanup_r
+000014a4 w F .text 0000003e vPortSetupTimerInterrupt
+0000088c w .text 00000000 EXTI0_IRQHandler
+0000088c w .text 00000000 I2C2_EV_IRQHandler
+0000088c w .text 00000000 TIM10_TRG_COM_IRQHandler
+20000208 g O .bss 00000002 Calibrattion_Val
+20000248 g O .bss 00000004 g_J5_0_usart3_handle
+0000416c g F .text 0000000c puts
+000013fe g F .text 000000a6 vPortFree
+20000170 g O .data 00000004 SystemCoreClock
20008000 g .stack 00000000 __freertos_irq_stack_top
-0000214c g F .text 0000000c _fstat
+000011da g F .text 00000008 USART_ReceiveData
+00005248 g F .text 00000010 _fstat
00000004 g .init 00000000 _einit
-00000b60 g F .text 0000001e RCC_APB2PeriphClockCmd
+0000109e g F .text 0000001e RCC_APB2PeriphClockCmd
+2000024c g O .bss 00000004 g_Upward_uart5_handle
000004e6 g F .text 00000030 .hidden __riscv_save_12
-00000886 w .text 00000000 CAN2_SCE_IRQHandler
-00000886 w .text 00000000 ADC1_2_IRQHandler
-00000920 g F .text 000000c0 GPIO_Init
-00000886 w .text 00000000 Break_Point_Handler
+000039c8 g F .text 00000134 uartInterruptSend
+0000088c w .text 00000000 CAN2_SCE_IRQHandler
+0000088c w .text 00000000 ADC1_2_IRQHandler
+00000dd2 g F .text 000000c0 GPIO_Init
+00000ef8 g F .text 00000012 RCC_ADCCLKConfig
+0000088c w .text 00000000 Break_Point_Handler
+00002d12 g F .text 000000c0 J2_485_Init
00000526 g F .text 00000020 .hidden __riscv_restore_11
-20000098 g O .bss 00000004 NVIC_Priority_Group
-00000886 w .text 00000000 SPI1_IRQHandler
-00000c0a g F .text 00000016 USART_Cmd
-00001f50 g F .text 0000002a _sbrk_r
-00000886 w .text 00000000 TAMPER_IRQHandler
+000033a0 g F .text 0000007c printf_adc_data
+20000190 g O .bss 00000004 NVIC_Priority_Group
+0000088c w .text 00000000 SPI1_IRQHandler
+000009d6 g F .text 0000000a ADC_ResetCalibration
+00001186 g F .text 00000016 USART_Cmd
+00005010 g F .text 00000032 _sbrk_r
+0000088c w .text 00000000 TAMPER_IRQHandler
00000516 g F .text 0000000c .hidden __riscv_save_1
0000053a g F .text 0000000c .hidden __riscv_restore_0
-00002114 g F .text 0000002c _read_r
+00005204 g F .text 00000034 _read_r
+00001614 g F .text 00000006 vListInitialiseItem
000004fc g F .text 0000001a .hidden __riscv_save_7
-00000886 w .text 00000000 CAN2_RX0_IRQHandler
-00000886 w .text 00000000 TIM8_UP_IRQHandler
-00000886 w .text 00000000 Ecall_M_Mode_Handler
+0000183e g F .text 00000146 xQueueReceive
+0000088c w .text 00000000 CAN2_RX0_IRQHandler
+20003260 g O .bss 00000040 xQueueRegistry
+0000088c w .text 00000000 TIM8_UP_IRQHandler
+000010bc g F .text 0000001e RCC_APB1PeriphClockCmd
+0000356e g F .text 0000009a getUartSendState
+0000088c w .text 00000000 Ecall_M_Mode_Handler
20007800 g .stack 00000000 _heap_end
-00002158 g F .text 0000000c _isatty
-20000094 g O .data 00000004 _global_impure_ptr
+00005258 g F .text 00000010 _isatty
+2000018c g O .data 00000004 _global_impure_ptr
+0000335c g F .text 00000022 getInCurrent
00000530 g F .text 00000016 .hidden __riscv_restore_5
-00000886 w .text 00000000 DMA2_Channel2_IRQHandler
-00000886 w .text 00000000 DMA1_Channel4_IRQHandler
-00000f8a g F .text 00000026 _sbrk
-00000886 w .text 00000000 TIM9_UP_IRQHandler
+0000088c w .text 00000000 DMA2_Channel2_IRQHandler
+00001080 g F .text 0000001e RCC_AHBPeriphClockCmd
+0000088c w .text 00000000 DMA1_Channel4_IRQHandler
+00000a12 g F .text 000000b8 ADC_RegularChannelConfig
+000028ba g F .text 0000002a _sbrk
+00001274 g F .text 0000018a pvPortMalloc
+000028e4 g F .text 00000010 InitRingQueue
+00001600 g F .text 00000014 vListInitialise
+0000088c w .text 00000000 TIM9_UP_IRQHandler
00000530 g F .text 00000016 .hidden __riscv_restore_6
-00000886 w .text 00000000 USART3_IRQHandler
-00000886 w .text 00000000 RTC_IRQHandler
-20000200 g .bss 00000000 _ebss
-00000886 w .text 00000000 DMA1_Channel7_IRQHandler
-00000886 w .text 00000000 CAN1_RX1_IRQHandler
-00000ecc g F .text 00000032 Delay_Init
-00000886 w .text 00000000 DVP_IRQHandler
-00000886 w .text 00000000 UART5_IRQHandler
-00000886 w .text 00000000 TIM4_IRQHandler
+00003152 g F .text 0000004a USART3_IRQHandler
+00001dfa g F .text 0000000a xTaskGetTickCount
+0000088c w .text 00000000 RTC_IRQHandler
+000009f2 g F .text 00000008 ADC_GetCalibrationStatus
+2000385c g .bss 00000000 _ebss
+000011ec g F .text 0000003c USART_GetITStatus
+0000088c w .text 00000000 DMA1_Channel7_IRQHandler
+000009fa g F .text 00000018 ADC_SoftwareStartConvCmd
+000009e0 g F .text 00000008 ADC_GetResetCalibrationStatus
+0000088c w .text 00000000 CAN1_RX1_IRQHandler
+000027f0 g F .text 00000032 Delay_Init
+0000088c w .text 00000000 DVP_IRQHandler
+0000319c g F .text 0000004a UART5_IRQHandler
+00002f42 g F .text 00000038 USART_CONNET_J0
+00002c52 g F .text 000000c0 J1_485_Init
+000022ce g F .text 000000ec xTaskRemoveFromEventList
+0000088c w .text 00000000 TIM4_IRQHandler
+0000341c g F .text 0000000c FM_GPIO_Init
000004ee g F .text 00000028 .hidden __riscv_save_9
-00000886 w .text 00000000 DMA2_Channel1_IRQHandler
-00002214 g O .text 00000020 __sf_fake_stderr
+00000e92 g F .text 0000000a GPIO_WriteBit
+0000088c w .text 00000000 DMA2_Channel1_IRQHandler
+00005584 g O .text 00000020 __sf_fake_stderr
000004fc g F .text 0000001a .hidden __riscv_save_4
-00000886 w .text 00000000 I2C1_EV_IRQHandler
-20000090 g O .data 00000004 xISRStackTop
-000009ea g F .text 00000176 RCC_GetClocksFreq
-00000886 w .text 00000000 DMA1_Channel6_IRQHandler
-000018e0 g F .text 00000040 __sfputs_r
-00000886 w .text 00000000 UART4_IRQHandler
-00000886 w .text 00000000 DMA2_Channel4_IRQHandler
-000020f8 g F .text 00000018 memchr
-00000b7e g F .text 0000008c USART_Init
-00001724 g F .text 000000b0 _free_r
-00000886 w .text 00000000 TIM3_IRQHandler
-00000886 w .text 00000000 RCC_IRQHandler
+0000088c w .text 00000000 I2C1_EV_IRQHandler
+20000188 g O .data 00000004 xISRStackTop
+00000f0a g F .text 00000176 RCC_GetClocksFreq
+0000088c w .text 00000000 DMA1_Channel6_IRQHandler
+00003f38 g F .text 0000006e .hidden __clzsi2
+00004998 g F .text 00000042 __sfputs_r
+0000088c w .text 00000000 UART4_IRQHandler
+0000088c w .text 00000000 DMA2_Channel4_IRQHandler
+000051e8 g F .text 00000018 memchr
+000010f8 g F .text 0000008e USART_Init
+000023d0 g F .text 000000c8 xTaskCheckForTimeOut
+000047dc g F .text 000000b0 _free_r
+0000088c w .text 00000000 TIM3_IRQHandler
+0000088c w .text 00000000 RCC_IRQHandler
00000516 g F .text 0000000c .hidden __riscv_save_3
-00000886 w .text 00000000 TIM1_TRG_COM_IRQHandler
-00000886 w .text 00000000 DMA1_Channel1_IRQHandler
+0000088c w .text 00000000 TIM1_TRG_COM_IRQHandler
+0000088c w .text 00000000 DMA1_Channel1_IRQHandler
00000000 g .init 00000000 _start
-00000886 w .text 00000000 DMA2_Channel7_IRQHandler
+0000088c w .text 00000000 DMA2_Channel7_IRQHandler
+00001dea g F .text 00000010 vTaskSuspendAll
20000000 g O .data 00000010 AHBPrescTable
-00002164 g F .text 0000000c _lseek
-00000886 w .text 00000000 EXTI15_10_IRQHandler
-00000e34 g F .text 00000098 vTaskSwitchContext
-00000886 w .text 00000000 TIM7_IRQHandler
-00002052 g F .text 00000028 _close_r
-00000886 w .text 00000000 CAN2_TX_IRQHandler
+00005268 g F .text 00000010 _lseek
+00003e72 g F .text 000000c6 .hidden __floatsisf
+0000374e g F .text 0000009c Upward_Interrupt
+00001648 g F .text 00000020 uxListRemove
+0000088c w .text 00000000 EXTI15_10_IRQHandler
+0000119c g F .text 00000036 USART_ITConfig
+20000254 g O .bss 00000004 Task1Task_Handler
+2000023c g O .bss 00000004 g_J2_uart7_handle
+00002176 g F .text 0000009a vTaskSwitchContext
+00003070 g F .text 00000098 Upward_UART5_Init
+00002258 g F .text 00000076 vTaskPlaceOnEventListRestricted
+0000088c w .text 00000000 TIM7_IRQHandler
+00005122 g F .text 00000030 _close_r
+000032f4 g F .text 00000014 FM_ADC_Init
+0000088c w .text 00000000 CAN2_TX_IRQHandler
20000000 g .dalign 00000000 _data_vma
-00000886 w .text 00000000 TIM5_IRQHandler
-0000118a g F .text 000000fc __swsetup_r
-00000886 w .text 00000000 EXTI9_5_IRQHandler
-00001536 g F .text 0000009c __sfp
+0000088c w .text 00000000 TIM5_IRQHandler
+20003458 g O .bss 00000400 Upward_inBuff
+00004234 g F .text 000000fc __swsetup_r
+00003544 g F .text 0000002a Init_Upward_uart
+0000088c w .text 00000000 EXTI9_5_IRQHandler
+000045e8 g F .text 000000a0 __sfp
000004ee g F .text 00000028 .hidden __riscv_save_10
-00001f7a g F .text 0000002c __sread
-00000886 w .text 00000000 ETH_WKUP_IRQHandler
-00002110 g F .text 00000002 __malloc_lock
+00005042 g F .text 0000002c __sread
+0000088c w .text 00000000 ETH_WKUP_IRQHandler
+20000020 g O .data 000000d8 uart_devices
+00005200 g F .text 00000002 __malloc_lock
00000530 g F .text 00000016 .hidden __riscv_restore_4
00000526 g F .text 00000020 .hidden __riscv_restore_8
-000013b6 g F .text 00000064 _fflush_r
+00004460 g F .text 00000066 _fflush_r
000004fc g F .text 0000001a .hidden __riscv_save_6
-00000886 w .text 00000000 SPI2_IRQHandler
-00002234 g O .text 00000020 __sf_fake_stdin
+0000088c w .text 00000000 SPI2_IRQHandler
+000055a4 g O .text 00000020 __sf_fake_stdin
+200000f8 g O .data 00000014 data
00000546 g F .text 000000a8 memset
00000526 g F .text 00000020 .hidden __riscv_restore_9
+00002f7a g F .text 000000f6 J5_0_485_Init
00000530 g F .text 00000016 .hidden __riscv_restore_7
-00000600 g F .text 0000005e main
-00000886 w .text 00000000 TIM10_BRK_IRQHandler
-00000886 w .text 00000000 TIM9_CC_IRQHandler
-0000201e g F .text 00000006 __sclose
-00000886 w .text 00000000 DMA2_Channel5_IRQHandler
-000017d4 g F .text 000000e4 _malloc_r
-00000886 w .text 00000000 DMA1_Channel5_IRQHandler
-00000886 w .text 00000000 EXTI4_IRQHandler
-00000886 w .text 00000000 USB_LP_CAN1_RX0_IRQHandler
-0000065e g F .text 000000fa SystemInit
-00000886 w .text 00000000 RNG_IRQHandler
-00000fb0 g F .text 00000040 iprintf
-00000886 w .text 00000000 USB_HP_CAN1_TX_IRQHandler
+00000600 g F .text 00000064 main
+0000088c w .text 00000000 TIM10_BRK_IRQHandler
+20000220 g O .bss 00000001 J1_Rbuffer
+0000088c w .text 00000000 TIM9_CC_IRQHandler
+0000161a g F .text 0000002e vListInsert
+000050e6 g F .text 00000006 __sclose
+0000088c w .text 00000000 DMA2_Channel5_IRQHandler
+00002792 g F .text 0000005e xTimerCreateTimerTask
+0000488c g F .text 000000e4 _malloc_r
+00000ae2 g F .text 0000012e Get_CalibrationValue
+0000088c w .text 00000000 DMA1_Channel5_IRQHandler
+0000388c g F .text 000000a2 J2_Interrupt
+0000088c w .text 00000000 EXTI4_IRQHandler
+000017d4 g F .text 0000006a xQueueGenericCreate
+0000088c w .text 00000000 USB_LP_CAN1_RX0_IRQHandler
+00003b80 g F .text 00000290 .hidden __mulsf3
+00000aca g F .text 00000018 ADC_BufferCmd
+00000664 g F .text 000000fa SystemInit
+0000088c w .text 00000000 RNG_IRQHandler
+00004058 g F .text 00000040 iprintf
+00001fae g F .text 00000166 xTaskResumeAll
+2000017c g O .data 00000004 uxTopUsedPriority
+0000088c w .text 00000000 USB_HP_CAN1_TX_IRQHandler
+00005484 g O .text 00000100 .hidden __clz_tab
+00001d5a g F .text 00000090 vTaskStartScheduler
00000000 g .init 00000000 _sinit
-00002024 g F .text 0000002e _write_r
+000050ec g F .text 00000036 _write_r
00000300 g .text 00000000 xPortStartFirstTask
-00000886 w .text 00000000 DMA1_Channel3_IRQHandler
-00000886 w .text 00000000 ETH_IRQHandler
-00001ba4 g F .text 0000010c _printf_common
-2000008c g O .data 00000004 _impure_ptr
-00000886 w .text 00000000 TIM1_UP_IRQHandler
-00001286 g F .text 00000130 __sflush_r
-00000886 w .text 00000000 WWDG_IRQHandler
-00000886 w .text 00000000 USBHSWakeup_IRQHandler
-00000886 w .text 00000000 DMA2_Channel11_IRQHandler
-00000886 w .text 00000000 Ecall_U_Mode_Handler
-00000886 w .text 00000000 DMA2_Channel6_IRQHandler
-00000886 w .text 00000000 TIM2_IRQHandler
+0000088c w .text 00000000 DMA1_Channel3_IRQHandler
+0000088c w .text 00000000 ETH_IRQHandler
+00004c62 g F .text 0000010c _printf_common
+20000184 g O .data 00000004 _impure_ptr
+0000088c w .text 00000000 TIM1_UP_IRQHandler
+00004330 g F .text 00000130 __sflush_r
+0000088c w .text 00000000 WWDG_IRQHandler
+00002a12 g F .text 00000070 ADC_DMA_Init
+0000088c w .text 00000000 USBHSWakeup_IRQHandler
+0000088c w .text 00000000 DMA2_Channel11_IRQHandler
+0000088c w .text 00000000 Ecall_U_Mode_Handler
+00002498 g F .text 0000000c vTaskMissedYield
+0000088c w .text 00000000 DMA2_Channel6_IRQHandler
+20000238 g O .bss 00000004 g_J1_uart6_handle
+0000088c w .text 00000000 TIM2_IRQHandler
20008000 g .stack 00000000 _eusrstack
+20000240 g O .bss 00000004 g_J3_usart2_handle
+00002920 g F .text 000000f2 HD_ADC_InIt
00000516 g F .text 0000000c .hidden __riscv_save_2
00000200 g .text 00000000 SW_Handler
-00000c8c g F .text 000001a8 xTaskIncrementTick
-00000886 w .text 00000000 TIM1_BRK_IRQHandler
-0000163c g F .text 00000058 __swhatbuf_r
-00000c20 g F .text 00000008 USART_SendData
-00000886 w .text 00000000 DMA2_Channel10_IRQHandler
-00000886 w .text 00000000 EXTI1_IRQHandler
+00001984 g F .text 0000006c vQueueAddToRegistry
+00001e04 g F .text 000001aa xTaskIncrementTick
+00000920 g F .text 0000003e ADC_DeInit
+0000088c w .text 00000000 TIM1_BRK_IRQHandler
+000046f2 g F .text 00000058 __swhatbuf_r
+0000095e g F .text 00000056 ADC_Init
+000011d2 g F .text 00000008 USART_SendData
+0000088c w .text 00000000 DMA2_Channel10_IRQHandler
+0000088c w .text 00000000 EXTI1_IRQHandler
000004fc g F .text 0000001a .hidden __riscv_save_5
-00000f50 g F .text 0000003a _write
-20000098 g .data 00000000 _edata
-20000200 g .bss 00000000 _end
-00000886 w .text 00000000 RTCAlarm_IRQHandler
-000022b0 g .dlalign 00000000 _data_lma
-00000886 w .text 00000000 TIM10_UP_IRQHandler
-00000886 w .text 00000000 TIM9_TRG_COM_IRQHandler
-00000886 w .text 00000000 UART7_IRQHandler
-00000886 w .text 00000000 USART2_IRQHandler
-00000886 w .text 00000000 UART6_IRQHandler
-00001fa6 g F .text 00000048 __swrite
-00001920 g F .text 00000284 _vfiprintf_r
-000015d2 g F .text 0000006a _fwalk_reent
-00000758 g F .text 0000012e SystemCoreClockUpdate
-00000886 w .text 00000000 I2C2_ER_IRQHandler
-00000886 w .text 00000000 DMA1_Channel2_IRQHandler
-00002254 g O .text 00000020 __sf_fake_stdout
+00001718 g F .text 000000bc xQueueGenericReset
+0000287c g F .text 0000003e _write
+20000190 g .data 00000000 _edata
+2000385c g .bss 00000000 _end
+20000230 g O .bss 00000001 J5_0_Rbuffer
+00002a82 g F .text 00000056 startAdcCapture
+00002dd2 g F .text 000000ba J3_485_Init
+0000088c w .text 00000000 RTCAlarm_IRQHandler
+00001b56 g F .text 00000204 xTaskCreate
+000037ea g F .text 000000a2 J1_Interrupt
+00005620 g .dlalign 00000000 _data_lma
+0000088c w .text 00000000 TIM10_UP_IRQHandler
+0000088c w .text 00000000 TIM9_TRG_COM_IRQHandler
+00003230 g F .text 0000004a UART7_IRQHandler
+00003108 g F .text 0000004a USART2_IRQHandler
+000031e6 g F .text 0000004a UART6_IRQHandler
+0000506e g F .text 00000048 __swrite
+00003afc g F .text 00000042 task1_task
+000049da g F .text 00000288 _vfiprintf_r
+00004688 g F .text 0000006a _fwalk_reent
+0000075e g F .text 0000012e SystemCoreClockUpdate
+00002c46 g F .text 0000000c HD_GPIO_Write
+00002ad8 g F .text 0000016e HD_GPIO_Init
+0000088c w .text 00000000 I2C2_ER_IRQHandler
+00002114 g F .text 00000062 vTaskDelay
+0000088c w .text 00000000 DMA1_Channel2_IRQHandler
+000055c4 g O .text 00000020 __sf_fake_stdout
00000522 g F .text 00000024 .hidden __riscv_restore_12
-00000886 w .text 00000000 TIM8_BRK_IRQHandler
-00002170 g F .text 0000000c _read
-00000888 w .text 00000000 handle_reset
-00000886 w .text 00000000 CAN1_SCE_IRQHandler
+0000088c w .text 00000000 TIM8_BRK_IRQHandler
+000024a4 g F .text 0000001c xTaskGetSchedulerState
+00005278 g F .text 00000010 _read
+0000088e w .text 00000000 handle_reset
+0000088c w .text 00000000 CAN1_SCE_IRQHandler
+0000392e g F .text 0000009a J4_Interrupt
+20000228 g O .bss 00000001 J3_Rbuffer
00000516 g F .text 0000000c .hidden __riscv_save_0
-00000886 w .text 00000000 FLASH_IRQHandler
-00000886 w .text 00000000 USART1_IRQHandler
-00001694 g F .text 00000090 __smakebuf_r
+0000088c w .text 00000000 FLASH_IRQHandler
+0000088c w .text 00000000 USART1_IRQHandler
+0000474a g F .text 00000092 __smakebuf_r
00000400 g .text 00000000 pxPortInitialiseStack
-00001cb0 g F .text 000002a0 _printf_i
-00000886 w .text 00000000 SPI3_IRQHandler
-200000cc g O .bss 00000004 __malloc_sbrk_start
-00000886 w .text 00000000 I2C1_ER_IRQHandler
-000009e0 g F .text 0000000a NVIC_PriorityGroupConfig
-200000c8 g O .bss 00000004 __malloc_free_list
+00004d6e g F .text 000002a2 _printf_i
+0000088c w .text 00000000 SPI3_IRQHandler
+2000025c g O .bss 00000004 __malloc_sbrk_start
+000010da g F .text 0000001e RCC_APB2PeriphResetCmd
+00003608 g F .text 000000a2 J3_Interrupt
+0000088c w .text 00000000 I2C1_ER_IRQHandler
+00000e9c g F .text 0000000a NVIC_PriorityGroupConfig
+000015a8 g F .text 00000016 vPortEnterCritical
+00000c1a g F .text 0000016c DMA_DeInit
+20000258 g O .bss 00000004 __malloc_free_list
0000053a g F .text 0000000c .hidden __riscv_restore_1
-00001920 g F .text 00000284 _vfprintf_r
-00000886 w .text 00000000 USBWakeUp_IRQHandler
-00002140 g F .text 0000000c _close
-00000886 w .text 00000000 DMA2_Channel3_IRQHandler
+000036aa g F .text 000000a4 J5_0_Interrupt
+000049da g F .text 00000288 _vfprintf_r
+00003308 g F .text 00000032 proportionalInt
+00002e8c g F .text 000000b6 J4_485_Init
+2000020c g O .bss 00000006 adcData
+0000088c w .text 00000000 USBWakeUp_IRQHandler
+0000333a g F .text 00000022 getSOCPwrOnVoltage
+00005238 g F .text 00000010 _close
+0000088c w .text 00000000 DMA2_Channel3_IRQHandler
+2000022c g O .bss 00000001 J4_Rbuffer
Disassembly of section .init:
00000000 <_sinit>:
- 0: 0890006f j 888
+ 0: 08f0006f j 88e
Disassembly of section .vector:
@@ -368,15 +544,15 @@ Disassembly of section .vector:
12: 0000 unimp
14: 0000 unimp
16: 0000 unimp
- 18: 0886 slli a7,a7,0x1
+ 18: 088c addi a1,sp,80
...
22: 0000 unimp
- 24: 0886 slli a7,a7,0x1
+ 24: 088c addi a1,sp,80
26: 0000 unimp
- 28: 0886 slli a7,a7,0x1
+ 28: 088c addi a1,sp,80
...
32: 0000 unimp
- 34: 0c32 slli s8,s8,0xc
+ 34: 1570 addi a2,sp,684
36: 0000 unimp
38: 0000 unimp
3a: 0000 unimp
@@ -384,181 +560,181 @@ Disassembly of section .vector:
3e: 0000 unimp
40: 0000 unimp
42: 0000 unimp
- 44: 0886 slli a7,a7,0x1
+ 44: 088c addi a1,sp,80
46: 0000 unimp
- 48: 0886 slli a7,a7,0x1
+ 48: 088c addi a1,sp,80
4a: 0000 unimp
- 4c: 0886 slli a7,a7,0x1
+ 4c: 088c addi a1,sp,80
4e: 0000 unimp
- 50: 0886 slli a7,a7,0x1
+ 50: 088c addi a1,sp,80
52: 0000 unimp
- 54: 0886 slli a7,a7,0x1
+ 54: 088c addi a1,sp,80
56: 0000 unimp
- 58: 0886 slli a7,a7,0x1
+ 58: 088c addi a1,sp,80
5a: 0000 unimp
- 5c: 0886 slli a7,a7,0x1
+ 5c: 088c addi a1,sp,80
5e: 0000 unimp
- 60: 0886 slli a7,a7,0x1
+ 60: 088c addi a1,sp,80
62: 0000 unimp
- 64: 0886 slli a7,a7,0x1
+ 64: 088c addi a1,sp,80
66: 0000 unimp
- 68: 0886 slli a7,a7,0x1
+ 68: 088c addi a1,sp,80
6a: 0000 unimp
- 6c: 0886 slli a7,a7,0x1
+ 6c: 088c addi a1,sp,80
6e: 0000 unimp
- 70: 0886 slli a7,a7,0x1
+ 70: 088c addi a1,sp,80
72: 0000 unimp
- 74: 0886 slli a7,a7,0x1
+ 74: 088c addi a1,sp,80
76: 0000 unimp
- 78: 0886 slli a7,a7,0x1
+ 78: 088c addi a1,sp,80
7a: 0000 unimp
- 7c: 0886 slli a7,a7,0x1
+ 7c: 088c addi a1,sp,80
7e: 0000 unimp
- 80: 0886 slli a7,a7,0x1
+ 80: 088c addi a1,sp,80
82: 0000 unimp
- 84: 0886 slli a7,a7,0x1
+ 84: 088c addi a1,sp,80
86: 0000 unimp
- 88: 0886 slli a7,a7,0x1
+ 88: 088c addi a1,sp,80
8a: 0000 unimp
- 8c: 0886 slli a7,a7,0x1
+ 8c: 088c addi a1,sp,80
8e: 0000 unimp
- 90: 0886 slli a7,a7,0x1
+ 90: 088c addi a1,sp,80
92: 0000 unimp
- 94: 0886 slli a7,a7,0x1
+ 94: 088c addi a1,sp,80
96: 0000 unimp
- 98: 0886 slli a7,a7,0x1
+ 98: 088c addi a1,sp,80
9a: 0000 unimp
- 9c: 0886 slli a7,a7,0x1
+ 9c: 088c addi a1,sp,80
9e: 0000 unimp
- a0: 0886 slli a7,a7,0x1
+ a0: 088c addi a1,sp,80
a2: 0000 unimp
- a4: 0886 slli a7,a7,0x1
+ a4: 088c addi a1,sp,80
a6: 0000 unimp
- a8: 0886 slli a7,a7,0x1
+ a8: 088c addi a1,sp,80
aa: 0000 unimp
- ac: 0886 slli a7,a7,0x1
+ ac: 088c addi a1,sp,80
ae: 0000 unimp
- b0: 0886 slli a7,a7,0x1
+ b0: 088c addi a1,sp,80
b2: 0000 unimp
- b4: 0886 slli a7,a7,0x1
+ b4: 088c addi a1,sp,80
b6: 0000 unimp
- b8: 0886 slli a7,a7,0x1
+ b8: 088c addi a1,sp,80
ba: 0000 unimp
- bc: 0886 slli a7,a7,0x1
+ bc: 088c addi a1,sp,80
be: 0000 unimp
- c0: 0886 slli a7,a7,0x1
+ c0: 088c addi a1,sp,80
c2: 0000 unimp
- c4: 0886 slli a7,a7,0x1
+ c4: 088c addi a1,sp,80
c6: 0000 unimp
- c8: 0886 slli a7,a7,0x1
+ c8: 088c addi a1,sp,80
ca: 0000 unimp
- cc: 0886 slli a7,a7,0x1
+ cc: 088c addi a1,sp,80
ce: 0000 unimp
- d0: 0886 slli a7,a7,0x1
+ d0: 088c addi a1,sp,80
d2: 0000 unimp
- d4: 0886 slli a7,a7,0x1
+ d4: 088c addi a1,sp,80
d6: 0000 unimp
- d8: 0886 slli a7,a7,0x1
+ d8: 088c addi a1,sp,80
da: 0000 unimp
- dc: 0886 slli a7,a7,0x1
+ dc: 3108 lbu a0,1(a0)
de: 0000 unimp
- e0: 0886 slli a7,a7,0x1
+ e0: 3152 lhu a2,36(a0)
e2: 0000 unimp
- e4: 0886 slli a7,a7,0x1
+ e4: 088c addi a1,sp,80
e6: 0000 unimp
- e8: 0886 slli a7,a7,0x1
+ e8: 088c addi a1,sp,80
ea: 0000 unimp
- ec: 0886 slli a7,a7,0x1
+ ec: 088c addi a1,sp,80
ee: 0000 unimp
- f0: 0886 slli a7,a7,0x1
+ f0: 088c addi a1,sp,80
f2: 0000 unimp
- f4: 0886 slli a7,a7,0x1
+ f4: 088c addi a1,sp,80
f6: 0000 unimp
- f8: 0886 slli a7,a7,0x1
+ f8: 088c addi a1,sp,80
fa: 0000 unimp
- fc: 0886 slli a7,a7,0x1
+ fc: 088c addi a1,sp,80
fe: 0000 unimp
- 100: 0886 slli a7,a7,0x1
+ 100: 088c addi a1,sp,80
102: 0000 unimp
104: 0000 unimp
106: 0000 unimp
- 108: 0886 slli a7,a7,0x1
+ 108: 088c addi a1,sp,80
10a: 0000 unimp
- 10c: 0886 slli a7,a7,0x1
+ 10c: 088c addi a1,sp,80
10e: 0000 unimp
- 110: 0886 slli a7,a7,0x1
+ 110: 088c addi a1,sp,80
112: 0000 unimp
- 114: 0886 slli a7,a7,0x1
+ 114: 088c addi a1,sp,80
116: 0000 unimp
- 118: 0886 slli a7,a7,0x1
+ 118: 319c lbu a5,1(a1)
11a: 0000 unimp
- 11c: 0886 slli a7,a7,0x1
+ 11c: 088c addi a1,sp,80
11e: 0000 unimp
- 120: 0886 slli a7,a7,0x1
+ 120: 088c addi a1,sp,80
122: 0000 unimp
- 124: 0886 slli a7,a7,0x1
+ 124: 088c addi a1,sp,80
126: 0000 unimp
- 128: 0886 slli a7,a7,0x1
+ 128: 088c addi a1,sp,80
12a: 0000 unimp
- 12c: 0886 slli a7,a7,0x1
+ 12c: 088c addi a1,sp,80
12e: 0000 unimp
- 130: 0886 slli a7,a7,0x1
+ 130: 088c addi a1,sp,80
132: 0000 unimp
- 134: 0886 slli a7,a7,0x1
+ 134: 088c addi a1,sp,80
136: 0000 unimp
- 138: 0886 slli a7,a7,0x1
+ 138: 088c addi a1,sp,80
13a: 0000 unimp
- 13c: 0886 slli a7,a7,0x1
+ 13c: 088c addi a1,sp,80
13e: 0000 unimp
- 140: 0886 slli a7,a7,0x1
+ 140: 088c addi a1,sp,80
142: 0000 unimp
- 144: 0886 slli a7,a7,0x1
+ 144: 088c addi a1,sp,80
146: 0000 unimp
- 148: 0886 slli a7,a7,0x1
+ 148: 088c addi a1,sp,80
14a: 0000 unimp
- 14c: 0886 slli a7,a7,0x1
+ 14c: 088c addi a1,sp,80
14e: 0000 unimp
- 150: 0886 slli a7,a7,0x1
+ 150: 088c addi a1,sp,80
152: 0000 unimp
- 154: 0886 slli a7,a7,0x1
+ 154: 088c addi a1,sp,80
156: 0000 unimp
- 158: 0886 slli a7,a7,0x1
+ 158: 088c addi a1,sp,80
15a: 0000 unimp
- 15c: 0886 slli a7,a7,0x1
+ 15c: 088c addi a1,sp,80
15e: 0000 unimp
- 160: 0886 slli a7,a7,0x1
+ 160: 31e6 lhu s1,38(a1)
162: 0000 unimp
- 164: 0886 slli a7,a7,0x1
+ 164: 3230 lbu a2,3(a2)
166: 0000 unimp
- 168: 0886 slli a7,a7,0x1
+ 168: 327a lhu a4,38(a2)
16a: 0000 unimp
- 16c: 0886 slli a7,a7,0x1
+ 16c: 088c addi a1,sp,80
16e: 0000 unimp
- 170: 0886 slli a7,a7,0x1
+ 170: 088c addi a1,sp,80
172: 0000 unimp
- 174: 0886 slli a7,a7,0x1
+ 174: 088c addi a1,sp,80
176: 0000 unimp
- 178: 0886 slli a7,a7,0x1
+ 178: 088c addi a1,sp,80
17a: 0000 unimp
- 17c: 0886 slli a7,a7,0x1
+ 17c: 088c addi a1,sp,80
17e: 0000 unimp
- 180: 0886 slli a7,a7,0x1
+ 180: 088c addi a1,sp,80
182: 0000 unimp
- 184: 0886 slli a7,a7,0x1
+ 184: 088c addi a1,sp,80
186: 0000 unimp
- 188: 0886 slli a7,a7,0x1
+ 188: 088c addi a1,sp,80
18a: 0000 unimp
- 18c: 0886 slli a7,a7,0x1
+ 18c: 088c addi a1,sp,80
18e: 0000 unimp
- 190: 0886 slli a7,a7,0x1
+ 190: 088c addi a1,sp,80
192: 0000 unimp
- 194: 0886 slli a7,a7,0x1
+ 194: 088c addi a1,sp,80
196: 0000 unimp
- 198: 0886 slli a7,a7,0x1
+ 198: 088c addi a1,sp,80
19a: 0000 unimp
- 19c: 0886 slli a7,a7,0x1
+ 19c: 088c addi a1,sp,80
19e: 0000 unimp
- 1a0: 0886 slli a7,a7,0x1
+ 1a0: 088c addi a1,sp,80
...
Disassembly of section .text:
@@ -596,18 +772,18 @@ Disassembly of section .text:
23c: 300022f3 csrr t0,mstatus
240: da96 sw t0,116(sp)
242: 20000297 auipc t0,0x20000
- 246: e5a2a283 lw t0,-422(t0) # 2000009c
+ 246: f722a283 lw t0,-142(t0) # 200001b4
24a: 0022a023 sw sp,0(t0)
24e: 341025f3 csrr a1,mepc
252: c02e sw a1,0(sp)
254: 02000593 li a1,32
258: 8045a073 csrs 0x804,a1
- 25c: 8101a103 lw sp,-2032(gp) # 20000090
- 260: 3d5000ef jal ra,e34
+ 25c: 8181a103 lw sp,-2024(gp) # 20000188
+ 260: 717010ef jal ra,2176
00000264 :
264: 20000317 auipc t1,0x20000
- 268: e3832303 lw t1,-456(t1) # 2000009c
+ 268: f5032303 lw t1,-176(t1) # 200001b4
26c: 00032103 lw sp,0(t1)
270: 4282 lw t0,0(sp)
272: 34129073 csrw mepc,t0
@@ -662,11 +838,11 @@ Disassembly of section .text:
2fc: 00000013 nop
00000300 :
- 300: 8101a283 lw t0,-2032(gp) # 20000090
+ 300: 8181a283 lw t0,-2024(gp) # 20000188
304: e0028293 addi t0,t0,-512
308: 34029073 csrw mscratch,t0
30c: 20000117 auipc sp,0x20000
- 310: d9012103 lw sp,-624(sp) # 2000009c
+ 310: ea812103 lw sp,-344(sp) # 200001b4
314: 4102 lw sp,0(sp)
316: 4082 lw ra,0(sp)
318: 4332 lw t1,12(sp)
@@ -901,2859 +1077,7506 @@ Disassembly of section .text:
00000600 :
600: f17ff2ef jal t0,516 <__riscv_save_0>
604: 4509 li a0,2
- 606: 2ee9 jal 9e0
- 608: 2a81 jal 758
- 60a: 0c3000ef jal ra,ecc
- 60e: 6571 lui a0,0x1c
- 610: 20050513 addi a0,a0,512 # 1c200 <_data_lma+0x19f50>
- 614: 0eb000ef jal ra,efe
- 618: 200007b7 lui a5,0x20000
- 61c: 0807a583 lw a1,128(a5) # 20000080
- 620: 00002537 lui a0,0x2
- 624: 17c50513 addi a0,a0,380 # 217c <_read+0xc>
- 628: 189000ef jal ra,fb0
- 62c: 24ed jal 916
- 62e: 85aa mv a1,a0
- 630: 00002537 lui a0,0x2
- 634: 18c50513 addi a0,a0,396 # 218c <_read+0x1c>
- 638: 179000ef jal ra,fb0
- 63c: 000025b7 lui a1,0x2
- 640: 00002537 lui a0,0x2
- 644: 19c58593 addi a1,a1,412 # 219c <_read+0x2c>
- 648: 1a450513 addi a0,a0,420 # 21a4 <_read+0x34>
- 64c: 165000ef jal ra,fb0
- 650: 00002437 lui s0,0x2
- 654: 1c440513 addi a0,s0,452 # 21c4 <_read+0x54>
- 658: 26d000ef jal ra,10c4
- 65c: bfe5 j 654
+ 606: 097000ef jal ra,e9c
+ 60a: 2a91 jal 75e
+ 60c: 1e4020ef jal ra,27f0
+ 610: 6571 lui a0,0x1c
+ 612: 20050513 addi a0,a0,512 # 1c200 <_data_lma+0x16be0>
+ 616: 20c020ef jal ra,2822
+ 61a: 200007b7 lui a5,0x20000
+ 61e: 1707a583 lw a1,368(a5) # 20000170
+ 622: 00005537 lui a0,0x5
+ 626: 28850513 addi a0,a0,648 # 5288 <_read+0x10>
+ 62a: 22f030ef jal ra,4058
+ 62e: 23cd jal c10
+ 630: 85aa mv a1,a0
+ 632: 00005537 lui a0,0x5
+ 636: 29850513 addi a0,a0,664 # 5298 <_read+0x20>
+ 63a: 21f030ef jal ra,4058
+ 63e: 000055b7 lui a1,0x5
+ 642: 00005537 lui a0,0x5
+ 646: 2a858593 addi a1,a1,680 # 52a8 <_read+0x30>
+ 64a: 2b050513 addi a0,a0,688 # 52b0 <_read+0x38>
+ 64e: 20b030ef jal ra,4058
+ 652: 4ec030ef jal ra,3b3e
+ 656: 00005437 lui s0,0x5
+ 65a: 2d040513 addi a0,s0,720 # 52d0 <_read+0x58>
+ 65e: 30f030ef jal ra,416c
+ 662: bfe5 j 65a
-0000065e :
- 65e: 400217b7 lui a5,0x40021
- 662: 4398 lw a4,0(a5)
- 664: f0ff06b7 lui a3,0xf0ff0
- 668: 1141 addi sp,sp,-16
- 66a: 00176713 ori a4,a4,1
- 66e: c398 sw a4,0(a5)
- 670: 43d8 lw a4,4(a5)
- 672: 00020637 lui a2,0x20
- 676: 8f75 and a4,a4,a3
- 678: c3d8 sw a4,4(a5)
- 67a: 4398 lw a4,0(a5)
- 67c: fef706b7 lui a3,0xfef70
- 680: 16fd addi a3,a3,-1
- 682: 8f75 and a4,a4,a3
- 684: c398 sw a4,0(a5)
- 686: 4398 lw a4,0(a5)
- 688: fffc06b7 lui a3,0xfffc0
- 68c: 16fd addi a3,a3,-1
- 68e: 8f75 and a4,a4,a3
- 690: c398 sw a4,0(a5)
- 692: 43d8 lw a4,4(a5)
- 694: ff0106b7 lui a3,0xff010
- 698: 16fd addi a3,a3,-1
- 69a: 8f75 and a4,a4,a3
- 69c: c3d8 sw a4,4(a5)
- 69e: 4398 lw a4,0(a5)
- 6a0: ec0006b7 lui a3,0xec000
- 6a4: 16fd addi a3,a3,-1
- 6a6: 8f75 and a4,a4,a3
- 6a8: c398 sw a4,0(a5)
- 6aa: 00ff0737 lui a4,0xff0
- 6ae: c798 sw a4,8(a5)
- 6b0: 0207a623 sw zero,44(a5) # 4002102c <__freertos_irq_stack_top+0x2001902c>
- 6b4: c402 sw zero,8(sp)
- 6b6: c602 sw zero,12(sp)
- 6b8: 4398 lw a4,0(a5)
- 6ba: 66c1 lui a3,0x10
- 6bc: 8f55 or a4,a4,a3
- 6be: c398 sw a4,0(a5)
- 6c0: 400216b7 lui a3,0x40021
- 6c4: 6705 lui a4,0x1
- 6c6: 429c lw a5,0(a3)
- 6c8: 8ff1 and a5,a5,a2
- 6ca: c63e sw a5,12(sp)
- 6cc: 47a2 lw a5,8(sp)
- 6ce: 0785 addi a5,a5,1
- 6d0: c43e sw a5,8(sp)
- 6d2: 47b2 lw a5,12(sp)
- 6d4: e781 bnez a5,6dc
- 6d6: 47a2 lw a5,8(sp)
- 6d8: fee797e3 bne a5,a4,6c6
- 6dc: 400217b7 lui a5,0x40021
- 6e0: 439c lw a5,0(a5)
- 6e2: 00e79713 slli a4,a5,0xe
- 6e6: 06075763 bgez a4,754
- 6ea: 4785 li a5,1
- 6ec: c63e sw a5,12(sp)
- 6ee: 4732 lw a4,12(sp)
+00000664 :
+ 664: 400217b7 lui a5,0x40021
+ 668: 4398 lw a4,0(a5)
+ 66a: f0ff06b7 lui a3,0xf0ff0
+ 66e: 1141 addi sp,sp,-16
+ 670: 00176713 ori a4,a4,1
+ 674: c398 sw a4,0(a5)
+ 676: 43d8 lw a4,4(a5)
+ 678: 00020637 lui a2,0x20
+ 67c: 8f75 and a4,a4,a3
+ 67e: c3d8 sw a4,4(a5)
+ 680: 4398 lw a4,0(a5)
+ 682: fef706b7 lui a3,0xfef70
+ 686: 16fd addi a3,a3,-1
+ 688: 8f75 and a4,a4,a3
+ 68a: c398 sw a4,0(a5)
+ 68c: 4398 lw a4,0(a5)
+ 68e: fffc06b7 lui a3,0xfffc0
+ 692: 16fd addi a3,a3,-1
+ 694: 8f75 and a4,a4,a3
+ 696: c398 sw a4,0(a5)
+ 698: 43d8 lw a4,4(a5)
+ 69a: ff0106b7 lui a3,0xff010
+ 69e: 16fd addi a3,a3,-1
+ 6a0: 8f75 and a4,a4,a3
+ 6a2: c3d8 sw a4,4(a5)
+ 6a4: 4398 lw a4,0(a5)
+ 6a6: ec0006b7 lui a3,0xec000
+ 6aa: 16fd addi a3,a3,-1
+ 6ac: 8f75 and a4,a4,a3
+ 6ae: c398 sw a4,0(a5)
+ 6b0: 00ff0737 lui a4,0xff0
+ 6b4: c798 sw a4,8(a5)
+ 6b6: 0207a623 sw zero,44(a5) # 4002102c <__freertos_irq_stack_top+0x2001902c>
+ 6ba: c402 sw zero,8(sp)
+ 6bc: c602 sw zero,12(sp)
+ 6be: 4398 lw a4,0(a5)
+ 6c0: 66c1 lui a3,0x10
+ 6c2: 8f55 or a4,a4,a3
+ 6c4: c398 sw a4,0(a5)
+ 6c6: 400216b7 lui a3,0x40021
+ 6ca: 6705 lui a4,0x1
+ 6cc: 429c lw a5,0(a3)
+ 6ce: 8ff1 and a5,a5,a2
+ 6d0: c63e sw a5,12(sp)
+ 6d2: 47a2 lw a5,8(sp)
+ 6d4: 0785 addi a5,a5,1
+ 6d6: c43e sw a5,8(sp)
+ 6d8: 47b2 lw a5,12(sp)
+ 6da: e781 bnez a5,6e2
+ 6dc: 47a2 lw a5,8(sp)
+ 6de: fee797e3 bne a5,a4,6cc
+ 6e2: 400217b7 lui a5,0x40021
+ 6e6: 439c lw a5,0(a5)
+ 6e8: 00e79713 slli a4,a5,0xe
+ 6ec: 06075763 bgez a4,75a
6f0: 4785 li a5,1
- 6f2: 04f71f63 bne a4,a5,750
- 6f6: 400217b7 lui a5,0x40021
- 6fa: 43d8 lw a4,4(a5)
- 6fc: ffc106b7 lui a3,0xffc10
- 700: 16fd addi a3,a3,-1
- 702: c3d8 sw a4,4(a5)
- 704: 43d8 lw a4,4(a5)
- 706: c3d8 sw a4,4(a5)
- 708: 43d8 lw a4,4(a5)
- 70a: 40076713 ori a4,a4,1024
- 70e: c3d8 sw a4,4(a5)
- 710: 43d8 lw a4,4(a5)
- 712: 8f75 and a4,a4,a3
+ 6f2: c63e sw a5,12(sp)
+ 6f4: 4732 lw a4,12(sp)
+ 6f6: 4785 li a5,1
+ 6f8: 04f71f63 bne a4,a5,756
+ 6fc: 400217b7 lui a5,0x40021
+ 700: 43d8 lw a4,4(a5)
+ 702: ffc106b7 lui a3,0xffc10
+ 706: 16fd addi a3,a3,-1
+ 708: c3d8 sw a4,4(a5)
+ 70a: 43d8 lw a4,4(a5)
+ 70c: c3d8 sw a4,4(a5)
+ 70e: 43d8 lw a4,4(a5)
+ 710: 40076713 ori a4,a4,1024
714: c3d8 sw a4,4(a5)
716: 43d8 lw a4,4(a5)
- 718: 001106b7 lui a3,0x110
- 71c: 8f55 or a4,a4,a3
- 71e: c3d8 sw a4,4(a5)
- 720: 4398 lw a4,0(a5)
- 722: 010006b7 lui a3,0x1000
- 726: 8f55 or a4,a4,a3
- 728: c398 sw a4,0(a5)
- 72a: 4398 lw a4,0(a5)
- 72c: 00671693 slli a3,a4,0x6
- 730: fe06dde3 bgez a3,72a
- 734: 43d8 lw a4,4(a5)
- 736: 400216b7 lui a3,0x40021
- 73a: 9b71 andi a4,a4,-4
- 73c: c3d8 sw a4,4(a5)
- 73e: 43d8 lw a4,4(a5)
- 740: 00276713 ori a4,a4,2
- 744: c3d8 sw a4,4(a5)
- 746: 4721 li a4,8
- 748: 42dc lw a5,4(a3)
- 74a: 8bb1 andi a5,a5,12
- 74c: fee79ee3 bne a5,a4,748
- 750: 0141 addi sp,sp,16
- 752: 8082 ret
- 754: c602 sw zero,12(sp)
- 756: bf61 j 6ee
+ 718: 8f75 and a4,a4,a3
+ 71a: c3d8 sw a4,4(a5)
+ 71c: 43d8 lw a4,4(a5)
+ 71e: 001106b7 lui a3,0x110
+ 722: 8f55 or a4,a4,a3
+ 724: c3d8 sw a4,4(a5)
+ 726: 4398 lw a4,0(a5)
+ 728: 010006b7 lui a3,0x1000
+ 72c: 8f55 or a4,a4,a3
+ 72e: c398 sw a4,0(a5)
+ 730: 4398 lw a4,0(a5)
+ 732: 00671693 slli a3,a4,0x6
+ 736: fe06dde3 bgez a3,730
+ 73a: 43d8 lw a4,4(a5)
+ 73c: 400216b7 lui a3,0x40021
+ 740: 9b71 andi a4,a4,-4
+ 742: c3d8 sw a4,4(a5)
+ 744: 43d8 lw a4,4(a5)
+ 746: 00276713 ori a4,a4,2
+ 74a: c3d8 sw a4,4(a5)
+ 74c: 4721 li a4,8
+ 74e: 42dc lw a5,4(a3)
+ 750: 8bb1 andi a5,a5,12
+ 752: fee79ee3 bne a5,a4,74e
+ 756: 0141 addi sp,sp,16
+ 758: 8082 ret
+ 75a: c602 sw zero,12(sp)
+ 75c: bf61 j 6f4
-00000758 :
- 758: 400216b7 lui a3,0x40021
- 75c: 42d8 lw a4,4(a3)
- 75e: 200007b7 lui a5,0x20000
- 762: 4611 li a2,4
- 764: 8b31 andi a4,a4,12
- 766: 08078793 addi a5,a5,128 # 20000080
- 76a: 00c70563 beq a4,a2,774
- 76e: 4621 li a2,8
- 770: 02c70863 beq a4,a2,7a0
- 774: 007a1737 lui a4,0x7a1
- 778: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- 77c: c398 sw a4,0(a5)
- 77e: 40021737 lui a4,0x40021
- 782: 4358 lw a4,4(a4)
- 784: 8311 srli a4,a4,0x4
- 786: 00f77693 andi a3,a4,15
- 78a: 20000737 lui a4,0x20000
- 78e: 00070713 mv a4,a4
- 792: 9736 add a4,a4,a3
- 794: 2314 lbu a3,0(a4)
- 796: 4398 lw a4,0(a5)
- 798: 00d75733 srl a4,a4,a3
- 79c: c398 sw a4,0(a5)
- 79e: 8082 ret
- 7a0: 42d8 lw a4,4(a3)
- 7a2: 42d4 lw a3,4(a3)
- 7a4: 6641 lui a2,0x10
- 7a6: 8349 srli a4,a4,0x12
- 7a8: 8b3d andi a4,a4,15
- 7aa: 8ef1 and a3,a3,a2
- 7ac: 00270613 addi a2,a4,2 # 20000002 <_data_vma+0x2>
- 7b0: cf15 beqz a4,7ec
- 7b2: 473d li a4,15
- 7b4: 02e60f63 beq a2,a4,7f2
- 7b8: 4741 li a4,16
- 7ba: 02e60f63 beq a2,a4,7f8
- 7be: 4745 li a4,17
- 7c0: 4581 li a1,0
- 7c2: 00e61363 bne a2,a4,7c8
- 7c6: 4641 li a2,16
- 7c8: e2a1 bnez a3,808 <__stack_size+0x8>
- 7ca: 40024737 lui a4,0x40024
- 7ce: 80072703 lw a4,-2048(a4) # 40023800 <__freertos_irq_stack_top+0x2001b800>
- 7d2: 8b41 andi a4,a4,16
- 7d4: c70d beqz a4,7fe
- 7d6: 007a1737 lui a4,0x7a1
- 7da: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- 7de: 02c70633 mul a2,a4,a2
- 7e2: c390 sw a2,0(a5)
- 7e4: ddc9 beqz a1,77e
- 7e6: 4398 lw a4,0(a5)
- 7e8: 8305 srli a4,a4,0x1
- 7ea: bf49 j 77c
- 7ec: 4581 li a1,0
- 7ee: 4649 li a2,18
- 7f0: bfe1 j 7c8
- 7f2: 4585 li a1,1
- 7f4: 4635 li a2,13
- 7f6: bfc9 j 7c8
- 7f8: 4581 li a1,0
- 7fa: 463d li a2,15
- 7fc: b7f1 j 7c8
- 7fe: 003d1737 lui a4,0x3d1
- 802: 90070713 addi a4,a4,-1792 # 3d0900 <_data_lma+0x3ce650>
- 806: bfe1 j 7de
- 808: 40021537 lui a0,0x40021
- 80c: 5558 lw a4,44(a0)
- 80e: 00f71693 slli a3,a4,0xf
+0000075e :
+ 75e: 400216b7 lui a3,0x40021
+ 762: 42d8 lw a4,4(a3)
+ 764: 200007b7 lui a5,0x20000
+ 768: 4611 li a2,4
+ 76a: 8b31 andi a4,a4,12
+ 76c: 17078793 addi a5,a5,368 # 20000170
+ 770: 00c70563 beq a4,a2,77a
+ 774: 4621 li a2,8
+ 776: 02c70863 beq a4,a2,7a6
+ 77a: 007a1737 lui a4,0x7a1
+ 77e: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79bbe0>
+ 782: c398 sw a4,0(a5)
+ 784: 40021737 lui a4,0x40021
+ 788: 4358 lw a4,4(a4)
+ 78a: 8311 srli a4,a4,0x4
+ 78c: 00f77693 andi a3,a4,15
+ 790: 20000737 lui a4,0x20000
+ 794: 00070713 mv a4,a4
+ 798: 9736 add a4,a4,a3
+ 79a: 2314 lbu a3,0(a4)
+ 79c: 4398 lw a4,0(a5)
+ 79e: 00d75733 srl a4,a4,a3
+ 7a2: c398 sw a4,0(a5)
+ 7a4: 8082 ret
+ 7a6: 42d8 lw a4,4(a3)
+ 7a8: 42d4 lw a3,4(a3)
+ 7aa: 6641 lui a2,0x10
+ 7ac: 8349 srli a4,a4,0x12
+ 7ae: 8b3d andi a4,a4,15
+ 7b0: 8ef1 and a3,a3,a2
+ 7b2: 00270613 addi a2,a4,2 # 20000002 <_data_vma+0x2>
+ 7b6: cf15 beqz a4,7f2
+ 7b8: 473d li a4,15
+ 7ba: 02e60f63 beq a2,a4,7f8
+ 7be: 4741 li a4,16
+ 7c0: 02e60f63 beq a2,a4,7fe
+ 7c4: 4745 li a4,17
+ 7c6: 4581 li a1,0
+ 7c8: 00e61363 bne a2,a4,7ce
+ 7cc: 4641 li a2,16
+ 7ce: e2a1 bnez a3,80e <__stack_size+0xe>
+ 7d0: 40024737 lui a4,0x40024
+ 7d4: 80072703 lw a4,-2048(a4) # 40023800 <__freertos_irq_stack_top+0x2001b800>
+ 7d8: 8b41 andi a4,a4,16
+ 7da: c70d beqz a4,804 <__stack_size+0x4>
+ 7dc: 007a1737 lui a4,0x7a1
+ 7e0: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79bbe0>
+ 7e4: 02c70633 mul a2,a4,a2
+ 7e8: c390 sw a2,0(a5)
+ 7ea: ddc9 beqz a1,784
+ 7ec: 4398 lw a4,0(a5)
+ 7ee: 8305 srli a4,a4,0x1
+ 7f0: bf49 j 782
+ 7f2: 4581 li a1,0
+ 7f4: 4649 li a2,18
+ 7f6: bfe1 j 7ce
+ 7f8: 4585 li a1,1
+ 7fa: 4635 li a2,13
+ 7fc: bfc9 j 7ce
+ 7fe: 4581 li a1,0
+ 800: 463d li a2,15
+ 802: b7f1 j 7ce
+ 804: 003d1737 lui a4,0x3d1
+ 808: 90070713 addi a4,a4,-1792 # 3d0900 <_data_lma+0x3cb2e0>
+ 80c: bfe1 j 7e4
+ 80e: 40021537 lui a0,0x40021
812: 5558 lw a4,44(a0)
- 814: 0406df63 bgez a3,872 <__stack_size+0x72>
- 818: 8311 srli a4,a4,0x4
- 81a: 8b3d andi a4,a4,15
- 81c: 00170693 addi a3,a4,1
- 820: 007a1737 lui a4,0x7a1
- 824: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- 828: 02d75733 divu a4,a4,a3
- 82c: c398 sw a4,0(a5)
- 82e: 5554 lw a3,44(a0)
- 830: 82a1 srli a3,a3,0x8
- 832: 8abd andi a3,a3,15
- 834: e28d bnez a3,856 <__stack_size+0x56>
- 836: 4695 li a3,5
- 838: 02d70733 mul a4,a4,a3
- 83c: 8305 srli a4,a4,0x1
- 83e: c398 sw a4,0(a5)
- 840: 40021737 lui a4,0x40021
- 844: 5758 lw a4,44(a4)
- 846: 4394 lw a3,0(a5)
- 848: 8b3d andi a4,a4,15
- 84a: 0705 addi a4,a4,1
- 84c: 02e6d733 divu a4,a3,a4
- 850: c398 sw a4,0(a5)
- 852: 4398 lw a4,0(a5)
- 854: b769 j 7de
- 856: 4505 li a0,1
- 858: 00a69463 bne a3,a0,860 <__stack_size+0x60>
- 85c: 46e5 li a3,25
- 85e: bfe9 j 838 <__stack_size+0x38>
- 860: 453d li a0,15
- 862: 00a69663 bne a3,a0,86e <__stack_size+0x6e>
- 866: 46d1 li a3,20
- 868: 02e68733 mul a4,a3,a4
- 86c: bfc9 j 83e <__stack_size+0x3e>
- 86e: 0689 addi a3,a3,2
- 870: bfe5 j 868 <__stack_size+0x68>
- 872: 8b3d andi a4,a4,15
- 874: 00170693 addi a3,a4,1 # 40021001 <__freertos_irq_stack_top+0x20019001>
- 878: 007a1737 lui a4,0x7a1
- 87c: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- 880: 02d75733 divu a4,a4,a3
- 884: b7f1 j 850 <__stack_size+0x50>
+ 814: 00f71693 slli a3,a4,0xf
+ 818: 5558 lw a4,44(a0)
+ 81a: 0406df63 bgez a3,878 <__stack_size+0x78>
+ 81e: 8311 srli a4,a4,0x4
+ 820: 8b3d andi a4,a4,15
+ 822: 00170693 addi a3,a4,1
+ 826: 007a1737 lui a4,0x7a1
+ 82a: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79bbe0>
+ 82e: 02d75733 divu a4,a4,a3
+ 832: c398 sw a4,0(a5)
+ 834: 5554 lw a3,44(a0)
+ 836: 82a1 srli a3,a3,0x8
+ 838: 8abd andi a3,a3,15
+ 83a: e28d bnez a3,85c <__stack_size+0x5c>
+ 83c: 4695 li a3,5
+ 83e: 02d70733 mul a4,a4,a3
+ 842: 8305 srli a4,a4,0x1
+ 844: c398 sw a4,0(a5)
+ 846: 40021737 lui a4,0x40021
+ 84a: 5758 lw a4,44(a4)
+ 84c: 4394 lw a3,0(a5)
+ 84e: 8b3d andi a4,a4,15
+ 850: 0705 addi a4,a4,1
+ 852: 02e6d733 divu a4,a3,a4
+ 856: c398 sw a4,0(a5)
+ 858: 4398 lw a4,0(a5)
+ 85a: b769 j 7e4
+ 85c: 4505 li a0,1
+ 85e: 00a69463 bne a3,a0,866 <__stack_size+0x66>
+ 862: 46e5 li a3,25
+ 864: bfe9 j 83e <__stack_size+0x3e>
+ 866: 453d li a0,15
+ 868: 00a69663 bne a3,a0,874 <__stack_size+0x74>
+ 86c: 46d1 li a3,20
+ 86e: 02e68733 mul a4,a3,a4
+ 872: bfc9 j 844 <__stack_size+0x44>
+ 874: 0689 addi a3,a3,2
+ 876: bfe5 j 86e <__stack_size+0x6e>
+ 878: 8b3d andi a4,a4,15
+ 87a: 00170693 addi a3,a4,1 # 40021001 <__freertos_irq_stack_top+0x20019001>
+ 87e: 007a1737 lui a4,0x7a1
+ 882: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79bbe0>
+ 886: 02d75733 divu a4,a4,a3
+ 88a: b7f1 j 856 <__stack_size+0x56>
-00000886 :
- 886: a001 j 886
+0000088c :
+ 88c: a001 j 88c
-00000888 :
- 888: 20000197 auipc gp,0x20000
- 88c: ff818193 addi gp,gp,-8 # 20000880 <__global_pointer$>
- 890: 20007117 auipc sp,0x20007
- 894: 77010113 addi sp,sp,1904 # 20008000 <__freertos_irq_stack_top>
- 898: 00002517 auipc a0,0x2
- 89c: a1850513 addi a0,a0,-1512 # 22b0 <_data_lma>
- 8a0: 1ffff597 auipc a1,0x1ffff
- 8a4: 76058593 addi a1,a1,1888 # 20000000 <_data_vma>
- 8a8: 81818613 addi a2,gp,-2024 # 20000098 <_edata>
- 8ac: 00c5fa63 bgeu a1,a2,8c0
- 8b0: 00052283 lw t0,0(a0)
- 8b4: 0055a023 sw t0,0(a1)
- 8b8: 0511 addi a0,a0,4
- 8ba: 0591 addi a1,a1,4
- 8bc: fec5eae3 bltu a1,a2,8b0
- 8c0: 1ffff517 auipc a0,0x1ffff
- 8c4: 7d850513 addi a0,a0,2008 # 20000098 <_edata>
- 8c8: 98018593 addi a1,gp,-1664 # 20000200 <_ebss>
- 8cc: 00b57763 bgeu a0,a1,8da
- 8d0: 00052023 sw zero,0(a0)
- 8d4: 0511 addi a0,a0,4
- 8d6: feb56de3 bltu a0,a1,8d0
- 8da: 42fd li t0,31
- 8dc: bc029073 csrw 0xbc0,t0
- 8e0: 42fd li t0,31
- 8e2: 80429073 csrw 0x804,t0
- 8e6: 000082b7 lui t0,0x8
- 8ea: 80028293 addi t0,t0,-2048 # 7800 <_data_lma+0x5550>
- 8ee: 30029073 csrw mstatus,t0
- 8f2: fffff297 auipc t0,0xfffff
- 8f6: 71228293 addi t0,t0,1810 # 4 <_einit>
- 8fa: 0032e293 ori t0,t0,3
- 8fe: 30529073 csrw mtvec,t0
- 902: d5dff0ef jal ra,65e
- 906: 00000297 auipc t0,0x0
- 90a: cfa28293 addi t0,t0,-774 # 600
- 90e: 34129073 csrw mepc,t0
- 912: 30200073 mret
+0000088e :
+ 88e: 20000197 auipc gp,0x20000
+ 892: 0e218193 addi gp,gp,226 # 20000970 <__global_pointer$>
+ 896: 20007117 auipc sp,0x20007
+ 89a: 76a10113 addi sp,sp,1898 # 20008000 <__freertos_irq_stack_top>
+ 89e: 00005517 auipc a0,0x5
+ 8a2: d8250513 addi a0,a0,-638 # 5620 <_data_lma>
+ 8a6: 1ffff597 auipc a1,0x1ffff
+ 8aa: 75a58593 addi a1,a1,1882 # 20000000 <_data_vma>
+ 8ae: 82018613 addi a2,gp,-2016 # 20000190 <_edata>
+ 8b2: 00c5fa63 bgeu a1,a2,8c6
+ 8b6: 00052283 lw t0,0(a0)
+ 8ba: 0055a023 sw t0,0(a1)
+ 8be: 0511 addi a0,a0,4
+ 8c0: 0591 addi a1,a1,4
+ 8c2: fec5eae3 bltu a1,a2,8b6
+ 8c6: 20000517 auipc a0,0x20000
+ 8ca: 8ca50513 addi a0,a0,-1846 # 20000190 <_edata>
+ 8ce: 20003597 auipc a1,0x20003
+ 8d2: f8e58593 addi a1,a1,-114 # 2000385c <_ebss>
+ 8d6: 00b57763 bgeu a0,a1,8e4
+ 8da: 00052023 sw zero,0(a0)
+ 8de: 0511 addi a0,a0,4
+ 8e0: feb56de3 bltu a0,a1,8da
+ 8e4: 42fd li t0,31
+ 8e6: bc029073 csrw 0xbc0,t0
+ 8ea: 42fd li t0,31
+ 8ec: 80429073 csrw 0x804,t0
+ 8f0: 000082b7 lui t0,0x8
+ 8f4: 80028293 addi t0,t0,-2048 # 7800 <_data_lma+0x21e0>
+ 8f8: 30029073 csrw mstatus,t0
+ 8fc: fffff297 auipc t0,0xfffff
+ 900: 70828293 addi t0,t0,1800 # 4 <_einit>
+ 904: 0032e293 ori t0,t0,3
+ 908: 30529073 csrw mtvec,t0
+ 90c: d59ff0ef jal ra,664
+ 910: 00000297 auipc t0,0x0
+ 914: cf028293 addi t0,t0,-784 # 600
+ 918: 34129073 csrw mepc,t0
+ 91c: 30200073 mret
-00000916 :
- 916: 1ffff7b7 lui a5,0x1ffff
- 91a: 7047a503 lw a0,1796(a5) # 1ffff704 <_data_lma+0x1fffd454>
- 91e: 8082 ret
+00000920 :
+ 920: bf7ff2ef jal t0,516 <__riscv_save_0>
+ 924: 400127b7 lui a5,0x40012
+ 928: 40078793 addi a5,a5,1024 # 40012400 <__freertos_irq_stack_top+0x2000a400>
+ 92c: 00f51b63 bne a0,a5,942
+ 930: 4585 li a1,1
+ 932: 20000513 li a0,512
+ 936: 2755 jal 10da
+ 938: 4581 li a1,0
+ 93a: 20000513 li a0,512
+ 93e: 2f71 jal 10da
+ 940: beed j 53a <__riscv_restore_0>
+ 942: 400137b7 lui a5,0x40013
+ 946: 80078793 addi a5,a5,-2048 # 40012800 <__freertos_irq_stack_top+0x2000a800>
+ 94a: fef51be3 bne a0,a5,940
+ 94e: 4585 li a1,1
+ 950: 40000513 li a0,1024
+ 954: 2759 jal 10da
+ 956: 4581 li a1,0
+ 958: 40000513 li a0,1024
+ 95c: b7cd j 93e
-00000920 :
- 920: 459c lw a5,8(a1)
- 922: 0107f713 andi a4,a5,16
- 926: 00f7f813 andi a6,a5,15
- 92a: c701 beqz a4,932
- 92c: 41d8 lw a4,4(a1)
- 92e: 00e86833 or a6,a6,a4
- 932: 218e lhu a1,0(a1)
- 934: 0ff5f713 andi a4,a1,255
- 938: c339 beqz a4,97e
- 93a: 4118 lw a4,0(a0)
- 93c: 4681 li a3,0
- 93e: 4e85 li t4,1
- 940: 4f3d li t5,15
- 942: 02800f93 li t6,40
- 946: 04800293 li t0,72
- 94a: 4e21 li t3,8
- 94c: 00de9633 sll a2,t4,a3
- 950: 00c5f8b3 and a7,a1,a2
- 954: 03161163 bne a2,a7,976
- 958: 00269893 slli a7,a3,0x2
- 95c: 011f1333 sll t1,t5,a7
- 960: fff34313 not t1,t1
- 964: 00e37733 and a4,t1,a4
- 968: 011818b3 sll a7,a6,a7
- 96c: 00e8e733 or a4,a7,a4
- 970: 05f79f63 bne a5,t6,9ce
- 974: c950 sw a2,20(a0)
- 976: 0685 addi a3,a3,1
- 978: fdc69ae3 bne a3,t3,94c
- 97c: c118 sw a4,0(a0)
- 97e: 0ff00713 li a4,255
- 982: 04b77563 bgeu a4,a1,9cc
- 986: 4154 lw a3,4(a0)
- 988: 4621 li a2,8
- 98a: 4e85 li t4,1
- 98c: 4f3d li t5,15
- 98e: 02800f93 li t6,40
- 992: 04800293 li t0,72
- 996: 4e41 li t3,16
- 998: 00ce98b3 sll a7,t4,a2
- 99c: 0115f733 and a4,a1,a7
- 9a0: 02e89263 bne a7,a4,9c4
- 9a4: 00261713 slli a4,a2,0x2
- 9a8: 1701 addi a4,a4,-32
- 9aa: 00ef1333 sll t1,t5,a4
- 9ae: fff34313 not t1,t1
- 9b2: 00d376b3 and a3,t1,a3
- 9b6: 00e81733 sll a4,a6,a4
- 9ba: 8ed9 or a3,a3,a4
- 9bc: 01f79d63 bne a5,t6,9d6
- 9c0: 01152a23 sw a7,20(a0)
- 9c4: 0605 addi a2,a2,1
- 9c6: fdc619e3 bne a2,t3,998
- 9ca: c154 sw a3,4(a0)
- 9cc: 8082 ret
- 9ce: fa5794e3 bne a5,t0,976
- 9d2: c910 sw a2,16(a0)
- 9d4: b74d j 976
- 9d6: fe5797e3 bne a5,t0,9c4
- 9da: 01152823 sw a7,16(a0)
- 9de: b7dd j 9c4
+0000095e :
+ 95e: 415c lw a5,4(a0)
+ 960: e0f10737 lui a4,0xe0f10
+ 964: eff70713 addi a4,a4,-257 # e0f0feff <__freertos_irq_stack_top+0xc0f07eff>
+ 968: 4d94 lw a3,24(a1)
+ 96a: 8f7d and a4,a4,a5
+ 96c: 419c lw a5,0(a1)
+ 96e: 8fd5 or a5,a5,a3
+ 970: 4dd4 lw a3,28(a1)
+ 972: 8fd5 or a5,a5,a3
+ 974: 41d4 lw a3,4(a1)
+ 976: 06a2 slli a3,a3,0x8
+ 978: 8fd5 or a5,a5,a3
+ 97a: 8fd9 or a5,a5,a4
+ 97c: c15c sw a5,4(a0)
+ 97e: 451c lw a5,8(a0)
+ 980: fff1f737 lui a4,0xfff1f
+ 984: 7fd70713 addi a4,a4,2045 # fff1f7fd <__freertos_irq_stack_top+0xdff177fd>
+ 988: 45d4 lw a3,12(a1)
+ 98a: 8f7d and a4,a4,a5
+ 98c: 499c lw a5,16(a1)
+ 98e: 8fd5 or a5,a5,a3
+ 990: 4594 lw a3,8(a1)
+ 992: 0686 slli a3,a3,0x1
+ 994: 8fd5 or a5,a5,a3
+ 996: 8fd9 or a5,a5,a4
+ 998: c51c sw a5,8(a0)
+ 99a: 555c lw a5,44(a0)
+ 99c: ff100737 lui a4,0xff100
+ 9a0: 177d addi a4,a4,-1
+ 9a2: 8f7d and a4,a4,a5
+ 9a4: 29dc lbu a5,20(a1)
+ 9a6: 17fd addi a5,a5,-1
+ 9a8: 0ff7f793 andi a5,a5,255
+ 9ac: 07d2 slli a5,a5,0x14
+ 9ae: 8fd9 or a5,a5,a4
+ 9b0: d55c sw a5,44(a0)
+ 9b2: 8082 ret
-000009e0 :
- 9e0: 200007b7 lui a5,0x20000
- 9e4: 08a7ac23 sw a0,152(a5) # 20000098 <_edata>
- 9e8: 8082 ret
+000009b4 :
+ 9b4: 451c lw a5,8(a0)
+ 9b6: c589 beqz a1,9c0
+ 9b8: 0017e793 ori a5,a5,1
+ 9bc: c51c sw a5,8(a0)
+ 9be: 8082 ret
+ 9c0: 9bf9 andi a5,a5,-2
+ 9c2: bfed j 9bc
-000009ea :
- 9ea: 40021737 lui a4,0x40021
- 9ee: 435c lw a5,4(a4)
- 9f0: 4691 li a3,4
- 9f2: 8bb1 andi a5,a5,12
- 9f4: 00d78563 beq a5,a3,9fe
- 9f8: 46a1 li a3,8
- 9fa: 06d78263 beq a5,a3,a5e
- 9fe: 007a17b7 lui a5,0x7a1
- a02: 20078793 addi a5,a5,512 # 7a1200 <_data_lma+0x79ef50>
- a06: c11c sw a5,0(a0)
- a08: 40021637 lui a2,0x40021
- a0c: 425c lw a5,4(a2)
- a0e: 20000737 lui a4,0x20000
- a12: 01070713 addi a4,a4,16 # 20000010
- a16: 8391 srli a5,a5,0x4
- a18: 8bbd andi a5,a5,15
- a1a: 97ba add a5,a5,a4
- a1c: 2394 lbu a3,0(a5)
- a1e: 411c lw a5,0(a0)
- a20: 00d7d7b3 srl a5,a5,a3
- a24: c15c sw a5,4(a0)
- a26: 4254 lw a3,4(a2)
- a28: 82a1 srli a3,a3,0x8
- a2a: 8a9d andi a3,a3,7
- a2c: 96ba add a3,a3,a4
- a2e: 2294 lbu a3,0(a3)
- a30: 00d7d6b3 srl a3,a5,a3
- a34: c514 sw a3,8(a0)
- a36: 4254 lw a3,4(a2)
- a38: 82ad srli a3,a3,0xb
- a3a: 8a9d andi a3,a3,7
- a3c: 9736 add a4,a4,a3
- a3e: 2318 lbu a4,0(a4)
- a40: 00e7d7b3 srl a5,a5,a4
- a44: c55c sw a5,12(a0)
- a46: 4258 lw a4,4(a2)
- a48: 8339 srli a4,a4,0xe
- a4a: 00377693 andi a3,a4,3
- a4e: 80418713 addi a4,gp,-2044 # 20000084
- a52: 9736 add a4,a4,a3
- a54: 2318 lbu a4,0(a4)
- a56: 02e7d7b3 divu a5,a5,a4
- a5a: c91c sw a5,16(a0)
- a5c: 8082 ret
- a5e: 435c lw a5,4(a4)
- a60: 4358 lw a4,4(a4)
- a62: 66c1 lui a3,0x10
- a64: 83c9 srli a5,a5,0x12
- a66: 8f75 and a4,a4,a3
- a68: 1ffff6b7 lui a3,0x1ffff
- a6c: 70c6a683 lw a3,1804(a3) # 1ffff70c <_data_lma+0x1fffd45c>
- a70: 8bbd andi a5,a5,15
- a72: 0789 addi a5,a5,2
- a74: 01169613 slli a2,a3,0x11
- a78: 00064863 bltz a2,a88
- a7c: 46c5 li a3,17
- a7e: 4601 li a2,0
- a80: 02d79263 bne a5,a3,aa4
- a84: 47c9 li a5,18
- a86: a839 j aa4
- a88: 4689 li a3,2
- a8a: 02d78f63 beq a5,a3,ac8
- a8e: 46bd li a3,15
- a90: 02d78e63 beq a5,a3,acc
- a94: 46c1 li a3,16
- a96: 02d78e63 beq a5,a3,ad2
- a9a: 46c5 li a3,17
- a9c: 4601 li a2,0
- a9e: 00d79363 bne a5,a3,aa4
- aa2: 47c1 li a5,16
- aa4: ef1d bnez a4,ae2
- aa6: 40024737 lui a4,0x40024
- aaa: 80072703 lw a4,-2048(a4) # 40023800 <__freertos_irq_stack_top+0x2001b800>
- aae: 8b41 andi a4,a4,16
- ab0: c705 beqz a4,ad8
- ab2: 007a1737 lui a4,0x7a1
- ab6: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- aba: 02f707b3 mul a5,a4,a5
- abe: c11c sw a5,0(a0)
- ac0: d621 beqz a2,a08
- ac2: 411c lw a5,0(a0)
- ac4: 8385 srli a5,a5,0x1
- ac6: b781 j a06
- ac8: 4601 li a2,0
- aca: bf6d j a84
- acc: 4605 li a2,1
- ace: 47b5 li a5,13
- ad0: bfd1 j aa4
- ad2: 4601 li a2,0
- ad4: 47bd li a5,15
- ad6: b7f9 j aa4
- ad8: 003d1737 lui a4,0x3d1
- adc: 90070713 addi a4,a4,-1792 # 3d0900 <_data_lma+0x3ce650>
- ae0: bfe9 j aba
- ae2: 400215b7 lui a1,0x40021
- ae6: 55d8 lw a4,44(a1)
- ae8: 00f71693 slli a3,a4,0xf
- aec: 55d8 lw a4,44(a1)
- aee: 0406df63 bgez a3,b4c
- af2: 8311 srli a4,a4,0x4
- af4: 8b3d andi a4,a4,15
- af6: 00170693 addi a3,a4,1
- afa: 007a1737 lui a4,0x7a1
- afe: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- b02: 02d75733 divu a4,a4,a3
- b06: c118 sw a4,0(a0)
- b08: 55d4 lw a3,44(a1)
- b0a: 82a1 srli a3,a3,0x8
- b0c: 8abd andi a3,a3,15
- b0e: e28d bnez a3,b30
- b10: 4695 li a3,5
- b12: 02d70733 mul a4,a4,a3
- b16: 8305 srli a4,a4,0x1
- b18: c118 sw a4,0(a0)
- b1a: 40021737 lui a4,0x40021
- b1e: 5758 lw a4,44(a4)
- b20: 4114 lw a3,0(a0)
- b22: 8b3d andi a4,a4,15
- b24: 0705 addi a4,a4,1
- b26: 02e6d733 divu a4,a3,a4
- b2a: c118 sw a4,0(a0)
- b2c: 4118 lw a4,0(a0)
- b2e: b771 j aba
- b30: 4585 li a1,1
- b32: 00b69463 bne a3,a1,b3a
- b36: 46e5 li a3,25
- b38: bfe9 j b12
- b3a: 45bd li a1,15
- b3c: 00b69663 bne a3,a1,b48
- b40: 46d1 li a3,20
- b42: 02e68733 mul a4,a3,a4
- b46: bfc9 j b18
- b48: 0689 addi a3,a3,2
- b4a: bfe5 j b42
- b4c: 8b3d andi a4,a4,15
- b4e: 00170693 addi a3,a4,1 # 40021001 <__freertos_irq_stack_top+0x20019001>
- b52: 007a1737 lui a4,0x7a1
- b56: 20070713 addi a4,a4,512 # 7a1200 <_data_lma+0x79ef50>
- b5a: 02d75733 divu a4,a4,a3
- b5e: b7f1 j b2a
+000009c4 :
+ 9c4: 451c lw a5,8(a0)
+ 9c6: c589 beqz a1,9d0
+ 9c8: 1007e793 ori a5,a5,256
+ 9cc: c51c sw a5,8(a0)
+ 9ce: 8082 ret
+ 9d0: eff7f793 andi a5,a5,-257
+ 9d4: bfe5 j 9cc
-00000b60 :
- b60: c599 beqz a1,b6e
- b62: 40021737 lui a4,0x40021
- b66: 4f1c lw a5,24(a4)
- b68: 8d5d or a0,a0,a5
- b6a: cf08 sw a0,24(a4)
- b6c: 8082 ret
- b6e: 400217b7 lui a5,0x40021
- b72: 4f98 lw a4,24(a5)
- b74: fff54513 not a0,a0
- b78: 8d79 and a0,a0,a4
- b7a: cf88 sw a0,24(a5)
- b7c: 8082 ret
+000009d6 :
+ 9d6: 451c lw a5,8(a0)
+ 9d8: 0087e793 ori a5,a5,8
+ 9dc: c51c sw a5,8(a0)
+ 9de: 8082 ret
-00000b7e :
- b7e: 999ff2ef jal t0,516 <__riscv_save_0>
- b82: 2916 lhu a3,16(a0)
- b84: 77f5 lui a5,0xffffd
- b86: 17fd addi a5,a5,-1
- b88: 8ff5 and a5,a5,a3
- b8a: 21f6 lhu a3,6(a1)
- b8c: 25da lhu a4,12(a1)
- b8e: 7179 addi sp,sp,-48
- b90: 8fd5 or a5,a5,a3
- b92: a91e sh a5,16(a0)
- b94: 2556 lhu a3,12(a0)
- b96: 77fd lui a5,0xfffff
- b98: 9f378793 addi a5,a5,-1549 # ffffe9f3 <__freertos_irq_stack_top+0xdfff69f3>
- b9c: 8ff5 and a5,a5,a3
- b9e: 21d6 lhu a3,4(a1)
- ba0: 842a mv s0,a0
- ba2: c62e sw a1,12(sp)
- ba4: 8fd5 or a5,a5,a3
- ba6: 2596 lhu a3,8(a1)
- ba8: 8fd5 or a5,a5,a3
- baa: 25b6 lhu a3,10(a1)
- bac: 8fd5 or a5,a5,a3
- bae: a55e sh a5,12(a0)
- bb0: 295e lhu a5,20(a0)
- bb2: 07c2 slli a5,a5,0x10
- bb4: 83c1 srli a5,a5,0x10
- bb6: cff7f793 andi a5,a5,-769
- bba: 8fd9 or a5,a5,a4
- bbc: a95e sh a5,20(a0)
- bbe: 0868 addi a0,sp,28
- bc0: 352d jal 9ea
- bc2: 400147b7 lui a5,0x40014
- bc6: 80078793 addi a5,a5,-2048 # 40013800 <__freertos_irq_stack_top+0x2000b800>
- bca: 45b2 lw a1,12(sp)
- bcc: 02f41d63 bne s0,a5,c06
- bd0: 57a2 lw a5,40(sp)
- bd2: 4765 li a4,25
- bd4: 02e787b3 mul a5,a5,a4
- bd8: 4198 lw a4,0(a1)
- bda: 06400693 li a3,100
- bde: 070a slli a4,a4,0x2
- be0: 02e7d7b3 divu a5,a5,a4
- be4: 02d7d733 divu a4,a5,a3
- be8: 02d7f7b3 remu a5,a5,a3
- bec: 0712 slli a4,a4,0x4
- bee: 0792 slli a5,a5,0x4
- bf0: 03278793 addi a5,a5,50
- bf4: 02d7d7b3 divu a5,a5,a3
- bf8: 8bbd andi a5,a5,15
- bfa: 8fd9 or a5,a5,a4
- bfc: 07c2 slli a5,a5,0x10
- bfe: 83c1 srli a5,a5,0x10
- c00: a41e sh a5,8(s0)
- c02: 6145 addi sp,sp,48
- c04: ba1d j 53a <__riscv_restore_0>
- c06: 5792 lw a5,36(sp)
- c08: b7e9 j bd2
+000009e0 :
+ 9e0: 4508 lw a0,8(a0)
+ 9e2: 810d srli a0,a0,0x3
+ 9e4: 8905 andi a0,a0,1
+ 9e6: 8082 ret
-00000c0a :
- c0a: c591 beqz a1,c16
- c0c: 255e lhu a5,12(a0)
- c0e: 6709 lui a4,0x2
- c10: 8fd9 or a5,a5,a4
- c12: a55e sh a5,12(a0)
- c14: 8082 ret
- c16: 255a lhu a4,12(a0)
- c18: 77f9 lui a5,0xffffe
- c1a: 17fd addi a5,a5,-1
- c1c: 8ff9 and a5,a5,a4
- c1e: bfd5 j c12
+000009e8 :
+ 9e8: 451c lw a5,8(a0)
+ 9ea: 0047e793 ori a5,a5,4
+ 9ee: c51c sw a5,8(a0)
+ 9f0: 8082 ret
-00000c20 :
- c20: 1ff5f593 andi a1,a1,511
- c24: a14e sh a1,4(a0)
- c26: 8082 ret
+000009f2 :
+ 9f2: 4508 lw a0,8(a0)
+ 9f4: 8109 srli a0,a0,0x2
+ 9f6: 8905 andi a0,a0,1
+ 9f8: 8082 ret
-00000c28 :
- c28: 210a lhu a0,0(a0)
- c2a: 8d6d and a0,a0,a1
- c2c: 00a03533 snez a0,a0
- c30: 8082 ret
+000009fa :
+ 9fa: 451c lw a5,8(a0)
+ 9fc: c591 beqz a1,a08
+ 9fe: 00500737 lui a4,0x500
+ a02: 8fd9 or a5,a5,a4
+ a04: c51c sw a5,8(a0)
+ a06: 8082 ret
+ a08: ffb00737 lui a4,0xffb00
+ a0c: 177d addi a4,a4,-1
+ a0e: 8ff9 and a5,a5,a4
+ a10: bfd5 j a04
-00000c32 :
- c32: 34011173 csrrw sp,mscratch,sp
- c36: 67a1 lui a5,0x8
- c38: 80078793 addi a5,a5,-2048 # 7800 <_data_lma+0x5550>
- c3c: 30079073 csrw mstatus,a5
- c40: e000f7b7 lui a5,0xe000f
- c44: 0007a223 sw zero,4(a5) # e000f004 <__freertos_irq_stack_top+0xc0007004>
- c48: 2091 jal c8c
- c4a: c511 beqz a0,c56
- c4c: e000e7b7 lui a5,0xe000e
- c50: 6711 lui a4,0x4
- c52: 20e7a023 sw a4,512(a5) # e000e200 <__freertos_irq_stack_top+0xc0006200>
- c56: 67a1 lui a5,0x8
- c58: 88878793 addi a5,a5,-1912 # 7888 <_data_lma+0x55d8>
- c5c: 30079073 csrw mstatus,a5
- c60: 34011173 csrrw sp,mscratch,sp
- c64: 30200073 mret
+00000a12 :
+ a12: 47a5 li a5,9
+ a14: 04b7f763 bgeu a5,a1,a62
+ a18: 478d li a5,3
+ a1a: ff658713 addi a4,a1,-10
+ a1e: 02f70733 mul a4,a4,a5
+ a22: 00c52803 lw a6,12(a0)
+ a26: 479d li a5,7
+ a28: 00e797b3 sll a5,a5,a4
+ a2c: fff7c793 not a5,a5
+ a30: 0107f7b3 and a5,a5,a6
+ a34: 00e696b3 sll a3,a3,a4
+ a38: 8edd or a3,a3,a5
+ a3a: c554 sw a3,12(a0)
+ a3c: 4799 li a5,6
+ a3e: 04c7e363 bltu a5,a2,a84
+ a42: 4795 li a5,5
+ a44: 167d addi a2,a2,-1
+ a46: 02f60633 mul a2,a2,a5
+ a4a: 5958 lw a4,52(a0)
+ a4c: 47fd li a5,31
+ a4e: 00c797b3 sll a5,a5,a2
+ a52: fff7c793 not a5,a5
+ a56: 8ff9 and a5,a5,a4
+ a58: 00c59633 sll a2,a1,a2
+ a5c: 8e5d or a2,a2,a5
+ a5e: d950 sw a2,52(a0)
+ a60: 8082 ret
+ a62: 470d li a4,3
+ a64: 02e58733 mul a4,a1,a4
+ a68: 01052803 lw a6,16(a0)
+ a6c: 479d li a5,7
+ a6e: 00e797b3 sll a5,a5,a4
+ a72: fff7c793 not a5,a5
+ a76: 0107f7b3 and a5,a5,a6
+ a7a: 00e696b3 sll a3,a3,a4
+ a7e: 8edd or a3,a3,a5
+ a80: c914 sw a3,16(a0)
+ a82: bf6d j a3c
+ a84: 47b1 li a5,12
+ a86: 02c7e263 bltu a5,a2,aaa
+ a8a: 4795 li a5,5
+ a8c: 1665 addi a2,a2,-7
+ a8e: 02f60633 mul a2,a2,a5
+ a92: 5918 lw a4,48(a0)
+ a94: 47fd li a5,31
+ a96: 00c797b3 sll a5,a5,a2
+ a9a: fff7c793 not a5,a5
+ a9e: 8ff9 and a5,a5,a4
+ aa0: 00c59633 sll a2,a1,a2
+ aa4: 8e5d or a2,a2,a5
+ aa6: d910 sw a2,48(a0)
+ aa8: 8082 ret
+ aaa: 4795 li a5,5
+ aac: 164d addi a2,a2,-13
+ aae: 02f60633 mul a2,a2,a5
+ ab2: 5558 lw a4,44(a0)
+ ab4: 47fd li a5,31
+ ab6: 00c797b3 sll a5,a5,a2
+ aba: fff7c793 not a5,a5
+ abe: 8ff9 and a5,a5,a4
+ ac0: 00c595b3 sll a1,a1,a2
+ ac4: 8ddd or a1,a1,a5
+ ac6: d54c sw a1,44(a0)
+ ac8: 8082 ret
-00000c68 :
- c68: 20000737 lui a4,0x20000
- c6c: 0a070713 addi a4,a4,160 # 200000a0
- c70: 431c lw a5,0(a4)
- c72: 4394 lw a3,0(a5)
- c74: 200007b7 lui a5,0x20000
- c78: 0b078793 addi a5,a5,176 # 200000b0
- c7c: e681 bnez a3,c84
- c7e: 577d li a4,-1
- c80: c398 sw a4,0(a5)
- c82: 8082 ret
- c84: 4318 lw a4,0(a4)
- c86: 4758 lw a4,12(a4)
- c88: 4318 lw a4,0(a4)
- c8a: bfdd j c80
+00000aca :
+ aca: 415c lw a5,4(a0)
+ acc: c591 beqz a1,ad8
+ ace: 04000737 lui a4,0x4000
+ ad2: 8fd9 or a5,a5,a4
+ ad4: c15c sw a5,4(a0)
+ ad6: 8082 ret
+ ad8: fc000737 lui a4,0xfc000
+ adc: 177d addi a4,a4,-1
+ ade: 8ff9 and a5,a5,a4
+ ae0: bfd5 j ad4
-00000c8c :
- c8c: 200007b7 lui a5,0x20000
- c90: 0a87a783 lw a5,168(a5) # 200000a8
- c94: 18079763 bnez a5,e22
- c98: 87fff2ef jal t0,516 <__riscv_save_0>
- c9c: 200007b7 lui a5,0x20000
- ca0: 0bc78793 addi a5,a5,188 # 200000bc
- ca4: 4380 lw s0,0(a5)
- ca6: 0405 addi s0,s0,1
- ca8: c380 sw s0,0(a5)
- caa: e831 bnez s0,cfe
- cac: 200007b7 lui a5,0x20000
- cb0: 0a078793 addi a5,a5,160 # 200000a0
- cb4: 4398 lw a4,0(a5)
- cb6: 4318 lw a4,0(a4)
- cb8: c31d beqz a4,cde
- cba: 67a1 lui a5,0x8
- cbc: 80078793 addi a5,a5,-2048 # 7800 <_data_lma+0x5550>
- cc0: 30079073 csrw mstatus,a5
- cc4: 00002637 lui a2,0x2
- cc8: 6585 lui a1,0x1
- cca: 00002537 lui a0,0x2
- cce: 1dc60613 addi a2,a2,476 # 21dc <_read+0x6c>
- cd2: ac758593 addi a1,a1,-1337 # ac7
- cd6: 1f050513 addi a0,a0,496 # 21f0 <_read+0x80>
- cda: 2cd9 jal fb0
- cdc: a001 j cdc
- cde: 20000737 lui a4,0x20000
- ce2: 0a470713 addi a4,a4,164 # 200000a4
- ce6: 4394 lw a3,0(a5)
- ce8: 4310 lw a2,0(a4)
- cea: c390 sw a2,0(a5)
- cec: 200007b7 lui a5,0x20000
- cf0: c314 sw a3,0(a4)
- cf2: 0b478793 addi a5,a5,180 # 200000b4
- cf6: 4398 lw a4,0(a5)
- cf8: 0705 addi a4,a4,1
- cfa: c398 sw a4,0(a5)
- cfc: 37b5 jal c68
- cfe: 20000637 lui a2,0x20000
- d02: 0b060793 addi a5,a2,176 # 200000b0
- d06: 439c lw a5,0(a5)
- d08: 20000737 lui a4,0x20000
- d0c: 200005b7 lui a1,0x20000
- d10: 0b060613 addi a2,a2,176
- d14: 0d070713 addi a4,a4,208 # 200000d0
- d18: 09c58593 addi a1,a1,156 # 2000009c
- d1c: 4501 li a0,0
- d1e: 02f47563 bgeu s0,a5,d48
- d22: 419c lw a5,0(a1)
- d24: 46d1 li a3,20
- d26: 57dc lw a5,44(a5)
- d28: 02d787b3 mul a5,a5,a3
- d2c: 973e add a4,a4,a5
- d2e: 4318 lw a4,0(a4)
- d30: 4785 li a5,1
- d32: 00e7f363 bgeu a5,a4,d38
- d36: 4505 li a0,1
- d38: 200007b7 lui a5,0x20000
- d3c: 0c07a783 lw a5,192(a5) # 200000c0
- d40: c391 beqz a5,d44
- d42: 4505 li a0,1
- d44: ff6ff06f j 53a <__riscv_restore_0>
- d48: 20000e37 lui t3,0x20000
- d4c: 20000eb7 lui t4,0x20000
- d50: 4f51 li t5,20
- d52: 0a0e0793 addi a5,t3,160 # 200000a0
- d56: 4394 lw a3,0(a5)
- d58: 4294 lw a3,0(a3)
- d5a: e681 bnez a3,d62
- d5c: 57fd li a5,-1
- d5e: c21c sw a5,0(a2)
- d60: b7c9 j d22
- d62: 439c lw a5,0(a5)
- d64: 47dc lw a5,12(a5)
- d66: 47dc lw a5,12(a5)
- d68: 43d4 lw a3,4(a5)
- d6a: 00d47463 bgeu s0,a3,d72
- d6e: c214 sw a3,0(a2)
- d70: bf4d j d22
- d72: 0087a883 lw a7,8(a5)
- d76: 00c7a803 lw a6,12(a5)
- d7a: 4bd4 lw a3,20(a5)
- d7c: 00478313 addi t1,a5,4
- d80: 0108a423 sw a6,8(a7)
- d84: 01182223 sw a7,4(a6)
- d88: 0046a883 lw a7,4(a3)
- d8c: 00689463 bne a7,t1,d94
- d90: 0106a223 sw a6,4(a3)
- d94: 0006a803 lw a6,0(a3)
- d98: 0007aa23 sw zero,20(a5)
- d9c: 187d addi a6,a6,-1
- d9e: 0106a023 sw a6,0(a3)
- da2: 5794 lw a3,40(a5)
- da4: ca95 beqz a3,dd8
- da6: 01c7a803 lw a6,28(a5)
- daa: 0207a883 lw a7,32(a5)
- dae: 0046af83 lw t6,4(a3)
- db2: 01182423 sw a7,8(a6)
- db6: 0207a883 lw a7,32(a5)
- dba: 0108a223 sw a6,4(a7)
- dbe: 01878813 addi a6,a5,24
- dc2: 010f9463 bne t6,a6,dca
- dc6: 0116a223 sw a7,4(a3)
- dca: 0006a803 lw a6,0(a3)
- dce: 0207a423 sw zero,40(a5)
- dd2: 187d addi a6,a6,-1
- dd4: 0106a023 sw a6,0(a3)
- dd8: 0ace8693 addi a3,t4,172 # 200000ac
- ddc: 02c7a803 lw a6,44(a5)
- de0: 0006a883 lw a7,0(a3)
- de4: 0108f463 bgeu a7,a6,dec
- de8: 0106a023 sw a6,0(a3)
- dec: 03e806b3 mul a3,a6,t5
- df0: 96ba add a3,a3,a4
- df2: 0046a883 lw a7,4(a3)
- df6: 0088af83 lw t6,8(a7)
- dfa: 0117a423 sw a7,8(a5)
- dfe: 01f7a623 sw t6,12(a5)
- e02: 0088af83 lw t6,8(a7)
- e06: 006fa223 sw t1,4(t6)
- e0a: 0068a423 sw t1,8(a7)
- e0e: cbd4 sw a3,20(a5)
- e10: 429c lw a5,0(a3)
- e12: 0785 addi a5,a5,1
- e14: c29c sw a5,0(a3)
- e16: 419c lw a5,0(a1)
- e18: 57dc lw a5,44(a5)
- e1a: f2f86ce3 bltu a6,a5,d52
- e1e: 4505 li a0,1
- e20: bf0d j d52
- e22: 200007b7 lui a5,0x20000
- e26: 0b878793 addi a5,a5,184 # 200000b8
- e2a: 4398 lw a4,0(a5)
- e2c: 4501 li a0,0
- e2e: 0705 addi a4,a4,1
- e30: c398 sw a4,0(a5)
- e32: 8082 ret
+00000ae2 :
+ ae2: a35ff2ef jal t0,516 <__riscv_save_0>
+ ae6: 1101 addi sp,sp,-32
+ ae8: 842a mv s0,a0
+ aea: 00010423 sb zero,8(sp)
+ aee: 44a5 li s1,9
+ af0: 841c lbu a5,8(sp)
+ af2: 04f4f863 bgeu s1,a5,b42
+ af6: 00010423 sb zero,8(sp)
+ afa: 46a5 li a3,9
+ afc: 4621 li a2,8
+ afe: 841c lbu a5,8(sp)
+ b00: 06f6fc63 bgeu a3,a5,b78
+ b04: 00011523 sh zero,10(sp)
+ b08: 00010423 sb zero,8(sp)
+ b0c: 4695 li a3,5
+ b0e: 841c lbu a5,8(sp)
+ b10: 0cf6fe63 bgeu a3,a5,bec
+ b14: 8538 lhu a4,10(sp)
+ b16: 853c lhu a5,10(sp)
+ b18: 4699 li a3,6
+ b1a: 460d li a2,3
+ b1c: 02d7f7b3 remu a5,a5,a3
+ b20: 6505 lui a0,0x1
+ b22: 80050513 addi a0,a0,-2048 # 800 <__stack_size>
+ b26: 02c7d7b3 divu a5,a5,a2
+ b2a: 02d75733 divu a4,a4,a3
+ b2e: 97ba add a5,a5,a4
+ b30: 07c2 slli a5,a5,0x10
+ b32: 83c1 srli a5,a5,0x10
+ b34: 857c sh a5,10(sp)
+ b36: 853c lhu a5,10(sp)
+ b38: 6105 addi sp,sp,32
+ b3a: 8d1d sub a0,a0,a5
+ b3c: 0542 slli a0,a0,0x10
+ b3e: 8541 srai a0,a0,0x10
+ b40: baed j 53a <__riscv_restore_0>
+ b42: 441c lw a5,8(s0)
+ b44: 0087e793 ori a5,a5,8
+ b48: c41c sw a5,8(s0)
+ b4a: 8522 mv a0,s0
+ b4c: 3d51 jal 9e0
+ b4e: fd75 bnez a0,b4a
+ b50: 441c lw a5,8(s0)
+ b52: 0047e793 ori a5,a5,4
+ b56: c41c sw a5,8(s0)
+ b58: 8522 mv a0,s0
+ b5a: 3d61 jal 9f2
+ b5c: fd75 bnez a0,b58
+ b5e: 4478 lw a4,76(s0)
+ b60: 841c lbu a5,8(sp)
+ b62: 1014 addi a3,sp,32
+ b64: 0786 slli a5,a5,0x1
+ b66: 97b6 add a5,a5,a3
+ b68: fee79623 sh a4,-20(a5)
+ b6c: 841c lbu a5,8(sp)
+ b6e: 0785 addi a5,a5,1
+ b70: 0ff7f793 andi a5,a5,255
+ b74: 845c sb a5,8(sp)
+ b76: bfad j af0
+ b78: 000104a3 sb zero,9(sp)
+ b7c: 849c lbu a5,9(sp)
+ b7e: 00f67863 bgeu a2,a5,b8e
+ b82: 841c lbu a5,8(sp)
+ b84: 0785 addi a5,a5,1
+ b86: 0ff7f793 andi a5,a5,255
+ b8a: 845c sb a5,8(sp)
+ b8c: bf8d j afe
+ b8e: 8498 lbu a4,9(sp)
+ b90: 849c lbu a5,9(sp)
+ b92: 100c addi a1,sp,32
+ b94: 0706 slli a4,a4,0x1
+ b96: 0785 addi a5,a5,1
+ b98: 0786 slli a5,a5,0x1
+ b9a: 972e add a4,a4,a1
+ b9c: 97ae add a5,a5,a1
+ b9e: fec75703 lhu a4,-20(a4) # fbffffec <__freertos_irq_stack_top+0xdbff7fec>
+ ba2: fec7d783 lhu a5,-20(a5)
+ ba6: 02e7fd63 bgeu a5,a4,be0
+ baa: 849c lbu a5,9(sp)
+ bac: 0786 slli a5,a5,0x1
+ bae: 97ae add a5,a5,a1
+ bb0: fec7d783 lhu a5,-20(a5)
+ bb4: 857c sh a5,10(sp)
+ bb6: 849c lbu a5,9(sp)
+ bb8: 8498 lbu a4,9(sp)
+ bba: 0785 addi a5,a5,1
+ bbc: 0786 slli a5,a5,0x1
+ bbe: 97ae add a5,a5,a1
+ bc0: fec7d583 lhu a1,-20(a5)
+ bc4: 00171793 slli a5,a4,0x1
+ bc8: 1018 addi a4,sp,32
+ bca: 97ba add a5,a5,a4
+ bcc: feb79623 sh a1,-20(a5)
+ bd0: 849c lbu a5,9(sp)
+ bd2: 8538 lhu a4,10(sp)
+ bd4: 100c addi a1,sp,32
+ bd6: 0785 addi a5,a5,1
+ bd8: 0786 slli a5,a5,0x1
+ bda: 97ae add a5,a5,a1
+ bdc: fee79623 sh a4,-20(a5)
+ be0: 849c lbu a5,9(sp)
+ be2: 0785 addi a5,a5,1
+ be4: 0ff7f793 andi a5,a5,255
+ be8: 84dc sb a5,9(sp)
+ bea: bf49 j b7c
+ bec: 841c lbu a5,8(sp)
+ bee: 1010 addi a2,sp,32
+ bf0: 8538 lhu a4,10(sp)
+ bf2: 0789 addi a5,a5,2
+ bf4: 0786 slli a5,a5,0x1
+ bf6: 97b2 add a5,a5,a2
+ bf8: fec7d783 lhu a5,-20(a5)
+ bfc: 97ba add a5,a5,a4
+ bfe: 07c2 slli a5,a5,0x10
+ c00: 83c1 srli a5,a5,0x10
+ c02: 857c sh a5,10(sp)
+ c04: 841c lbu a5,8(sp)
+ c06: 0785 addi a5,a5,1
+ c08: 0ff7f793 andi a5,a5,255
+ c0c: 845c sb a5,8(sp)
+ c0e: b701 j b0e
-00000e34 :
- e34: 200007b7 lui a5,0x20000
- e38: 0a87a703 lw a4,168(a5) # 200000a8
- e3c: 200007b7 lui a5,0x20000
- e40: 0c078793 addi a5,a5,192 # 200000c0
- e44: c701 beqz a4,e4c