فهرست منبع

更改bootloader更新程序的加载地址

yang684665 11 ماه پیش
والد
کامیت
78a687937f
53فایلهای تغییر یافته به همراه9154 افزوده شده و 1567 حذف شده
  1. 11 15
      app/Proj/Ringzle.uvguix.IBM
  2. 6 1
      bootloader/.vscode/settings.json
  3. 2 1
      bootloader/CMSIS/Include/gd32f10x.h
  4. 29 0
      bootloader/HW/Include/fmc.h
  5. 4 4
      bootloader/HW/Include/ota_message.h
  6. 13 14
      bootloader/HW/Source/boot.c
  7. 213 5
      bootloader/HW/Source/fmc.c
  8. 3 2
      bootloader/HW/Source/ota_message.c
  9. 2 0
      bootloader/OBJ/ExtDll.iex
  10. BIN
      bootloader/OBJ/boot.crf
  11. 25 8
      bootloader/OBJ/boot.d
  12. BIN
      bootloader/OBJ/bootloader.axf
  13. 40 22
      bootloader/OBJ/bootloader.build_log.htm
  14. 175 221
      bootloader/OBJ/bootloader.htm
  15. 553 280
      bootloader/OBJ/bootloader_bootloader.dep
  16. BIN
      bootloader/OBJ/delay.crf
  17. 24 7
      bootloader/OBJ/delay.d
  18. BIN
      bootloader/OBJ/fmc.crf
  19. 24 7
      bootloader/OBJ/fmc.d
  20. BIN
      bootloader/OBJ/gd32f10x_fmc.crf
  21. 24 7
      bootloader/OBJ/gd32f10x_fmc.d
  22. BIN
      bootloader/OBJ/gd32f10x_fwdgt.crf
  23. 24 7
      bootloader/OBJ/gd32f10x_fwdgt.d
  24. BIN
      bootloader/OBJ/gd32f10x_gpio.crf
  25. 24 7
      bootloader/OBJ/gd32f10x_gpio.d
  26. BIN
      bootloader/OBJ/gd32f10x_it.crf
  27. 24 7
      bootloader/OBJ/gd32f10x_it.d
  28. BIN
      bootloader/OBJ/gd32f10x_misc.crf
  29. 24 7
      bootloader/OBJ/gd32f10x_misc.d
  30. BIN
      bootloader/OBJ/gd32f10x_rcu.crf
  31. 24 7
      bootloader/OBJ/gd32f10x_rcu.d
  32. BIN
      bootloader/OBJ/gd32f10x_spi.crf
  33. 24 7
      bootloader/OBJ/gd32f10x_spi.d
  34. BIN
      bootloader/OBJ/gd32f10x_wwdgt.crf
  35. 24 7
      bootloader/OBJ/gd32f10x_wwdgt.d
  36. BIN
      bootloader/OBJ/main.crf
  37. 24 7
      bootloader/OBJ/main.d
  38. BIN
      bootloader/OBJ/ota_message.crf
  39. 26 8
      bootloader/OBJ/ota_message.d
  40. BIN
      bootloader/OBJ/spi.crf
  41. 24 7
      bootloader/OBJ/spi.d
  42. BIN
      bootloader/OBJ/system_gd32f10x.crf
  43. 24 7
      bootloader/OBJ/system_gd32f10x.d
  44. BIN
      bootloader/OBJ/w25q32.crf
  45. 24 7
      bootloader/OBJ/w25q32.d
  46. 3540 525
      bootloader/USER/JLinkLog.txt
  47. 367 343
      bootloader/USER/Listings/bootloader.map
  48. 5 6
      bootloader/USER/Listings/startup_gd32f10x_xd.lst
  49. 3673 0
      bootloader/USER/bootloader.uvguix.IBM
  50. 85 4
      bootloader/USER/bootloader.uvoptx
  51. 4 3
      bootloader/USER/bootloader.uvprojx
  52. 26 1
      bootloader/USER/main.c
  53. 16 6
      bootloader/USER/main.h

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 11 - 15
app/Proj/Ringzle.uvguix.IBM


+ 6 - 1
bootloader/.vscode/settings.json

@@ -3,6 +3,11 @@
         "gd32f10x.h": "c",
         "gd32f10x_libopt.h": "c",
         "fmc.h": "c",
-        "gd32f10x_fmc.h": "c"
+        "gd32f10x_fmc.h": "c",
+        "main.h": "c",
+        "delay.h": "c",
+        "boot.h": "c",
+        "stdint.h": "c",
+        "string.h": "c"
     }
 }

+ 2 - 1
bootloader/CMSIS/Include/gd32f10x.h

@@ -41,7 +41,7 @@ OF SUCH DAMAGE.
 #ifdef cplusplus
  extern "C" {
 #endif 
-#define GD32F10X_XD
+
 /* define GD32F10x */
 #if !defined (GD32F10X_MD) && !defined (GD32F10X_HD) && !defined (GD32F10X_XD) && !defined (GD32F10X_CL)
   /* #define GD32F10X_MD */     /*!< GD32F10X_MD: GD32 Medium density devices */
@@ -308,6 +308,7 @@ typedef enum IRQn
 #include "core_cm3.h"
 #include "system_gd32f10x.h"
 #include <stdint.h>
+#include <string.h>
 
 /* enum definitions */
 typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus;

+ 29 - 0
bootloader/HW/Include/fmc.h

@@ -6,6 +6,35 @@
 void GD32_EraseFlash(uint16_t start, uint16_t num);                     //函数声明
 void GD32_WriteFlash(uint32_t saddr, uint32_t *wdata, uint32_t wnum);   //函数声明
 
+
+
+#include "gd32f10x.h"
+
+/// 移植修改区 ///
+
+/* FLASH大小:512K */
+#define GD32FLASH_SIZE  0X00080000UL
+
+/* FLASH起始地址 */
+#define GD32FLASH_BASE  FLASH_BASE
+
+/* FLASH结束地址 */
+#define GD32FLASH_END   (GD32FLASH_BASE | GD32FLASH_SIZE)
+
+/* FLASH页大小:2K */
+#define GD32FLASH_PAGE_SIZE (2048U)
+
+/* FLASH总页数 */
+#define GD32FLASH_PAGE_NUM  (GD32FLASH_SIZE / GD32FLASH_PAGE_SIZE)
+
+/// 导出函数声明 
+void FLASH_Init(void);
+uint32_t FLASH_Read(uint32_t Address, void *Buffer, uint32_t Size);
+uint32_t FLASH_Write(uint32_t Address, const uint16_t *Buffer, uint32_t NumToWrite);
+int FLASH_ErasePage(uint32_t PageAddress, uint32_t NbPages);
+uint32_t FLASH_WriteNotErase(uint32_t Address, const uint16_t *Buffer, uint32_t NumToWrite);
+
+
 #endif
 
 

+ 4 - 4
bootloader/HW/Include/ota_message.h

@@ -1,13 +1,13 @@
 #ifndef OTA_MESSAGE_H
 #define OTA_MESSAGE_H
 #include "stdint.h"
-
+#include "fmc.h"
 #define OTA_EVENT_BLOCK 1
-
+#define OTA_EVENT_START_ADDR 0x08069000
 
 typedef struct _OTA_MESSAGE_INFO{
-	uint32_t otaflag;													//用于记录是否要从w25q32中读取         
-	uint32_t XmodemByte;                      //用于记录一共写入了多少字节的数据
+	uint32_t otaflag;						//用于记录是否要读取         
+	uint32_t XmodemByte;                    //用于记录一共写入了多少字节的数据
 }OTA_MESSAGE;
 
 

+ 13 - 14
bootloader/HW/Source/boot.c

@@ -11,27 +11,26 @@
 load_a load_A;       
 
 //进入bootloader更新
-void BootLoader_Brance(uint32_t app_byte)
+void BootLoader_Brance(uint32_t download_byte)
 {
 	GD32_EraseFlash(GD32_A_START_PAGE,GD32_A_PAGE_NUM);//擦除A区原有程序
-	for(uint8_t i=0;i<app_byte/1024;i++)
+	for(uint8_t i=0;i<download_byte/GD32_PAGE_SIZE;i++)
 	{
 		task_fwdgt_reload();
-		uint8_t app_programmer[1024];
-		memset(app_programmer,0,1024);
-		uint32_t addr=APP_PROGRAMMER_BLOCK*64*1024+i*1024;   //其在w25q32中的地址
-		W25Q32_Read(app_programmer,addr,1024);               
-		GD32_WriteFlash(GD32_A_SADDR+i*1024,(uint32_t *)&app_programmer,1024); //将读出的数据按页写入数据
+		uint8_t app_programmer[GD32_PAGE_SIZE];
+		memset(app_programmer,0,GD32_PAGE_SIZE);
+		FLASH_Read(GD32_D_SADDR,app_programmer,GD32_PAGE_SIZE);              
+		FLASH_Write(GD32_A_SADDR+i*GD32_PAGE_SIZE,(uint16_t *)&app_programmer,GD32_PAGE_SIZE/2);	//将读出的数据按页写入数据
 	}
 	//将不满1024数据单独写入
-	if(app_byte%1024!=0)
+	if(download_byte%GD32_PAGE_SIZE!=0)
 	{
-		uint32_t startAddress=(app_byte/1024)*1024;
-		uint8_t app_programmer[1024];
-		uint32_t addr=APP_PROGRAMMER_BLOCK*64*1024+(app_byte/1024)*1024;   														//其在w25q32中的地址
-		memset(app_programmer,0,1024);
-		W25Q32_Read(app_programmer,addr,app_byte%1024);																					
-		GD32_WriteFlash(GD32_A_SADDR+(app_byte/1024)*1024,(uint32_t *)&app_programmer,app_byte%1024);
+		uint32_t startAddress=(download_byte/GD32_PAGE_SIZE)*GD32_PAGE_SIZE;
+		uint8_t app_programmer[GD32_PAGE_SIZE];
+		uint32_t addr=GD32_D_SADDR+startAddress;   														//其在w25q32中的地址
+		memset(app_programmer,0,GD32_PAGE_SIZE);
+		FLASH_Read(addr,app_programmer,GD32_PAGE_SIZE);              
+		FLASH_Write(GD32_A_SADDR+startAddress,(uint16_t *)&app_programmer,GD32_PAGE_SIZE/2);	//将读出的数据按页写入数据
 	}
 	clear_ota_message_config_block();  
 	LOAD_A(GD32_A_SADDR);

+ 213 - 5
bootloader/HW/Source/fmc.c

@@ -2,14 +2,14 @@
 #include "fmc.h"
 
 
-/*-------------------------------------------------*/
-/*函数名:擦除FLASH     一个扇区1KB,共3*1024个扇区 */
-/*参  数:start:擦除起始页   num:擦几个页    */
-/*返回值:无                                       */
+/*--------------------------------------------------*/
+/*函数名:按页擦除FLASH     							 */
+/*参  数:start:擦除起始页   num:擦几个页    		   */
+/*返回值:无                                         */
 /*
 flash结构:
 0x08000000~0x0807FFFF   bank0(2KB一页,0~255页,共256页)共512KB
-0x08080000~0x082FFFFF   bank1(4KB一页,256~895页,共640页)共2.5MB
+0x08080000~0x082FFFFF   bank1(4KB一页,256~895页,共640页)共2.5MB	这个分区连续读内存需要有延时
 */
 /*-------------------------------------------------*/
 void GD32_EraseFlash(uint16_t start, uint16_t num)
@@ -17,6 +17,15 @@ void GD32_EraseFlash(uint16_t start, uint16_t num)
 	uint16_t i;        //用于for循环
 	uint16_t j = 0;        
 
+	if ((start <= 896) && (start + num) > 896)
+	{
+		num = 896 - start;
+	}
+	else if (start > 896)
+	{
+		return;
+	}
+
 	fmc_unlock();                                                       //解锁
 	if ((start < 256) && ((start + num) < 256))
 	{
@@ -67,3 +76,202 @@ void GD32_WriteFlash(uint32_t saddr, uint32_t *wdata, uint32_t wnum)
 	fmc_lock();                            //上锁
 }
 
+
+// /**
+//  * @brief 读取flash数据
+//  * 
+//  * @param rbuff 接收缓冲区
+//  * @param addr 起始地址,32位地址
+//  * @param datalen 数据长度,多少个字节
+//  */
+// void GD32_ReadFlash(uint8_t *rbuff, uint32_t addr, uint32_t datalen)
+// {
+// 	memcpy(rbuff,addr,datalen);
+// }
+
+
+__align(4) static uint16_t FlashBuffer[GD32FLASH_PAGE_SIZE >> 1];
+
+/// 初始化FLASH
+void FLASH_Init(void)
+{
+    fmc_unlock();
+    fmc_flag_clear(FMC_FLAG_BANK0_END);
+    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
+    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
+    fmc_lock();
+}
+
+/**
+ * 读FLASH
+ * @param  Address 地址
+ * @param  Buffer  存放读取的数据
+ * @param  Size    要读取的数据大小,单位字节
+ * @return         读出成功的字节数
+ */
+uint32_t FLASH_Read(uint32_t Address, void *Buffer, uint32_t Size)
+{
+    uint32_t nread = Size;
+    uint8_t* d = (uint8_t *)Buffer;
+    const uint8_t* s = (const uint8_t *)Address;
+
+    if (!Buffer || Address < GD32FLASH_BASE || Address >= GD32FLASH_END)
+        return 0;
+
+    while (nread >= sizeof(uint32_t) && (((uint32_t)s) <= (GD32FLASH_END - 4)))
+    {
+        *(volatile uint32_t *)d = *(volatile uint32_t *)s;
+        d += sizeof(uint32_t);
+        s += sizeof(uint32_t);
+        nread -= sizeof(uint32_t);
+    }
+
+    while (nread && (((uint32_t)s) < GD32FLASH_END))
+    {
+        *d++ = *s++;
+        nread--;
+    }
+
+    return Size - nread;
+}
+
+/**
+ * 写FLASH
+ * @param  Address    写入起始地址,!!!要求2字节对齐!!!
+ * @param  Buffer     待写入的数据,!!!要求2字节对齐!!!
+ * @param  NumToWrite 要写入的数据量,单位:半字,!!!要求2字节对齐!!!
+ * @return            实际写入的数据量,单位:字节
+ */
+uint32_t FLASH_Write(uint32_t Address, const uint16_t *Buffer, uint32_t NumToWrite)
+{
+    uint32_t i = 0;
+    uint32_t pagepos = 0;         // 页位置
+    uint32_t pageoff = 0;         // 页内偏移地址
+    uint32_t pagefre = 0;         // 页内空余空间
+    uint32_t offset = 0;          // Address在FLASH中的偏移
+    uint32_t nwrite = NumToWrite; // 记录剩余要写入的数据量
+    const uint16_t *pBuffer = (const uint16_t *)Buffer;
+
+    /* 非法地址 */
+    if (Address < GD32FLASH_BASE || Address > (GD32FLASH_END - 2) || NumToWrite == 0 || pBuffer == NULL)
+        return 0;
+
+    /* 解锁FLASH */
+    fmc_unlock();
+
+    /* 计算偏移地址 */
+    offset = Address - GD32FLASH_BASE;
+
+    /* 计算当前页位置 */
+    pagepos = offset / GD32FLASH_PAGE_SIZE;
+
+    /* 计算要写数据的起始地址在当前页内的偏移地址 */
+    pageoff = ((offset % GD32FLASH_PAGE_SIZE) >> 1);
+
+    /* 计算当前页内空余空间 */
+    pagefre = ((GD32FLASH_PAGE_SIZE >> 1) - pageoff);
+
+    /* 要写入的数据量低于当前页空余量 */
+    if (nwrite <= pagefre)
+        pagefre = nwrite;
+
+    while (nwrite != 0)
+    {
+        /* 检查是否超页 */
+        if (pagepos >= GD32FLASH_PAGE_NUM)
+            break;
+
+        /* 读取一页 */
+        FLASH_Read(GD32FLASH_BASE + pagepos * GD32FLASH_PAGE_SIZE, FlashBuffer, GD32FLASH_PAGE_SIZE);
+
+        /* 检查是否需要擦除 */
+        for (i = 0; i < pagefre; i++)
+        {
+            if (*(FlashBuffer + pageoff + i) != 0xFFFF) /* FLASH擦出后默认内容全为0xFF */
+                break;
+        }
+
+        if (i < pagefre)
+        {
+            uint32_t count = 0;
+            uint32_t index = 0;
+
+            if(FLASH_ErasePage(GD32FLASH_BASE + pagepos * GD32FLASH_PAGE_SIZE, 1) < 0)
+                break;
+
+            /* 复制到缓存 */
+            for (index = 0; index < pagefre; index++)
+            {
+                *(FlashBuffer + pageoff + index) = *(pBuffer + index);
+            }
+
+            /* 写回FLASH */
+            count = FLASH_WriteNotErase(GD32FLASH_BASE + pagepos * GD32FLASH_PAGE_SIZE, FlashBuffer, GD32FLASH_PAGE_SIZE >> 1);
+            if (count != (GD32FLASH_PAGE_SIZE >> 1))
+            {
+                nwrite -= count;
+                break;
+            }
+        }
+        else
+        {
+            /* 无需擦除,直接写 */
+            uint32_t count = FLASH_WriteNotErase(Address, pBuffer, pagefre);
+            if (count != pagefre)
+            {
+                nwrite -= count;
+                break;
+            }
+        }
+
+        pBuffer += pagefre;         /* 读取地址递增         */
+        Address += (pagefre << 1);  /* 写入地址递增         */
+        nwrite -= pagefre;          /* 更新剩余未写入数据量 */
+
+        pagepos++;     /* 下一页           */
+        pageoff = 0;   /* 页内偏移地址置零  */
+
+        /* 根据剩余量计算下次写入数据量 */
+        pagefre = nwrite >= (GD32FLASH_PAGE_SIZE >> 1) ? (GD32FLASH_PAGE_SIZE >> 1) : nwrite;
+    }
+
+    /* 加锁FLASH */
+    fmc_lock();
+
+    return ((NumToWrite - nwrite) << 1);
+}
+
+uint32_t FLASH_WriteNotErase(uint32_t Address, const uint16_t *Buffer, uint32_t NumToWrite)
+{
+    uint32_t nwrite = NumToWrite;
+    uint32_t addrmax = GD32FLASH_END - 2;
+
+    while (nwrite)
+    {
+        if (Address > addrmax)
+            break;
+
+        fmc_halfword_program(Address, *Buffer);
+        
+        if ((*(__IO uint16_t*) Address) != *Buffer)
+            break;
+
+        nwrite--;
+        Buffer++;
+        Address += 2;
+    }
+    return (NumToWrite - nwrite);
+}
+
+int FLASH_ErasePage(uint32_t PageAddress, uint32_t NbPages)
+{
+    while(NbPages--)
+    {
+        if(fmc_page_erase(PageAddress) != FMC_READY)
+        {
+            return -1;
+        }
+        PageAddress += GD32FLASH_PAGE_SIZE;
+    }
+    return 0;
+}

+ 3 - 2
bootloader/HW/Source/ota_message.c

@@ -39,7 +39,8 @@ int save_ota_message_config_params(OTA_MESSAGE *params)
 int load_ota_message_config_params()
 {
 		memset(&ota_message, 0, sizeof(OTA_MESSAGE));//清空原先数据
-		W25Q32_Read((uint8_t *)&ota_message, OTA_EVENT_BLOCK*64*1024, sizeof(OTA_MESSAGE)); //从W25Q32中读取结构体数据
+		// W25Q32_Read((uint8_t *)&ota_message, OTA_EVENT_BLOCK*64*1024, sizeof(OTA_MESSAGE)); //从W25Q32中读取结构体数据
+		FLASH_Read(OTA_EVENT_START_ADDR,&ota_message,sizeof(OTA_MESSAGE));
 		uint32_t *ptr=(uint32_t *)&ota_message;           
 		if(*ptr == 1U)
 		{
@@ -60,5 +61,5 @@ OTA_MESSAGE *get_config_params()
  */
 void clear_ota_message_config_block(void)
 {
-	W25Q32_Erase64K(OTA_EVENT_BLOCK);//擦除一块区域的大小
+	GD32_EraseFlash(210,1);//擦除一块区域的大小
 }

+ 2 - 0
bootloader/OBJ/ExtDll.iex

@@ -0,0 +1,2 @@
+[EXTDLL]
+Count=0

BIN
bootloader/OBJ/boot.crf


+ 25 - 8
bootloader/OBJ/boot.d

@@ -1,24 +1,41 @@
 ..\obj\boot.o: ..\HW\Source\boot.c
 ..\obj\boot.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\boot.o: ..\CMSIS\Include\core_cm3.h
-..\obj\boot.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\boot.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\boot.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\boot.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\boot.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\boot.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\boot.o: ..\USER\RTE_Components.h
+..\obj\boot.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\boot.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\boot.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\boot.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\boot.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\boot.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\boot.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\boot.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\boot.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\boot.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\boot.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\boot.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\boot.o: ..\HW\Include\boot.h
 ..\obj\boot.o: ..\USER\main.h
 ..\obj\boot.o: ..\HW\Include\delay.h
 ..\obj\boot.o: ..\HW\Include\fmc.h
 ..\obj\boot.o: ..\HW\Include\w25q32.h
-..\obj\boot.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\boot.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdio.h
 ..\obj\boot.o: ..\HW\Include\ota_message.h

BIN
bootloader/OBJ/bootloader.axf


+ 40 - 22
bootloader/OBJ/bootloader.build_log.htm

@@ -3,45 +3,63 @@
 <pre>
 <h1>µVision Build Log</h1>
 <h2>Tool Versions:</h2>
-IDE-Version: ¦ÌVision V5.29.0.0
-Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
-License Information: s yf, 11, LIC=WHYH9-4R8F5-WFPI7-E0KRQ-DXARV-W9U12
+IDE-Version: ¦ÌVision V5.36.0.0
+Copyright (C) 2021 ARM Ltd and ARM Germany GmbH. All rights reserved.
+License Information: 1 1, 1, LIC=D0D7S-LUDD6-UHI8H-WGPSX-UUXXX-1T4U9
  
 Tool Versions:
-Toolchain:       MDK-ARM Plus  Version: 5.29.0.0
-Toolchain Path:  D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin
-C Compiler:      Armcc.exe V5.06 update 6 (build 750)
-Assembler:       Armasm.exe V5.06 update 6 (build 750)
-Linker/Locator:  ArmLink.exe V5.06 update 6 (build 750)
-Library Manager: ArmAr.exe V5.06 update 6 (build 750)
-Hex Converter:   FromElf.exe V5.06 update 6 (build 750)
-CPU DLL:         SARMCM3.DLL V5.29.0.0
+Toolchain:       MDK-ARM Plus  Version: 5.36.0.0
+Toolchain Path:  D:\software\MDK5\ARM\ARMCC\Bin
+C Compiler:      Armcc.exe V5.06 update 7 (build 960)
+Assembler:       Armasm.exe V5.06 update 7 (build 960)
+Linker/Locator:  ArmLink.exe V5.06 update 7 (build 960)
+Library Manager: ArmAr.exe V5.06 update 7 (build 960)
+Hex Converter:   FromElf.exe V5.06 update 7 (build 960)
+CPU DLL:         SARMCM3.DLL V5.36.0.0
 Dialog DLL:      DCM.DLL V1.17.3.0
-Target DLL:      Segger\JL2CM3.dll V2.99.36.0
-Dialog DLL:      TCM.DLL V1.36.5.0
+Target DLL:      Segger\JL2CM3.dll V2.99.40.0
+Dialog DLL:      TCM.DLL V1.53.0.0
  
 <h2>Project:</h2>
-D:\Project\dtu_gateway\bootloader\USER\bootloader.uvprojx
-Project File Date:  08/11/2023
+D:\project\dtu_gateway\bootloader\USER\bootloader.uvprojx
+Project File Date:  10/27/2023
 
 <h2>Output:</h2>
-*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin'
+*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\software\MDK5\ARM\ARMCC\Bin'
 Build target 'bootloader'
-"..\OBJ\bootloader.axf" - 0 Error(s), 0 Warning(s).
+compiling main.c...
+main.h(35): warning:  #1295-D: Deprecated declaration task_fwdgt_reload - give arg types
+  void task_fwdgt_reload();
+..\HW\Include\ota_message.h(14): warning:  #1295-D: Deprecated declaration load_ota_message_config_params - give arg types
+  extern int load_ota_message_config_params();
+..\HW\Include\ota_message.h(16): warning:  #1295-D: Deprecated declaration get_config_params - give arg types
+  extern OTA_MESSAGE *get_config_params();
+main.c(28): warning:  #167-D: argument of type "OTA_MESSAGE *" is incompatible with parameter of type "const uint16_t *"
+  	FLASH_Write(0x08069000,&ota_message,sizeof(OTA_MESSAGE)/2);
+main.c(15): warning:  #550-D: variable "i"  was set but never used
+  	uint32_t i = 0;
+main.c(20): warning:  #177-D: variable "state"  was declared but never referenced
+  	fmc_state_enum state;
+main.c(69): warning:  #1-D: last line of file ends without a newline
+  }
+main.c: 7 warnings, 0 errors
+linking...
+Program Size: Code=3416 RO-data=336 RW-data=28 ZI-data=6148  
+FromELF: creating hex file...
+"..\OBJ\bootloader.axf" - 0 Error(s), 7 Warning(s).
 
 <h2>Software Packages used:</h2>
 
 Package Vendor: GigaDevice
-                https://gd32mcu.com/data/documents/pack/GigaDevice.GD32F10x_DFP.2.0.3.pack
-                GigaDevice.GD32F10x_DFP.2.0.3
+                https://gd32mcu.com/data/documents/pack/GigaDevice.GD32F10x_DFP.2.1.0.pack
+                GigaDevice.GD32F10x_DFP.2.1.0
                 GigaDevice GD32F10x Series Device Support and Examples
 
 <h2>Collection of Component include folders:</h2>
-  .\RTE\_bootloader
-  D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include
+  D:\software\MDK5\Pack\GigaDevice\GD32F10x_DFP\2.1.0\Device\Include
 
 <h2>Collection of Component Files used:</h2>
-Build Time Elapsed:  00:00:00
+Build Time Elapsed:  00:00:01
 </pre>
 </body>
 </html>

+ 175 - 221
bootloader/OBJ/bootloader.htm

@@ -3,11 +3,11 @@
 <title>Static Call Graph - [..\OBJ\bootloader.axf]</title></head>
 <body><HR>
 <H1>Static Call Graph for image ..\OBJ\bootloader.axf</H1><HR>
-<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Fri Aug 11 14:43:15 2023
+<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060960: Last Updated: Fri Oct 27 20:23:53 2023
 <BR><P>
-<H3>Maximum Stack Usage =       1088 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
+<H3>Maximum Stack Usage =       2172 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
 Call chain for Maximum Stack Depth:</H3>
-main &rArr; BootLoader_Brance &rArr; clear_ota_message_config_block &rArr; W25Q32_Erase64K &rArr; W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
+main &rArr; BootLoader_Brance &rArr; FLASH_Write &rArr; FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
 <P>
 <H3>
 Mutually Recursive functions
@@ -98,7 +98,7 @@ Global Symbols
 <P><STRONG><a name="[48]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
 <BR>[Address Reference Count : 1]<UL><LI> startup_gd32f10x_xd.o(.text)
 </UL>
-<P><STRONG><a name="[7f]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
+<P><STRONG><a name="[7a]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
 
 <P><STRONG><a name="[49]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
 <BR><BR>[Calls]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
@@ -108,17 +108,19 @@ Global Symbols
 <BR><BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
 </UL>
 
-<P><STRONG><a name="[80]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
+<P><STRONG><a name="[7b]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
 
-<P><STRONG><a name="[81]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
+<P><STRONG><a name="[7c]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
 
-<P><STRONG><a name="[82]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
+<P><STRONG><a name="[7d]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
 
-<P><STRONG><a name="[83]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
+<P><STRONG><a name="[7e]"></a>__rt_lib_shutdown_fini</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry12b.o(.ARM.Collect$$$$0000000E))
 
-<P><STRONG><a name="[84]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
+<P><STRONG><a name="[7f]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000F))
 
-<P><STRONG><a name="[5f]"></a>MSR_SP</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, boot.o(.emb_text))
+<P><STRONG><a name="[80]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$00000011))
+
+<P><STRONG><a name="[63]"></a>MSR_SP</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, boot.o(.emb_text))
 <BR><BR>[Called By]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;LOAD_A
 </UL>
 
