openblt/Target/Demo/ARMCM3_STM32_Nucleo_STM32F1.../Boot/obj/nvm.lst

376 lines
24 KiB
Plaintext

1 .syntax unified
2 .cpu cortex-m3
3 .fpu softvfp
4 .eabi_attribute 20, 1
5 .eabi_attribute 21, 1
6 .eabi_attribute 23, 3
7 .eabi_attribute 24, 1
8 .eabi_attribute 25, 1
9 .eabi_attribute 26, 1
10 .eabi_attribute 30, 1
11 .eabi_attribute 34, 1
12 .eabi_attribute 18, 4
13 .thumb
14 .file "nvm.c"
15 .text
16 .Ltext0:
17 .cfi_sections .debug_frame
18 .section .text.NvmInit,"ax",%progbits
19 .align 2
20 .global NvmInit
21 .thumb
22 .thumb_func
24 NvmInit:
25 .LFB0:
26 .file 1 "../../../Source/ARMCM3_STM32/nvm.c"
1:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
2:../../../Source/ARMCM3_STM32/nvm.c **** * \file Source\ARMCM3_STM32\nvm.c
3:../../../Source/ARMCM3_STM32/nvm.c **** * \brief Bootloader non-volatile memory driver source file.
4:../../../Source/ARMCM3_STM32/nvm.c **** * \ingroup Target_ARMCM3_STM32
5:../../../Source/ARMCM3_STM32/nvm.c **** * \internal
6:../../../Source/ARMCM3_STM32/nvm.c **** *----------------------------------------------------------------------------------------
7:../../../Source/ARMCM3_STM32/nvm.c **** * C O P Y R I G H T
8:../../../Source/ARMCM3_STM32/nvm.c **** *----------------------------------------------------------------------------------------
9:../../../Source/ARMCM3_STM32/nvm.c **** * Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
10:../../../Source/ARMCM3_STM32/nvm.c **** *
11:../../../Source/ARMCM3_STM32/nvm.c **** *----------------------------------------------------------------------------------------
12:../../../Source/ARMCM3_STM32/nvm.c **** * L I C E N S E
13:../../../Source/ARMCM3_STM32/nvm.c **** *----------------------------------------------------------------------------------------
14:../../../Source/ARMCM3_STM32/nvm.c **** * This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
15:../../../Source/ARMCM3_STM32/nvm.c **** * modify it under the terms of the GNU General Public License as published by the Free
16:../../../Source/ARMCM3_STM32/nvm.c **** * Software Foundation, either version 3 of the License, or (at your option) any later
17:../../../Source/ARMCM3_STM32/nvm.c **** * version.
18:../../../Source/ARMCM3_STM32/nvm.c **** *
19:../../../Source/ARMCM3_STM32/nvm.c **** * OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
20:../../../Source/ARMCM3_STM32/nvm.c **** * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
21:../../../Source/ARMCM3_STM32/nvm.c **** * PURPOSE. See the GNU General Public License for more details.
22:../../../Source/ARMCM3_STM32/nvm.c **** *
23:../../../Source/ARMCM3_STM32/nvm.c **** * You should have received a copy of the GNU General Public License along with OpenBLT.
24:../../../Source/ARMCM3_STM32/nvm.c **** * If not, see <http://www.gnu.org/licenses/>.
25:../../../Source/ARMCM3_STM32/nvm.c **** *
26:../../../Source/ARMCM3_STM32/nvm.c **** * A special exception to the GPL is included to allow you to distribute a combined work
27:../../../Source/ARMCM3_STM32/nvm.c **** * that includes OpenBLT without being obliged to provide the source code for any
28:../../../Source/ARMCM3_STM32/nvm.c **** * proprietary components. The exception text is included at the bottom of the license
29:../../../Source/ARMCM3_STM32/nvm.c **** * file <license.html>.
30:../../../Source/ARMCM3_STM32/nvm.c **** *
31:../../../Source/ARMCM3_STM32/nvm.c **** * \endinternal
32:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
33:../../../Source/ARMCM3_STM32/nvm.c ****
34:../../../Source/ARMCM3_STM32/nvm.c **** /****************************************************************************************
35:../../../Source/ARMCM3_STM32/nvm.c **** * Include files
36:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
37:../../../Source/ARMCM3_STM32/nvm.c **** #include "boot.h" /* bootloader generic header */
38:../../../Source/ARMCM3_STM32/nvm.c ****
39:../../../Source/ARMCM3_STM32/nvm.c ****
40:../../../Source/ARMCM3_STM32/nvm.c **** /****************************************************************************************
41:../../../Source/ARMCM3_STM32/nvm.c **** * Hook functions
42:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
43:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
44:../../../Source/ARMCM3_STM32/nvm.c **** extern void NvmInitHook(void);
45:../../../Source/ARMCM3_STM32/nvm.c **** extern blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data);
46:../../../Source/ARMCM3_STM32/nvm.c **** extern blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len);
47:../../../Source/ARMCM3_STM32/nvm.c **** extern blt_bool NvmDoneHook(void);
48:../../../Source/ARMCM3_STM32/nvm.c **** #endif
49:../../../Source/ARMCM3_STM32/nvm.c ****
50:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0)
51:../../../Source/ARMCM3_STM32/nvm.c **** extern blt_bool NvmWriteChecksumHook(void);
52:../../../Source/ARMCM3_STM32/nvm.c **** extern blt_bool NvmVerifyChecksumHook(void);
53:../../../Source/ARMCM3_STM32/nvm.c **** #endif
54:../../../Source/ARMCM3_STM32/nvm.c ****
55:../../../Source/ARMCM3_STM32/nvm.c ****
56:../../../Source/ARMCM3_STM32/nvm.c ****
57:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
58:../../../Source/ARMCM3_STM32/nvm.c **** ** \brief Initializes the NVM driver.
59:../../../Source/ARMCM3_STM32/nvm.c **** ** \return none.
60:../../../Source/ARMCM3_STM32/nvm.c **** **
61:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
62:../../../Source/ARMCM3_STM32/nvm.c **** void NvmInit(void)
63:../../../Source/ARMCM3_STM32/nvm.c **** {
27 .loc 1 63 0
28 .cfi_startproc
29 @ args = 0, pretend = 0, frame = 0
30 @ frame_needed = 0, uses_anonymous_args = 0
31 0000 08B5 push {r3, lr}
32 .cfi_def_cfa_offset 8
33 .cfi_offset 3, -8
34 .cfi_offset 14, -4
64:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
65:../../../Source/ARMCM3_STM32/nvm.c **** /* give the application a chance to initialize a driver for operating on NVM
66:../../../Source/ARMCM3_STM32/nvm.c **** * that is not by default supported by this driver.
67:../../../Source/ARMCM3_STM32/nvm.c **** */
68:../../../Source/ARMCM3_STM32/nvm.c **** NvmInitHook();
69:../../../Source/ARMCM3_STM32/nvm.c **** #endif
70:../../../Source/ARMCM3_STM32/nvm.c ****
71:../../../Source/ARMCM3_STM32/nvm.c **** /* init the internal driver */
72:../../../Source/ARMCM3_STM32/nvm.c **** FlashInit();
35 .loc 1 72 0
36 0002 FFF7FEFF bl FlashInit
37 .LVL0:
38 0006 08BD pop {r3, pc}
39 .cfi_endproc
40 .LFE0:
42 .section .text.NvmWrite,"ax",%progbits
43 .align 2
44 .global NvmWrite
45 .thumb
46 .thumb_func
48 NvmWrite:
49 .LFB1:
73:../../../Source/ARMCM3_STM32/nvm.c **** } /*** end of NvmInit ***/
74:../../../Source/ARMCM3_STM32/nvm.c ****
75:../../../Source/ARMCM3_STM32/nvm.c ****
76:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
77:../../../Source/ARMCM3_STM32/nvm.c **** ** \brief Programs the non-volatile memory.
78:../../../Source/ARMCM3_STM32/nvm.c **** ** \param addr Start address.
79:../../../Source/ARMCM3_STM32/nvm.c **** ** \param len Length in bytes.
80:../../../Source/ARMCM3_STM32/nvm.c **** ** \param data Pointer to the data buffer.
81:../../../Source/ARMCM3_STM32/nvm.c **** ** \return BLT_TRUE if successful, BLT_FALSE otherwise.
82:../../../Source/ARMCM3_STM32/nvm.c **** **
83:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
84:../../../Source/ARMCM3_STM32/nvm.c **** blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
85:../../../Source/ARMCM3_STM32/nvm.c **** {
50 .loc 1 85 0
51 .cfi_startproc
52 @ args = 0, pretend = 0, frame = 0
53 @ frame_needed = 0, uses_anonymous_args = 0
54 .LVL1:
55 0000 08B5 push {r3, lr}
56 .cfi_def_cfa_offset 8
57 .cfi_offset 3, -8
58 .cfi_offset 14, -4
86:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
87:../../../Source/ARMCM3_STM32/nvm.c **** blt_int8u result = BLT_NVM_NOT_IN_RANGE;
88:../../../Source/ARMCM3_STM32/nvm.c **** #endif
89:../../../Source/ARMCM3_STM32/nvm.c ****
90:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
91:../../../Source/ARMCM3_STM32/nvm.c **** /* give the application a chance to operate on memory that is not by default supported
92:../../../Source/ARMCM3_STM32/nvm.c **** * by this driver.
93:../../../Source/ARMCM3_STM32/nvm.c **** */
94:../../../Source/ARMCM3_STM32/nvm.c **** result = NvmWriteHook(addr, len, data);
95:../../../Source/ARMCM3_STM32/nvm.c ****
96:../../../Source/ARMCM3_STM32/nvm.c **** /* process the return code */
97:../../../Source/ARMCM3_STM32/nvm.c **** if (result == BLT_NVM_OKAY)
98:../../../Source/ARMCM3_STM32/nvm.c **** {
99:../../../Source/ARMCM3_STM32/nvm.c **** /* data was within range of the additionally supported memory and succesfully
100:../../../Source/ARMCM3_STM32/nvm.c **** * programmed, so we are all done.
101:../../../Source/ARMCM3_STM32/nvm.c **** */
102:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_TRUE;
103:../../../Source/ARMCM3_STM32/nvm.c **** }
104:../../../Source/ARMCM3_STM32/nvm.c **** else if (result == BLT_NVM_ERROR)
105:../../../Source/ARMCM3_STM32/nvm.c **** {
106:../../../Source/ARMCM3_STM32/nvm.c **** /* data was within range of the additionally supported memory and attempted to be
107:../../../Source/ARMCM3_STM32/nvm.c **** * programmed, but an error occurred, so we can't continue.
108:../../../Source/ARMCM3_STM32/nvm.c **** */
109:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_FALSE;
110:../../../Source/ARMCM3_STM32/nvm.c **** }
111:../../../Source/ARMCM3_STM32/nvm.c **** #endif
112:../../../Source/ARMCM3_STM32/nvm.c ****
113:../../../Source/ARMCM3_STM32/nvm.c **** /* still here so the internal driver should try and perform the program operation */
114:../../../Source/ARMCM3_STM32/nvm.c **** return FlashWrite(addr, len, data);
59 .loc 1 114 0
60 0002 FFF7FEFF bl FlashWrite
61 .LVL2:
115:../../../Source/ARMCM3_STM32/nvm.c **** } /*** end of NvmWrite ***/
62 .loc 1 115 0
63 0006 08BD pop {r3, pc}
64 .cfi_endproc
65 .LFE1:
67 .section .text.NvmErase,"ax",%progbits
68 .align 2
69 .global NvmErase
70 .thumb
71 .thumb_func
73 NvmErase:
74 .LFB2:
116:../../../Source/ARMCM3_STM32/nvm.c ****
117:../../../Source/ARMCM3_STM32/nvm.c ****
118:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
119:../../../Source/ARMCM3_STM32/nvm.c **** ** \brief Erases the non-volatile memory.
120:../../../Source/ARMCM3_STM32/nvm.c **** ** \param addr Start address.
121:../../../Source/ARMCM3_STM32/nvm.c **** ** \param len Length in bytes.
122:../../../Source/ARMCM3_STM32/nvm.c **** ** \return BLT_TRUE if successful, BLT_FALSE otherwise.
123:../../../Source/ARMCM3_STM32/nvm.c **** **
124:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
125:../../../Source/ARMCM3_STM32/nvm.c **** blt_bool NvmErase(blt_addr addr, blt_int32u len)
126:../../../Source/ARMCM3_STM32/nvm.c **** {
75 .loc 1 126 0
76 .cfi_startproc
77 @ args = 0, pretend = 0, frame = 0
78 @ frame_needed = 0, uses_anonymous_args = 0
79 .LVL3:
80 0000 08B5 push {r3, lr}
81 .cfi_def_cfa_offset 8
82 .cfi_offset 3, -8
83 .cfi_offset 14, -4
127:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
128:../../../Source/ARMCM3_STM32/nvm.c **** blt_int8u result = BLT_NVM_NOT_IN_RANGE;
129:../../../Source/ARMCM3_STM32/nvm.c **** #endif
130:../../../Source/ARMCM3_STM32/nvm.c ****
131:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
132:../../../Source/ARMCM3_STM32/nvm.c **** /* give the application a chance to operate on memory that is not by default supported
133:../../../Source/ARMCM3_STM32/nvm.c **** * by this driver.
134:../../../Source/ARMCM3_STM32/nvm.c **** */
135:../../../Source/ARMCM3_STM32/nvm.c **** result = NvmEraseHook(addr, len);
136:../../../Source/ARMCM3_STM32/nvm.c ****
137:../../../Source/ARMCM3_STM32/nvm.c **** /* process the return code */
138:../../../Source/ARMCM3_STM32/nvm.c **** if (result == BLT_NVM_OKAY)
139:../../../Source/ARMCM3_STM32/nvm.c **** {
140:../../../Source/ARMCM3_STM32/nvm.c **** /* address was within range of the additionally supported memory and succesfully
141:../../../Source/ARMCM3_STM32/nvm.c **** * erased, so we are all done.
142:../../../Source/ARMCM3_STM32/nvm.c **** */
143:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_TRUE;
144:../../../Source/ARMCM3_STM32/nvm.c **** }
145:../../../Source/ARMCM3_STM32/nvm.c **** else if (result == BLT_NVM_ERROR)
146:../../../Source/ARMCM3_STM32/nvm.c **** {
147:../../../Source/ARMCM3_STM32/nvm.c **** /* address was within range of the additionally supported memory and attempted to be
148:../../../Source/ARMCM3_STM32/nvm.c **** * erased, but an error occurred, so we can't continue.
149:../../../Source/ARMCM3_STM32/nvm.c **** */
150:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_FALSE;
151:../../../Source/ARMCM3_STM32/nvm.c **** }
152:../../../Source/ARMCM3_STM32/nvm.c **** #endif
153:../../../Source/ARMCM3_STM32/nvm.c ****
154:../../../Source/ARMCM3_STM32/nvm.c **** /* still here so the internal driver should try and perform the erase operation */
155:../../../Source/ARMCM3_STM32/nvm.c **** return FlashErase(addr, len);
84 .loc 1 155 0
85 0002 FFF7FEFF bl FlashErase
86 .LVL4:
156:../../../Source/ARMCM3_STM32/nvm.c **** } /*** end of NvmErase ***/
87 .loc 1 156 0
88 0006 08BD pop {r3, pc}
89 .cfi_endproc
90 .LFE2:
92 .section .text.NvmVerifyChecksum,"ax",%progbits
93 .align 2
94 .global NvmVerifyChecksum
95 .thumb
96 .thumb_func
98 NvmVerifyChecksum:
99 .LFB3:
157:../../../Source/ARMCM3_STM32/nvm.c ****
158:../../../Source/ARMCM3_STM32/nvm.c ****
159:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
160:../../../Source/ARMCM3_STM32/nvm.c **** ** \brief Verifies the checksum, which indicates that a valid user program is
161:../../../Source/ARMCM3_STM32/nvm.c **** ** present and can be started.
162:../../../Source/ARMCM3_STM32/nvm.c **** ** \return BLT_TRUE if successful, BLT_FALSE otherwise.
163:../../../Source/ARMCM3_STM32/nvm.c **** **
164:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
165:../../../Source/ARMCM3_STM32/nvm.c **** blt_bool NvmVerifyChecksum(void)
166:../../../Source/ARMCM3_STM32/nvm.c **** {
100 .loc 1 166 0
101 .cfi_startproc
102 @ args = 0, pretend = 0, frame = 0
103 @ frame_needed = 0, uses_anonymous_args = 0
104 0000 08B5 push {r3, lr}
105 .cfi_def_cfa_offset 8
106 .cfi_offset 3, -8
107 .cfi_offset 14, -4
167:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0)
168:../../../Source/ARMCM3_STM32/nvm.c **** /* check checksum using the application specific method. */
169:../../../Source/ARMCM3_STM32/nvm.c **** return NvmVerifyChecksumHook();
170:../../../Source/ARMCM3_STM32/nvm.c **** #else
171:../../../Source/ARMCM3_STM32/nvm.c **** /* check checksum using the interally supported method. */
172:../../../Source/ARMCM3_STM32/nvm.c **** return FlashVerifyChecksum();
108 .loc 1 172 0
109 0002 FFF7FEFF bl FlashVerifyChecksum
110 .LVL5:
173:../../../Source/ARMCM3_STM32/nvm.c **** #endif
174:../../../Source/ARMCM3_STM32/nvm.c **** } /*** end of NvmVerifyChecksum ***/
111 .loc 1 174 0
112 0006 08BD pop {r3, pc}
113 .cfi_endproc
114 .LFE3:
116 .section .text.NvmDone,"ax",%progbits
117 .align 2
118 .global NvmDone
119 .thumb
120 .thumb_func
122 NvmDone:
123 .LFB4:
175:../../../Source/ARMCM3_STM32/nvm.c ****
176:../../../Source/ARMCM3_STM32/nvm.c ****
177:../../../Source/ARMCM3_STM32/nvm.c **** /************************************************************************************//**
178:../../../Source/ARMCM3_STM32/nvm.c **** ** \brief Once all erase and programming operations are completed, this
179:../../../Source/ARMCM3_STM32/nvm.c **** ** function is called, so at the end of the programming session and
180:../../../Source/ARMCM3_STM32/nvm.c **** ** right before a software reset is performed. It is used to calculate
181:../../../Source/ARMCM3_STM32/nvm.c **** ** a checksum and program this into flash. This checksum is later used
182:../../../Source/ARMCM3_STM32/nvm.c **** ** to determine if a valid user program is present in flash.
183:../../../Source/ARMCM3_STM32/nvm.c **** ** \return BLT_TRUE if successful, BLT_FALSE otherwise.
184:../../../Source/ARMCM3_STM32/nvm.c **** **
185:../../../Source/ARMCM3_STM32/nvm.c **** ****************************************************************************************/
186:../../../Source/ARMCM3_STM32/nvm.c **** blt_bool NvmDone(void)
187:../../../Source/ARMCM3_STM32/nvm.c **** {
124 .loc 1 187 0
125 .cfi_startproc
126 @ args = 0, pretend = 0, frame = 0
127 @ frame_needed = 0, uses_anonymous_args = 0
128 0000 08B5 push {r3, lr}
129 .cfi_def_cfa_offset 8
130 .cfi_offset 3, -8
131 .cfi_offset 14, -4
188:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_HOOKS_ENABLE > 0)
189:../../../Source/ARMCM3_STM32/nvm.c **** /* give the application's NVM driver a chance to finish up */
190:../../../Source/ARMCM3_STM32/nvm.c **** if (NvmDoneHook() == BLT_FALSE)
191:../../../Source/ARMCM3_STM32/nvm.c **** {
192:../../../Source/ARMCM3_STM32/nvm.c **** /* error so no need to continue */
193:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_FALSE;
194:../../../Source/ARMCM3_STM32/nvm.c **** }
195:../../../Source/ARMCM3_STM32/nvm.c **** #endif
196:../../../Source/ARMCM3_STM32/nvm.c ****
197:../../../Source/ARMCM3_STM32/nvm.c **** #if (BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0)
198:../../../Source/ARMCM3_STM32/nvm.c **** /* compute and write checksum, using the application specific method. */
199:../../../Source/ARMCM3_STM32/nvm.c **** if (NvmWriteChecksumHook() == BLT_FALSE)
200:../../../Source/ARMCM3_STM32/nvm.c **** {
201:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_FALSE;
202:../../../Source/ARMCM3_STM32/nvm.c **** }
203:../../../Source/ARMCM3_STM32/nvm.c **** #else
204:../../../Source/ARMCM3_STM32/nvm.c **** /* compute and write checksum, which is programmed by the internal driver. */
205:../../../Source/ARMCM3_STM32/nvm.c **** if (FlashWriteChecksum() == BLT_FALSE)
132 .loc 1 205 0
133 0002 FFF7FEFF bl FlashWriteChecksum
134 .LVL6:
135 0006 0346 mov r3, r0
136 0008 10B1 cbz r0, .L10
206:../../../Source/ARMCM3_STM32/nvm.c **** {
207:../../../Source/ARMCM3_STM32/nvm.c **** return BLT_FALSE;
208:../../../Source/ARMCM3_STM32/nvm.c **** }
209:../../../Source/ARMCM3_STM32/nvm.c **** #endif
210:../../../Source/ARMCM3_STM32/nvm.c ****
211:../../../Source/ARMCM3_STM32/nvm.c **** /* finish up internal driver operations */
212:../../../Source/ARMCM3_STM32/nvm.c **** return FlashDone();
137 .loc 1 212 0
138 000a FFF7FEFF bl FlashDone
139 .LVL7:
140 000e 0346 mov r3, r0
141 .L10:
213:../../../Source/ARMCM3_STM32/nvm.c **** } /*** end of NvmDone ***/
142 .loc 1 213 0
143 0010 1846 mov r0, r3
144 0012 08BD pop {r3, pc}
145 .cfi_endproc
146 .LFE4:
148 .text
149 .Letext0:
150 .file 2 "../../../Source/ARMCM3_STM32/types.h"
151 .file 3 "../../../Source/ARMCM3_STM32/flash.h"
DEFINED SYMBOLS
*ABS*:00000000 nvm.c
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:19 .text.NvmInit:00000000 $t
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:24 .text.NvmInit:00000000 NvmInit
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:43 .text.NvmWrite:00000000 $t
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:48 .text.NvmWrite:00000000 NvmWrite
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:68 .text.NvmErase:00000000 $t
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:73 .text.NvmErase:00000000 NvmErase
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:93 .text.NvmVerifyChecksum:00000000 $t
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:98 .text.NvmVerifyChecksum:00000000 NvmVerifyChecksum
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:117 .text.NvmDone:00000000 $t
C:\Users\lwngim1\AppData\Local\Temp\ccilMVOl.s:122 .text.NvmDone:00000000 NvmDone
.debug_frame:00000010 $d
UNDEFINED SYMBOLS
FlashInit
FlashWrite
FlashErase
FlashVerifyChecksum
FlashWriteChecksum
FlashDone