Release v4.3.3
diff --git a/Include/stm32f100xb.h b/Include/stm32f100xb.h
index ab78980..e98e4c4 100644
--- a/Include/stm32f100xb.h
+++ b/Include/stm32f100xb.h
@@ -640,7 +640,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f100xe.h b/Include/stm32f100xe.h
index 334c4dc..abe71ee 100644
--- a/Include/stm32f100xe.h
+++ b/Include/stm32f100xe.h
@@ -749,7 +749,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f101x6.h b/Include/stm32f101x6.h
index 250962d..dd80728 100644
--- a/Include/stm32f101x6.h
+++ b/Include/stm32f101x6.h
@@ -565,7 +565,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f101xb.h b/Include/stm32f101xb.h
index aa524a9..c9128f0 100644
--- a/Include/stm32f101xb.h
+++ b/Include/stm32f101xb.h
@@ -580,7 +580,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f101xe.h b/Include/stm32f101xe.h
index bde6d7a..3e9c2f6 100644
--- a/Include/stm32f101xe.h
+++ b/Include/stm32f101xe.h
@@ -749,7 +749,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f101xg.h b/Include/stm32f101xg.h
index 35a142d..a0bfda1 100644
--- a/Include/stm32f101xg.h
+++ b/Include/stm32f101xg.h
@@ -774,7 +774,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f102x6.h b/Include/stm32f102x6.h
index 9917ec3..bd5aceb 100644
--- a/Include/stm32f102x6.h
+++ b/Include/stm32f102x6.h
@@ -605,7 +605,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f102xb.h b/Include/stm32f102xb.h
index f5d0042..d43ebe7 100644
--- a/Include/stm32f102xb.h
+++ b/Include/stm32f102xb.h
@@ -618,7 +618,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f103x6.h b/Include/stm32f103x6.h
index a484645..d88068a 100644
--- a/Include/stm32f103x6.h
+++ b/Include/stm32f103x6.h
@@ -680,7 +680,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f103xb.h b/Include/stm32f103xb.h
index 4bd7e5d..8171849 100644
--- a/Include/stm32f103xb.h
+++ b/Include/stm32f103xb.h
@@ -695,7 +695,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f103xe.h b/Include/stm32f103xe.h
index 1001fd8..9725d78 100644
--- a/Include/stm32f103xe.h
+++ b/Include/stm32f103xe.h
@@ -904,7 +904,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f103xg.h b/Include/stm32f103xg.h
index f74beff..6e6c7f0 100644
--- a/Include/stm32f103xg.h
+++ b/Include/stm32f103xg.h
@@ -923,7 +923,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f105xc.h b/Include/stm32f105xc.h
index 7421593..ffe062d 100644
--- a/Include/stm32f105xc.h
+++ b/Include/stm32f105xc.h
@@ -889,7 +889,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f107xc.h b/Include/stm32f107xc.h
index 5c40b46..c80d6a1 100644
--- a/Include/stm32f107xc.h
+++ b/Include/stm32f107xc.h
@@ -969,7 +969,15 @@
 /** @addtogroup Exported_constants
   * @{
   */
-  
+
+  /** @addtogroup Hardware_Constant_Definition
+    * @{
+    */
+#define LSI_STARTUP_TIME                85U /*!< LSI Maximum startup time in us */
+  /**
+    * @}
+    */
+
   /** @addtogroup Peripheral_Registers_Bits_Definition
   * @{
   */
diff --git a/Include/stm32f1xx.h b/Include/stm32f1xx.h
index e34cc48..6817f52 100644
--- a/Include/stm32f1xx.h
+++ b/Include/stm32f1xx.h
@@ -90,11 +90,11 @@
 #endif /* USE_HAL_DRIVER */
 
 /**
-  * @brief CMSIS Device version number V4.3.2
+  * @brief CMSIS Device version number V4.3.3
   */
 #define __STM32F1_CMSIS_VERSION_MAIN   (0x04) /*!< [31:24] main version */
 #define __STM32F1_CMSIS_VERSION_SUB1   (0x03) /*!< [23:16] sub1 version */