@@ -314,9 +316,9 @@ Global Symbols
 <LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
 </UL>
 
-<P><STRONG><a name="[85]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<P><STRONG><a name="[81]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
 
-<P><STRONG><a name="[86]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<P><STRONG><a name="[82]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
 
 <P><STRONG><a name="[4b]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
 <BR><BR>[Calls]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
@@ -326,7 +328,7 @@ Global Symbols
 <BR><BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
 </UL>
 
-<P><STRONG><a name="[87]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<P><STRONG><a name="[83]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
 
 <P><STRONG><a name="[4d]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
 <BR><BR>[Calls]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
@@ -338,16 +340,16 @@ Global Symbols
 <BR>[Called By]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
 </UL>
 
-<P><STRONG><a name="[88]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
+<P><STRONG><a name="[84]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
 
-<P><STRONG><a name="[4f]"></a>BootLoader_Brance</STRONG> (Thumb, 154 bytes, Stack size 1040 bytes, boot.o(i.BootLoader_Brance))
-<BR><BR>[Stack]<UL><LI>Max Depth = 1088<LI>Call Chain = BootLoader_Brance &rArr; clear_ota_message_config_block &rArr; W25Q32_Erase64K &rArr; W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
+<P><STRONG><a name="[4f]"></a>BootLoader_Brance</STRONG> (Thumb, 136 bytes, Stack size 2064 bytes, boot.o(i.BootLoader_Brance))
+<BR><BR>[Stack]<UL><LI>Max Depth = 2172<LI>Call Chain = BootLoader_Brance &rArr; FLASH_Write &rArr; FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
 </UL>
 <BR>[Calls]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;task_fwdgt_reload
 <LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clear_ota_message_config_block
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
-<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_WriteFlash
 <LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Read
 <LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;LOAD_A
 <LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
 </UL>
@@ -376,24 +378,65 @@ Global Symbols
 <BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[50]"></a>GD32_EraseFlash</STRONG> (Thumb, 48 bytes, Stack size 16 bytes, fmc.o(i.GD32_EraseFlash))
-<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = GD32_EraseFlash &rArr; fmc_page_erase &rArr; fmc_bank1_ready_wait
+<P><STRONG><a name="[5b]"></a>Delay_Ms</STRONG> (Thumb, 26 bytes, Stack size 4 bytes, delay.o(i.Delay_Ms))
+<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = Delay_Ms
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_unlock
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_lock
+<BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay_Us
 </UL>
-<BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
+<BR>[Called By]<UL><LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;my_test
+</UL>
+
+<P><STRONG><a name="[5c]"></a>Delay_Us</STRONG> (Thumb, 58 bytes, Stack size 0 bytes, delay.o(i.Delay_Us))
+<BR><BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay_Ms
+</UL>
+
+<P><STRONG><a name="[5d]"></a>FLASH_ErasePage</STRONG> (Thumb, 38 bytes, Stack size 16 bytes, fmc.o(i.FLASH_ErasePage))
+<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = FLASH_ErasePage &rArr; fmc_page_erase &rArr; fmc_bank1_ready_wait
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
 </UL>
 
-<P><STRONG><a name="[54]"></a>GD32_WriteFlash</STRONG> (Thumb, 38 bytes, Stack size 16 bytes, fmc.o(i.GD32_WriteFlash))
-<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = GD32_WriteFlash &rArr; fmc_word_program &rArr; fmc_bank1_ready_wait
+<P><STRONG><a name="[53]"></a>FLASH_Read</STRONG> (Thumb, 80 bytes, Stack size 16 bytes, fmc.o(i.FLASH_Read))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = FLASH_Read
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_word_program
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_unlock
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_lock
+<BR>[Called By]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;load_ota_message_config_params
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
+</UL>
+
+<P><STRONG><a name="[54]"></a>FLASH_Write</STRONG> (Thumb, 326 bytes, Stack size 64 bytes, fmc.o(i.FLASH_Write))
+<BR><BR>[Stack]<UL><LI>Max Depth = 108<LI>Call Chain = FLASH_Write &rArr; FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_unlock
+<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_lock
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_WriteNotErase
+<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_ErasePage
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Read
 </UL>
 <BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;my_test
+</UL>
+
+<P><STRONG><a name="[60]"></a>FLASH_WriteNotErase</STRONG> (Thumb, 60 bytes, Stack size 24 bytes, fmc.o(i.FLASH_WriteNotErase))
+<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
+</UL>
+<BR>[Calls]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_halfword_program
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
+</UL>
+
+<P><STRONG><a name="[50]"></a>GD32_EraseFlash</STRONG> (Thumb, 208 bytes, Stack size 24 bytes, fmc.o(i.GD32_EraseFlash))
+<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = GD32_EraseFlash &rArr; fmc_page_erase &rArr; fmc_bank1_ready_wait
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_unlock
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_lock
+</UL>
+<BR>[Called By]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clear_ota_message_config_block
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;my_test
 </UL>
 
 <P><STRONG><a name="[2]"></a>HardFault_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_it.o(i.HardFault_Handler))
@@ -403,7 +446,7 @@ Global Symbols
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = LOAD_A &rArr; BootLoader_Clear &rArr; gpio_deinit
 </UL>
 <BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Clear
-<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MSR_SP
+<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MSR_SP
 </UL>
 <BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
 <LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@@ -418,46 +461,16 @@ Global Symbols
 <P><STRONG><a name="[8]"></a>PendSV_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, gd32f10x_it.o(i.PendSV_Handler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_gd32f10x_xd.o(RESET)
 </UL>
-<P><STRONG><a name="[60]"></a>SPI0_Init</STRONG> (Thumb, 94 bytes, Stack size 32 bytes, spi.o(i.SPI0_Init))
+<P><STRONG><a name="[64]"></a>SPI0_Init</STRONG> (Thumb, 94 bytes, Stack size 32 bytes, spi.o(i.SPI0_Init))
 <BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = SPI0_Init &rArr; gpio_init
 </UL>
-<BR>[Calls]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_init
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
-<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_enable
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_clock_enable
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_init
-</UL>
-<BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
-</UL>
-
-<P><STRONG><a name="[66]"></a>SPI0_Read</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, spi.o(i.SPI0_Read))
-<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = SPI0_Read &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
+<BR>[Calls]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_init
+<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_enable
+<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_clock_enable
+<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_init
 </UL>
-<BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
-</UL>
-
-<P><STRONG><a name="[67]"></a>SPI0_ReadWriteByte</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, spi.o(i.SPI0_ReadWriteByte))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_flag_get
-<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_data_transmit
-<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_data_receive
-</UL>
-<BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Enable
-<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Write
-<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Read
-</UL>
-
-<P><STRONG><a name="[6b]"></a>SPI0_Write</STRONG> (Thumb, 26 bytes, Stack size 16 bytes, spi.o(i.SPI0_Write))
-<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = SPI0_Write &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
-</UL>
-<BR>[Called By]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
+<BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
 </UL>
 
 <P><STRONG><a name="[6]"></a>SVC_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, gd32f10x_it.o(i.SVC_Handler))
@@ -469,251 +482,192 @@ Global Symbols
 <P><STRONG><a name="[47]"></a>SystemInit</STRONG> (Thumb, 196 bytes, Stack size 8 bytes, system_gd32f10x.o(i.SystemInit))
 <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = SystemInit &rArr; system_clock_config
 </UL>
-<BR>[Calls]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;nvic_vector_table_set
-<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_config
+<BR>[Calls]<UL><LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;nvic_vector_table_set
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_config
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_gd32f10x_xd.o(.text)
 </UL>
 <P><STRONG><a name="[5]"></a>UsageFault_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_it.o(i.UsageFault_Handler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_gd32f10x_xd.o(RESET)
 </UL>
-<P><STRONG><a name="[6e]"></a>W25Q32_Enable</STRONG> (Thumb, 30 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_Enable))
-<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
-<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_reset
-<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
-</UL>
-<BR>[Called By]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
-</UL>
-
-<P><STRONG><a name="[72]"></a>W25Q32_Erase64K</STRONG> (Thumb, 70 bytes, Stack size 16 bytes, w25q32.o(i.W25Q32_Erase64K))
-<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = W25Q32_Erase64K &rArr; W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
-<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_reset
-<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Enable
-<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Write
-</UL>
-<BR>[Called By]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clear_ota_message_config_block
-</UL>
-
-<P><STRONG><a name="[73]"></a>W25Q32_Init</STRONG> (Thumb, 36 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_Init))
+<P><STRONG><a name="[6c]"></a>W25Q32_Init</STRONG> (Thumb, 36 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_Init))
 <BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = W25Q32_Init &rArr; SPI0_Init &rArr; gpio_init
 </UL>
-<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_clock_enable
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_init
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
+<BR>[Calls]<UL><LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
+<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_clock_enable
+<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_init
+<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 <BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[53]"></a>W25Q32_Read</STRONG> (Thumb, 70 bytes, Stack size 24 bytes, w25q32.o(i.W25Q32_Read))
-<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = W25Q32_Read &rArr; SPI0_Write &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
-<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_reset
-<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Write
-<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Read
-</UL>
-<BR>[Called By]<UL><LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;load_ota_message_config_params
-<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
-</UL>
+<P><STRONG><a name="[85]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
 
-<P><STRONG><a name="[6f]"></a>W25Q32_WaitBusy</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, w25q32.o(i.W25Q32_WaitBusy))
-<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
-</UL>
-<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_set
-<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_bit_reset
-<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
-</UL>
-<BR>[Called By]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
-<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Enable
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
-</UL>
-
-<P><STRONG><a name="[89]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
+<P><STRONG><a name="[86]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
 
-<P><STRONG><a name="[8a]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
+<P><STRONG><a name="[87]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
 
-<P><STRONG><a name="[8b]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
-
-<P><STRONG><a name="[55]"></a>clear_ota_message_config_block</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, ota_message.o(i.clear_ota_message_config_block))
-<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = clear_ota_message_config_block &rArr; W25Q32_Erase64K &rArr; W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
+<P><STRONG><a name="[55]"></a>clear_ota_message_config_block</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, ota_message.o(i.clear_ota_message_config_block))
+<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = clear_ota_message_config_block &rArr; GD32_EraseFlash &rArr; fmc_page_erase &rArr; fmc_bank1_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
+<BR>[Calls]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
 </UL>
 <BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
 </UL>
 
-<P><STRONG><a name="[74]"></a>fmc_bank0_ready_wait</STRONG> (Thumb, 34 bytes, Stack size 4 bytes, gd32f10x_fmc.o(i.fmc_bank0_ready_wait))
+<P><STRONG><a name="[6e]"></a>fmc_bank0_ready_wait</STRONG> (Thumb, 34 bytes, Stack size 4 bytes, gd32f10x_fmc.o(i.fmc_bank0_ready_wait))
 <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = fmc_bank0_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_state_get
+<BR>[Calls]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_state_get
 </UL>
-<BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_word_program
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+<BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_halfword_program
 </UL>
 
-<P><STRONG><a name="[75]"></a>fmc_bank0_state_get</STRONG> (Thumb, 44 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_bank0_state_get))
-<BR><BR>[Called By]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
+<P><STRONG><a name="[6f]"></a>fmc_bank0_state_get</STRONG> (Thumb, 44 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_bank0_state_get))
+<BR><BR>[Called By]<UL><LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
 </UL>
 
-<P><STRONG><a name="[76]"></a>fmc_bank1_ready_wait</STRONG> (Thumb, 34 bytes, Stack size 4 bytes, gd32f10x_fmc.o(i.fmc_bank1_ready_wait))
+<P><STRONG><a name="[70]"></a>fmc_bank1_ready_wait</STRONG> (Thumb, 34 bytes, Stack size 4 bytes, gd32f10x_fmc.o(i.fmc_bank1_ready_wait))
 <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = fmc_bank1_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_state_get
+<BR>[Calls]<UL><LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_state_get
 </UL>
-<BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_word_program
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+<BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_page_erase
+<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_halfword_program
 </UL>
 
-<P><STRONG><a name="[77]"></a>fmc_bank1_state_get</STRONG> (Thumb, 44 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_bank1_state_get))
-<BR><BR>[Called By]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
+<P><STRONG><a name="[71]"></a>fmc_bank1_state_get</STRONG> (Thumb, 44 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_bank1_state_get))
+<BR><BR>[Called By]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
 </UL>
 
-<P><STRONG><a name="[5d]"></a>fmc_lock</STRONG> (Thumb, 34 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_lock))
-<BR><BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_WriteFlash
-<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<P><STRONG><a name="[62]"></a>fmc_halfword_program</STRONG> (Thumb, 178 bytes, Stack size 16 bytes, gd32f10x_fmc.o(i.fmc_halfword_program))
+<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = fmc_halfword_program &rArr; fmc_bank1_ready_wait
 </UL>
-
-<P><STRONG><a name="[5c]"></a>fmc_page_erase</STRONG> (Thumb, 222 bytes, Stack size 12 bytes, gd32f10x_fmc.o(i.fmc_page_erase))
-<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = fmc_page_erase &rArr; fmc_bank1_ready_wait
+<BR>[Calls]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
-<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
-</UL>
-<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_WriteNotErase
 </UL>
 
-<P><STRONG><a name="[5b]"></a>fmc_unlock</STRONG> (Thumb, 52 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_unlock))
-<BR><BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_WriteFlash
-<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<P><STRONG><a name="[61]"></a>fmc_lock</STRONG> (Thumb, 34 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_lock))
+<BR><BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
 </UL>
 
-<P><STRONG><a name="[5e]"></a>fmc_word_program</STRONG> (Thumb, 178 bytes, Stack size 16 bytes, gd32f10x_fmc.o(i.fmc_word_program))
-<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = fmc_word_program &rArr; fmc_bank1_ready_wait
+<P><STRONG><a name="[5e]"></a>fmc_page_erase</STRONG> (Thumb, 222 bytes, Stack size 12 bytes, gd32f10x_fmc.o(i.fmc_page_erase))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = fmc_page_erase &rArr; fmc_bank1_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
-<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
+<BR>[Calls]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank1_ready_wait
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fmc_bank0_ready_wait
 </UL>
-<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_WriteFlash
+<BR>[Called By]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_ErasePage
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
 </UL>
 
-<P><STRONG><a name="[7e]"></a>fwdgt_counter_reload</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_counter_reload))
-<BR><BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;task_fwdgt_reload
+<P><STRONG><a name="[5f]"></a>fmc_unlock</STRONG> (Thumb, 52 bytes, Stack size 0 bytes, gd32f10x_fmc.o(i.fmc_unlock))
+<BR><BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
 </UL>
 
-<P><STRONG><a name="[7d]"></a>fwdgt_write_enable</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_write_enable))
+<P><STRONG><a name="[79]"></a>fwdgt_counter_reload</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_counter_reload))
 <BR><BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;task_fwdgt_reload
 </UL>
 
-<P><STRONG><a name="[7b]"></a>get_config_params</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ota_message.o(i.get_config_params))
-<BR><BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<P><STRONG><a name="[78]"></a>fwdgt_write_enable</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_fwdgt.o(i.fwdgt_write_enable))
+<BR><BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;task_fwdgt_reload
 </UL>
 
-<P><STRONG><a name="[70]"></a>gpio_bit_reset</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_reset))
-<BR><BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
-<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Enable
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
+<P><STRONG><a name="[76]"></a>get_config_params</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ota_message.o(i.get_config_params))
+<BR><BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[71]"></a>gpio_bit_set</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_set))
-<BR><BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_WaitBusy
-<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
-<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Erase64K
-<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Enable
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
+<P><STRONG><a name="[6d]"></a>gpio_bit_set</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_gpio.o(i.gpio_bit_set))
+<BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
 </UL>
 
 <P><STRONG><a name="[58]"></a>gpio_deinit</STRONG> (Thumb, 186 bytes, Stack size 8 bytes, gd32f10x_gpio.o(i.gpio_deinit))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = gpio_deinit
 </UL>
-<BR>[Calls]<UL><LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_enable
-<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_disable
+<BR>[Calls]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_enable
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_disable
 </UL>
 <BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Clear
 </UL>
 
-<P><STRONG><a name="[62]"></a>gpio_init</STRONG> (Thumb, 172 bytes, Stack size 20 bytes, gd32f10x_gpio.o(i.gpio_init))
+<P><STRONG><a name="[66]"></a>gpio_init</STRONG> (Thumb, 172 bytes, Stack size 20 bytes, gd32f10x_gpio.o(i.gpio_init))
 <BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = gpio_init
 </UL>
-<BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
+<BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
+<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 
-<P><STRONG><a name="[7a]"></a>load_ota_message_config_params</STRONG> (Thumb, 36 bytes, Stack size 8 bytes, ota_message.o(i.load_ota_message_config_params))
-<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = load_ota_message_config_params &rArr; W25Q32_Read &rArr; SPI0_Write &rArr; SPI0_ReadWriteByte
+<P><STRONG><a name="[74]"></a>load_ota_message_config_params</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, ota_message.o(i.load_ota_message_config_params))
+<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = load_ota_message_config_params &rArr; FLASH_Read
 </UL>
-<BR>[Calls]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Read
+<BR>[Calls]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Read
 </UL>
 <BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[46]"></a>main</STRONG> (Thumb, 42 bytes, Stack size 0 bytes, main.o(i.main))
-<BR><BR>[Stack]<UL><LI>Max Depth = 1088<LI>Call Chain = main &rArr; BootLoader_Brance &rArr; clear_ota_message_config_block &rArr; W25Q32_Erase64K &rArr; W25Q32_Enable &rArr; W25Q32_WaitBusy &rArr; SPI0_ReadWriteByte
+<P><STRONG><a name="[46]"></a>main</STRONG> (Thumb, 46 bytes, Stack size 0 bytes, main.o(i.main))
+<BR><BR>[Stack]<UL><LI>Max Depth = 2172<LI>Call Chain = main &rArr; BootLoader_Brance &rArr; FLASH_Write &rArr; FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
 </UL>
-<BR>[Calls]<UL><LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;load_ota_message_config_params
-<LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_config_params
-<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
+<BR>[Calls]<UL><LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;load_ota_message_config_params
+<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_config_params
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
 <LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay_Init
 <LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;task_fwdgt_reload
 <LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;LOAD_A
 <LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;my_test
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
 </UL>
-<P><STRONG><a name="[6d]"></a>nvic_vector_table_set</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_misc.o(i.nvic_vector_table_set))
-<BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
+<P><STRONG><a name="[75]"></a>my_test</STRONG> (Thumb, 48 bytes, Stack size 8 bytes, main.o(i.my_test))
+<BR><BR>[Stack]<UL><LI>Max Depth = 116<LI>Call Chain = my_test &rArr; FLASH_Write &rArr; FLASH_WriteNotErase &rArr; fmc_halfword_program &rArr; fmc_bank1_ready_wait
 </UL>
-
-<P><STRONG><a name="[61]"></a>rcu_periph_clock_enable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_clock_enable))
-<BR><BR>[Called By]<UL><LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
+<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Delay_Ms
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GD32_EraseFlash
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;FLASH_Write
+</UL>
+<BR>[Called By]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[79]"></a>rcu_periph_reset_disable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_disable))
-<BR><BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_deinit
+<P><STRONG><a name="[6b]"></a>nvic_vector_table_set</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_misc.o(i.nvic_vector_table_set))
+<BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
 </UL>
 
-<P><STRONG><a name="[78]"></a>rcu_periph_reset_enable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_enable))
-<BR><BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_deinit
+<P><STRONG><a name="[65]"></a>rcu_periph_clock_enable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_clock_enable))
+<BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;W25Q32_Init
+<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 
-<P><STRONG><a name="[65]"></a>spi_enable</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_enable))
-<BR><BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
+<P><STRONG><a name="[73]"></a>rcu_periph_reset_disable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_disable))
+<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
+<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_deinit
 </UL>
 
-<P><STRONG><a name="[6a]"></a>spi_i2s_data_receive</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_data_receive))
-<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
+<P><STRONG><a name="[72]"></a>rcu_periph_reset_enable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, gd32f10x_rcu.o(i.rcu_periph_reset_enable))
+<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;spi_i2s_deinit
+<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_deinit
 </UL>
 
-<P><STRONG><a name="[69]"></a>spi_i2s_data_transmit</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_data_transmit))
-<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
+<P><STRONG><a name="[69]"></a>spi_enable</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_enable))
+<BR><BR>[Called By]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 
-<P><STRONG><a name="[63]"></a>spi_i2s_deinit</STRONG> (Thumb, 82 bytes, Stack size 8 bytes, gd32f10x_spi.o(i.spi_i2s_deinit))
+<P><STRONG><a name="[67]"></a>spi_i2s_deinit</STRONG> (Thumb, 82 bytes, Stack size 8 bytes, gd32f10x_spi.o(i.spi_i2s_deinit))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = spi_i2s_deinit
 </UL>
-<BR>[Calls]<UL><LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_enable
-<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_disable
+<BR>[Calls]<UL><LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_enable
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;rcu_periph_reset_disable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
-</UL>
-
-<P><STRONG><a name="[68]"></a>spi_i2s_flag_get</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_i2s_flag_get))
-<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_ReadWriteByte
+<BR>[Called By]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 
-<P><STRONG><a name="[64]"></a>spi_init</STRONG> (Thumb, 50 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_init))
-<BR><BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
+<P><STRONG><a name="[68]"></a>spi_init</STRONG> (Thumb, 50 bytes, Stack size 0 bytes, gd32f10x_spi.o(i.spi_init))
+<BR><BR>[Called By]<UL><LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SPI0_Init
 </UL>
 
 <P><STRONG><a name="[5a]"></a>systick_clksource_set</STRONG> (Thumb, 40 bytes, Stack size 0 bytes, gd32f10x_misc.o(i.systick_clksource_set))
@@ -723,8 +677,8 @@ Global Symbols
 <P><STRONG><a name="[51]"></a>task_fwdgt_reload</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, main.o(i.task_fwdgt_reload))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = task_fwdgt_reload
 </UL>
-<BR>[Calls]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fwdgt_write_enable
-<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fwdgt_counter_reload
+<BR>[Calls]<UL><LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fwdgt_write_enable
+<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fwdgt_counter_reload
 </UL>
 <BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BootLoader_Brance
 <LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
@@ -733,14 +687,14 @@ Global Symbols
 <H3>
 Local Symbols
 </H3>
-<P><STRONG><a name="[7c]"></a>system_clock_108m_hxtal</STRONG> (Thumb, 182 bytes, Stack size 0 bytes, system_gd32f10x.o(i.system_clock_108m_hxtal))
-<BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_config
+<P><STRONG><a name="[77]"></a>system_clock_108m_hxtal</STRONG> (Thumb, 182 bytes, Stack size 0 bytes, system_gd32f10x.o(i.system_clock_108m_hxtal))
+<BR><BR>[Called By]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_config
 </UL>
 
-<P><STRONG><a name="[6c]"></a>system_clock_config</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, system_gd32f10x.o(i.system_clock_config))
+<P><STRONG><a name="[6a]"></a>system_clock_config</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, system_gd32f10x.o(i.system_clock_config))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = system_clock_config
 </UL>
-<BR>[Calls]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_108m_hxtal
+<BR>[Calls]<UL><LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;system_clock_108m_hxtal
 </UL>
 <BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
 </UL>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 553 - 280
bootloader/OBJ/bootloader_bootloader.dep


BIN
bootloader/OBJ/delay.crf


+ 24 - 7
bootloader/OBJ/delay.d

@@ -1,18 +1,35 @@
 ..\obj\delay.o: ..\HW\Source\delay.c
 ..\obj\delay.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\delay.o: ..\CMSIS\Include\core_cm3.h
-..\obj\delay.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\delay.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\delay.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\delay.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\delay.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\delay.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\delay.o: ..\USER\RTE_Components.h
+..\obj\delay.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\delay.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\delay.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\delay.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\delay.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\delay.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\delay.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\delay.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\delay.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\delay.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\delay.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\delay.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\delay.o: ..\HW\Include\delay.h

BIN
bootloader/OBJ/fmc.crf


+ 24 - 7
bootloader/OBJ/fmc.d

@@ -1,18 +1,35 @@
 ..\obj\fmc.o: ..\HW\Source\fmc.c
 ..\obj\fmc.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\fmc.o: ..\CMSIS\Include\core_cm3.h
-..\obj\fmc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\fmc.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\fmc.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\fmc.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\fmc.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\fmc.o: ..\USER\RTE_Components.h
+..\obj\fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\fmc.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\fmc.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\fmc.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\fmc.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\fmc.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\fmc.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\fmc.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\fmc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\fmc.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\fmc.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\fmc.o: ..\HW\Include\fmc.h

BIN
bootloader/OBJ/gd32f10x_fmc.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_fmc.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_fmc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_fmc.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_fmc.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_fmc.h
-..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_fwdgt.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_pmu.h
 ..\obj\gd32f10x_fmc.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_fmc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_fmc.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_fwdgt.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_fwdgt.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_fwdgt.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_fwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_fwdgt.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_fwdgt.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_fwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_fwdgt.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_fwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_fwdgt.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_gpio.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_gpio.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_gpio.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_gpio.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_gpio.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_gpio.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_gpio.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_gpio.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_gpio.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_gpio.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_gpio.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_it.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_it.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_it.o: ..\HW\Include\gd32f10x_it.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_it.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_it.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_it.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_it.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_it.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_it.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_it.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_it.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_it.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_misc.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_misc.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_misc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_misc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_misc.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_misc.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_misc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_misc.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_misc.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_misc.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_misc.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_rcu.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_rcu.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_rcu.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_rcu.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_rcu.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_rcu.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_rcu.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_rcu.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_rcu.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_rcu.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_rcu.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_spi.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_spi.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_spi.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_spi.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_spi.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_spi.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_spi.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_spi.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_spi.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/gd32f10x_wwdgt.crf


+ 24 - 7
bootloader/OBJ/gd32f10x_wwdgt.d

@@ -2,17 +2,34 @@
 ..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_wwdgt.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\core_cm3.h
-..\obj\gd32f10x_wwdgt.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gd32f10x_wwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\gd32f10x_wwdgt.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\gd32f10x_wwdgt.o: ..\USER\RTE_Components.h
+..\obj\gd32f10x_wwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\gd32f10x_wwdgt.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\gd32f10x_wwdgt.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gd32f10x_wwdgt.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/main.crf