-#define __STM32F1_CMSIS_VERSION_SUB2   (0x02) /*!< [15:8]  sub2 version */
+#define __STM32F1_CMSIS_VERSION_SUB2   (0x03) /*!< [15:8]  sub2 version */
 #define __STM32F1_CMSIS_VERSION_RC     (0x00) /*!< [7:0]  release candidate */ 
 #define __STM32F1_CMSIS_VERSION        ((__STM32F1_CMSIS_VERSION_MAIN << 24)\
                                        |(__STM32F1_CMSIS_VERSION_SUB1 << 16)\
@@ -191,6 +191,61 @@
 
 #define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL))) 
 
+/* Use of CMSIS compiler intrinsics for register exclusive access */
+/* Atomic 32-bit register access macro to set one or several bits */
+#define ATOMIC_SET_BIT(REG, BIT)                             \
+  do {                                                       \
+    uint32_t val;                                            \
+    do {                                                     \
+      val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT);       \
+    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
+  } while(0)
+
+/* Atomic 32-bit register access macro to clear one or several bits */
+#define ATOMIC_CLEAR_BIT(REG, BIT)                           \
+  do {                                                       \
+    uint32_t val;                                            \
+    do {                                                     \
+      val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT);      \
+    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
+  } while(0)
+
+/* Atomic 32-bit register access macro to clear and set one or several bits */
+#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK)                          \
+  do {                                                                     \
+    uint32_t val;                                                          \
+    do {                                                                   \
+      val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
+    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U);               \
+  } while(0)
+
+/* Atomic 16-bit register access macro to set one or several bits */
+#define ATOMIC_SETH_BIT(REG, BIT)                            \
+  do {                                                       \
+    uint16_t val;                                            \
+    do {                                                     \
+      val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT);       \
+    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
+  } while(0)
+
+/* Atomic 16-bit register access macro to clear one or several bits */
+#define ATOMIC_CLEARH_BIT(REG, BIT)                          \
+  do {                                                       \
+    uint16_t val;                                            \
+    do {                                                     \
+      val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT);      \
+    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
+  } while(0)
+
+/* Atomic 16-bit register access macro to clear and set one or several bits */
+#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK)                         \
+  do {                                                                     \
+    uint16_t val;                                                          \
+    do {                                                                   \
+      val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
+    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U);               \
+  } while(0)
+
 
 /**
   * @}
diff --git a/README.md b/README.md
index 294bcb8..9f892fc 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,7 @@
 Tag v4.3.1 | Tag v5.4.0_cm3 | Tag v1.8.0
 Tag v4.3.1 | Tag v5.4.0_cm3 | Tag v1.8.1
 Tag v4.3.2 | Tag v5.4.0_cm3 | Tag v1.8.2
+Tag v4.3.3 | Tag v5.4.0_cm3 | Tag v1.8.4
 
 The full **STM32CubeF1** MCU package is available [here](https://github.com/STMicroelectronics/STM32CubeF1).
 
diff --git a/Release_Notes.html b/Release_Notes.html
index 38ec2ab..06d61db 100644
--- a/Release_Notes.html
+++ b/Release_Notes.html
@@ -5,7 +5,7 @@
   <meta name="generator" content="pandoc" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
   <title>Release Notes for STM32F1xx CMSIS</title>
-  <style>
+  <style type="text/css">
       code{white-space: pre-wrap;}
       span.smallcaps{font-variant: small-caps;}
       span.underline{text-decoration: underline;}
@@ -38,10 +38,22 @@
 <div class="col-sm-12 col-lg-8">
 <h1 id="update-history"><strong>Update History</strong></h1>
 <div class="collapse">
-<input type="checkbox" id="collapse-section4_3_2" checked aria-hidden="true"> <label for="collapse-section4_3_2" aria-hidden="true"><strong>V4.3.2 / 07-September-2020</strong></label>
+<input type="checkbox" id="collapse-section4_3_3" checked aria-hidden="true"> <label for="collapse-section4_3_3" aria-hidden="true"><strong>V4.3.3 / 21-May-2021</strong></label>
 <div>
 <h2 id="main-changes">Main Changes</h2>
 <ul>
+<li>Improve GCC startup files robustness.</li>
+<li>Add LSI maximum startup time datasheet value: LSI_STARTUP_TIME.</li>
+<li>Add atomic register access macros.</li>
+<li>File “startup_stm32f105xc.s” updated to call static constructors.</li>
+</ul>
+</div>
+</div>
+<div class="collapse">
+<input type="checkbox" id="collapse-section4_3_2" aria-hidden="true"> <label for="collapse-section4_3_2" aria-hidden="true"><strong>V4.3.2 / 07-September-2020</strong></label>
+<div>
+<h2 id="main-changes-1">Main Changes</h2>
+<ul>
 <li>Protect Vector table modification following SRAM or FLASH preprocessor directive by a generic preprocessor directive : USER_VECT_TAB_ADDRESS</li>
 <li>SystemInit(): update to don’t reset RCC registers to its reset values.</li>
 <li>TIM:
@@ -58,7 +70,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_3_1" aria-hidden="true"> <label for="collapse-section4_3_1" aria-hidden="true"><strong>V4.3.1 / 26-June-2019</strong></label>
 <div>
-<h2 id="main-changes-1">Main Changes</h2>
+<h2 id="main-changes-2">Main Changes</h2>
 <ul>
 <li>Fix MISRA C 2012 Compilation errors: update to use “UL” postfix for bits mask definitions(_Msk) and memory/peripheral base addresses</li>
 <li>Fix wrong initialization value for “SystemCoreClock” in System_stm32f1xx.c file</li>
@@ -93,7 +105,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_3_0" aria-hidden="true"> <label for="collapse-section4_3_0" aria-hidden="true"><strong>V4.3.0 / 09-October-2018</strong></label>
 <div>
-<h2 id="main-changes-2">Main Changes</h2>
+<h2 id="main-changes-3">Main Changes</h2>
 <ul>
 <li>Add missing IS_TIM_SYNCHRO_INSTANCE macro definition to check TIM SYNCHRO feature instance support.</li>
 </ul>
@@ -102,7 +114,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_2_0" aria-hidden="true"> <label for="collapse-section4_2_0" aria-hidden="true"><strong>V4.2.0 / 31-March-2017</strong></label>
 <div>
-<h2 id="main-changes-3">Main Changes</h2>
+<h2 id="main-changes-4">Main Changes</h2>
 <ul>
 <li>Use _Pos and _Mask macros for all Bit Definitions</li>
 <li>Remove Core-CM3 bit definitions from CMSIS devices drivers: duplicated with bit definitions in core_cm3.h.</li>
@@ -142,7 +154,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_1_0" aria-hidden="true"> <label for="collapse-section4_1_0" aria-hidden="true"><strong>V4.1.0 / 29-April-2016</strong></label>
 <div>
-<h2 id="main-changes-4">Main Changes</h2>
+<h2 id="main-changes-5">Main Changes</h2>
 <ul>
 <li>Add _Pos and _Msk defines to be used with _VAL2FLD(field, value) and _FLD2VAL(field, value).
 <ul>
@@ -161,7 +173,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_0_2" aria-hidden="true"> <label for="collapse-section4_0_2" aria-hidden="true"><strong>V4.0.2 / 18-December-2016</strong></label>
 <div>
-<h2 id="main-changes-5">Main Changes</h2>
+<h2 id="main-changes-6">Main Changes</h2>
 <ul>
 <li>FLASH: Add FLASH_OBR_DATA0 and FLASH_OBR_DATA1 for FLASH_OBR register.</li>
 <li>WWDG: Align bit name across all STM32 families.
@@ -191,7 +203,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_0_1" aria-hidden="true"> <label for="collapse-section4_0_1" aria-hidden="true"><strong>V4.0.1 / 31-July-2015</strong></label>
 <div>
-<h2 id="main-changes-6">Main Changes</h2>
+<h2 id="main-changes-7">Main Changes</h2>
 <ul>
 <li>Remove __IO or __I on constant table declaration (AHBPrescTable in system_stm32f1xx.c) due to issue with mbed C++ code. The table content was filled with random value at initialization phase.</li>
 <li>uint8_t alignment done on CMSIS CRC registers structure.</li>
@@ -202,7 +214,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section4_0_0" aria-hidden="true"> <label for="collapse-section4_0_0" aria-hidden="true"><strong>V4.0.0 / 16-December-2014</strong></label>
 <div>
-<h2 id="main-changes-7">Main Changes</h2>
+<h2 id="main-changes-8">Main Changes</h2>
 <ul>
 <li>Update based on STM32Cube specification</li>
 <li><strong>This version has to be used only with STM32CubeF1 based development</strong></li>
@@ -212,7 +224,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_6_3" aria-hidden="true"> <label for="collapse-section3_6_3" aria-hidden="true"><strong>V3.6.3 / 10-April-2014</strong></label>
 <div>
-<h2 id="main-changes-8">Main Changes</h2>
+<h2 id="main-changes-9">Main Changes</h2>
 <ul>
 <li>Update startup files for EWARM toolchain to cope with compiler enhancement of the V7.10 version.</li>
 </ul>
@@ -221,7 +233,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_6_2" aria-hidden="true"> <label for="collapse-section3_6_2" aria-hidden="true"><strong>V3.6.2 / 28-February-2013</strong></label>
 <div>
-<h2 id="main-changes-9">Main Changes</h2>
+<h2 id="main-changes-10">Main Changes</h2>
 <ul>
 <li>stm32f10x.h
 <ul>
@@ -234,7 +246,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_6_1" aria-hidden="true"> <label for="collapse-section3_6_1" aria-hidden="true"><strong>V3.6.1 / 09-March-2012</strong></label>
 <div>
-<h2 id="main-changes-10">Main Changes</h2>
+<h2 id="main-changes-11">Main Changes</h2>
 <ul>
 <li>All source files: license disclaimer text update and add link to the License file on ST Internet.</li>
 </ul>
@@ -243,7 +255,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_6_0" aria-hidden="true"> <label for="collapse-section3_6_0" aria-hidden="true"><strong>V3.6.0 / 27-January-2012</strong></label>
 <div>
-<h2 id="main-changes-11">Main Changes</h2>
+<h2 id="main-changes-12">Main Changes</h2>
 <ul>
 <li>Update directory structure to be compliant with CMSIS V2.1</li>
 <li>All source files: update disclaimer to add reference to the new license agreement</li>
@@ -272,7 +284,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_5_0" aria-hidden="true"> <label for="collapse-section3_5_0" aria-hidden="true"><strong>V3.5.0 / 11-March-2011</strong></label>
 <div>
-<h2 id="main-changes-12">Main Changes</h2>
+<h2 id="main-changes-13">Main Changes</h2>
 <ul>
 <li><em>stm32f10x.h</em> and <em>startup_stm32f10x_hd_vl.s</em> files: remove the FSMC interrupt definition for STM32F10x High-density Value line devices.</li>
 <li>system_stm32f10x.c file provided within the CMSIS folder.</li>
@@ -282,7 +294,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_4_0" aria-hidden="true"> <label for="collapse-section3_4_0" aria-hidden="true"><strong>V3.4.0 / 15-October-2010</strong></label>
 <div>
-<h2 id="main-changes-13">Main Changes</h2>
+<h2 id="main-changes-14">Main Changes</h2>
 <ul>
 <li>General
 <ul>
@@ -318,7 +330,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_3_0" aria-hidden="true"> <label for="collapse-section3_3_0" aria-hidden="true"><strong>V3.3.0 / 16-April-2010</strong></label>
 <div>
-<h2 id="main-changes-14">Main Changes</h2>
+<h2 id="main-changes-15">Main Changes</h2>
 <ul>
 <li>General
 <ul>
@@ -357,7 +369,7 @@
 <div class="collapse">
 <input type="checkbox" id="collapse-section3_2_0" aria-hidden="true"> <label for="collapse-section3_2_0" aria-hidden="true"><strong>V3.2.0 / 01-March-2010</strong></label>
 <div>
-<h2 id="main-changes-15">Main Changes</h2>
+<h2 id="main-changes-16">Main Changes</h2>
 <ul>
 <li>General
 <ul>
diff --git a/Source/Templates/arm/startup_stm32f101xg.s b/Source/Templates/arm/startup_stm32f101xg.s
index f8e7500..309ac0e 100644
--- a/Source/Templates/arm/startup_stm32f101xg.s
+++ b/Source/Templates/arm/startup_stm32f101xg.s
@@ -93,7 +93,7 @@
                 DCD     DMA1_Channel5_IRQHandler      ; DMA1 Channel 5
                 DCD     DMA1_Channel6_IRQHandler      ; DMA1 Channel 6
                 DCD     DMA1_Channel7_IRQHandler      ; DMA1 Channel 7
-                DCD     ADC1_2_IRQHandler             ; ADC1_2
+                DCD     ADC1_IRQHandler               ; ADC1
                 DCD     0                          ; Reserved
                 DCD     0                          ; Reserved
                 DCD     0                          ; Reserved
@@ -216,7 +216,7 @@
                 EXPORT  DMA1_Channel5_IRQHandler      [WEAK]
                 EXPORT  DMA1_Channel6_IRQHandler      [WEAK]
                 EXPORT  DMA1_Channel7_IRQHandler      [WEAK]
-                EXPORT  ADC1_2_IRQHandler             [WEAK]
+                EXPORT  ADC1_IRQHandler               [WEAK]
                 EXPORT  EXTI9_5_IRQHandler            [WEAK]
                 EXPORT  TIM9_IRQHandler               [WEAK]
                 EXPORT  TIM10_IRQHandler              [WEAK]
@@ -268,7 +268,7 @@
 DMA1_Channel5_IRQHandler
 DMA1_Channel6_IRQHandler
 DMA1_Channel7_IRQHandler
-ADC1_2_IRQHandler
+ADC1_IRQHandler
 EXTI9_5_IRQHandler
 TIM9_IRQHandler
 TIM10_IRQHandler
diff --git a/Source/Templates/gcc/startup_stm32f100xb.s b/Source/Templates/gcc/startup_stm32f100xb.s
index 1d166fd..0d8575b 100644
--- a/Source/Templates/gcc/startup_stm32f100xb.s
+++ b/Source/Templates/gcc/startup_stm32f100xb.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f100xe.s b/Source/Templates/gcc/startup_stm32f100xe.s
index 62d9fc7..a430da4 100644
--- a/Source/Templates/gcc/startup_stm32f100xe.s
+++ b/Source/Templates/gcc/startup_stm32f100xe.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f101x6.s b/Source/Templates/gcc/startup_stm32f101x6.s
index 9c1f473..2f3df08 100644
--- a/Source/Templates/gcc/startup_stm32f101x6.s
+++ b/Source/Templates/gcc/startup_stm32f101x6.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f101xb.s b/Source/Templates/gcc/startup_stm32f101xb.s
index 5f41f59..abec1e4 100644
--- a/Source/Templates/gcc/startup_stm32f101xb.s
+++ b/Source/Templates/gcc/startup_stm32f101xb.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f101xe.s b/Source/Templates/gcc/startup_stm32f101xe.s
index e18a210..0af2f20 100644
--- a/Source/Templates/gcc/startup_stm32f101xe.s
+++ b/Source/Templates/gcc/startup_stm32f101xe.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f101xg.s b/Source/Templates/gcc/startup_stm32f101xg.s
index 3d7f007..4e8a95f 100644
--- a/Source/Templates/gcc/startup_stm32f101xg.s
+++ b/Source/Templates/gcc/startup_stm32f101xg.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
@@ -158,7 +161,7 @@
   .word  DMA1_Channel5_IRQHandler
   .word  DMA1_Channel6_IRQHandler
   .word  DMA1_Channel7_IRQHandler
-  .word  ADC1_2_IRQHandler
+  .word  ADC1_IRQHandler
   .word  0
   .word  0
   .word  0
@@ -335,8 +338,8 @@
   .weak  DMA1_Channel7_IRQHandler
   .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
 
-  .weak  ADC1_2_IRQHandler
-  .thumb_set ADC1_2_IRQHandler,Default_Handler
+  .weak  ADC1_IRQHandler
+  .thumb_set ADC1_IRQHandler,Default_Handler
 
   .weak  EXTI9_5_IRQHandler
   .thumb_set EXTI9_5_IRQHandler,Default_Handler
diff --git a/Source/Templates/gcc/startup_stm32f102x6.s b/Source/Templates/gcc/startup_stm32f102x6.s
index 569eddb..97437a1 100644
--- a/Source/Templates/gcc/startup_stm32f102x6.s
+++ b/Source/Templates/gcc/startup_stm32f102x6.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f102xb.s b/Source/Templates/gcc/startup_stm32f102xb.s
index 3427546..914cc31 100644
--- a/Source/Templates/gcc/startup_stm32f102xb.s
+++ b/Source/Templates/gcc/startup_stm32f102xb.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f103x6.s b/Source/Templates/gcc/startup_stm32f103x6.s
index a0ffda6..ac5cb81 100644
--- a/Source/Templates/gcc/startup_stm32f103x6.s
+++ b/Source/Templates/gcc/startup_stm32f103x6.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f103xb.s b/Source/Templates/gcc/startup_stm32f103xb.s
index a463e88..f2b7fbe 100644
--- a/Source/Templates/gcc/startup_stm32f103xb.s
+++ b/Source/Templates/gcc/startup_stm32f103xb.s
@@ -62,31 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f103xe.s b/Source/Templates/gcc/startup_stm32f103xe.s
index 11d37f3..ef23cee 100644
--- a/Source/Templates/gcc/startup_stm32f103xe.s
+++ b/Source/Templates/gcc/startup_stm32f103xe.s
@@ -64,31 +64,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
-  ldr r2, =_sbss
-  b LoopFillZerobss
+  
 /* Zero fill the bss segment. */