+ 24 - 7
bootloader/OBJ/main.d

@@ -1,20 +1,37 @@
 ..\obj\main.o: main.c
 ..\obj\main.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\main.o: ..\CMSIS\Include\core_cm3.h
-..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\main.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\main.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\main.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\main.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\main.o: ..\USER\RTE_Components.h
+..\obj\main.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\main.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\main.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\main.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\main.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\main.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\main.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\main.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\main.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\main.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\main.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\main.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\main.o: main.h
 ..\obj\main.o: ..\HW\Include\delay.h
 ..\obj\main.o: ..\HW\Include\fmc.h

BIN
bootloader/OBJ/ota_message.crf


+ 26 - 8
bootloader/OBJ/ota_message.d

@@ -1,20 +1,38 @@
 ..\obj\ota_message.o: ..\HW\Source\ota_message.c
 ..\obj\ota_message.o: ..\HW\Include\ota_message.h
-..\obj\ota_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\ota_message.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\ota_message.o: ..\HW\Include\fmc.h
 ..\obj\ota_message.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\ota_message.o: ..\CMSIS\Include\core_cm3.h
 ..\obj\ota_message.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\ota_message.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\ota_message.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\ota_message.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\ota_message.o: ..\USER\RTE_Components.h
+..\obj\ota_message.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\ota_message.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\ota_message.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\ota_message.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\ota_message.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\ota_message.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\ota_message.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\ota_message.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\ota_message.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\ota_message.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\ota_message.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\ota_message.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\ota_message.o: ..\HW\Include\w25q32.h
-..\obj\ota_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\ota_message.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdio.h

BIN
bootloader/OBJ/spi.crf


+ 24 - 7
bootloader/OBJ/spi.d

@@ -1,18 +1,35 @@
 ..\obj\spi.o: ..\HW\Source\spi.c
 ..\obj\spi.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\spi.o: ..\CMSIS\Include\core_cm3.h
-..\obj\spi.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\spi.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\spi.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\spi.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\spi.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\spi.o: ..\USER\RTE_Components.h
+..\obj\spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\spi.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\spi.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\spi.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\spi.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\spi.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\spi.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\spi.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\spi.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\spi.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\spi.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\spi.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\spi.o: ..\HW\Include\spi.h

BIN
bootloader/OBJ/system_gd32f10x.crf


+ 24 - 7
bootloader/OBJ/system_gd32f10x.d

@@ -1,17 +1,34 @@
 ..\obj\system_gd32f10x.o: ..\CMSIS\Source\system_gd32f10x.c
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\core_cm3.h
-..\obj\system_gd32f10x.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\system_gd32f10x.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\system_gd32f10x.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\system_gd32f10x.o: ..\USER\RTE_Components.h
+..\obj\system_gd32f10x.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\system_gd32f10x.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\system_gd32f10x.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\system_gd32f10x.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\system_gd32f10x.o: ..\LIB\Include\gd32f10x_misc.h

BIN
bootloader/OBJ/w25q32.crf


+ 24 - 7
bootloader/OBJ/w25q32.d

@@ -1,19 +1,36 @@
 ..\obj\w25q32.o: ..\HW\Source\w25q32.c
 ..\obj\w25q32.o: ..\CMSIS\Include\gd32f10x.h
 ..\obj\w25q32.o: ..\CMSIS\Include\core_cm3.h
-..\obj\w25q32.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\w25q32.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\w25q32.o: ..\CMSIS\Include\core_cmInstr.h
 ..\obj\w25q32.o: ..\CMSIS\Include\core_cmFunc.h
 ..\obj\w25q32.o: ..\CMSIS\Include\system_gd32f10x.h
-..\obj\w25q32.o: D:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_DFP\2.0.3\Device\Include\gd32f10x_libopt.h
-..\obj\w25q32.o: ..\USER\RTE_Components.h
+..\obj\w25q32.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\string.h
+..\obj\w25q32.o: ..\CMSIS\Include\gd32f10x_libopt.h
 ..\obj\w25q32.o: ..\LIB\Include\gd32f10x_fmc.h
 ..\obj\w25q32.o: ..\CMSIS\Include\gd32f10x.h
-..\obj\w25q32.o: ..\LIB\Include\gd32f10x_fwdgt.h
-..\obj\w25q32.o: ..\LIB\Include\gd32f10x_gpio.h
-..\obj\w25q32.o: ..\LIB\Include\gd32f10x_misc.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_pmu.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_bkp.h
 ..\obj\w25q32.o: ..\LIB\Include\gd32f10x_rcu.h
-..\obj\w25q32.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_exti.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_gpio.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_crc.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_dma.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_dbg.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_adc.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_dac.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_fwdgt.h
 ..\obj\w25q32.o: ..\LIB\Include\gd32f10x_wwdgt.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_rtc.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_timer.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_usart.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_i2c.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_spi.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_sdio.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_exmc.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_can.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_enet.h
+..\obj\w25q32.o: D:\software\MDK5\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\w25q32.o: ..\LIB\Include\gd32f10x_misc.h
 ..\obj\w25q32.o: ..\HW\Include\spi.h
 ..\obj\w25q32.o: ..\HW\Include\w25q32.h

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3540 - 525
bootloader/USER/JLinkLog.txt


+ 367 - 343
bootloader/USER/Listings/bootloader.map

@@ -1,4 +1,4 @@
-Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed]
+Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601]
 
 ==============================================================================
 
@@ -23,8 +23,8 @@ Section Cross References
     boot.o(i.BootLoader_Brance) refers to fmc.o(i.GD32_EraseFlash) for GD32_EraseFlash
     boot.o(i.BootLoader_Brance) refers to main.o(i.task_fwdgt_reload) for task_fwdgt_reload
     boot.o(i.BootLoader_Brance) refers to memseta.o(.text) for __aeabi_memclr4
-    boot.o(i.BootLoader_Brance) refers to w25q32.o(i.W25Q32_Read) for W25Q32_Read
-    boot.o(i.BootLoader_Brance) refers to fmc.o(i.GD32_WriteFlash) for GD32_WriteFlash
+    boot.o(i.BootLoader_Brance) refers to fmc.o(i.FLASH_Read) for FLASH_Read
+    boot.o(i.BootLoader_Brance) refers to fmc.o(i.FLASH_Write) for FLASH_Write
     boot.o(i.BootLoader_Brance) refers to ota_message.o(i.clear_ota_message_config_block) for clear_ota_message_config_block
     boot.o(i.BootLoader_Brance) refers to boot.o(i.LOAD_A) for LOAD_A
     boot.o(i.BootLoader_Clear) refers to gd32f10x_gpio.o(i.gpio_deinit) for gpio_deinit
@@ -33,6 +33,17 @@ Section Cross References
     boot.o(i.LOAD_A) refers to boot.o(.data) for load_A
     delay.o(i.Delay_Init) refers to gd32f10x_misc.o(i.systick_clksource_set) for systick_clksource_set
     delay.o(i.Delay_Ms) refers to delay.o(i.Delay_Us) for Delay_Us
+    fmc.o(i.FLASH_ErasePage) refers to gd32f10x_fmc.o(i.fmc_page_erase) for fmc_page_erase
+    fmc.o(i.FLASH_Init) refers to gd32f10x_fmc.o(i.fmc_unlock) for fmc_unlock
+    fmc.o(i.FLASH_Init) refers to gd32f10x_fmc.o(i.fmc_flag_clear) for fmc_flag_clear
+    fmc.o(i.FLASH_Init) refers to gd32f10x_fmc.o(i.fmc_lock) for fmc_lock
+    fmc.o(i.FLASH_Write) refers to gd32f10x_fmc.o(i.fmc_unlock) for fmc_unlock
+    fmc.o(i.FLASH_Write) refers to fmc.o(i.FLASH_Read) for FLASH_Read
+    fmc.o(i.FLASH_Write) refers to fmc.o(i.FLASH_ErasePage) for FLASH_ErasePage
+    fmc.o(i.FLASH_Write) refers to fmc.o(i.FLASH_WriteNotErase) for FLASH_WriteNotErase
+    fmc.o(i.FLASH_Write) refers to gd32f10x_fmc.o(i.fmc_lock) for fmc_lock
+    fmc.o(i.FLASH_Write) refers to fmc.o(.bss) for FlashBuffer
+    fmc.o(i.FLASH_WriteNotErase) refers to gd32f10x_fmc.o(i.fmc_halfword_program) for fmc_halfword_program
     fmc.o(i.GD32_EraseFlash) refers to gd32f10x_fmc.o(i.fmc_unlock) for fmc_unlock
     fmc.o(i.GD32_EraseFlash) refers to gd32f10x_fmc.o(i.fmc_page_erase) for fmc_page_erase
     fmc.o(i.GD32_EraseFlash) refers to gd32f10x_fmc.o(i.fmc_lock) for fmc_lock
@@ -75,9 +86,9 @@ Section Cross References
     w25q32.o(i.W25Q32_WaitBusy) refers to gd32f10x_gpio.o(i.gpio_bit_reset) for gpio_bit_reset
     w25q32.o(i.W25Q32_WaitBusy) refers to spi.o(i.SPI0_ReadWriteByte) for SPI0_ReadWriteByte
     w25q32.o(i.W25Q32_WaitBusy) refers to gd32f10x_gpio.o(i.gpio_bit_set) for gpio_bit_set
-    ota_message.o(i.clear_ota_message_config_block) refers to w25q32.o(i.W25Q32_Erase64K) for W25Q32_Erase64K
+    ota_message.o(i.clear_ota_message_config_block) refers to fmc.o(i.GD32_EraseFlash) for GD32_EraseFlash
     ota_message.o(i.get_config_params) refers to ota_message.o(.data) for ota_message
-    ota_message.o(i.load_ota_message_config_params) refers to w25q32.o(i.W25Q32_Read) for W25Q32_Read
+    ota_message.o(i.load_ota_message_config_params) refers to fmc.o(i.FLASH_Read) for FLASH_Read
     ota_message.o(i.load_ota_message_config_params) refers to ota_message.o(.data) for ota_message
     ota_message.o(i.save_ota_message_config_params) refers to ota_message.o(i.clear_ota_message_config_block) for clear_ota_message_config_block
     ota_message.o(i.save_ota_message_config_params) refers to ota_message.o(i.write_ota_message_to_flash) for write_ota_message_to_flash
@@ -116,14 +127,20 @@ Section Cross References
     main.o(i.main) refers to delay.o(i.Delay_Init) for Delay_Init
     main.o(i.main) refers to w25q32.o(i.W25Q32_Init) for W25Q32_Init
     main.o(i.main) refers to main.o(i.task_fwdgt_reload) for task_fwdgt_reload
+    main.o(i.main) refers to main.o(i.my_test) for my_test
     main.o(i.main) refers to ota_message.o(i.load_ota_message_config_params) for load_ota_message_config_params
     main.o(i.main) refers to ota_message.o(i.get_config_params) for get_config_params
     main.o(i.main) refers to boot.o(i.BootLoader_Brance) for BootLoader_Brance
     main.o(i.main) refers to boot.o(i.LOAD_A) for LOAD_A
+    main.o(i.my_test) refers to fmc.o(i.GD32_EraseFlash) for GD32_EraseFlash
+    main.o(i.my_test) refers to fmc.o(i.FLASH_Write) for FLASH_Write
+    main.o(i.my_test) refers to delay.o(i.Delay_Ms) for Delay_Ms
+    main.o(i.my_test) refers to main.o(.data) for ota_message
     main.o(i.task_fwdgt_reload) refers to gd32f10x_fwdgt.o(i.fwdgt_write_enable) for fwdgt_write_enable
     main.o(i.task_fwdgt_reload) refers to gd32f10x_fwdgt.o(i.fwdgt_counter_reload) for fwdgt_counter_reload
-    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp
-    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000F) for __rt_final_cpp
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$00000011) for __rt_final_exit
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry12b.o(.ARM.Collect$$$$0000000E) for __rt_lib_shutdown_fini
     entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock
     entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry8b.o(.ARM.Collect$$$$0000000A) for _main_cpp_init
     entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init
@@ -151,17 +168,24 @@ Removing Unused input sections from the image.
     Removing boot.o(.revsh_text), (4 bytes).
     Removing delay.o(.rev16_text), (4 bytes).
     Removing delay.o(.revsh_text), (4 bytes).
-    Removing delay.o(i.Delay_Ms), (26 bytes).
-    Removing delay.o(i.Delay_Us), (58 bytes).
     Removing fmc.o(.rev16_text), (4 bytes).
     Removing fmc.o(.revsh_text), (4 bytes).
+    Removing fmc.o(i.FLASH_Init), (36 bytes).
+    Removing fmc.o(i.GD32_WriteFlash), (38 bytes).
     Removing gd32f10x_it.o(.rev16_text), (4 bytes).
     Removing gd32f10x_it.o(.revsh_text), (4 bytes).
     Removing spi.o(.rev16_text), (4 bytes).
     Removing spi.o(.revsh_text), (4 bytes).
+    Removing spi.o(i.SPI0_Read), (28 bytes).
+    Removing spi.o(i.SPI0_ReadWriteByte), (56 bytes).
+    Removing spi.o(i.SPI0_Write), (26 bytes).
     Removing w25q32.o(.rev16_text), (4 bytes).
     Removing w25q32.o(.revsh_text), (4 bytes).
+    Removing w25q32.o(i.W25Q32_Enable), (36 bytes).
+    Removing w25q32.o(i.W25Q32_Erase64K), (76 bytes).
     Removing w25q32.o(i.W25Q32_PageWrite), (84 bytes).
+    Removing w25q32.o(i.W25Q32_Read), (76 bytes).
+    Removing w25q32.o(i.W25Q32_WaitBusy), (48 bytes).
     Removing ota_message.o(.rev16_text), (4 bytes).
     Removing ota_message.o(.revsh_text), (4 bytes).
     Removing ota_message.o(i.save_ota_message_config_params), (48 bytes).
@@ -220,6 +244,7 @@ Removing Unused input sections from the image.
     Removing gd32f10x_gpio.o(.rev16_text), (4 bytes).
     Removing gd32f10x_gpio.o(.revsh_text), (4 bytes).
     Removing gd32f10x_gpio.o(i.gpio_afio_deinit), (20 bytes).
+    Removing gd32f10x_gpio.o(i.gpio_bit_reset), (4 bytes).
     Removing gd32f10x_gpio.o(i.gpio_bit_write), (10 bytes).
     Removing gd32f10x_gpio.o(i.gpio_event_output_config), (28 bytes).
     Removing gd32f10x_gpio.o(i.gpio_event_output_disable), (20 bytes).
@@ -242,12 +267,12 @@ Removing Unused input sections from the image.
     Removing gd32f10x_fmc.o(i.fmc_bank1_unlock), (36 bytes).
     Removing gd32f10x_fmc.o(i.fmc_flag_clear), (32 bytes).
     Removing gd32f10x_fmc.o(i.fmc_flag_get), (36 bytes).
-    Removing gd32f10x_fmc.o(i.fmc_halfword_program), (192 bytes).
     Removing gd32f10x_fmc.o(i.fmc_interrupt_disable), (32 bytes).
     Removing gd32f10x_fmc.o(i.fmc_interrupt_enable), (32 bytes).
     Removing gd32f10x_fmc.o(i.fmc_interrupt_flag_clear), (32 bytes).
     Removing gd32f10x_fmc.o(i.fmc_interrupt_flag_get), (108 bytes).
     Removing gd32f10x_fmc.o(i.fmc_mass_erase), (196 bytes).
+    Removing gd32f10x_fmc.o(i.fmc_word_program), (192 bytes).
     Removing gd32f10x_fmc.o(i.fmc_wscnt_set), (24 bytes).
     Removing gd32f10x_fmc.o(i.ob_data_get), (16 bytes).
     Removing gd32f10x_fmc.o(i.ob_data_program), (68 bytes).
@@ -278,6 +303,9 @@ Removing Unused input sections from the image.
     Removing gd32f10x_spi.o(i.spi_dma_disable), (22 bytes).
     Removing gd32f10x_spi.o(i.spi_dma_enable), (22 bytes).
     Removing gd32f10x_spi.o(i.spi_i2s_data_frame_format_config), (16 bytes).
+    Removing gd32f10x_spi.o(i.spi_i2s_data_receive), (8 bytes).
+    Removing gd32f10x_spi.o(i.spi_i2s_data_transmit), (4 bytes).
+    Removing gd32f10x_spi.o(i.spi_i2s_flag_get), (16 bytes).
     Removing gd32f10x_spi.o(i.spi_i2s_interrupt_disable), (8 bytes).
     Removing gd32f10x_spi.o(i.spi_i2s_interrupt_enable), (8 bytes).
     Removing gd32f10x_spi.o(i.spi_i2s_interrupt_flag_get), (100 bytes).
@@ -296,9 +324,8 @@ Removing Unused input sections from the image.
     Removing gd32f10x_fwdgt.o(i.fwdgt_write_disable), (12 bytes).
     Removing main.o(.rev16_text), (4 bytes).
     Removing main.o(.revsh_text), (4 bytes).
-    Removing main.o(.data), (8 bytes).
 
-154 unused section(s) (total 70854 bytes) removed from the image.
+164 unused section(s) (total 71214 bytes) removed from the image.
 
 ==============================================================================
 
@@ -309,18 +336,20 @@ Image Symbol Table
     Symbol Name                              Value     Ov Type        Size  Object(Section)
 
     ../clib/microlib/init/entry.s            0x00000000   Number         0  entry5.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7b.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry2.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11b.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8b.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9b.o ABSOLUTE
     ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10a.o ABSOLUTE
     ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10b.o ABSOLUTE
     ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9a.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry12a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry2.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry12b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry.o ABSOLUTE
     ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8a.o ABSOLUTE
-    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8b.o ABSOLUTE
     ../clib/microlib/string/memset.c         0x00000000   Number         0  memseta.o ABSOLUTE
     ..\CMSIS\Source\startup_gd32f10x_xd.s    0x00000000   Number         0  startup_gd32f10x_xd.o ABSOLUTE
     ..\CMSIS\Source\system_gd32f10x.c        0x00000000   Number         0  system_gd32f10x.o ABSOLUTE
@@ -365,80 +394,80 @@ Image Symbol Table
     .ARM.Collect$$$$00000008                 0x08000138   Section        0  entry7b.o(.ARM.Collect$$$$00000008)
     .ARM.Collect$$$$0000000A                 0x08000138   Section        0  entry8b.o(.ARM.Collect$$$$0000000A)
     .ARM.Collect$$$$0000000B                 0x08000138   Section        8  entry9a.o(.ARM.Collect$$$$0000000B)
-    .ARM.Collect$$$$0000000D                 0x08000140   Section        0  entry10a.o(.ARM.Collect$$$$0000000D)
-    .ARM.Collect$$$$0000000F                 0x08000140   Section        0  entry11a.o(.ARM.Collect$$$$0000000F)
-    .ARM.Collect$$$$00002712                 0x08000140   Section        4  entry2.o(.ARM.Collect$$$$00002712)
-    __lit__00000000                          0x08000140   Data           4  entry2.o(.ARM.Collect$$$$00002712)
-    .emb_text                                0x08000144   Section        6  boot.o(.emb_text)
-    .text                                    0x0800014c   Section       36  startup_gd32f10x_xd.o(.text)
-    .text                                    0x08000170   Section        0  memseta.o(.text)
-    .text                                    0x08000194   Section       36  init.o(.text)
-    i.BootLoader_Brance                      0x080001b8   Section        0  boot.o(i.BootLoader_Brance)
-    i.BootLoader_Clear                       0x08000258   Section        0  boot.o(i.BootLoader_Clear)
-    i.BusFault_Handler                       0x08000270   Section        0  gd32f10x_it.o(i.BusFault_Handler)
-    i.DebugMon_Handler                       0x08000274   Section        0  gd32f10x_it.o(i.DebugMon_Handler)
-    i.Delay_Init                             0x08000276   Section        0  delay.o(i.Delay_Init)
-    i.GD32_EraseFlash                        0x08000280   Section        0  fmc.o(i.GD32_EraseFlash)
-    i.GD32_WriteFlash                        0x080002b0   Section        0  fmc.o(i.GD32_WriteFlash)
-    i.HardFault_Handler                      0x080002d6   Section        0  gd32f10x_it.o(i.HardFault_Handler)
-    i.LOAD_A                                 0x080002dc   Section        0  boot.o(i.LOAD_A)
-    i.MemManage_Handler                      0x08000310   Section        0  gd32f10x_it.o(i.MemManage_Handler)
-    i.NMI_Handler                            0x08000314   Section        0  gd32f10x_it.o(i.NMI_Handler)
-    i.PendSV_Handler                         0x08000316   Section        0  gd32f10x_it.o(i.PendSV_Handler)
-    i.SPI0_Init                              0x08000318   Section        0  spi.o(i.SPI0_Init)
-    i.SPI0_Read                              0x08000380   Section        0  spi.o(i.SPI0_Read)
-    i.SPI0_ReadWriteByte                     0x0800039c   Section        0  spi.o(i.SPI0_ReadWriteByte)
-    i.SPI0_Write                             0x080003d4   Section        0  spi.o(i.SPI0_Write)
-    i.SVC_Handler                            0x080003ee   Section        0  gd32f10x_it.o(i.SVC_Handler)
-    i.SysTick_Handler                        0x080003f0   Section        0  gd32f10x_it.o(i.SysTick_Handler)
-    i.SystemInit                             0x080003f4   Section        0  system_gd32f10x.o(i.SystemInit)
-    i.UsageFault_Handler                     0x080004c8   Section        0  gd32f10x_it.o(i.UsageFault_Handler)
-    i.W25Q32_Enable                          0x080004cc   Section        0  w25q32.o(i.W25Q32_Enable)
-    i.W25Q32_Erase64K                        0x080004f0   Section        0  w25q32.o(i.W25Q32_Erase64K)
-    i.W25Q32_Init                            0x0800053c   Section        0  w25q32.o(i.W25Q32_Init)
-    i.W25Q32_Read                            0x08000564   Section        0  w25q32.o(i.W25Q32_Read)
-    i.W25Q32_WaitBusy                        0x080005b0   Section        0  w25q32.o(i.W25Q32_WaitBusy)
-    i.__scatterload_copy                     0x080005e0   Section       14  handlers.o(i.__scatterload_copy)
-    i.__scatterload_null                     0x080005ee   Section        2  handlers.o(i.__scatterload_null)
-    i.__scatterload_zeroinit                 0x080005f0   Section       14  handlers.o(i.__scatterload_zeroinit)
-    i.clear_ota_message_config_block         0x080005fe   Section        0  ota_message.o(i.clear_ota_message_config_block)
-    i.fmc_bank0_ready_wait                   0x08000608   Section        0  gd32f10x_fmc.o(i.fmc_bank0_ready_wait)
-    i.fmc_bank0_state_get                    0x0800062c   Section        0  gd32f10x_fmc.o(i.fmc_bank0_state_get)
-    i.fmc_bank1_ready_wait                   0x0800065c   Section        0  gd32f10x_fmc.o(i.fmc_bank1_ready_wait)
-    i.fmc_bank1_state_get                    0x08000680   Section        0  gd32f10x_fmc.o(i.fmc_bank1_state_get)
-    i.fmc_lock                               0x080006b0   Section        0  gd32f10x_fmc.o(i.fmc_lock)
-    i.fmc_page_erase                         0x080006dc   Section        0  gd32f10x_fmc.o(i.fmc_page_erase)
-    i.fmc_unlock                             0x080007c8   Section        0  gd32f10x_fmc.o(i.fmc_unlock)
-    i.fmc_word_program                       0x0800080c   Section        0  gd32f10x_fmc.o(i.fmc_word_program)
-    i.fwdgt_counter_reload                   0x080008cc   Section        0  gd32f10x_fwdgt.o(i.fwdgt_counter_reload)
-    i.fwdgt_write_enable                     0x080008dc   Section        0  gd32f10x_fwdgt.o(i.fwdgt_write_enable)
-    i.get_config_params                      0x080008ec   Section        0  ota_message.o(i.get_config_params)
-    i.gpio_bit_reset                         0x080008f4   Section        0  gd32f10x_gpio.o(i.gpio_bit_reset)
-    i.gpio_bit_set                           0x080008f8   Section        0  gd32f10x_gpio.o(i.gpio_bit_set)
-    i.gpio_deinit                            0x080008fc   Section        0  gd32f10x_gpio.o(i.gpio_deinit)
-    i.gpio_init                              0x080009c0   Section        0  gd32f10x_gpio.o(i.gpio_init)
-    i.load_ota_message_config_params         0x08000a6c   Section        0  ota_message.o(i.load_ota_message_config_params)
-    i.main                                   0x08000a94   Section        0  main.o(i.main)
-    i.nvic_vector_table_set                  0x08000ac4   Section        0  gd32f10x_misc.o(i.nvic_vector_table_set)
-    i.rcu_periph_clock_enable                0x08000adc   Section        0  gd32f10x_rcu.o(i.rcu_periph_clock_enable)
-    i.rcu_periph_reset_disable               0x08000afc   Section        0  gd32f10x_rcu.o(i.rcu_periph_reset_disable)
-    i.rcu_periph_reset_enable                0x08000b1c   Section        0  gd32f10x_rcu.o(i.rcu_periph_reset_enable)
-    i.spi_enable                             0x08000b3c   Section        0  gd32f10x_spi.o(i.spi_enable)
-    i.spi_i2s_data_receive                   0x08000b46   Section        0  gd32f10x_spi.o(i.spi_i2s_data_receive)
-    i.spi_i2s_data_transmit                  0x08000b4e   Section        0  gd32f10x_spi.o(i.spi_i2s_data_transmit)
-    i.spi_i2s_deinit                         0x08000b54   Section        0  gd32f10x_spi.o(i.spi_i2s_deinit)
-    i.spi_i2s_flag_get                       0x08000bac   Section        0  gd32f10x_spi.o(i.spi_i2s_flag_get)
-    i.spi_init                               0x08000bbc   Section        0  gd32f10x_spi.o(i.spi_init)
-    i.system_clock_108m_hxtal                0x08000bf0   Section        0  system_gd32f10x.o(i.system_clock_108m_hxtal)
-    system_clock_108m_hxtal                  0x08000bf1   Thumb Code   182  system_gd32f10x.o(i.system_clock_108m_hxtal)
-    i.system_clock_config                    0x08000cb4   Section        0  system_gd32f10x.o(i.system_clock_config)
-    system_clock_config                      0x08000cb5   Thumb Code     8  system_gd32f10x.o(i.system_clock_config)
-    i.systick_clksource_set                  0x08000cbc   Section        0  gd32f10x_misc.o(i.systick_clksource_set)
-    i.task_fwdgt_reload                      0x08000ce4   Section        0  main.o(i.task_fwdgt_reload)
+    .ARM.Collect$$$$0000000E                 0x08000140   Section        4  entry12b.o(.ARM.Collect$$$$0000000E)
+    .ARM.Collect$$$$0000000F                 0x08000144   Section        0  entry10a.o(.ARM.Collect$$$$0000000F)
+    .ARM.Collect$$$$00000011                 0x08000144   Section        0  entry11a.o(.ARM.Collect$$$$00000011)
+    .ARM.Collect$$$$00002712                 0x08000144   Section        4  entry2.o(.ARM.Collect$$$$00002712)
+    __lit__00000000                          0x08000144   Data           4  entry2.o(.ARM.Collect$$$$00002712)
+    .emb_text                                0x08000148   Section        6  boot.o(.emb_text)
+    .text                                    0x08000150   Section       36  startup_gd32f10x_xd.o(.text)
+    .text                                    0x08000174   Section        0  memseta.o(.text)
+    .text                                    0x08000198   Section       36  init.o(.text)
+    i.BootLoader_Brance                      0x080001bc   Section        0  boot.o(i.BootLoader_Brance)
+    i.BootLoader_Clear                       0x0800024c   Section        0  boot.o(i.BootLoader_Clear)
+    i.BusFault_Handler                       0x08000264   Section        0  gd32f10x_it.o(i.BusFault_Handler)
+    i.DebugMon_Handler                       0x08000268   Section        0  gd32f10x_it.o(i.DebugMon_Handler)
+    i.Delay_Init                             0x0800026a   Section        0  delay.o(i.Delay_Init)
+    i.Delay_Ms                               0x08000274   Section        0  delay.o(i.Delay_Ms)
+    i.Delay_Us                               0x0800028e   Section        0  delay.o(i.Delay_Us)
+    i.FLASH_ErasePage                        0x080002c8   Section        0  fmc.o(i.FLASH_ErasePage)
+    i.FLASH_Read                             0x080002f0   Section        0  fmc.o(i.FLASH_Read)
+    i.FLASH_Write                            0x08000344   Section        0  fmc.o(i.FLASH_Write)
+    i.FLASH_WriteNotErase                    0x08000494   Section        0  fmc.o(i.FLASH_WriteNotErase)
+    i.GD32_EraseFlash                        0x080004d4   Section        0  fmc.o(i.GD32_EraseFlash)
+    i.HardFault_Handler                      0x080005a8   Section        0  gd32f10x_it.o(i.HardFault_Handler)
+    i.LOAD_A                                 0x080005ac   Section        0  boot.o(i.LOAD_A)
+    i.MemManage_Handler                      0x080005e0   Section        0  gd32f10x_it.o(i.MemManage_Handler)
+    i.NMI_Handler                            0x080005e4   Section        0  gd32f10x_it.o(i.NMI_Handler)
+    i.PendSV_Handler                         0x080005e6   Section        0  gd32f10x_it.o(i.PendSV_Handler)
+    i.SPI0_Init                              0x080005e8   Section        0  spi.o(i.SPI0_Init)
+    i.SVC_Handler                            0x08000650   Section        0  gd32f10x_it.o(i.SVC_Handler)
+    i.SysTick_Handler                        0x08000652   Section        0  gd32f10x_it.o(i.SysTick_Handler)
+    i.SystemInit                             0x08000654   Section        0  system_gd32f10x.o(i.SystemInit)
+    i.UsageFault_Handler                     0x08000728   Section        0  gd32f10x_it.o(i.UsageFault_Handler)
+    i.W25Q32_Init                            0x0800072c   Section        0  w25q32.o(i.W25Q32_Init)
+    i.__scatterload_copy                     0x08000754   Section       14  handlers.o(i.__scatterload_copy)
+    i.__scatterload_null                     0x08000762   Section        2  handlers.o(i.__scatterload_null)
+    i.__scatterload_zeroinit                 0x08000764   Section       14  handlers.o(i.__scatterload_zeroinit)
+    i.clear_ota_message_config_block         0x08000772   Section        0  ota_message.o(i.clear_ota_message_config_block)
+    i.fmc_bank0_ready_wait                   0x0800077e   Section        0  gd32f10x_fmc.o(i.fmc_bank0_ready_wait)
+    i.fmc_bank0_state_get                    0x080007a0   Section        0  gd32f10x_fmc.o(i.fmc_bank0_state_get)
+    i.fmc_bank1_ready_wait                   0x080007d0   Section        0  gd32f10x_fmc.o(i.fmc_bank1_ready_wait)
+    i.fmc_bank1_state_get                    0x080007f4   Section        0  gd32f10x_fmc.o(i.fmc_bank1_state_get)
+    i.fmc_halfword_program                   0x08000824   Section        0  gd32f10x_fmc.o(i.fmc_halfword_program)
+    i.fmc_lock                               0x080008e4   Section        0  gd32f10x_fmc.o(i.fmc_lock)
+    i.fmc_page_erase                         0x08000910   Section        0  gd32f10x_fmc.o(i.fmc_page_erase)
+    i.fmc_unlock                             0x080009fc   Section        0  gd32f10x_fmc.o(i.fmc_unlock)
+    i.fwdgt_counter_reload                   0x08000a40   Section        0  gd32f10x_fwdgt.o(i.fwdgt_counter_reload)
+    i.fwdgt_write_enable                     0x08000a50   Section        0  gd32f10x_fwdgt.o(i.fwdgt_write_enable)
+    i.get_config_params                      0x08000a60   Section        0  ota_message.o(i.get_config_params)
+    i.gpio_bit_set                           0x08000a68   Section        0  gd32f10x_gpio.o(i.gpio_bit_set)
+    i.gpio_deinit                            0x08000a6c   Section        0  gd32f10x_gpio.o(i.gpio_deinit)
+    i.gpio_init                              0x08000b30   Section        0  gd32f10x_gpio.o(i.gpio_init)
+    i.load_ota_message_config_params         0x08000bdc   Section        0  ota_message.o(i.load_ota_message_config_params)
+    i.main                                   0x08000c0c   Section        0  main.o(i.main)
+    i.my_test                                0x08000c40   Section        0  main.o(i.my_test)
+    i.nvic_vector_table_set                  0x08000c78   Section        0  gd32f10x_misc.o(i.nvic_vector_table_set)
+    i.rcu_periph_clock_enable                0x08000c90   Section        0  gd32f10x_rcu.o(i.rcu_periph_clock_enable)
+    i.rcu_periph_reset_disable               0x08000cb0   Section        0  gd32f10x_rcu.o(i.rcu_periph_reset_disable)
+    i.rcu_periph_reset_enable                0x08000cd0   Section        0  gd32f10x_rcu.o(i.rcu_periph_reset_enable)
+    i.spi_enable                             0x08000cf0   Section        0  gd32f10x_spi.o(i.spi_enable)
+    i.spi_i2s_deinit                         0x08000cfc   Section        0  gd32f10x_spi.o(i.spi_i2s_deinit)
+    i.spi_init                               0x08000d54   Section        0  gd32f10x_spi.o(i.spi_init)
+    i.system_clock_108m_hxtal                0x08000d88   Section        0  system_gd32f10x.o(i.system_clock_108m_hxtal)
+    system_clock_108m_hxtal                  0x08000d89   Thumb Code   182  system_gd32f10x.o(i.system_clock_108m_hxtal)
+    i.system_clock_config                    0x08000e4c   Section        0  system_gd32f10x.o(i.system_clock_config)
+    system_clock_config                      0x08000e4d   Thumb Code     8  system_gd32f10x.o(i.system_clock_config)
+    i.systick_clksource_set                  0x08000e54   Section        0  gd32f10x_misc.o(i.systick_clksource_set)
+    i.task_fwdgt_reload                      0x08000e7c   Section        0  main.o(i.task_fwdgt_reload)
     .data                                    0x20000000   Section        4  boot.o(.data)
     .data                                    0x20000004   Section        8  ota_message.o(.data)
     ota_message                              0x20000004   Data           8  ota_message.o(.data)
-    STACK                                    0x20000010   Section     4096  startup_gd32f10x_xd.o(STACK)
+    .data                                    0x2000000c   Section       16  main.o(.data)
+    ota_message                              0x20000014   Data           8  main.o(.data)
+    .bss                                     0x2000001c   Section     2048  fmc.o(.bss)
+    FlashBuffer                              0x2000001c   Data        2048  fmc.o(.bss)
+    STACK                                    0x20000820   Section     4096  startup_gd32f10x_xd.o(STACK)
 
     Global Symbols
 
@@ -446,6 +475,7 @@ Image Symbol Table
 
     BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000   Number         0  anon$$obj.o ABSOLUTE
     __ARM_use_no_argv                        0x00000000   Number         0  main.o ABSOLUTE
+    __arm_fini_                               - Undefined Weak Reference
     __cpp_initialize__aeabi_                  - Undefined Weak Reference
     __cxa_finalize                            - Undefined Weak Reference
     __decompress                              - Undefined Weak Reference
@@ -461,141 +491,138 @@ Image Symbol Table
     _main_clock                              0x08000139   Thumb Code     0  entry7b.o(.ARM.Collect$$$$00000008)
     _main_cpp_init                           0x08000139   Thumb Code     0  entry8b.o(.ARM.Collect$$$$0000000A)
     _main_init                               0x08000139   Thumb Code     0  entry9a.o(.ARM.Collect$$$$0000000B)