-FillZerobss:
+  ldr r2, =_sbss
+  ldr r4, =_ebss
   movs r3, #0
-  str r3, [r2], #4
+  b LoopFillZerobss
+
+FillZerobss:
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f103xg.s b/Source/Templates/gcc/startup_stm32f103xg.s
index c102b95..514b2a3 100644
--- a/Source/Templates/gcc/startup_stm32f103xg.s
+++ b/Source/Templates/gcc/startup_stm32f103xg.s
@@ -62,32 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
+  
+/* Zero fill the bss segment. */
   ldr r2, =_sbss
+  ldr r4, =_ebss
+  movs r3, #0
   b LoopFillZerobss
 
-/* Zero fill the bss segment. */
 FillZerobss:
-  movs r3, #0
-  str r3, [r2], #4
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/gcc/startup_stm32f105xc.s b/Source/Templates/gcc/startup_stm32f105xc.s
index 6fa3814..9ca591a 100644
--- a/Source/Templates/gcc/startup_stm32f105xc.s
+++ b/Source/Templates/gcc/startup_stm32f105xc.s
@@ -62,35 +62,39 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
+  
+/* Zero fill the bss segment. */
   ldr r2, =_sbss
+  ldr r4, =_ebss
+  movs r3, #0
   b LoopFillZerobss
 