-    __rt_final_cpp                           0x08000141   Thumb Code     0  entry10a.o(.ARM.Collect$$$$0000000D)
-    __rt_final_exit                          0x08000141   Thumb Code     0  entry11a.o(.ARM.Collect$$$$0000000F)
-    MSR_SP                                   0x08000145   Thumb Code     6  boot.o(.emb_text)
-    Reset_Handler                            0x0800014d   Thumb Code     8  startup_gd32f10x_xd.o(.text)
-    ADC0_1_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    ADC2_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    CAN0_EWMC_IRQHandler                     0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    CAN0_RX1_IRQHandler                      0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel0_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel1_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel2_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel3_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel4_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel5_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA0_Channel6_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA1_Channel0_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA1_Channel1_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA1_Channel2_IRQHandler                 0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    DMA1_Channel3_4_IRQHandler               0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXMC_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI0_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI10_15_IRQHandler                     0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI1_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI2_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI3_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI4_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    EXTI5_9_IRQHandler                       0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    FMC_IRQHandler                           0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    I2C0_ER_IRQHandler                       0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    I2C0_EV_IRQHandler                       0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    I2C1_ER_IRQHandler                       0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    I2C1_EV_IRQHandler                       0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    LVD_IRQHandler                           0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    RCU_IRQHandler                           0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    RTC_Alarm_IRQHandler                     0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    RTC_IRQHandler                           0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    SDIO_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    SPI0_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    SPI1_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    SPI2_IRQHandler                          0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TAMPER_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER0_BRK_TIMER8_IRQHandler             0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER0_Channel_IRQHandler                0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER0_TRG_CMT_TIMER10_IRQHandler        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER0_UP_TIMER9_IRQHandler              0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER1_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER2_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER3_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER4_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER5_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER6_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER7_BRK_TIMER11_IRQHandler            0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER7_Channel_IRQHandler                0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER7_TRG_CMT_TIMER13_IRQHandler        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    TIMER7_UP_TIMER12_IRQHandler             0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    UART3_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    UART4_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USART0_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USART1_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USART2_IRQHandler                        0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USBD_HP_CAN0_TX_IRQHandler               0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USBD_LP_CAN0_RX0_IRQHandler              0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    USBD_WKUP_IRQHandler                     0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    WWDGT_IRQHandler                         0x08000167   Thumb Code     0  startup_gd32f10x_xd.o(.text)
-    __aeabi_memset                           0x08000171   Thumb Code    14  memseta.o(.text)
-    __aeabi_memset4                          0x08000171   Thumb Code     0  memseta.o(.text)
-    __aeabi_memset8                          0x08000171   Thumb Code     0  memseta.o(.text)
-    __aeabi_memclr                           0x0800017f   Thumb Code     4  memseta.o(.text)
-    __aeabi_memclr4                          0x0800017f   Thumb Code     0  memseta.o(.text)
-    __aeabi_memclr8                          0x0800017f   Thumb Code     0  memseta.o(.text)
-    _memset$wrapper                          0x08000183   Thumb Code    18  memseta.o(.text)
-    __scatterload                            0x08000195   Thumb Code    28  init.o(.text)
-    __scatterload_rt2                        0x08000195   Thumb Code     0  init.o(.text)
-    BootLoader_Brance                        0x080001b9   Thumb Code   154  boot.o(i.BootLoader_Brance)
-    BootLoader_Clear                         0x08000259   Thumb Code    16  boot.o(i.BootLoader_Clear)
-    BusFault_Handler                         0x08000271   Thumb Code     4  gd32f10x_it.o(i.BusFault_Handler)
-    DebugMon_Handler                         0x08000275   Thumb Code     2  gd32f10x_it.o(i.DebugMon_Handler)
-    Delay_Init                               0x08000277   Thumb Code    10  delay.o(i.Delay_Init)
-    GD32_EraseFlash                          0x08000281   Thumb Code    48  fmc.o(i.GD32_EraseFlash)
-    GD32_WriteFlash                          0x080002b1   Thumb Code    38  fmc.o(i.GD32_WriteFlash)
-    HardFault_Handler                        0x080002d7   Thumb Code     4  gd32f10x_it.o(i.HardFault_Handler)
-    LOAD_A                                   0x080002dd   Thumb Code    44  boot.o(i.LOAD_A)
-    MemManage_Handler                        0x08000311   Thumb Code     4  gd32f10x_it.o(i.MemManage_Handler)
-    NMI_Handler                              0x08000315   Thumb Code     2  gd32f10x_it.o(i.NMI_Handler)
-    PendSV_Handler                           0x08000317   Thumb Code     2  gd32f10x_it.o(i.PendSV_Handler)
-    SPI0_Init                                0x08000319   Thumb Code    94  spi.o(i.SPI0_Init)
-    SPI0_Read                                0x08000381   Thumb Code    28  spi.o(i.SPI0_Read)
-    SPI0_ReadWriteByte                       0x0800039d   Thumb Code    50  spi.o(i.SPI0_ReadWriteByte)
-    SPI0_Write                               0x080003d5   Thumb Code    26  spi.o(i.SPI0_Write)
-    SVC_Handler                              0x080003ef   Thumb Code     2  gd32f10x_it.o(i.SVC_Handler)
-    SysTick_Handler                          0x080003f1   Thumb Code     2  gd32f10x_it.o(i.SysTick_Handler)
-    SystemInit                               0x080003f5   Thumb Code   196  system_gd32f10x.o(i.SystemInit)
-    UsageFault_Handler                       0x080004c9   Thumb Code     4  gd32f10x_it.o(i.UsageFault_Handler)
-    W25Q32_Enable                            0x080004cd   Thumb Code    30  w25q32.o(i.W25Q32_Enable)
-    W25Q32_Erase64K                          0x080004f1   Thumb Code    70  w25q32.o(i.W25Q32_Erase64K)
-    W25Q32_Init                              0x0800053d   Thumb Code    36  w25q32.o(i.W25Q32_Init)
-    W25Q32_Read                              0x08000565   Thumb Code    70  w25q32.o(i.W25Q32_Read)
-    W25Q32_WaitBusy                          0x080005b1   Thumb Code    44  w25q32.o(i.W25Q32_WaitBusy)
-    __scatterload_copy                       0x080005e1   Thumb Code    14  handlers.o(i.__scatterload_copy)
-    __scatterload_null                       0x080005ef   Thumb Code     2  handlers.o(i.__scatterload_null)
-    __scatterload_zeroinit                   0x080005f1   Thumb Code    14  handlers.o(i.__scatterload_zeroinit)
-    clear_ota_message_config_block           0x080005ff   Thumb Code    10  ota_message.o(i.clear_ota_message_config_block)
-    fmc_bank0_ready_wait                     0x08000609   Thumb Code    34  gd32f10x_fmc.o(i.fmc_bank0_ready_wait)
-    fmc_bank0_state_get                      0x0800062d   Thumb Code    44  gd32f10x_fmc.o(i.fmc_bank0_state_get)
-    fmc_bank1_ready_wait                     0x0800065d   Thumb Code    34  gd32f10x_fmc.o(i.fmc_bank1_ready_wait)
-    fmc_bank1_state_get                      0x08000681   Thumb Code    44  gd32f10x_fmc.o(i.fmc_bank1_state_get)
-    fmc_lock                                 0x080006b1   Thumb Code    34  gd32f10x_fmc.o(i.fmc_lock)
-    fmc_page_erase                           0x080006dd   Thumb Code   222  gd32f10x_fmc.o(i.fmc_page_erase)
-    fmc_unlock                               0x080007c9   Thumb Code    52  gd32f10x_fmc.o(i.fmc_unlock)
-    fmc_word_program                         0x0800080d   Thumb Code   178  gd32f10x_fmc.o(i.fmc_word_program)
-    fwdgt_counter_reload                     0x080008cd   Thumb Code    10  gd32f10x_fwdgt.o(i.fwdgt_counter_reload)
-    fwdgt_write_enable                       0x080008dd   Thumb Code    10  gd32f10x_fwdgt.o(i.fwdgt_write_enable)
-    get_config_params                        0x080008ed   Thumb Code     4  ota_message.o(i.get_config_params)
-    gpio_bit_reset                           0x080008f5   Thumb Code     4  gd32f10x_gpio.o(i.gpio_bit_reset)
-    gpio_bit_set                             0x080008f9   Thumb Code     4  gd32f10x_gpio.o(i.gpio_bit_set)
-    gpio_deinit                              0x080008fd   Thumb Code   186  gd32f10x_gpio.o(i.gpio_deinit)
-    gpio_init                                0x080009c1   Thumb Code   172  gd32f10x_gpio.o(i.gpio_init)
-    load_ota_message_config_params           0x08000a6d   Thumb Code    36  ota_message.o(i.load_ota_message_config_params)
-    main                                     0x08000a95   Thumb Code    42  main.o(i.main)
-    nvic_vector_table_set                    0x08000ac5   Thumb Code    16  gd32f10x_misc.o(i.nvic_vector_table_set)
-    rcu_periph_clock_enable                  0x08000add   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_clock_enable)
-    rcu_periph_reset_disable                 0x08000afd   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_reset_disable)
-    rcu_periph_reset_enable                  0x08000b1d   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_reset_enable)
-    spi_enable                               0x08000b3d   Thumb Code    10  gd32f10x_spi.o(i.spi_enable)
-    spi_i2s_data_receive                     0x08000b47   Thumb Code     8  gd32f10x_spi.o(i.spi_i2s_data_receive)
-    spi_i2s_data_transmit                    0x08000b4f   Thumb Code     4  gd32f10x_spi.o(i.spi_i2s_data_transmit)
-    spi_i2s_deinit                           0x08000b55   Thumb Code    82  gd32f10x_spi.o(i.spi_i2s_deinit)
-    spi_i2s_flag_get                         0x08000bad   Thumb Code    16  gd32f10x_spi.o(i.spi_i2s_flag_get)
-    spi_init                                 0x08000bbd   Thumb Code    50  gd32f10x_spi.o(i.spi_init)
-    systick_clksource_set                    0x08000cbd   Thumb Code    40  gd32f10x_misc.o(i.systick_clksource_set)
-    task_fwdgt_reload                        0x08000ce5   Thumb Code    12  main.o(i.task_fwdgt_reload)
-    Region$$Table$$Base                      0x08000cf0   Number         0  anon$$obj.o(Region$$Table)
-    Region$$Table$$Limit                     0x08000d10   Number         0  anon$$obj.o(Region$$Table)
+    __rt_lib_shutdown_fini                   0x08000141   Thumb Code     0  entry12b.o(.ARM.Collect$$$$0000000E)
+    __rt_final_cpp                           0x08000145   Thumb Code     0  entry10a.o(.ARM.Collect$$$$0000000F)
+    __rt_final_exit                          0x08000145   Thumb Code     0  entry11a.o(.ARM.Collect$$$$00000011)
+    MSR_SP                                   0x08000149   Thumb Code     6  boot.o(.emb_text)
+    Reset_Handler                            0x08000151   Thumb Code     8  startup_gd32f10x_xd.o(.text)
+    ADC0_1_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    ADC2_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    CAN0_EWMC_IRQHandler                     0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    CAN0_RX1_IRQHandler                      0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel0_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel1_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel2_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel3_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel4_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel5_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA0_Channel6_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA1_Channel0_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA1_Channel1_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA1_Channel2_IRQHandler                 0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    DMA1_Channel3_4_IRQHandler               0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXMC_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI0_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI10_15_IRQHandler                     0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI1_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI2_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI3_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI4_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    EXTI5_9_IRQHandler                       0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    FMC_IRQHandler                           0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    I2C0_ER_IRQHandler                       0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    I2C0_EV_IRQHandler                       0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    I2C1_ER_IRQHandler                       0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    I2C1_EV_IRQHandler                       0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    LVD_IRQHandler                           0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    RCU_IRQHandler                           0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    RTC_Alarm_IRQHandler                     0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    RTC_IRQHandler                           0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    SDIO_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    SPI0_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    SPI1_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    SPI2_IRQHandler                          0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TAMPER_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER0_BRK_TIMER8_IRQHandler             0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER0_Channel_IRQHandler                0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER0_TRG_CMT_TIMER10_IRQHandler        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER0_UP_TIMER9_IRQHandler              0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER1_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER2_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER3_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER4_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER5_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER6_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER7_BRK_TIMER11_IRQHandler            0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER7_Channel_IRQHandler                0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER7_TRG_CMT_TIMER13_IRQHandler        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    TIMER7_UP_TIMER12_IRQHandler             0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    UART3_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    UART4_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USART0_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USART1_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USART2_IRQHandler                        0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USBD_HP_CAN0_TX_IRQHandler               0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USBD_LP_CAN0_RX0_IRQHandler              0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    USBD_WKUP_IRQHandler                     0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    WWDGT_IRQHandler                         0x0800016b   Thumb Code     0  startup_gd32f10x_xd.o(.text)
+    __aeabi_memset                           0x08000175   Thumb Code    14  memseta.o(.text)
+    __aeabi_memset4                          0x08000175   Thumb Code     0  memseta.o(.text)
+    __aeabi_memset8                          0x08000175   Thumb Code     0  memseta.o(.text)
+    __aeabi_memclr                           0x08000183   Thumb Code     4  memseta.o(.text)
+    __aeabi_memclr4                          0x08000183   Thumb Code     0  memseta.o(.text)
+    __aeabi_memclr8                          0x08000183   Thumb Code     0  memseta.o(.text)
+    _memset$wrapper                          0x08000187   Thumb Code    18  memseta.o(.text)
+    __scatterload                            0x08000199   Thumb Code    28  init.o(.text)
+    __scatterload_rt2                        0x08000199   Thumb Code     0  init.o(.text)
+    BootLoader_Brance                        0x080001bd   Thumb Code   136  boot.o(i.BootLoader_Brance)
+    BootLoader_Clear                         0x0800024d   Thumb Code    16  boot.o(i.BootLoader_Clear)
+    BusFault_Handler                         0x08000265   Thumb Code     4  gd32f10x_it.o(i.BusFault_Handler)
+    DebugMon_Handler                         0x08000269   Thumb Code     2  gd32f10x_it.o(i.DebugMon_Handler)
+    Delay_Init                               0x0800026b   Thumb Code    10  delay.o(i.Delay_Init)
+    Delay_Ms                                 0x08000275   Thumb Code    26  delay.o(i.Delay_Ms)
+    Delay_Us                                 0x0800028f   Thumb Code    58  delay.o(i.Delay_Us)
+    FLASH_ErasePage                          0x080002c9   Thumb Code    38  fmc.o(i.FLASH_ErasePage)
+    FLASH_Read                               0x080002f1   Thumb Code    80  fmc.o(i.FLASH_Read)
+    FLASH_Write                              0x08000345   Thumb Code   326  fmc.o(i.FLASH_Write)
+    FLASH_WriteNotErase                      0x08000495   Thumb Code    60  fmc.o(i.FLASH_WriteNotErase)
+    GD32_EraseFlash                          0x080004d5   Thumb Code   208  fmc.o(i.GD32_EraseFlash)
+    HardFault_Handler                        0x080005a9   Thumb Code     4  gd32f10x_it.o(i.HardFault_Handler)
+    LOAD_A                                   0x080005ad   Thumb Code    44  boot.o(i.LOAD_A)
+    MemManage_Handler                        0x080005e1   Thumb Code     4  gd32f10x_it.o(i.MemManage_Handler)
+    NMI_Handler                              0x080005e5   Thumb Code     2  gd32f10x_it.o(i.NMI_Handler)
+    PendSV_Handler                           0x080005e7   Thumb Code     2  gd32f10x_it.o(i.PendSV_Handler)
+    SPI0_Init                                0x080005e9   Thumb Code    94  spi.o(i.SPI0_Init)
+    SVC_Handler                              0x08000651   Thumb Code     2  gd32f10x_it.o(i.SVC_Handler)
+    SysTick_Handler                          0x08000653   Thumb Code     2  gd32f10x_it.o(i.SysTick_Handler)
+    SystemInit                               0x08000655   Thumb Code   196  system_gd32f10x.o(i.SystemInit)
+    UsageFault_Handler                       0x08000729   Thumb Code     4  gd32f10x_it.o(i.UsageFault_Handler)
+    W25Q32_Init                              0x0800072d   Thumb Code    36  w25q32.o(i.W25Q32_Init)
+    __scatterload_copy                       0x08000755   Thumb Code    14  handlers.o(i.__scatterload_copy)
+    __scatterload_null                       0x08000763   Thumb Code     2  handlers.o(i.__scatterload_null)
+    __scatterload_zeroinit                   0x08000765   Thumb Code    14  handlers.o(i.__scatterload_zeroinit)
+    clear_ota_message_config_block           0x08000773   Thumb Code    12  ota_message.o(i.clear_ota_message_config_block)
+    fmc_bank0_ready_wait                     0x0800077f   Thumb Code    34  gd32f10x_fmc.o(i.fmc_bank0_ready_wait)
+    fmc_bank0_state_get                      0x080007a1   Thumb Code    44  gd32f10x_fmc.o(i.fmc_bank0_state_get)
+    fmc_bank1_ready_wait                     0x080007d1   Thumb Code    34  gd32f10x_fmc.o(i.fmc_bank1_ready_wait)
+    fmc_bank1_state_get                      0x080007f5   Thumb Code    44  gd32f10x_fmc.o(i.fmc_bank1_state_get)
+    fmc_halfword_program                     0x08000825   Thumb Code   178  gd32f10x_fmc.o(i.fmc_halfword_program)
+    fmc_lock                                 0x080008e5   Thumb Code    34  gd32f10x_fmc.o(i.fmc_lock)
+    fmc_page_erase                           0x08000911   Thumb Code   222  gd32f10x_fmc.o(i.fmc_page_erase)
+    fmc_unlock                               0x080009fd   Thumb Code    52  gd32f10x_fmc.o(i.fmc_unlock)
+    fwdgt_counter_reload                     0x08000a41   Thumb Code    10  gd32f10x_fwdgt.o(i.fwdgt_counter_reload)
+    fwdgt_write_enable                       0x08000a51   Thumb Code    10  gd32f10x_fwdgt.o(i.fwdgt_write_enable)
+    get_config_params                        0x08000a61   Thumb Code     4  ota_message.o(i.get_config_params)
+    gpio_bit_set                             0x08000a69   Thumb Code     4  gd32f10x_gpio.o(i.gpio_bit_set)
+    gpio_deinit                              0x08000a6d   Thumb Code   186  gd32f10x_gpio.o(i.gpio_deinit)
+    gpio_init                                0x08000b31   Thumb Code   172  gd32f10x_gpio.o(i.gpio_init)
+    load_ota_message_config_params           0x08000bdd   Thumb Code    38  ota_message.o(i.load_ota_message_config_params)
+    main                                     0x08000c0d   Thumb Code    46  main.o(i.main)
+    my_test                                  0x08000c41   Thumb Code    48  main.o(i.my_test)
+    nvic_vector_table_set                    0x08000c79   Thumb Code    16  gd32f10x_misc.o(i.nvic_vector_table_set)
+    rcu_periph_clock_enable                  0x08000c91   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_clock_enable)
+    rcu_periph_reset_disable                 0x08000cb1   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_reset_disable)
+    rcu_periph_reset_enable                  0x08000cd1   Thumb Code    28  gd32f10x_rcu.o(i.rcu_periph_reset_enable)
+    spi_enable                               0x08000cf1   Thumb Code    10  gd32f10x_spi.o(i.spi_enable)
+    spi_i2s_deinit                           0x08000cfd   Thumb Code    82  gd32f10x_spi.o(i.spi_i2s_deinit)
+    spi_init                                 0x08000d55   Thumb Code    50  gd32f10x_spi.o(i.spi_init)
+    systick_clksource_set                    0x08000e55   Thumb Code    40  gd32f10x_misc.o(i.systick_clksource_set)
+    task_fwdgt_reload                        0x08000e7d   Thumb Code    12  main.o(i.task_fwdgt_reload)
+    Region$$Table$$Base                      0x08000e88   Number         0  anon$$obj.o(Region$$Table)
+    Region$$Table$$Limit                     0x08000ea8   Number         0  anon$$obj.o(Region$$Table)
     load_A                                   0x20000000   Data           4  boot.o(.data)
-    __initial_sp                             0x20001010   Data           0  startup_gd32f10x_xd.o(STACK)
+    UpDataA                                  0x2000000c   Data           8  main.o(.data)
+    __initial_sp                             0x20001820   Data           0  startup_gd32f10x_xd.o(STACK)
 
 
 
@@ -605,104 +632,100 @@ Memory Map of the image
 
   Image Entry point : 0x08000131
 
-  Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000d1c, Max: 0x00005000, ABSOLUTE)
+  Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000ec4, Max: 0x00005000, ABSOLUTE)
 
-    Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000d10, Max: 0x00005000, ABSOLUTE)
+    Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00000ea8, Max: 0x00005000, ABSOLUTE)
 
     Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
 
-    0x08000000   0x08000000   0x00000130   Data   RO           85    RESET               startup_gd32f10x_xd.o
-    0x08000130   0x08000130   0x00000000   Code   RO         1390  * .ARM.Collect$$$$00000000  mc_w.l(entry.o)
-    0x08000130   0x08000130   0x00000004   Code   RO         1395    .ARM.Collect$$$$00000001  mc_w.l(entry2.o)
-    0x08000134   0x08000134   0x00000004   Code   RO         1398    .ARM.Collect$$$$00000004  mc_w.l(entry5.o)
-    0x08000138   0x08000138   0x00000000   Code   RO         1400    .ARM.Collect$$$$00000008  mc_w.l(entry7b.o)
-    0x08000138   0x08000138   0x00000000   Code   RO         1402    .ARM.Collect$$$$0000000A  mc_w.l(entry8b.o)
-    0x08000138   0x08000138   0x00000008   Code   RO         1403    .ARM.Collect$$$$0000000B  mc_w.l(entry9a.o)
-    0x08000140   0x08000140   0x00000000   Code   RO         1405    .ARM.Collect$$$$0000000D  mc_w.l(entry10a.o)
-    0x08000140   0x08000140   0x00000000   Code   RO         1407    .ARM.Collect$$$$0000000F  mc_w.l(entry11a.o)
-    0x08000140   0x08000140   0x00000004   Code   RO         1396    .ARM.Collect$$$$00002712  mc_w.l(entry2.o)
-    0x08000144   0x08000144   0x00000006   Code   RO           92    .emb_text           boot.o
-    0x0800014a   0x0800014a   0x00000002   PAD
-    0x0800014c   0x0800014c   0x00000024   Code   RO           86    .text               startup_gd32f10x_xd.o
-    0x08000170   0x08000170   0x00000024   Code   RO         1393    .text               mc_w.l(memseta.o)
-    0x08000194   0x08000194   0x00000024   Code   RO         1409    .text               mc_w.l(init.o)
-    0x080001b8   0x080001b8   0x000000a0   Code   RO           93    i.BootLoader_Brance  boot.o
-    0x08000258   0x08000258   0x00000018   Code   RO           94    i.BootLoader_Clear  boot.o
-    0x08000270   0x08000270   0x00000004   Code   RO          216    i.BusFault_Handler  gd32f10x_it.o
-    0x08000274   0x08000274   0x00000002   Code   RO          217    i.DebugMon_Handler  gd32f10x_it.o
-    0x08000276   0x08000276   0x0000000a   Code   RO          158    i.Delay_Init        delay.o
-    0x08000280   0x08000280   0x00000030   Code   RO          190    i.GD32_EraseFlash   fmc.o
-    0x080002b0   0x080002b0   0x00000026   Code   RO          191    i.GD32_WriteFlash   fmc.o
-    0x080002d6   0x080002d6   0x00000004   Code   RO          218    i.HardFault_Handler  gd32f10x_it.o
-    0x080002da   0x080002da   0x00000002   PAD
-    0x080002dc   0x080002dc   0x00000034   Code   RO           95    i.LOAD_A            boot.o
-    0x08000310   0x08000310   0x00000004   Code   RO          219    i.MemManage_Handler  gd32f10x_it.o
-    0x08000314   0x08000314   0x00000002   Code   RO          220    i.NMI_Handler       gd32f10x_it.o
-    0x08000316   0x08000316   0x00000002   Code   RO          221    i.PendSV_Handler    gd32f10x_it.o
-    0x08000318   0x08000318   0x00000068   Code   RO          287    i.SPI0_Init         spi.o
-    0x08000380   0x08000380   0x0000001c   Code   RO          288    i.SPI0_Read         spi.o
-    0x0800039c   0x0800039c   0x00000038   Code   RO          289    i.SPI0_ReadWriteByte  spi.o
-    0x080003d4   0x080003d4   0x0000001a   Code   RO          290    i.SPI0_Write        spi.o
-    0x080003ee   0x080003ee   0x00000002   Code   RO          222    i.SVC_Handler       gd32f10x_it.o
-    0x080003f0   0x080003f0   0x00000002   Code   RO          223    i.SysTick_Handler   gd32f10x_it.o
-    0x080003f2   0x080003f2   0x00000002   PAD
-    0x080003f4   0x080003f4   0x000000d4   Code   RO            3    i.SystemInit        system_gd32f10x.o
-    0x080004c8   0x080004c8   0x00000004   Code   RO          224    i.UsageFault_Handler  gd32f10x_it.o
-    0x080004cc   0x080004cc   0x00000024   Code   RO          328    i.W25Q32_Enable     w25q32.o
-    0x080004f0   0x080004f0   0x0000004c   Code   RO          329    i.W25Q32_Erase64K   w25q32.o
-    0x0800053c   0x0800053c   0x00000028   Code   RO          330    i.W25Q32_Init       w25q32.o
-    0x08000564   0x08000564   0x0000004c   Code   RO          332    i.W25Q32_Read       w25q32.o
-    0x080005b0   0x080005b0   0x00000030   Code   RO          333    i.W25Q32_WaitBusy   w25q32.o
-    0x080005e0   0x080005e0   0x0000000e   Code   RO         1413    i.__scatterload_copy  mc_w.l(handlers.o)
-    0x080005ee   0x080005ee   0x00000002   Code   RO         1414    i.__scatterload_null  mc_w.l(handlers.o)
-    0x080005f0   0x080005f0   0x0000000e   Code   RO         1415    i.__scatterload_zeroinit  mc_w.l(handlers.o)
-    0x080005fe   0x080005fe   0x0000000a   Code   RO          378    i.clear_ota_message_config_block  ota_message.o
-    0x08000608   0x08000608   0x00000022   Code   RO          888    i.fmc_bank0_ready_wait  gd32f10x_fmc.o
-    0x0800062a   0x0800062a   0x00000002   PAD
-    0x0800062c   0x0800062c   0x00000030   Code   RO          889    i.fmc_bank0_state_get  gd32f10x_fmc.o
-    0x0800065c   0x0800065c   0x00000022   Code   RO          893    i.fmc_bank1_ready_wait  gd32f10x_fmc.o
-    0x0800067e   0x0800067e   0x00000002   PAD
-    0x08000680   0x08000680   0x00000030   Code   RO          894    i.fmc_bank1_state_get  gd32f10x_fmc.o
-    0x080006b0   0x080006b0   0x0000002c   Code   RO          903    i.fmc_lock          gd32f10x_fmc.o
-    0x080006dc   0x080006dc   0x000000ec   Code   RO          905    i.fmc_page_erase    gd32f10x_fmc.o
-    0x080007c8   0x080007c8   0x00000044   Code   RO          906    i.fmc_unlock        gd32f10x_fmc.o
-    0x0800080c   0x0800080c   0x000000c0   Code   RO          907    i.fmc_word_program  gd32f10x_fmc.o
-    0x080008cc   0x080008cc   0x00000010   Code   RO         1299    i.fwdgt_counter_reload  gd32f10x_fwdgt.o
-    0x080008dc   0x080008dc   0x00000010   Code   RO         1305    i.fwdgt_write_enable  gd32f10x_fwdgt.o
-    0x080008ec   0x080008ec   0x00000008   Code   RO          379    i.get_config_params  ota_message.o
-    0x080008f4   0x080008f4   0x00000004   Code   RO          771    i.gpio_bit_reset    gd32f10x_gpio.o
-    0x080008f8   0x080008f8   0x00000004   Code   RO          772    i.gpio_bit_set      gd32f10x_gpio.o
-    0x080008fc   0x080008fc   0x000000c4   Code   RO          774    i.gpio_deinit       gd32f10x_gpio.o
-    0x080009c0   0x080009c0   0x000000ac   Code   RO          779    i.gpio_init         gd32f10x_gpio.o
-    0x08000a6c   0x08000a6c   0x00000028   Code   RO          380    i.load_ota_message_config_params  ota_message.o
-    0x08000a94   0x08000a94   0x00000030   Code   RO         1360    i.main              main.o
-    0x08000ac4   0x08000ac4   0x00000018   Code   RO          487    i.nvic_vector_table_set  gd32f10x_misc.o
-    0x08000adc   0x08000adc   0x00000020   Code   RO          565    i.rcu_periph_clock_enable  gd32f10x_rcu.o
-    0x08000afc   0x08000afc   0x00000020   Code   RO          568    i.rcu_periph_reset_disable  gd32f10x_rcu.o
-    0x08000b1c   0x08000b1c   0x00000020   Code   RO          569    i.rcu_periph_reset_enable  gd32f10x_rcu.o
-    0x08000b3c   0x08000b3c   0x0000000a   Code   RO         1119    i.spi_enable        gd32f10x_spi.o
-    0x08000b46   0x08000b46   0x00000008   Code   RO         1121    i.spi_i2s_data_receive  gd32f10x_spi.o
-    0x08000b4e   0x08000b4e   0x00000004   Code   RO         1122    i.spi_i2s_data_transmit  gd32f10x_spi.o
-    0x08000b52   0x08000b52   0x00000002   PAD
-    0x08000b54   0x08000b54   0x00000058   Code   RO         1123    i.spi_i2s_deinit    gd32f10x_spi.o
-    0x08000bac   0x08000bac   0x00000010   Code   RO         1124    i.spi_i2s_flag_get  gd32f10x_spi.o
-    0x08000bbc   0x08000bbc   0x00000032   Code   RO         1128    i.spi_init          gd32f10x_spi.o
-    0x08000bee   0x08000bee   0x00000002   PAD
-    0x08000bf0   0x08000bf0   0x000000c4   Code   RO            4    i.system_clock_108m_hxtal  system_gd32f10x.o
-    0x08000cb4   0x08000cb4   0x00000008   Code   RO            5    i.system_clock_config  system_gd32f10x.o
-    0x08000cbc   0x08000cbc   0x00000028   Code   RO          490    i.systick_clksource_set  gd32f10x_misc.o
-    0x08000ce4   0x08000ce4   0x0000000c   Code   RO         1361    i.task_fwdgt_reload  main.o
-    0x08000cf0   0x08000cf0   0x00000020   Data   RO         1411    Region$$Table       anon$$obj.o
-
-
-    Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08000d10, Size: 0x00001010, Max: 0x00018000, ABSOLUTE)
+    0x08000000   0x08000000   0x00000130   Data   RO          136    RESET               startup_gd32f10x_xd.o
+    0x08000130   0x08000130   0x00000000   Code   RO         1479  * .ARM.Collect$$$$00000000  mc_w.l(entry.o)
+    0x08000130   0x08000130   0x00000004   Code   RO         1484    .ARM.Collect$$$$00000001  mc_w.l(entry2.o)
+    0x08000134   0x08000134   0x00000004   Code   RO         1487    .ARM.Collect$$$$00000004  mc_w.l(entry5.o)
+    0x08000138   0x08000138   0x00000000   Code   RO         1489    .ARM.Collect$$$$00000008  mc_w.l(entry7b.o)
+    0x08000138   0x08000138   0x00000000   Code   RO         1491    .ARM.Collect$$$$0000000A  mc_w.l(entry8b.o)
+    0x08000138   0x08000138   0x00000008   Code   RO         1492    .ARM.Collect$$$$0000000B  mc_w.l(entry9a.o)
+    0x08000140   0x08000140   0x00000004   Code   RO         1499    .ARM.Collect$$$$0000000E  mc_w.l(entry12b.o)
+    0x08000144   0x08000144   0x00000000   Code   RO         1494    .ARM.Collect$$$$0000000F  mc_w.l(entry10a.o)
+    0x08000144   0x08000144   0x00000000   Code   RO         1496    .ARM.Collect$$$$00000011  mc_w.l(entry11a.o)
+    0x08000144   0x08000144   0x00000004   Code   RO         1485    .ARM.Collect$$$$00002712  mc_w.l(entry2.o)
+    0x08000148   0x08000148   0x00000006   Code   RO          143    .emb_text           boot.o
+    0x0800014e   0x0800014e   0x00000002   PAD
+    0x08000150   0x08000150   0x00000024   Code   RO          137    .text               startup_gd32f10x_xd.o
+    0x08000174   0x08000174   0x00000024   Code   RO         1482    .text               mc_w.l(memseta.o)
+    0x08000198   0x08000198   0x00000024   Code   RO         1500    .text               mc_w.l(init.o)
+    0x080001bc   0x080001bc   0x00000090   Code   RO          144    i.BootLoader_Brance  boot.o
+    0x0800024c   0x0800024c   0x00000018   Code   RO          145    i.BootLoader_Clear  boot.o
+    0x08000264   0x08000264   0x00000004   Code   RO          299    i.BusFault_Handler  gd32f10x_it.o
+    0x08000268   0x08000268   0x00000002   Code   RO          300    i.DebugMon_Handler  gd32f10x_it.o
+    0x0800026a   0x0800026a   0x0000000a   Code   RO          209    i.Delay_Init        delay.o
+    0x08000274   0x08000274   0x0000001a   Code   RO          210    i.Delay_Ms          delay.o
+    0x0800028e   0x0800028e   0x0000003a   Code   RO          211    i.Delay_Us          delay.o
+    0x080002c8   0x080002c8   0x00000026   Code   RO          241    i.FLASH_ErasePage   fmc.o
+    0x080002ee   0x080002ee   0x00000002   PAD
+    0x080002f0   0x080002f0   0x00000054   Code   RO          243    i.FLASH_Read        fmc.o
+    0x08000344   0x08000344   0x00000150   Code   RO          244    i.FLASH_Write       fmc.o
+    0x08000494   0x08000494   0x00000040   Code   RO          245    i.FLASH_WriteNotErase  fmc.o
+    0x080004d4   0x080004d4   0x000000d4   Code   RO          246    i.GD32_EraseFlash   fmc.o
+    0x080005a8   0x080005a8   0x00000004   Code   RO          301    i.HardFault_Handler  gd32f10x_it.o
+    0x080005ac   0x080005ac   0x00000034   Code   RO          146    i.LOAD_A            boot.o
+    0x080005e0   0x080005e0   0x00000004   Code   RO          302    i.MemManage_Handler  gd32f10x_it.o
+    0x080005e4   0x080005e4   0x00000002   Code   RO          303    i.NMI_Handler       gd32f10x_it.o
+    0x080005e6   0x080005e6   0x00000002   Code   RO          304    i.PendSV_Handler    gd32f10x_it.o
+    0x080005e8   0x080005e8   0x00000068   Code   RO          370    i.SPI0_Init         spi.o
+    0x08000650   0x08000650   0x00000002   Code   RO          305    i.SVC_Handler       gd32f10x_it.o
+    0x08000652   0x08000652   0x00000002   Code   RO          306    i.SysTick_Handler   gd32f10x_it.o
+    0x08000654   0x08000654   0x000000d4   Code   RO            3    i.SystemInit        system_gd32f10x.o
+    0x08000728   0x08000728   0x00000004   Code   RO          307    i.UsageFault_Handler  gd32f10x_it.o
+    0x0800072c   0x0800072c   0x00000028   Code   RO          413    i.W25Q32_Init       w25q32.o
+    0x08000754   0x08000754   0x0000000e   Code   RO         1504    i.__scatterload_copy  mc_w.l(handlers.o)
+    0x08000762   0x08000762   0x00000002   Code   RO         1505    i.__scatterload_null  mc_w.l(handlers.o)
+    0x08000764   0x08000764   0x0000000e   Code   RO         1506    i.__scatterload_zeroinit  mc_w.l(handlers.o)
+    0x08000772   0x08000772   0x0000000c   Code   RO          461    i.clear_ota_message_config_block  ota_message.o
+    0x0800077e   0x0800077e   0x00000022   Code   RO          971    i.fmc_bank0_ready_wait  gd32f10x_fmc.o
+    0x080007a0   0x080007a0   0x00000030   Code   RO          972    i.fmc_bank0_state_get  gd32f10x_fmc.o
+    0x080007d0   0x080007d0   0x00000022   Code   RO          976    i.fmc_bank1_ready_wait  gd32f10x_fmc.o
+    0x080007f2   0x080007f2   0x00000002   PAD
+    0x080007f4   0x080007f4   0x00000030   Code   RO          977    i.fmc_bank1_state_get  gd32f10x_fmc.o
+    0x08000824   0x08000824   0x000000c0   Code   RO          981    i.fmc_halfword_program  gd32f10x_fmc.o
+    0x080008e4   0x080008e4   0x0000002c   Code   RO          986    i.fmc_lock          gd32f10x_fmc.o
+    0x08000910   0x08000910   0x000000ec   Code   RO          988    i.fmc_page_erase    gd32f10x_fmc.o
+    0x080009fc   0x080009fc   0x00000044   Code   RO          989    i.fmc_unlock        gd32f10x_fmc.o
+    0x08000a40   0x08000a40   0x00000010   Code   RO         1382    i.fwdgt_counter_reload  gd32f10x_fwdgt.o
+    0x08000a50   0x08000a50   0x00000010   Code   RO         1388    i.fwdgt_write_enable  gd32f10x_fwdgt.o
+    0x08000a60   0x08000a60   0x00000008   Code   RO          462    i.get_config_params  ota_message.o
+    0x08000a68   0x08000a68   0x00000004   Code   RO          855    i.gpio_bit_set      gd32f10x_gpio.o
+    0x08000a6c   0x08000a6c   0x000000c4   Code   RO          857    i.gpio_deinit       gd32f10x_gpio.o
+    0x08000b30   0x08000b30   0x000000ac   Code   RO          862    i.gpio_init         gd32f10x_gpio.o
+    0x08000bdc   0x08000bdc   0x00000030   Code   RO          463    i.load_ota_message_config_params  ota_message.o
+    0x08000c0c   0x08000c0c   0x00000034   Code   RO         1443    i.main              main.o
+    0x08000c40   0x08000c40   0x00000038   Code   RO         1444    i.my_test           main.o
+    0x08000c78   0x08000c78   0x00000018   Code   RO          570    i.nvic_vector_table_set  gd32f10x_misc.o
+    0x08000c90   0x08000c90   0x00000020   Code   RO          648    i.rcu_periph_clock_enable  gd32f10x_rcu.o
+    0x08000cb0   0x08000cb0   0x00000020   Code   RO          651    i.rcu_periph_reset_disable  gd32f10x_rcu.o
+    0x08000cd0   0x08000cd0   0x00000020   Code   RO          652    i.rcu_periph_reset_enable  gd32f10x_rcu.o
+    0x08000cf0   0x08000cf0   0x0000000a   Code   RO         1202    i.spi_enable        gd32f10x_spi.o
+    0x08000cfa   0x08000cfa   0x00000002   PAD
+    0x08000cfc   0x08000cfc   0x00000058   Code   RO         1206    i.spi_i2s_deinit    gd32f10x_spi.o
+    0x08000d54   0x08000d54   0x00000032   Code   RO         1211    i.spi_init          gd32f10x_spi.o
+    0x08000d86   0x08000d86   0x00000002   PAD
+    0x08000d88   0x08000d88   0x000000c4   Code   RO            4    i.system_clock_108m_hxtal  system_gd32f10x.o
+    0x08000e4c   0x08000e4c   0x00000008   Code   RO            5    i.system_clock_config  system_gd32f10x.o
+    0x08000e54   0x08000e54   0x00000028   Code   RO          573    i.systick_clksource_set  gd32f10x_misc.o
+    0x08000e7c   0x08000e7c   0x0000000c   Code   RO         1445    i.task_fwdgt_reload  main.o
+    0x08000e88   0x08000e88   0x00000020   Data   RO         1502    Region$$Table       anon$$obj.o
+
+
+    Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08000ea8, Size: 0x00001820, Max: 0x00018000, ABSOLUTE)
 
     Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
 