-/* Zero fill the bss segment. */
 FillZerobss:
-  movs r3, #0
-  str r3, [r2], #4
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 /* Call the clock system intitialization function.*/
     bl  SystemInit
+/* Call static constructors */
+  bl __libc_init_array
 /* Call the application's entry point.*/
   bl main
   bx lr
diff --git a/Source/Templates/gcc/startup_stm32f107xc.s b/Source/Templates/gcc/startup_stm32f107xc.s
index b54cc4b..d28b3fd 100644
--- a/Source/Templates/gcc/startup_stm32f107xc.s
+++ b/Source/Templates/gcc/startup_stm32f107xc.s
@@ -62,32 +62,34 @@
 Reset_Handler:
 
 /* Copy the data segment initializers from flash to SRAM */
-  movs r1, #0
+  ldr r0, =_sdata
+  ldr r1, =_edata
+  ldr r2, =_sidata
+  movs r3, #0
   b LoopCopyDataInit
 
 CopyDataInit:
-  ldr r3, =_sidata
-  ldr r3, [r3, r1]
-  str r3, [r0, r1]
-  adds r1, r1, #4
+  ldr r4, [r2, r3]
+  str r4, [r0, r3]
+  adds r3, r3, #4
 
 LoopCopyDataInit:
-  ldr r0, =_sdata
-  ldr r3, =_edata
-  adds r2, r0, r1
-  cmp r2, r3
+  adds r4, r0, r3
+  cmp r4, r1
   bcc CopyDataInit