-    0x20000000   0x08000d10   0x00000004   Data   RW           96    .data               boot.o
-    0x20000004   0x08000d14   0x00000008   Data   RW          383    .data               ota_message.o
-    0x2000000c   0x08000d1c   0x00000004   PAD
-    0x20000010        -       0x00001000   Zero   RW           83    STACK               startup_gd32f10x_xd.o
+    0x20000000   0x08000ea8   0x00000004   Data   RW          147    .data               boot.o
+    0x20000004   0x08000eac   0x00000008   Data   RW          466    .data               ota_message.o
+    0x2000000c   0x08000eb4   0x00000010   Data   RW         1446    .data               main.o
+    0x2000001c        -       0x00000800   Zero   RW          248    .bss                fmc.o
+    0x2000081c   0x08000ec4   0x00000004   PAD
+    0x20000820        -       0x00001000   Zero   RW          134    STACK               startup_gd32f10x_xd.o
 
 
 ==============================================================================
@@ -712,27 +735,27 @@ Image component sizes
 
       Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name
 
-       242         22          0          4          0       2993   boot.o
-        10          0          0          0          0        405   delay.o
-        86          0          0          0          0       1540   fmc.o
-       704         62          0          0          0       4314   gd32f10x_fmc.o
-        32         12          0          0          0        840   gd32f10x_fwdgt.o
-       376         10          0          0          0       2298   gd32f10x_gpio.o
-        26          0          0          0          0       3626   gd32f10x_it.o
-        64          8          0          0          0        992   gd32f10x_misc.o
-        96         12          0          0          0       1403   gd32f10x_rcu.o
-       176          6          0          0          0       3807   gd32f10x_spi.o
-        60          6          0          0          0       1303   main.o
-        58          8          0          8          0       2170   ota_message.o
-       214         16          0          0          0       2482   spi.o
-        36          8        304          0       4096        776   startup_gd32f10x_xd.o
-       416         30          0          0          0      35625   system_gd32f10x.o
-       276         26          0          0          0       2888   w25q32.o
+       226         24          0          4          0       3001   boot.o
+        94          0          0          0          0       1327   delay.o
+       734         22          0          0       2048       4809   fmc.o
+       704         62          0          0          0       4386   gd32f10x_fmc.o
+        32         12          0          0          0        856   gd32f10x_fwdgt.o
+       372         10          0          0          0       1841   gd32f10x_gpio.o
+        26          0          0          0          0       3698   gd32f10x_it.o
+        64          8          0          0          0       1008   gd32f10x_misc.o
+        96         12          0          0          0       1427   gd32f10x_rcu.o
+       148          6          0          0          0       2285   gd32f10x_spi.o
+       120         14          0         16          0       2659   main.o
+        68         14          0          8          0       2182   ota_message.o
+       104         10          0          0          0        504   spi.o
+        36          8        304          0       4096        784   startup_gd32f10x_xd.o
+       416         30          0          0          0      31361   system_gd32f10x.o
+        40          4          0          0          0        430   w25q32.o
 
     ----------------------------------------------------------------------
-      2886        226        336         12       4100      67462   Object Totals
+      3290        236        336         28       6148      62558   Object Totals
          0          0         32          0          0          0   (incl. Generated)
-        14          0          0          0          4          0   (incl. Padding)
+        10          0          0          0          4          0   (incl. Padding)
 
     ----------------------------------------------------------------------
 
@@ -741,6 +764,7 @@ Image component sizes
          0          0          0          0          0          0   entry.o
          0          0          0          0          0          0   entry10a.o
          0          0          0          0          0          0   entry11a.o
+         4          0          0          0          0          0   entry12b.o
          8          4          0          0          0          0   entry2.o
          4          0          0          0          0          0   entry5.o
          0          0          0          0          0          0   entry7b.o
@@ -751,17 +775,17 @@ Image component sizes
         36          0          0          0          0        108   memseta.o
 
     ----------------------------------------------------------------------
-       122         16          0          0          0        176   Library Totals
+       126         16          0          0          0        176   Library Totals
          0          0          0          0          0          0   (incl. Padding)
 
     ----------------------------------------------------------------------
 
       Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Name
 
-       122         16          0          0          0        176   mc_w.l
+       126         16          0          0          0        176   mc_w.l
 
     ----------------------------------------------------------------------
-       122         16          0          0          0        176   Library Totals
+       126         16          0          0          0        176   Library Totals
 
     ----------------------------------------------------------------------
 
@@ -770,15 +794,15 @@ Image component sizes
 
       Code (inc. data)   RO Data    RW Data    ZI Data      Debug   
 
-      3008        242        336         12       4100      65034   Grand Totals
-      3008        242        336         12       4100      65034   ELF Image Totals
-      3008        242        336         12          0          0   ROM Totals
+      3416        252        336         28       6148      60390   Grand Totals
+      3416        252        336         28       6148      60390   ELF Image Totals
+      3416        252        336         28          0          0   ROM Totals
 
 ==============================================================================
 
-    Total RO  Size (Code + RO Data)                 3344 (   3.27kB)
-    Total RW  Size (RW Data + ZI Data)              4112 (   4.02kB)
-    Total ROM Size (Code + RO Data + RW Data)       3356 (   3.28kB)
+    Total RO  Size (Code + RO Data)                 3752 (   3.66kB)
+    Total RW  Size (RW Data + ZI Data)              6176 (   6.03kB)
+    Total ROM Size (Code + RO Data + RW Data)       3780 (   3.69kB)
 
 ==============================================================================
 

+ 5 - 6
bootloader/USER/Listings/startup_gd32f10x_xd.lst

@@ -608,12 +608,11 @@ ARM Macro Assembler    Page 10
               00000000 
               00000000 
 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
-ork --depend=..\obj\startup_gd32f10x_xd.d -o..\obj\startup_gd32f10x_xd.o -I.\RT
-E\_bootloader -ID:\workSoftware\stm32Software\mdk\mdkpack\GigaDevice\GD32F10x_D
-FP\2.0.3\Device\Include -ID:\workSoftware\stm32Software\mdk\mdkcore\ARM\CMSIS\I
-nclude --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 529"
- --predefine="GD32F10X_XD SETA 1" --predefine="USE_STDPERIPH_DRIVER SETA 1" --l
-ist=.\listings\startup_gd32f10x_xd.lst ..\CMSIS\Source\startup_gd32f10x_xd.s
+ork --depend=..\obj\startup_gd32f10x_xd.d -o..\obj\startup_gd32f10x_xd.o -ID:\s
+oftware\MDK5\Pack\GigaDevice\GD32F10x_DFP\2.1.0\Device\Include --predefine="__M
+ICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 536" --predefine="GD32F10X_
+XD SETA 1" --predefine="USE_STDPERIPH_DRIVER SETA 1" --list=.\listings\startup_
+gd32f10x_xd.lst ..\CMSIS\Source\startup_gd32f10x_xd.s
 
 
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3673 - 0
bootloader/USER/bootloader.uvguix.IBM


+ 85 - 4
bootloader/USER/bootloader.uvoptx

@@ -10,7 +10,7 @@
     <aExt>*.s*; *.src; *.a*</aExt>
     <oExt>*.obj; *.o</oExt>
     <lExt>*.lib</lExt>
-    <tExt>*.txt; *.h; *.inc</tExt>
+    <tExt>*.txt; *.h; *.inc; *.md</tExt>
     <pExt>*.plm</pExt>
     <CppX>*.cpp</CppX>
     <nMigrate>0</nMigrate>
@@ -145,7 +145,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69407005 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_XD.FLM -FS08000000 -FL0100000 -FP0($$Device:GD32F103VG$Flash\GD32F10x_XD.FLM)</Name>
+          <Name>-U69405423 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_XD.FLM -FS08000000 -FL0100000 -FP0($$Device:GD32F103VG$Flash\GD32F10x_XD.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -153,15 +153,96 @@
           <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0GD32F10x_XD -FS08000000 -FL0100000 -FP0($$Device:GD32F103VG$Flash\GD32F10x_XD.FLM))</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>16</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134220868</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>.\main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\bootloader\main.c\16</Expression>
+        </Bp>
+        <Bp>
+          <Number>1</Number>
+          <Type>0</Type>
+          <LineNumber>42</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134220824</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>.\main.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\bootloader\main.c\42</Expression>
+        </Bp>
+        <Bp>
+          <Number>2</Number>
+          <Type>0</Type>
+          <LineNumber>41</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134220766</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\HW\Source\ota_message.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\bootloader\../HW/Source/ota_message.c\41</Expression>
+        </Bp>
+        <Bp>
+          <Number>3</Number>
+          <Type>0</Type>
+          <LineNumber>37</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134219054</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>..\HW\Source\fmc.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\bootloader\../HW/Source/fmc.c\37</Expression>
+        </Bp>
+      </Breakpoint>
       <MemoryWindow1>
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>0</SubType>
-          <ItemText>ota_message</ItemText>
+          <ItemText>0x08069000</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
+      <MemoryWindow2>
+        <Mm>
+          <WinNumber>2</WinNumber>
+          <SubType>0</SubType>
+          <ItemText>0x08005000</ItemText>
+          <AccSizeX>0</AccSizeX>
+        </Mm>
+      </MemoryWindow2>
+      <MemoryWindow3>
+        <Mm>
+          <WinNumber>3</WinNumber>
+          <SubType>0</SubType>
+          <ItemText>0x8037000</ItemText>
+          <AccSizeX>0</AccSizeX>
+        </Mm>
+      </MemoryWindow3>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>

+ 4 - 3
bootloader/USER/bootloader.uvprojx

@@ -10,13 +10,13 @@
       <TargetName>bootloader</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
-      <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
+      <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
       <uAC6>0</uAC6>
       <TargetOption>
         <TargetCommonOption>
           <Device>GD32F103VG</Device>
           <Vendor>GigaDevice</Vendor>
-          <PackID>GigaDevice.GD32F10x_DFP.2.0.3</PackID>
+          <PackID>GigaDevice.GD32F10x_DFP.2.1.0</PackID>
           <PackURL>https://gd32mcu.com/data/documents/pack/</PackURL>
           <Cpu>IRAM(0x20000000,0x00018000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
@@ -185,6 +185,7 @@
             <uocXRam>0</uocXRam>
             <RvdsVP>0</RvdsVP>
             <RvdsMve>0</RvdsMve>
+            <RvdsCdeCp>0</RvdsCdeCp>
             <hadIRAM2>0</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>
@@ -351,7 +352,7 @@
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
             <useXO>0</useXO>
-            <uClangAs>0</uClangAs>
+            <ClangAsOpt>4</ClangAsOpt>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>

+ 26 - 1
bootloader/USER/main.c

@@ -9,12 +9,37 @@
 void task_fwdgt_reload(void);
 OTA_STRUCT UpDataA;           //A区更新用到的结构体
 
+void my_test(void)
+{
+	static OTA_MESSAGE ota_message = {0};
+	uint32_t i = 0;
+	ota_message.otaflag = 1;
+	ota_message.XmodemByte = 200 * 1024;
+	//往地址0x08070000写OTA_MESSAGE结构体
+	// GD32_WriteFlash(OTA_EVENT_START_ADDR,&ota_message,sizeof(OTA_MESSAGE));
+	fmc_state_enum state;
+	// state = fmc_word_program((uint32_t)0x08070000,(uint32_t)(1));
+	// fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR);
+	// state = fmc_word_program((uint32_t)0x08070004,(uint32_t)(100 * 1024));
+	// fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR);
+	// FLASH_WriteNotErase(0x08070000,&ota_message,sizeof(OTA_MESSAGE)/2);
+	// FLASH_ErasePage(0x08069000,1);
+	GD32_EraseFlash(210,1);
+	FLASH_Write(0x08069000,&ota_message,sizeof(OTA_MESSAGE)/2);
+	i = *(uint32_t*)(0x08069000);
+	i = *(uint32_t*)(0x08069004);
+	// FLASH_Write(0x08069008,&ota_message,sizeof(OTA_MESSAGE)/2);
+	
+	Delay_Ms(100);
+}
+
 int main(void)
 {
 	Delay_Init();          
-	// W25Q32_Init();	//弃用w25q32改用fmc
+	W25Q32_Init();	//弃用w25q32改用fmc存储
 	OTA_MESSAGE *ota_data;
 	task_fwdgt_reload();
+	// my_test();
 	if(load_ota_message_config_params()==0)
 	{
 		//ota事件产生了,进入Bootloader分支

+ 16 - 6
bootloader/USER/main.h

@@ -2,14 +2,24 @@
 #define MAIN_H
 
 #include "stdint.h"
-
+/*
+flash分区设计:
+0x08000000~0x08004FFF   bootleader;20KB=10页
+0x08005000~0x08036FFF   app;200KB=100页
+0x08037000~0x08068FFF	download;200KB=100页
+0x08069000~0x080707FF	OTA_EVENT_BLOCK;2KB=1页
+0x08070800~0x0807FFFF	剩余内存;62KB=31页
+0x08080000~0x082FFFFF   剩余内存;2.5MB=640页
+*/
 #define  GD32_FLASH_SADDR   0x08000000                                             //FLASH起始地址
-#define  GD32_PAGE_SIZE     1024                                                   //FLASH扇区大小
-#define  GD32_PAGE_NUM      1024                                                     //FLASH总扇区个数
-#define  GD32_B_PAGE_NUM    20                                                     //B区扇区个数
-#define  GD32_A_PAGE_NUM    GD32_PAGE_NUM - GD32_B_PAGE_NUM                        //A区扇区个数
-#define  GD32_A_START_PAGE  GD32_B_PAGE_NUM                                        //A区起始扇区编号
+#define  GD32_PAGE_SIZE     2048                                                   //FLASH扇区大小
+#define  GD32_PAGE_NUM      256                                                   //FLASH总扇区个数
+#define  GD32_B_PAGE_NUM    10                                                     //B区扇区个数
+#define  GD32_A_PAGE_NUM    100                        							   //A区扇区个数
+#define  GD32_D_PAGE_NUM    100                        							   //D区扇区个数
+#define  GD32_A_START_PAGE  GD32_B_PAGE_NUM                                        //APP区起始扇区编号
 #define  GD32_A_SADDR       GD32_FLASH_SADDR + GD32_A_START_PAGE * GD32_PAGE_SIZE  //A区起始地址
+#define  GD32_D_SADDR       GD32_FLASH_SADDR + (GD32_A_START_PAGE + GD32_A_PAGE_NUM) * GD32_PAGE_SIZE  //D区起始地址
 
 
 #define OTA_INFOCB_SIZE sizeof(OTA_InfoCB)    //OTA相关的信息结构体占用的字节长度