+  
+/* Zero fill the bss segment. */
   ldr r2, =_sbss
+  ldr r4, =_ebss
+  movs r3, #0
   b LoopFillZerobss
 
-/* Zero fill the bss segment. */
 FillZerobss:
-  movs r3, #0
-  str r3, [r2], #4
+  str  r3, [r2]
+  adds r2, r2, #4
 
 LoopFillZerobss:
-  ldr r3, = _ebss
-  cmp r2, r3
+  cmp r2, r4
   bcc FillZerobss
 
 /* Call the clock system intitialization function.*/
diff --git a/Source/Templates/iar/startup_stm32f101xg.s b/Source/Templates/iar/startup_stm32f101xg.s
index ca57f93..21ab456 100644
--- a/Source/Templates/iar/startup_stm32f101xg.s
+++ b/Source/Templates/iar/startup_stm32f101xg.s
@@ -92,7 +92,7 @@
         DCD     DMA1_Channel5_IRQHandler      ; DMA1 Channel 5
         DCD     DMA1_Channel6_IRQHandler      ; DMA1 Channel 6
         DCD     DMA1_Channel7_IRQHandler      ; DMA1 Channel 7
-        DCD     ADC1_2_IRQHandler             ; ADC1 & ADC2
+        DCD     ADC1_IRQHandler               ; ADC1
         DCD     0                         ; Reserved
         DCD     0                         ; Reserved
         DCD     0                         ; Reserved
@@ -283,10 +283,10 @@
 DMA1_Channel7_IRQHandler
         B DMA1_Channel7_IRQHandler
 
-        PUBWEAK ADC1_2_IRQHandler
+        PUBWEAK ADC1_IRQHandler
         SECTION .text:CODE:REORDER:NOROOT(1)
-ADC1_2_IRQHandler
-        B ADC1_2_IRQHandler
+ADC1_IRQHandler
+        B ADC1_IRQHandler
 
          PUBWEAK EXTI9_5_IRQHandler
         SECTION .text:CODE:REORDER:NOROOT(1)