wip
This commit is contained in:
259
timeline.py
Normal file
259
timeline.py
Normal file
@@ -0,0 +1,259 @@
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
# =========================
|
||||
# CONFIGURAZIONE
|
||||
# =========================
|
||||
m1pwmap =40
|
||||
m1pwmch=60
|
||||
m2pwmap=70
|
||||
m2pwmch= 70
|
||||
m3pwmap= 35
|
||||
m3pwmch= 40
|
||||
m4pwmap= 40
|
||||
m4pwmch= 40
|
||||
m1rampstart= 20
|
||||
m2rampstart= 20
|
||||
m3rampstart= 20
|
||||
m4rampstart= 20
|
||||
t1ap= 280
|
||||
t2ap= 4
|
||||
t3ap= 10
|
||||
t4ap= 40
|
||||
twap= 1
|
||||
t1ch= 27
|
||||
t2ch= 10
|
||||
t3ch= 30
|
||||
t4ch= 1
|
||||
twch= 1
|
||||
# 0,
|
||||
# 0,
|
||||
# 0,
|
||||
tramp1= 100
|
||||
m1pwmMan= 60
|
||||
m2pwmMan= 70
|
||||
m3pwmMan= 40
|
||||
m4pwmMan= 40
|
||||
trampman= 50
|
||||
tramp= 100
|
||||
# Ogni fase è:
|
||||
# (tempo_inizio, tempo_fine, velocita_iniziale, velocita_finale)
|
||||
|
||||
motori = {
|
||||
"Motore1": [
|
||||
(0, 300, 0, 80), # rampa salita
|
||||
(300, 700, 80, 80), # mantenimento
|
||||
(700, 900, 80, 0) # rampa discesa
|
||||
],
|
||||
"Motore2": [
|
||||
(20, 20+tramp, m2rampstart, m2pwmap),
|
||||
(20+tramp, 20+tramp+t1ap, m2pwmap, m2pwmap),
|
||||
(20+tramp+t1ap, 20+tramp+t1ap+tramp, m2pwmap, 0)
|
||||
],
|
||||
"Motore3": [
|
||||
(1800, 2100, 0, 100),
|
||||
(2100, 2600, 100, 100),
|
||||
(2600, 2900, 100, 0)
|
||||
],
|
||||
"Motore4": [
|
||||
(2900, 3200, 0, 50),
|
||||
(3200, 3600, 50, 50),
|
||||
(3600, 3900, 50, 0)
|
||||
]
|
||||
}
|
||||
|
||||
# Buzzer ON/OFF: (inizio, fine)
|
||||
buzzer = [
|
||||
(20, 21),
|
||||
(22, 23),
|
||||
(24, 25),
|
||||
(26, 27),
|
||||
(28, 29),
|
||||
(30, 31),
|
||||
(32, 33),
|
||||
(34, 35),
|
||||
(36, 37),
|
||||
(38, 39),
|
||||
(40, 41),
|
||||
(42, 43),
|
||||
(44, 45),
|
||||
(46, 47),
|
||||
(48, 49),
|
||||
(50, 55),
|
||||
(60, 65),
|
||||
(70, 75),
|
||||
(80, 85),
|
||||
(90, 95),
|
||||
(100, 105),
|
||||
(110, 115),
|
||||
(120, 125),
|
||||
(130, 135),
|
||||
(140, 145),
|
||||
(150, 155),
|
||||
(160, 165),
|
||||
(170, 175),
|
||||
(180, 185),
|
||||
(190, 195),
|
||||
(200, 205),
|
||||
(210, 215),
|
||||
(220, 225),
|
||||
(230, 235),
|
||||
(240, 245),
|
||||
(250, 255),
|
||||
(260, 265),
|
||||
(270, 275),
|
||||
(280, 285),
|
||||
(290, 295),
|
||||
(300, 305),
|
||||
(310, 315),
|
||||
(320, 325),
|
||||
(330, 335),
|
||||
(340, 345),
|
||||
(350, 355),
|
||||
(360, 365),
|
||||
(370, 375),
|
||||
(380, 385),
|
||||
(390, 395),
|
||||
(400, 405),
|
||||
(410, 415),
|
||||
(420, 425),
|
||||
(430, 435),
|
||||
(440, 445),
|
||||
(450, 455),
|
||||
(460, 465),
|
||||
(470, 475),
|
||||
(480, 485),
|
||||
(490, 495),
|
||||
(500, 505),
|
||||
(510, 515),
|
||||
(520, 525),
|
||||
(530, 535),
|
||||
(540, 545),
|
||||
(550, 555),
|
||||
(560, 565),
|
||||
(570, 575),
|
||||
(580, 585),
|
||||
(590, 595),
|
||||
(600, 605),
|
||||
(610, 615),
|
||||
(620, 625),
|
||||
(630, 635),
|
||||
(640, 645),
|
||||
(650, 655),
|
||||
(660, 665),
|
||||
(670, 675),
|
||||
(680, 685),
|
||||
(690, 695),
|
||||
(700, 705),
|
||||
(710, 715),
|
||||
(720, 725),
|
||||
(730, 735),
|
||||
(740, 745),
|
||||
(750, 755),
|
||||
(760, 765),
|
||||
(770, 775),
|
||||
(780, 785),
|
||||
(790, 795),
|
||||
(800, 805),
|
||||
(810, 815),
|
||||
(820, 825),
|
||||
(830, 835),
|
||||
(840, 845),
|
||||
(850, 855),
|
||||
(860, 865),
|
||||
(870, 875),
|
||||
(880, 885),
|
||||
(890, 895),
|
||||
(900, 905),
|
||||
(910, 915),
|
||||
(920, 925),
|
||||
(930, 935),
|
||||
(940, 945),
|
||||
(950, 955),
|
||||
(960, 965),
|
||||
(970, 975),
|
||||
(980, 985),
|
||||
(990, 995),
|
||||
]
|
||||
|
||||
tasto = [
|
||||
(0, 30),
|
||||
|
||||
]
|
||||
|
||||
# =========================
|
||||
# CREAZIONE GRAFICO
|
||||
# =========================
|
||||
|
||||
fig, ax = plt.subplots(figsize=(13, 6))
|
||||
|
||||
# Motori: linee di velocità
|
||||
for nome, fasi in motori.items():
|
||||
tempi = []
|
||||
velocita = []
|
||||
|
||||
for start, end, v0, v1 in fasi:
|
||||
t = np.linspace(start, end, 50)
|
||||
v = np.linspace(v0, v1, 50)
|
||||
|
||||
tempi.extend(t)
|
||||
velocita.extend(v)
|
||||
|
||||
ax.plot(tempi, velocita, marker="o", markersize=2, label=nome)
|
||||
|
||||
# Buzzer: riga separata in basso
|
||||
y_buzzer = -15
|
||||
|
||||
for start, end in buzzer:
|
||||
ax.broken_barh(
|
||||
[(start, end - start)],
|
||||
(y_buzzer, 8),
|
||||
facecolors="red",
|
||||
alpha=0.7
|
||||
)
|
||||
|
||||
# Scritta "Buzzer"
|
||||
ax.text(
|
||||
-120,
|
||||
y_buzzer + 4,
|
||||
"Buzzer",
|
||||
va="center",
|
||||
ha="right"
|
||||
)
|
||||
|
||||
# tasto: riga separata in basso
|
||||
y_tasto = -35
|
||||
|
||||
for start, end in tasto:
|
||||
ax.broken_barh(
|
||||
[(start, end - start)],
|
||||
(y_tasto, 8),
|
||||
facecolors="yellow",
|
||||
alpha=0.7
|
||||
)
|
||||
|
||||
# Scritta "tasto"
|
||||
ax.text(
|
||||
-120,
|
||||
y_tasto + 4,
|
||||
"Tasto",
|
||||
va="center",
|
||||
ha="right"
|
||||
)
|
||||
|
||||
# =========================
|
||||
# FORMATTAZIONE
|
||||
# =========================
|
||||
|
||||
ax.set_xlabel("Tempo (ms)")
|
||||
ax.set_ylabel("Velocità motore (%)")
|
||||
ax.set_title("Timeline motori con rampe + buzzer")
|
||||
|
||||
ax.set_ylim(-50, 110)
|
||||
ax.grid(True)
|
||||
ax.legend()
|
||||
|
||||
# Salva immagine
|
||||
plt.savefig("timeline_completa.png", dpi=300, bbox_inches="tight")
|
||||
|
||||
plt.show()
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
13561
workspace/.metadata/.ide.log-2026-04-28.log
Normal file
13561
workspace/.metadata/.ide.log-2026-04-28.log
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -26,3 +26,4 @@
|
||||
*** SESSION apr 23, 2026 22:22:44.442 ------------------------------------------
|
||||
*** SESSION apr 27, 2026 18:08:05.110 ------------------------------------------
|
||||
*** SESSION apr 28, 2026 17:49:36.231 ------------------------------------------
|
||||
*** SESSION apr 28, 2026 22:13:13.508 ------------------------------------------
|
||||
|
||||
Binary file not shown.
@@ -1,10 +1,19 @@
|
||||
19:18:10 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||
22:27:58 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||
make -j12 all
|
||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
||||
arm-none-eabi-gcc "../Core/Src/eeprom.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/eeprom.d" -MT"Core/Src/eeprom.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/eeprom.o"
|
||||
arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o"
|
||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
||||
Finished building target: AUTOM10.elf
|
||||
|
||||
arm-none-eabi-size AUTOM10.elf
|
||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
||||
text data bss dec hex filename
|
||||
57524 468 7336 65328 ff30 AUTOM10.elf
|
||||
57620 468 7336 65424 ff90 AUTOM10.elf
|
||||
Finished building: default.size.stdout
|
||||
|
||||
Finished building: AUTOM10.list
|
||||
|
||||
19:18:10 Build Finished. 0 errors, 0 warnings. (took 434ms)
|
||||
|
||||
22:28:00 Build Finished. 0 errors, 0 warnings. (took 2s.613ms)
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
19:16:01 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||
22:27:58 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||
make -j12 all
|
||||
arm-none-eabi-gcc "../Core/Src/cdc_int.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/cdc_int.d" -MT"Core/Src/cdc_int.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/cdc_int.o"
|
||||
arm-none-eabi-gcc "../Core/Src/eeprom.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/eeprom.d" -MT"Core/Src/eeprom.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/eeprom.o"
|
||||
arm-none-eabi-gcc "../Core/Src/main.c" -mcpu=cortex-m3 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F103xB -c -I../Core/Inc -I../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy -I../Drivers/STM32F1xx_HAL_Driver/Inc -I../Drivers/CMSIS/Device/ST/STM32F1xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Core/Src/main.d" -MT"Core/Src/main.o" --specs=nano.specs -mfloat-abi=soft -mthumb -o "Core/Src/main.o"
|
||||
arm-none-eabi-gcc -o "AUTOM10.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\progetti\AUTOM\workspace\AUTOM10\STM32F103C8TX_FLASH.ld" --specs=nosys.specs -Wl,-Map="AUTOM10.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
|
||||
@@ -8,15 +9,8 @@ Finished building target: AUTOM10.elf
|
||||
arm-none-eabi-size AUTOM10.elf
|
||||
arm-none-eabi-objdump -h -S AUTOM10.elf > "AUTOM10.list"
|
||||
text data bss dec hex filename
|
||||
57524 468 7336 65328 ff30 AUTOM10.elf
|
||||
57620 468 7336 65424 ff90 AUTOM10.elf
|
||||
Finished building: default.size.stdout
|
||||
|
||||
Finished building: AUTOM10.list
|
||||
|
||||
19:18:10 **** Incremental Build of configuration Debug for project AUTOM10 ****
|
||||
make -j12 all
|
||||
arm-none-eabi-size AUTOM10.elf
|
||||
text data bss dec hex filename
|
||||
57524 468 7336 65328 ff30 AUTOM10.elf
|
||||
Finished building: default.size.stdout
|
||||
|
||||
|
||||
@@ -0,0 +1,390 @@
|
||||
#include "eeprom.h"
|
||||
|
||||
/*
|
||||
* Record format (4 bytes):
|
||||
* [0] VirtAddress (uint16_t)
|
||||
* [2] Data (uint16_t)
|
||||
*
|
||||
* Page layout:
|
||||
* [0] PageStatus (uint16_t)
|
||||
* [2..] Records...
|
||||
*/
|
||||
|
||||
extern uint16_t m1pwmap;
|
||||
extern uint16_t m1pwmch;
|
||||
extern uint16_t m2pwmap;
|
||||
extern uint16_t m2pwmch;
|
||||
extern uint16_t m3pwmap;
|
||||
extern uint16_t m3pwmch;
|
||||
extern uint16_t m4pwmap;
|
||||
extern uint16_t m4pwmch;
|
||||
extern uint16_t t1ap;
|
||||
extern uint16_t t2ap;
|
||||
extern uint16_t t3ap;
|
||||
extern uint16_t t4ap;
|
||||
extern uint16_t twap;
|
||||
extern uint16_t tramp;
|
||||
extern uint16_t t1ch;
|
||||
extern uint16_t t2ch;
|
||||
extern uint16_t t3ch;
|
||||
extern uint16_t t4ch;
|
||||
extern uint16_t twch;
|
||||
extern uint16_t tramp1;
|
||||
extern uint16_t trampman;
|
||||
extern uint16_t m1pwmMan;
|
||||
extern uint16_t m2pwmMan;
|
||||
extern uint16_t m3pwmMan;
|
||||
extern uint16_t m4pwmMan;
|
||||
|
||||
const uint8_t deftab[32]={
|
||||
40, //m1pwmap
|
||||
60, //m1pwmch
|
||||
70, //m2pwmap
|
||||
70, //m2pwmch
|
||||
35, //m3pwmap
|
||||
40, //m3pwmch
|
||||
40, //m4pwmap
|
||||
40, //m4pwmch
|
||||
20, //m1rampstart
|
||||
20, //m2rampstart
|
||||
20, //m3rampstart
|
||||
20, //m4rampstart
|
||||
28, //t1ap
|
||||
4, //t2ap
|
||||
10, //t3ap
|
||||
40, //t4ap
|
||||
1, //twap
|
||||
27, //t1ch
|
||||
10, //t2ch
|
||||
30, //t3ch
|
||||
1, //t4ch
|
||||
1, //twch
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100, //tramp1
|
||||
60, //m1pwmMan
|
||||
70, //m2pwmMan
|
||||
40, //m3pwmMan
|
||||
40, //m4pwmMan
|
||||
50, //trampman
|
||||
10, //tramp
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t VirtAddress;
|
||||
uint16_t Data;
|
||||
} EE_Record_t;
|
||||
|
||||
/* Active page base address (runtime selected in EE_Init) */
|
||||
static uint32_t EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
|
||||
/* 32 sequential virtual addresses */
|
||||
const uint16_t EE_VirtAddrs[EE_NUM_VIRTUAL_ADDR] =
|
||||
{
|
||||
0x0001, 0x0002, 0x0003, 0x0004,
|
||||
0x0005, 0x0006, 0x0007, 0x0008,
|
||||
0x0009, 0x000A, 0x000B, 0x000C,
|
||||
0x000D, 0x000E, 0x000F, 0x0010,
|
||||
0x0011, 0x0012, 0x0013, 0x0014,
|
||||
0x0015, 0x0016, 0x0017, 0x0018,
|
||||
0x0019, 0x001A, 0x001B, 0x001C,
|
||||
0x001D, 0x001E, 0x001F, 0x0020
|
||||
};
|
||||
/* ========================================================================= */
|
||||
|
||||
/* --- Internal helpers ---------------------------------------------------- */
|
||||
|
||||
static uint16_t EE_GetPageStatus(uint32_t pageBase)
|
||||
{
|
||||
return *(__IO uint16_t *)pageBase;
|
||||
}
|
||||
|
||||
static HAL_StatusTypeDef EE_FlashProgramHalfWord(uint32_t Address, uint16_t Data)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
|
||||
HAL_FLASH_Unlock();
|
||||
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, Data);
|
||||
HAL_FLASH_Lock();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static HAL_StatusTypeDef EE_FlashErasePage(uint32_t PageAddress)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
FLASH_EraseInitTypeDef EraseInit;
|
||||
uint32_t PageError = 0;
|
||||
|
||||
HAL_FLASH_Unlock();
|
||||
|
||||
EraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
EraseInit.PageAddress = PageAddress;
|
||||
EraseInit.NbPages = 1;
|
||||
|
||||
status = HAL_FLASHEx_Erase(&EraseInit, &PageError);
|
||||
|
||||
HAL_FLASH_Lock();
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Find first free record address in given page (returns 0 if full) */
|
||||
static uint32_t EE_FindFreeAddress(uint32_t pageBase)
|
||||
{
|
||||
uint32_t addr = pageBase + 2U; /* Skip status word */
|
||||
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||
|
||||
while (addr < (pageEnd - sizeof(EE_Record_t) + 1U))
|
||||
{
|
||||
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||
|
||||
if (vaddr == 0xFFFFU)
|
||||
{
|
||||
/* Empty slot */
|
||||
return addr;
|
||||
}
|
||||
addr += sizeof(EE_Record_t);
|
||||
}
|
||||
|
||||
return 0U; /* No space */
|
||||
}
|
||||
|
||||
/* Find latest value of VirtAddress in a specific page (internal, uses EE_Status) */
|
||||
/* Find latest value of VirtAddress in a specific page (scan forward) */
|
||||
static EE_Status EE_FindInPage(uint32_t pageBase, uint16_t VirtAddress, uint16_t *Data)
|
||||
{
|
||||
uint32_t addr = pageBase + 2U; // skip status halfword
|
||||
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||
EE_Status result = EE_NOT_FOUND;
|
||||
uint16_t lastVal = 0;
|
||||
|
||||
if (Data == NULL)
|
||||
return EE_ERROR;
|
||||
|
||||
while (addr <= (pageEnd - sizeof(EE_Record_t)))
|
||||
{
|
||||
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||
|
||||
if (vaddr == 0xFFFFU)
|
||||
{
|
||||
// First empty slot => no more records in this page
|
||||
break;
|
||||
}
|
||||
|
||||
uint16_t value = *(__IO uint16_t *)(addr + 2U);
|
||||
|
||||
if (vaddr == VirtAddress)
|
||||
{
|
||||
lastVal = value; // keep most recent
|
||||
result = EE_OK;
|
||||
}
|
||||
|
||||
addr += sizeof(EE_Record_t); // move 4 bytes forward
|
||||
}
|
||||
|
||||
if (result == EE_OK)
|
||||
*Data = lastVal;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Format both pages: erase and set PAGE0 as VALID */
|
||||
static EE_Status EE_Format(void)
|
||||
{
|
||||
if (EE_FlashErasePage(EE_PAGE0_BASE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
if (EE_FlashErasePage(EE_PAGE1_BASE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
if (EE_FlashProgramHalfWord(EE_PAGE0_BASE, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* PAGE1 will remain erased (status = 0xFFFF) */
|
||||
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
|
||||
return EE_STATUS_OK;
|
||||
}
|
||||
|
||||
/* Get the base of the other page */
|
||||
static uint32_t EE_GetOtherPageBase(uint32_t pageBase)
|
||||
{
|
||||
return (pageBase == EE_PAGE0_BASE) ? EE_PAGE1_BASE : EE_PAGE0_BASE;
|
||||
}
|
||||
|
||||
/* Page transfer (garbage collection + new write) */
|
||||
static EE_Status EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
|
||||
{
|
||||
uint32_t oldBase = EE_ActivePageBase;
|
||||
uint32_t newBase = EE_GetOtherPageBase(oldBase);
|
||||
uint32_t addr;
|
||||
uint16_t value;
|
||||
EE_Status st;
|
||||
|
||||
/* Erase new page */
|
||||
if (EE_FlashErasePage(newBase) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Mark new page as RECEIVE */
|
||||
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_RECEIVE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Start writing records just after status */
|
||||
addr = newBase + 2U;
|
||||
|
||||
/* For each known virtual variable */
|
||||
for (uint16_t i = 0; i < EE_NUM_VIRTUAL_ADDR; i++)
|
||||
{
|
||||
uint16_t vaddr = EE_VirtAddrs[i];
|
||||
|
||||
if (vaddr == VirtAddress)
|
||||
{
|
||||
/* Use the new data passed into PageTransfer */
|
||||
value = Data;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Read latest value from old active page */
|
||||
st = EE_FindInPage(oldBase, vaddr, &value);
|
||||
if (st != EE_STATUS_OK)
|
||||
{
|
||||
/* Variable never written -> skip */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Write record to new page */
|
||||
if (EE_FlashProgramHalfWord(addr, vaddr) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
if (EE_FlashProgramHalfWord(addr + 2U, value) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
addr += sizeof(EE_Record_t);
|
||||
if (addr >= (newBase + EE_PAGE_SIZE))
|
||||
return EE_STATUS_NO_SPACE;
|
||||
}
|
||||
|
||||
/* Erase old page */
|
||||
if (EE_FlashErasePage(oldBase) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Mark new page as VALID */
|
||||
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Update active page */
|
||||
EE_ActivePageBase = newBase;
|
||||
|
||||
return EE_STATUS_OK;
|
||||
}
|
||||
|
||||
/* --- Public API ----------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Initialize the EEPROM emulation.
|
||||
* - Checks page statuses and chooses the active page.
|
||||
* - If inconsistent or blank, formats pages.
|
||||
* PUBLIC RETURN TYPE: uint16_t (EE_OK / EE_ERROR / ...)
|
||||
*/
|
||||
uint16_t EE_Init(void)
|
||||
{
|
||||
uint16_t status0 = EE_GetPageStatus(EE_PAGE0_BASE);
|
||||
uint16_t status1 = EE_GetPageStatus(EE_PAGE1_BASE);
|
||||
|
||||
if ((status0 == EE_PAGE_STATUS_ERASED) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
/* Fresh device -> format */
|
||||
return (uint16_t)EE_Format();
|
||||
}
|
||||
else if ((status0 == EE_PAGE_STATUS_VALID) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
return EE_OK;
|
||||
}
|
||||
else if ((status1 == EE_PAGE_STATUS_VALID) && (status0 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
EE_ActivePageBase = EE_PAGE1_BASE;
|
||||
return EE_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Any weird or inconsistent state -> reformat */
|
||||
return (uint16_t)EE_Format();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a 16-bit variable by its virtual address.
|
||||
* PUBLIC RETURN: EE_OK / EE_NOT_FOUND / EE_ERROR (as uint16_t)
|
||||
*/
|
||||
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t *Data)
|
||||
{
|
||||
EE_Status st;
|
||||
|
||||
if (Data == NULL)
|
||||
return EE_ERROR;
|
||||
|
||||
st = EE_FindInPage(EE_ActivePageBase, VirtAddress, Data);
|
||||
return (uint16_t)st;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write (append) a 16-bit variable.
|
||||
* - Writes a new record in the active page.
|
||||
* - If the page is full, triggers a page transfer (GC).
|
||||
* PUBLIC RETURN: EE_OK / EE_ERROR / EE_NO_SPACE (as uint16_t)
|
||||
*/
|
||||
uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)
|
||||
{
|
||||
uint32_t freeAddr;
|
||||
EE_Status st;
|
||||
|
||||
/* Find free space in active page */
|
||||
freeAddr = EE_FindFreeAddress(EE_ActivePageBase);
|
||||
if (freeAddr != 0U)
|
||||
{
|
||||
/* Write new record */
|
||||
if (EE_FlashProgramHalfWord(freeAddr, VirtAddress) != HAL_OK)
|
||||
return EE_ERROR;
|
||||
if (EE_FlashProgramHalfWord(freeAddr + 2U, Data) != HAL_OK)
|
||||
return EE_ERROR;
|
||||
|
||||
return EE_OK;
|
||||
}
|
||||
|
||||
/* No space -> page transfer */
|
||||
st = EE_PageTransfer(VirtAddress, Data);
|
||||
return (uint16_t)st;
|
||||
}
|
||||
|
||||
void loadEE(void){
|
||||
EEW_Read(M1PWMAP, &m1pwmap);
|
||||
EEW_Read(M1PWMCH, &m1pwmch);
|
||||
EEW_Read(M2PWMAP, &m2pwmap);
|
||||
EEW_Read(M2PWMCH, &m2pwmch);
|
||||
EEW_Read(M3PWMAP, &m3pwmap);
|
||||
EEW_Read(M3PWMCH, &m3pwmch);
|
||||
EEW_Read(M4PWMAP, &m4pwmap);
|
||||
EEW_Read(M4PWMCH, &m4pwmch);
|
||||
EEW_Read(T1AP, &t1ap);
|
||||
EEW_Read(T2AP, &t2ap);
|
||||
EEW_Read(T3AP, &t3ap);
|
||||
EEW_Read(T4AP, &t4ap);
|
||||
EEW_Read(TWAP, &twap);
|
||||
EEW_Read(T1CH, &t1ch);
|
||||
EEW_Read(T2CH, &t2ch);
|
||||
EEW_Read(T3CH, &t3ch);
|
||||
EEW_Read(T4CH, &t4ch);
|
||||
EEW_Read(TWCH, &twch);
|
||||
EEW_Read(TRAMP1, &tramp1);
|
||||
EEW_Read(M1PWMMAN, &m1pwmMan);
|
||||
EEW_Read(M2PWMMAN, &m2pwmMan);
|
||||
EEW_Read(M3PWMMAN, &m3pwmMan);
|
||||
EEW_Read(M4PWMMAN, &m4pwmMan);
|
||||
EEW_Read(TRAMPMAN, &trampman);
|
||||
EEW_Read(TRAMP, &tramp);
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* eeprom.h
|
||||
*
|
||||
* Created on: Dec 7, 2025
|
||||
* Author: user
|
||||
*/
|
||||
|
||||
#ifndef __EEPROM_H
|
||||
#define __EEPROM_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
/*
|
||||
* Simple EEPROM emulation for STM32F103C8T6 (medium density).
|
||||
* - Uses 2 Flash pages (1 kB each) at the end of Flash.
|
||||
* - Stores variables as 16-bit values identified by 16-bit "virtual addresses".
|
||||
*
|
||||
* You must define the list of virtual addresses in eeprom.c: EE_VirtAddrs[].
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EE_STATUS_OK = 0,
|
||||
EE_STATUS_ERROR,
|
||||
EE_STATUS_NOT_FOUND,
|
||||
EE_STATUS_NO_SPACE
|
||||
} EE_Status;
|
||||
|
||||
/* For compatibility with ST style uint16_t return codes */
|
||||
#define EE_OK ((uint16_t)EE_STATUS_OK)
|
||||
#define EE_ERROR ((uint16_t)EE_STATUS_ERROR)
|
||||
#define EE_NOT_FOUND ((uint16_t)EE_STATUS_NOT_FOUND)
|
||||
#define EE_NO_SPACE ((uint16_t)EE_STATUS_NO_SPACE)
|
||||
|
||||
/* Flash parameters for STM32F103C8T6 */
|
||||
#define EE_FLASH_BASE_ADDR 0x08000000U
|
||||
#define EE_PAGE_SIZE 0x400U /* 1 kB pages */
|
||||
|
||||
/*
|
||||
* Here we assume a 64 kB Flash device (STM32F103C8T6):
|
||||
* Flash range: 0x0800 0000 - 0x0800 FFFF
|
||||
* Pages: 0..63 (64 pages)
|
||||
* We use the last 2 pages for EEPROM:
|
||||
* - Page 62: 0x0800 F800
|
||||
* - Page 63: 0x0800 FC00
|
||||
*/
|
||||
#define EE_PAGE0_BASE (EE_FLASH_BASE_ADDR + (62U * EE_PAGE_SIZE))
|
||||
#define EE_PAGE1_BASE (EE_FLASH_BASE_ADDR + (63U * EE_PAGE_SIZE))
|
||||
|
||||
/* Page status markers (stored in the first halfword of each page) */
|
||||
#define EE_PAGE_STATUS_ERASED 0xFFFFU
|
||||
#define EE_PAGE_STATUS_VALID 0xAAAAU
|
||||
#define EE_PAGE_STATUS_RECEIVE 0x5555U
|
||||
|
||||
/*
|
||||
* Configure how many virtual variables you have.
|
||||
* Example: bytes, words, and array elements mapped to 16-bit variables.
|
||||
* Set EE_NUM_VIRTUAL_ADDR and define EE_VirtAddrs[] in eeprom.c.
|
||||
*/
|
||||
/* 32 virtual variables, sequential addresses */
|
||||
#define EE_NUM_VIRTUAL_ADDR 32U
|
||||
#define EEW_ADDR(i) (uint16_t)(0x0001 + (i)) // i = 0..31
|
||||
|
||||
|
||||
#define M1PWMAP 0 //m1pwmap
|
||||
#define M1PWMCH 1 //m1pwmch
|
||||
#define M2PWMAP 2 //m2pwmap
|
||||
#define M2PWMCH 3 //m2pwmch
|
||||
#define M3PWMAP 4 //m3pwmap
|
||||
#define M3PWMCH 5 //m3pwmch
|
||||
#define M4PWMAP 6 //m4pwmap
|
||||
#define M4PWMCH 7 //m4pwmch
|
||||
#define M1RAMPSTART 8 //m1rampstart
|
||||
#define M2RAMPSTART 9 //m2rampstart
|
||||
#define M3RAMPSTART 10 //m3rampstart
|
||||
#define M4RAMPSTART 11 //m4rampstart
|
||||
#define T1AP 12 //t1ap
|
||||
#define T2AP 13 //t2ap
|
||||
#define T3AP 14 //t3ap
|
||||
#define T4AP 15 //t4ap
|
||||
#define TWAP 16 //twap
|
||||
#define T1CH 17 //t1ch
|
||||
#define T2CH 18 //t2ch
|
||||
#define T3CH 19 //t3ch
|
||||
#define T4CH 20 //t4ch
|
||||
#define TWCH 21 //twch
|
||||
|
||||
#define TRAMP1 25 //tramp1
|
||||
#define M1PWMMAN 26 //m1pwmMan
|
||||
#define M2PWMMAN 27 //m2pwmMan
|
||||
#define M3PWMMAN 28 //m3pwmMan
|
||||
#define M4PWMMAN 29 //m4pwmMan
|
||||
#define TRAMPMAN 30 //trampman
|
||||
#define TRAMP 31 //tramp
|
||||
|
||||
|
||||
/* Virtual address table (defined in eeprom.c, can be customized) */
|
||||
extern const uint16_t EE_VirtAddrs[EE_NUM_VIRTUAL_ADDR];
|
||||
|
||||
/* Public API – now using uint16_t like ST examples */
|
||||
uint16_t EE_Init(void);
|
||||
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t *Data);
|
||||
uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data);
|
||||
void loadEE(void);
|
||||
/* Pseudo-array accessor EEW[idx] */
|
||||
static inline uint16_t EEW_Read(uint8_t idx, uint16_t *value)
|
||||
{
|
||||
return EE_ReadVariable(EEW_ADDR(idx), value);
|
||||
}
|
||||
|
||||
static inline uint16_t EEW_Write(uint8_t idx, uint16_t value)
|
||||
{
|
||||
return EE_WriteVariable(EEW_ADDR(idx), value);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __EEPROM_H */
|
||||
@@ -0,0 +1,431 @@
|
||||
#include "eeprom.h"
|
||||
|
||||
/*
|
||||
* Record format (4 bytes):
|
||||
* [0] VirtAddress (uint16_t)
|
||||
* [2] Data (uint16_t)
|
||||
*
|
||||
* Page layout:
|
||||
* [0] PageStatus (uint16_t)
|
||||
* [2..] Records...
|
||||
*/
|
||||
|
||||
extern uint16_t m1pwmap;
|
||||
extern uint16_t m1pwmch;
|
||||
extern uint16_t m2pwmap;
|
||||
extern uint16_t m2pwmch;
|
||||
extern uint16_t m3pwmap;
|
||||
extern uint16_t m3pwmch;
|
||||
extern uint16_t m4pwmap;
|
||||
extern uint16_t m4pwmch;
|
||||
extern uint16_t t1ap;
|
||||
extern uint16_t t2ap;
|
||||
extern uint16_t t3ap;
|
||||
extern uint16_t t4ap;
|
||||
extern uint16_t twap;
|
||||
extern uint16_t tramp;
|
||||
extern uint16_t t1ch;
|
||||
extern uint16_t t2ch;
|
||||
extern uint16_t t3ch;
|
||||
extern uint16_t t4ch;
|
||||
extern uint16_t twch;
|
||||
extern uint16_t tramp1;
|
||||
extern uint16_t trampman;
|
||||
extern uint16_t m1pwmMan;
|
||||
extern uint16_t m2pwmMan;
|
||||
extern uint16_t m3pwmMan;
|
||||
extern uint16_t m4pwmMan;
|
||||
|
||||
const uint8_t deftab[32]={
|
||||
40, //m1pwmap
|
||||
60, //m1pwmch
|
||||
70, //m2pwmap
|
||||
70, //m2pwmch
|
||||
35, //m3pwmap
|
||||
40, //m3pwmch
|
||||
40, //m4pwmap
|
||||
40, //m4pwmch
|
||||
20, //m1rampstart
|
||||
20, //m2rampstart
|
||||
20, //m3rampstart
|
||||
20, //m4rampstart
|
||||
28, //t1ap
|
||||
4, //t2ap
|
||||
10, //t3ap
|
||||
40, //t4ap
|
||||
1, //twap
|
||||
27, //t1ch
|
||||
10, //t2ch
|
||||
30, //t3ch
|
||||
1, //t4ch
|
||||
1, //twch
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100, //tramp1
|
||||
60, //m1pwmMan
|
||||
70, //m2pwmMan
|
||||
40, //m3pwmMan
|
||||
40, //m4pwmMan
|
||||
50, //trampman
|
||||
10, //tramp
|
||||
40,
|
||||
60,
|
||||
70,
|
||||
70,
|
||||
35,
|
||||
40,
|
||||
40,
|
||||
40,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
28,
|
||||
4,
|
||||
10,
|
||||
40,
|
||||
1,
|
||||
27,
|
||||
10,
|
||||
30,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100,
|
||||
60,
|
||||
70,
|
||||
40,
|
||||
40,
|
||||
50,
|
||||
10,
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t VirtAddress;
|
||||
uint16_t Data;
|
||||
} EE_Record_t;
|
||||
|
||||
/* Active page base address (runtime selected in EE_Init) */
|
||||
static uint32_t EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
|
||||
/* 32 sequential virtual addresses */
|
||||
const uint16_t EE_VirtAddrs[EE_NUM_VIRTUAL_ADDR] =
|
||||
{
|
||||
0x0001, 0x0002, 0x0003, 0x0004,
|
||||
0x0005, 0x0006, 0x0007, 0x0008,
|
||||
0x0009, 0x000A, 0x000B, 0x000C,
|
||||
0x000D, 0x000E, 0x000F, 0x0010,
|
||||
0x0011, 0x0012, 0x0013, 0x0014,
|
||||
0x0015, 0x0016, 0x0017, 0x0018,
|
||||
0x0019, 0x001A, 0x001B, 0x001C,
|
||||
0x001D, 0x001E, 0x001F, 0x0020,
|
||||
|
||||
0x0021, 0x0022, 0x0023, 0x0024,
|
||||
0x0025, 0x0026, 0x0027, 0x0028,
|
||||
0x0029, 0x002A, 0x002B, 0x002C,
|
||||
0x002D, 0x002E, 0x002F, 0x0030,
|
||||
0x0031, 0x0032, 0x0033, 0x0034,
|
||||
0x0035, 0x0036, 0x0037, 0x0038,
|
||||
0x0039, 0x003A, 0x003B, 0x003C,
|
||||
0x003D, 0x003E, 0x003F, 0x0040
|
||||
};
|
||||
/* ========================================================================= */
|
||||
|
||||
/* --- Internal helpers ---------------------------------------------------- */
|
||||
|
||||
static uint16_t EE_GetPageStatus(uint32_t pageBase)
|
||||
{
|
||||
return *(__IO uint16_t *)pageBase;
|
||||
}
|
||||
|
||||
static HAL_StatusTypeDef EE_FlashProgramHalfWord(uint32_t Address, uint16_t Data)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
|
||||
HAL_FLASH_Unlock();
|
||||
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, Data);
|
||||
HAL_FLASH_Lock();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static HAL_StatusTypeDef EE_FlashErasePage(uint32_t PageAddress)
|
||||
{
|
||||
HAL_StatusTypeDef status;
|
||||
FLASH_EraseInitTypeDef EraseInit;
|
||||
uint32_t PageError = 0;
|
||||
|
||||
HAL_FLASH_Unlock();
|
||||
|
||||
EraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
|
||||
EraseInit.PageAddress = PageAddress;
|
||||
EraseInit.NbPages = 1;
|
||||
|
||||
status = HAL_FLASHEx_Erase(&EraseInit, &PageError);
|
||||
|
||||
HAL_FLASH_Lock();
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Find first free record address in given page (returns 0 if full) */
|
||||
static uint32_t EE_FindFreeAddress(uint32_t pageBase)
|
||||
{
|
||||
uint32_t addr = pageBase + 2U; /* Skip status word */
|
||||
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||
|
||||
while (addr < (pageEnd - sizeof(EE_Record_t) + 1U))
|
||||
{
|
||||
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||
|
||||
if (vaddr == 0xFFFFU)
|
||||
{
|
||||
/* Empty slot */
|
||||
return addr;
|
||||
}
|
||||
addr += sizeof(EE_Record_t);
|
||||
}
|
||||
|
||||
return 0U; /* No space */
|
||||
}
|
||||
|
||||
/* Find latest value of VirtAddress in a specific page (internal, uses EE_Status) */
|
||||
/* Find latest value of VirtAddress in a specific page (scan forward) */
|
||||
static EE_Status EE_FindInPage(uint32_t pageBase, uint16_t VirtAddress, uint16_t *Data)
|
||||
{
|
||||
uint32_t addr = pageBase + 2U; // skip status halfword
|
||||
uint32_t pageEnd = pageBase + EE_PAGE_SIZE;
|
||||
EE_Status result = EE_NOT_FOUND;
|
||||
uint16_t lastVal = 0;
|
||||
|
||||
if (Data == NULL)
|
||||
return EE_ERROR;
|
||||
|
||||
while (addr <= (pageEnd - sizeof(EE_Record_t)))
|
||||
{
|
||||
uint16_t vaddr = *(__IO uint16_t *)addr;
|
||||
|
||||
if (vaddr == 0xFFFFU)
|
||||
{
|
||||
// First empty slot => no more records in this page
|
||||
break;
|
||||
}
|
||||
|
||||
uint16_t value = *(__IO uint16_t *)(addr + 2U);
|
||||
|
||||
if (vaddr == VirtAddress)
|
||||
{
|
||||
lastVal = value; // keep most recent
|
||||
result = EE_OK;
|
||||
}
|
||||
|
||||
addr += sizeof(EE_Record_t); // move 4 bytes forward
|
||||
}
|
||||
|
||||
if (result == EE_OK)
|
||||
*Data = lastVal;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Format both pages: erase and set PAGE0 as VALID */
|
||||
static EE_Status EE_Format(void)
|
||||
{
|
||||
if (EE_FlashErasePage(EE_PAGE0_BASE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
if (EE_FlashErasePage(EE_PAGE1_BASE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
if (EE_FlashProgramHalfWord(EE_PAGE0_BASE, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* PAGE1 will remain erased (status = 0xFFFF) */
|
||||
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
|
||||
return EE_STATUS_OK;
|
||||
}
|
||||
|
||||
/* Get the base of the other page */
|
||||
static uint32_t EE_GetOtherPageBase(uint32_t pageBase)
|
||||
{
|
||||
return (pageBase == EE_PAGE0_BASE) ? EE_PAGE1_BASE : EE_PAGE0_BASE;
|
||||
}
|
||||
|
||||
/* Page transfer (garbage collection + new write) */
|
||||
static EE_Status EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
|
||||
{
|
||||
uint32_t oldBase = EE_ActivePageBase;
|
||||
uint32_t newBase = EE_GetOtherPageBase(oldBase);
|
||||
uint32_t addr;
|
||||
uint16_t value;
|
||||
EE_Status st;
|
||||
|
||||
/* Erase new page */
|
||||
if (EE_FlashErasePage(newBase) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Mark new page as RECEIVE */
|
||||
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_RECEIVE) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Start writing records just after status */
|
||||
addr = newBase + 2U;
|
||||
|
||||
/* For each known virtual variable */
|
||||
for (uint16_t i = 0; i < EE_NUM_VIRTUAL_ADDR; i++)
|
||||
{
|
||||
uint16_t vaddr = EE_VirtAddrs[i];
|
||||
|
||||
if (vaddr == VirtAddress)
|
||||
{
|
||||
/* Use the new data passed into PageTransfer */
|
||||
value = Data;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Read latest value from old active page */
|
||||
st = EE_FindInPage(oldBase, vaddr, &value);
|
||||
if (st != EE_STATUS_OK)
|
||||
{
|
||||
/* Variable never written -> skip */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Write record to new page */
|
||||
if (EE_FlashProgramHalfWord(addr, vaddr) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
if (EE_FlashProgramHalfWord(addr + 2U, value) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
addr += sizeof(EE_Record_t);
|
||||
if (addr >= (newBase + EE_PAGE_SIZE))
|
||||
return EE_STATUS_NO_SPACE;
|
||||
}
|
||||
|
||||
/* Erase old page */
|
||||
if (EE_FlashErasePage(oldBase) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Mark new page as VALID */
|
||||
if (EE_FlashProgramHalfWord(newBase, EE_PAGE_STATUS_VALID) != HAL_OK)
|
||||
return EE_STATUS_ERROR;
|
||||
|
||||
/* Update active page */
|
||||
EE_ActivePageBase = newBase;
|
||||
|
||||
return EE_STATUS_OK;
|
||||
}
|
||||
|
||||
/* --- Public API ----------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Initialize the EEPROM emulation.
|
||||
* - Checks page statuses and chooses the active page.
|
||||
* - If inconsistent or blank, formats pages.
|
||||
* PUBLIC RETURN TYPE: uint16_t (EE_OK / EE_ERROR / ...)
|
||||
*/
|
||||
uint16_t EE_Init(void)
|
||||
{
|
||||
uint16_t status0 = EE_GetPageStatus(EE_PAGE0_BASE);
|
||||
uint16_t status1 = EE_GetPageStatus(EE_PAGE1_BASE);
|
||||
|
||||
if ((status0 == EE_PAGE_STATUS_ERASED) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
/* Fresh device -> format */
|
||||
return (uint16_t)EE_Format();
|
||||
}
|
||||
else if ((status0 == EE_PAGE_STATUS_VALID) && (status1 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
EE_ActivePageBase = EE_PAGE0_BASE;
|
||||
return EE_OK;
|
||||
}
|
||||
else if ((status1 == EE_PAGE_STATUS_VALID) && (status0 == EE_PAGE_STATUS_ERASED))
|
||||
{
|
||||
EE_ActivePageBase = EE_PAGE1_BASE;
|
||||
return EE_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Any weird or inconsistent state -> reformat */
|
||||
return (uint16_t)EE_Format();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read a 16-bit variable by its virtual address.
|
||||
* PUBLIC RETURN: EE_OK / EE_NOT_FOUND / EE_ERROR (as uint16_t)
|
||||
*/
|
||||
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t *Data)
|
||||
{
|
||||
EE_Status st;
|
||||
|
||||
if (Data == NULL)
|
||||
return EE_ERROR;
|
||||
|
||||
st = EE_FindInPage(EE_ActivePageBase, VirtAddress, Data);
|
||||
return (uint16_t)st;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write (append) a 16-bit variable.
|
||||
* - Writes a new record in the active page.
|
||||
* - If the page is full, triggers a page transfer (GC).
|
||||
* PUBLIC RETURN: EE_OK / EE_ERROR / EE_NO_SPACE (as uint16_t)
|
||||
*/
|
||||
uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)
|
||||
{
|
||||
uint32_t freeAddr;
|
||||
EE_Status st;
|
||||
|
||||
/* Find free space in active page */
|
||||
freeAddr = EE_FindFreeAddress(EE_ActivePageBase);
|
||||
if (freeAddr != 0U)
|
||||
{
|
||||
/* Write new record */
|
||||
if (EE_FlashProgramHalfWord(freeAddr, VirtAddress) != HAL_OK)
|
||||
return EE_ERROR;
|
||||
if (EE_FlashProgramHalfWord(freeAddr + 2U, Data) != HAL_OK)
|
||||
return EE_ERROR;
|
||||
|
||||
return EE_OK;
|
||||
}
|
||||
|
||||
/* No space -> page transfer */
|
||||
st = EE_PageTransfer(VirtAddress, Data);
|
||||
return (uint16_t)st;
|
||||
}
|
||||
|
||||
void loadEE(void){
|
||||
EEW_Read(M1PWMAP, &m1pwmap);
|
||||
EEW_Read(M1PWMCH, &m1pwmch);
|
||||
EEW_Read(M2PWMAP, &m2pwmap);
|
||||
EEW_Read(M2PWMCH, &m2pwmch);
|
||||
EEW_Read(M3PWMAP, &m3pwmap);
|
||||
EEW_Read(M3PWMCH, &m3pwmch);
|
||||
EEW_Read(M4PWMAP, &m4pwmap);
|
||||
EEW_Read(M4PWMCH, &m4pwmch);
|
||||
EEW_Read(T1AP, &t1ap);
|
||||
EEW_Read(T2AP, &t2ap);
|
||||
EEW_Read(T3AP, &t3ap);
|
||||
EEW_Read(T4AP, &t4ap);
|
||||
EEW_Read(TWAP, &twap);
|
||||
EEW_Read(T1CH, &t1ch);
|
||||
EEW_Read(T2CH, &t2ch);
|
||||
EEW_Read(T3CH, &t3ch);
|
||||
EEW_Read(T4CH, &t4ch);
|
||||
EEW_Read(TWCH, &twch);
|
||||
EEW_Read(TRAMP1, &tramp1);
|
||||
EEW_Read(M1PWMMAN, &m1pwmMan);
|
||||
EEW_Read(M2PWMMAN, &m2pwmMan);
|
||||
EEW_Read(M3PWMMAN, &m3pwmMan);
|
||||
EEW_Read(M4PWMMAN, &m4pwmMan);
|
||||
EEW_Read(TRAMPMAN, &trampman);
|
||||
EEW_Read(TRAMP, &tramp);
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,3 +1,3 @@
|
||||
#Tue Apr 28 17:49:33 CEST 2026
|
||||
#Wed Apr 29 20:10:45 CEST 2026
|
||||
org.eclipse.core.runtime=2
|
||||
org.eclipse.platform=4.33.0.v20240903-0240
|
||||
|
||||
@@ -36,7 +36,7 @@ extern uint16_t m2pwmMan;
|
||||
extern uint16_t m3pwmMan;
|
||||
extern uint16_t m4pwmMan;
|
||||
|
||||
const uint8_t deftab[32]={
|
||||
const uint8_t deftab[EE_NUM_VIRTUAL_ADDR]={
|
||||
40, //m1pwmap
|
||||
60, //m1pwmch
|
||||
70, //m2pwmap
|
||||
@@ -69,6 +69,38 @@ const uint8_t deftab[32]={
|
||||
40, //m4pwmMan
|
||||
50, //trampman
|
||||
10, //tramp
|
||||
40,
|
||||
60,
|
||||
70,
|
||||
70,
|
||||
35,
|
||||
40,
|
||||
40,
|
||||
40,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
28,
|
||||
4,
|
||||
10,
|
||||
40,
|
||||
1,
|
||||
27,
|
||||
10,
|
||||
30,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100,
|
||||
60,
|
||||
70,
|
||||
40,
|
||||
40,
|
||||
50,
|
||||
10,
|
||||
};
|
||||
|
||||
typedef struct
|
||||
@@ -90,7 +122,16 @@ const uint16_t EE_VirtAddrs[EE_NUM_VIRTUAL_ADDR] =
|
||||
0x0011, 0x0012, 0x0013, 0x0014,
|
||||
0x0015, 0x0016, 0x0017, 0x0018,
|
||||
0x0019, 0x001A, 0x001B, 0x001C,
|
||||
0x001D, 0x001E, 0x001F, 0x0020
|
||||
0x001D, 0x001E, 0x001F, 0x0020,
|
||||
|
||||
0x0021, 0x0022, 0x0023, 0x0024,
|
||||
0x0025, 0x0026, 0x0027, 0x0028,
|
||||
0x0029, 0x002A, 0x002B, 0x002C,
|
||||
0x002D, 0x002E, 0x002F, 0x0030,
|
||||
0x0031, 0x0032, 0x0033, 0x0034,
|
||||
0x0035, 0x0036, 0x0037, 0x0038,
|
||||
0x0039, 0x003A, 0x003B, 0x003C,
|
||||
0x003D, 0x003E, 0x003F, 0x0040
|
||||
};
|
||||
/* ========================================================================= */
|
||||
|
||||
|
||||
@@ -62,8 +62,8 @@ typedef enum
|
||||
* Set EE_NUM_VIRTUAL_ADDR and define EE_VirtAddrs[] in eeprom.c.
|
||||
*/
|
||||
/* 32 virtual variables, sequential addresses */
|
||||
#define EE_NUM_VIRTUAL_ADDR 32U
|
||||
#define EEW_ADDR(i) (uint16_t)(0x0001 + (i)) // i = 0..31
|
||||
#define EE_NUM_VIRTUAL_ADDR 64U
|
||||
#define EEW_ADDR(i) ((uint16_t)(0x0001U + (uint16_t)(i))) // i = 0..63
|
||||
|
||||
|
||||
#define M1PWMAP 0 //m1pwmap
|
||||
|
||||
Binary file not shown.
@@ -7,45 +7,45 @@ Idx Name Size VMA LMA File off Algn
|
||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||
1 .text 0000dc60 0800010c 0800010c 0000110c 2**2
|
||||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||||
2 .rodata 00000338 0800dd6c 0800dd6c 0000ed6c 2**2
|
||||
2 .rodata 00000398 0800dd6c 0800dd6c 0000ed6c 2**2
|
||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||
3 .ARM.extab 00000000 0800e0a4 0800e0a4 000101d4 2**0
|
||||
3 .ARM.extab 00000000 0800e104 0800e104 000101d4 2**0
|
||||
CONTENTS, READONLY
|
||||
4 .ARM 00000008 0800e0a4 0800e0a4 0000f0a4 2**2
|
||||
4 .ARM 00000008 0800e104 0800e104 0000f104 2**2
|
||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||
5 .preinit_array 00000000 0800e0ac 0800e0ac 000101d4 2**0
|
||||
5 .preinit_array 00000000 0800e10c 0800e10c 000101d4 2**0
|
||||
CONTENTS, ALLOC, LOAD, DATA
|
||||
6 .init_array 00000004 0800e0ac 0800e0ac 0000f0ac 2**2
|
||||
6 .init_array 00000004 0800e10c 0800e10c 0000f10c 2**2
|
||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||
7 .fini_array 00000004 0800e0b0 0800e0b0 0000f0b0 2**2
|
||||
7 .fini_array 00000004 0800e110 0800e110 0000f110 2**2
|
||||
CONTENTS, ALLOC, LOAD, READONLY, DATA
|
||||
8 .data 000001d4 20000000 0800e0b4 00010000 2**2
|
||||
8 .data 000001d4 20000000 0800e114 00010000 2**2
|
||||
CONTENTS, ALLOC, LOAD, DATA
|
||||
9 .bss 000016a4 200001d8 0800e288 000101d8 2**3
|
||||
9 .bss 000016a4 200001d8 0800e2e8 000101d8 2**3
|
||||
ALLOC
|
||||
10 ._user_heap_stack 00000604 2000187c 0800e288 0001087c 2**0
|
||||
10 ._user_heap_stack 00000604 2000187c 0800e2e8 0001087c 2**0
|
||||
ALLOC
|
||||
11 .ARM.attributes 00000029 00000000 00000000 000101d4 2**0
|
||||
CONTENTS, READONLY
|
||||
12 .debug_info 00019565 00000000 00000000 000101fd 2**0
|
||||
12 .debug_info 00019571 00000000 00000000 000101fd 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
13 .debug_abbrev 00004732 00000000 00000000 00029762 2**0
|
||||
13 .debug_abbrev 0000473a 00000000 00000000 0002976e 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
14 .debug_aranges 00001648 00000000 00000000 0002de98 2**3
|
||||
14 .debug_aranges 00001648 00000000 00000000 0002dea8 2**3
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
15 .debug_rnglists 00001116 00000000 00000000 0002f4e0 2**0
|
||||
15 .debug_rnglists 00001116 00000000 00000000 0002f4f0 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
16 .debug_macro 0001ccac 00000000 00000000 000305f6 2**0
|
||||
16 .debug_macro 0001ccac 00000000 00000000 00030606 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
17 .debug_line 0001e1c6 00000000 00000000 0004d2a2 2**0
|
||||
17 .debug_line 0001e1c6 00000000 00000000 0004d2b2 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
18 .debug_str 00095d23 00000000 00000000 0006b468 2**0
|
||||
18 .debug_str 00095d30 00000000 00000000 0006b478 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
19 .comment 00000043 00000000 00000000 0010118b 2**0
|
||||
19 .comment 00000043 00000000 00000000 001011a8 2**0
|
||||
CONTENTS, READONLY
|
||||
20 .debug_frame 00006010 00000000 00000000 001011d0 2**2
|
||||
20 .debug_frame 00006010 00000000 00000000 001011ec 2**2
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
21 .debug_line_str 00000052 00000000 00000000 001071e0 2**0
|
||||
21 .debug_line_str 00000052 00000000 00000000 001071fc 2**0
|
||||
CONTENTS, READONLY, DEBUGGING, OCTETS
|
||||
|
||||
Disassembly of section .text:
|
||||
@@ -2301,7 +2301,7 @@ static EE_Status EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
|
||||
8001170: 3301 adds r3, #1
|
||||
8001172: 837b strh r3, [r7, #26]
|
||||
8001174: 8b7b ldrh r3, [r7, #26]
|
||||
8001176: 2b1f cmp r3, #31
|
||||
8001176: 2b3f cmp r3, #63 @ 0x3f
|
||||
8001178: d9bf bls.n 80010fa <EE_PageTransfer+0x4e>
|
||||
}
|
||||
|
||||
@@ -2343,7 +2343,7 @@ static EE_Status EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
|
||||
80011ac: bd80 pop {r7, pc}
|
||||
80011ae: bf00 nop
|
||||
80011b0: 20000000 .word 0x20000000
|
||||
80011b4: 0800e004 .word 0x0800e004
|
||||
80011b4: 0800e024 .word 0x0800e024
|
||||
|
||||
080011b8 <EE_Init>:
|
||||
* - Checks page statuses and chooses the active page.
|
||||
@@ -9240,7 +9240,7 @@ LoopFillZerobss:
|
||||
ldr r1, =_edata
|
||||
800403c: 200001d4 .word 0x200001d4
|
||||
ldr r2, =_sidata
|
||||
8004040: 0800e0b4 .word 0x0800e0b4
|
||||
8004040: 0800e114 .word 0x0800e114
|
||||
ldr r2, =_sbss
|
||||
8004044: 200001d8 .word 0x200001d8
|
||||
ldr r4, =_ebss
|
||||
@@ -18520,7 +18520,7 @@ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK
|
||||
80077ca: bf00 nop
|
||||
80077cc: 40022000 .word 0x40022000
|
||||
80077d0: 40021000 .word 0x40021000
|
||||
80077d4: 0800e044 .word 0x0800e044
|
||||
80077d4: 0800e0a4 .word 0x0800e0a4
|
||||
80077d8: 20000008 .word 0x20000008
|
||||
80077dc: 2000000c .word 0x2000000c
|
||||
|
||||
@@ -18655,8 +18655,8 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
|
||||
8007872: bf00 nop
|
||||
8007874: 40021000 .word 0x40021000
|
||||
8007878: 00b71b00 .word 0x00b71b00
|
||||
800787c: 0800e05c .word 0x0800e05c
|
||||
8007880: 0800e06c .word 0x0800e06c
|
||||
800787c: 0800e0bc .word 0x0800e0bc
|
||||
8007880: 0800e0cc .word 0x0800e0cc
|
||||
8007884: 003d0900 .word 0x003d0900
|
||||
8007888: 007a1200 .word 0x007a1200
|
||||
|
||||
@@ -18703,7 +18703,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
|
||||
80078bc: 4618 mov r0, r3
|
||||
80078be: bd80 pop {r7, pc}
|
||||
80078c0: 40021000 .word 0x40021000
|
||||
80078c4: 0800e054 .word 0x0800e054
|
||||
80078c4: 0800e0b4 .word 0x0800e0b4
|
||||
|
||||
080078c8 <HAL_RCC_GetPCLK2Freq>:
|
||||
* @note Each time PCLK2 changes, this function must be called to update the
|
||||
@@ -18729,7 +18729,7 @@ uint32_t HAL_RCC_GetPCLK2Freq(void)
|
||||
80078e4: 4618 mov r0, r3
|
||||
80078e6: bd80 pop {r7, pc}
|
||||
80078e8: 40021000 .word 0x40021000
|
||||
80078ec: 0800e054 .word 0x0800e054
|
||||
80078ec: 0800e0b4 .word 0x0800e0b4
|
||||
|
||||
080078f0 <RCC_Delay>:
|
||||
* @brief This function provides delay (in milliseconds) based on CPU cycles method.
|
||||
@@ -32772,10 +32772,10 @@ USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
|
||||
800d486: 4798 blx r3
|
||||
800d488: 3601 adds r6, #1
|
||||
800d48a: e7f2 b.n 800d472 <__libc_init_array+0x1e>
|
||||
800d48c: 0800e0ac .word 0x0800e0ac
|
||||
800d490: 0800e0ac .word 0x0800e0ac
|
||||
800d494: 0800e0ac .word 0x0800e0ac
|
||||
800d498: 0800e0b0 .word 0x0800e0b0
|
||||
800d48c: 0800e10c .word 0x0800e10c
|
||||
800d490: 0800e10c .word 0x0800e10c
|
||||
800d494: 0800e10c .word 0x0800e10c
|
||||
800d498: 0800e110 .word 0x0800e110
|
||||
|
||||
0800d49c <__retarget_lock_acquire_recursive>:
|
||||
800d49c: 4770 bx lr
|
||||
@@ -33279,9 +33279,9 @@ USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
|
||||
800d920: a904 add r1, sp, #16
|
||||
800d922: f000 f87d bl 800da20 <_printf_i>
|
||||
800d926: e7ed b.n 800d904 <_svfiprintf_r+0x1c0>
|
||||
800d928: 0800e06e .word 0x0800e06e
|
||||
800d92c: 0800e074 .word 0x0800e074
|
||||
800d930: 0800e078 .word 0x0800e078
|
||||
800d928: 0800e0ce .word 0x0800e0ce
|
||||
800d92c: 0800e0d4 .word 0x0800e0d4
|
||||
800d930: 0800e0d8 .word 0x0800e0d8
|
||||
800d934: 00000000 .word 0x00000000
|
||||
800d938: 0800d68d .word 0x0800d68d
|
||||
|
||||
@@ -33613,8 +33613,8 @@ USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
|
||||
800dc4c: 2500 movs r5, #0
|
||||
800dc4e: f104 0619 add.w r6, r4, #25
|
||||
800dc52: e7f5 b.n 800dc40 <_printf_i+0x220>
|
||||
800dc54: 0800e07f .word 0x0800e07f
|
||||
800dc58: 0800e090 .word 0x0800e090
|
||||
800dc54: 0800e0df .word 0x0800e0df
|
||||
800dc58: 0800e0f0 .word 0x0800e0f0
|
||||
|
||||
0800dc5c <memmove>:
|
||||
800dc5c: 4288 cmp r0, r1
|
||||
|
||||
@@ -5784,7 +5784,7 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
.iplt 0x0800dd6c 0x0
|
||||
.iplt 0x0800dd6c 0x0 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
|
||||
.rodata 0x0800dd6c 0x338
|
||||
.rodata 0x0800dd6c 0x398
|
||||
0x0800dd6c . = ALIGN (0x4)
|
||||
*(.rodata)
|
||||
.rodata 0x0800dd6c 0x203 ./Core/Src/cdc_int.o
|
||||
@@ -5794,72 +5794,72 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
*(.rodata*)
|
||||
*fill* 0x0800dfe2 0x2
|
||||
.rodata.deftab
|
||||
0x0800dfe4 0x20 ./Core/Src/eeprom.o
|
||||
0x0800dfe4 0x40 ./Core/Src/eeprom.o
|
||||
0x0800dfe4 deftab
|
||||
.rodata.EE_VirtAddrs
|
||||
0x0800e004 0x40 ./Core/Src/eeprom.o
|
||||
0x0800e004 EE_VirtAddrs
|
||||
0x0800e024 0x80 ./Core/Src/eeprom.o
|
||||
0x0800e024 EE_VirtAddrs
|
||||
.rodata.AHBPrescTable
|
||||
0x0800e044 0x10 ./Core/Src/system_stm32f1xx.o
|
||||
0x0800e044 AHBPrescTable
|
||||
0x0800e0a4 0x10 ./Core/Src/system_stm32f1xx.o
|
||||
0x0800e0a4 AHBPrescTable
|
||||
.rodata.APBPrescTable
|
||||
0x0800e054 0x8 ./Core/Src/system_stm32f1xx.o
|
||||
0x0800e054 APBPrescTable
|
||||
0x0800e0b4 0x8 ./Core/Src/system_stm32f1xx.o
|
||||
0x0800e0b4 APBPrescTable
|
||||
.rodata.aPLLMULFactorTable.1
|
||||
0x0800e05c 0x10 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
0x0800e0bc 0x10 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.rodata.aPredivFactorTable.0
|
||||
0x0800e06c 0x2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
0x0800e0cc 0x2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.rodata._svfprintf_r.str1.1
|
||||
0x0800e06e 0x33 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-nano-svfprintf.o)
|
||||
0x0800e0ce 0x33 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-nano-svfprintf.o)
|
||||
0x11 (size before relaxing)
|
||||
.rodata._printf_i.str1.1
|
||||
0x0800e0a1 0x22 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-nano-vfprintf_i.o)
|
||||
0x0800e0c4 . = ALIGN (0x4)
|
||||
*fill* 0x0800e0a1 0x3
|
||||
0x0800e101 0x22 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-nano-vfprintf_i.o)
|
||||
0x0800e124 . = ALIGN (0x4)
|
||||
*fill* 0x0800e101 0x3
|
||||
|
||||
.ARM.extab 0x0800e0a4 0x0
|
||||
0x0800e0a4 . = ALIGN (0x4)
|
||||
.ARM.extab 0x0800e104 0x0
|
||||
0x0800e104 . = ALIGN (0x4)
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
0x0800e0a4 . = ALIGN (0x4)
|
||||
0x0800e104 . = ALIGN (0x4)
|
||||
|
||||
.ARM 0x0800e0a4 0x8
|
||||
0x0800e0a4 . = ALIGN (0x4)
|
||||
0x0800e0a4 __exidx_start = .
|
||||
.ARM 0x0800e104 0x8
|
||||
0x0800e104 . = ALIGN (0x4)
|
||||
0x0800e104 __exidx_start = .
|
||||
*(.ARM.exidx*)
|
||||
.ARM.exidx 0x0800e0a4 0x8 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-strlen.o)
|
||||
0x0800e0ac __exidx_end = .
|
||||
0x0800e0ac . = ALIGN (0x4)
|
||||
.ARM.exidx 0x0800e104 0x8 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(libc_a-strlen.o)
|
||||
0x0800e10c __exidx_end = .
|
||||
0x0800e10c . = ALIGN (0x4)
|
||||
|
||||
.preinit_array 0x0800e0ac 0x0
|
||||
0x0800e0ac . = ALIGN (0x4)
|
||||
0x0800e0ac PROVIDE (__preinit_array_start = .)
|
||||
.preinit_array 0x0800e10c 0x0
|
||||
0x0800e10c . = ALIGN (0x4)
|
||||
0x0800e10c PROVIDE (__preinit_array_start = .)
|
||||
*(.preinit_array*)
|
||||
0x0800e0ac PROVIDE (__preinit_array_end = .)
|
||||
0x0800e0ac . = ALIGN (0x4)
|
||||
0x0800e10c PROVIDE (__preinit_array_end = .)
|
||||
0x0800e10c . = ALIGN (0x4)
|
||||
|
||||
.init_array 0x0800e0ac 0x4
|
||||
0x0800e0ac . = ALIGN (0x4)
|
||||
0x0800e0ac PROVIDE (__init_array_start = .)
|
||||
.init_array 0x0800e10c 0x4
|
||||
0x0800e10c . = ALIGN (0x4)
|
||||
0x0800e10c PROVIDE (__init_array_start = .)
|
||||
*(SORT_BY_NAME(.init_array.*))
|
||||
*(.init_array*)
|
||||
.init_array 0x0800e0ac 0x4 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
0x0800e0b0 PROVIDE (__init_array_end = .)
|
||||
0x0800e0b0 . = ALIGN (0x4)
|
||||
.init_array 0x0800e10c 0x4 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
0x0800e110 PROVIDE (__init_array_end = .)
|
||||
0x0800e110 . = ALIGN (0x4)
|
||||
|
||||
.fini_array 0x0800e0b0 0x4
|
||||
0x0800e0b0 . = ALIGN (0x4)
|
||||
.fini_array 0x0800e110 0x4
|
||||
0x0800e110 . = ALIGN (0x4)
|
||||
[!provide] PROVIDE (__fini_array_start = .)
|
||||
*(SORT_BY_NAME(.fini_array.*))
|
||||
*(.fini_array*)
|
||||
.fini_array 0x0800e0b0 0x4 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
.fini_array 0x0800e110 0x4 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
[!provide] PROVIDE (__fini_array_end = .)
|
||||
0x0800e0b4 . = ALIGN (0x4)
|
||||
0x0800e0b4 _sidata = LOADADDR (.data)
|
||||
0x0800e114 . = ALIGN (0x4)
|
||||
0x0800e114 _sidata = LOADADDR (.data)
|
||||
|
||||
.rel.dyn 0x0800e0b4 0x0
|
||||
.rel.iplt 0x0800e0b4 0x0 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
.rel.dyn 0x0800e114 0x0
|
||||
.rel.iplt 0x0800e114 0x0 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
|
||||
.data 0x20000000 0x1d4 load address 0x0800e0b4
|
||||
.data 0x20000000 0x1d4 load address 0x0800e114
|
||||
0x20000000 . = ALIGN (0x4)
|
||||
0x20000000 _sdata = .
|
||||
*(.data)
|
||||
@@ -5928,11 +5928,11 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
0x200001d4 . = ALIGN (0x4)
|
||||
0x200001d4 _edata = .
|
||||
|
||||
.igot.plt 0x200001d4 0x0 load address 0x0800e288
|
||||
.igot.plt 0x200001d4 0x0 load address 0x0800e2e8
|
||||
.igot.plt 0x200001d4 0x0 C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp/crtbegin.o
|
||||
0x200001d4 . = ALIGN (0x4)
|
||||
|
||||
.bss 0x200001d8 0x16a4 load address 0x0800e288
|
||||
.bss 0x200001d8 0x16a4 load address 0x0800e2e8
|
||||
0x200001d8 _sbss = .
|
||||
0x200001d8 __bss_start__ = _sbss
|
||||
*(.bss)
|
||||
@@ -6107,7 +6107,7 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
0x2000187c __bss_end__ = _ebss
|
||||
|
||||
._user_heap_stack
|
||||
0x2000187c 0x604 load address 0x0800e288
|
||||
0x2000187c 0x604 load address 0x0800e2e8
|
||||
0x20001880 . = ALIGN (0x8)
|
||||
*fill* 0x2000187c 0x4
|
||||
[!provide] PROVIDE (end = .)
|
||||
@@ -6246,77 +6246,77 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libm.a
|
||||
LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/thumb/v7-m/nofp\libgcc.a
|
||||
|
||||
.debug_info 0x00000000 0x19565
|
||||
.debug_info 0x00000000 0x19571
|
||||
.debug_info 0x00000000 0x1e9 ./Core/Src/adc.o
|
||||
.debug_info 0x000001e9 0xb05 ./Core/Src/cdc_int.o
|
||||
.debug_info 0x00000cee 0x7a6 ./Core/Src/debug.o
|
||||
.debug_info 0x00001494 0x737 ./Core/Src/eeprom.o
|
||||
.debug_info 0x00001bcb 0x1a23 ./Core/Src/main.o
|
||||
.debug_info 0x000035ee 0x9c0 ./Core/Src/pwm.o
|
||||
.debug_info 0x00003fae 0xf58 ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_info 0x00004f06 0x81d ./Core/Src/stm32f1xx_it.o
|
||||
.debug_info 0x00005723 0x168 ./Core/Src/sysmem.o
|
||||
.debug_info 0x0000588b 0x222 ./Core/Src/system_stm32f1xx.o
|
||||
.debug_info 0x00005aad 0x30 ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_info 0x00005add 0x704 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_info 0x000061e1 0xc50 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_info 0x00006e31 0xa87 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_info 0x000078b8 0x6d2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_info 0x00007f8a 0x4f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_info 0x00008482 0x777 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_info 0x00008bf9 0x5ab ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_info 0x000091a4 0x16dc ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_info 0x0000a880 0x6c3 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_info 0x0000af43 0x7d5 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_info 0x0000b718 0x3c0 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_info 0x0000bad8 0x2959 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_info 0x0000e431 0x149b ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_info 0x0000f8cc 0x2eed ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_info 0x000127b9 0x17ae ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_info 0x00013f67 0x1043 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_info 0x00014faa 0xa52 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_info 0x000159fc 0x91c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_info 0x00016318 0x6a0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_info 0x000169b8 0x63d ./USB_DEVICE/App/usb_device.o
|
||||
.debug_info 0x00016ff5 0x8c2 ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_info 0x000178b7 0x44a ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_info 0x00017d01 0x1864 ./USB_DEVICE/Target/usbd_conf.o
|
||||
.debug_info 0x00001494 0x743 ./Core/Src/eeprom.o
|
||||
.debug_info 0x00001bd7 0x1a23 ./Core/Src/main.o
|
||||
.debug_info 0x000035fa 0x9c0 ./Core/Src/pwm.o
|
||||
.debug_info 0x00003fba 0xf58 ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_info 0x00004f12 0x81d ./Core/Src/stm32f1xx_it.o
|
||||
.debug_info 0x0000572f 0x168 ./Core/Src/sysmem.o
|
||||
.debug_info 0x00005897 0x222 ./Core/Src/system_stm32f1xx.o
|
||||
.debug_info 0x00005ab9 0x30 ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_info 0x00005ae9 0x704 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_info 0x000061ed 0xc50 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_info 0x00006e3d 0xa87 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_info 0x000078c4 0x6d2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_info 0x00007f96 0x4f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_info 0x0000848e 0x777 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_info 0x00008c05 0x5ab ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_info 0x000091b0 0x16dc ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_info 0x0000a88c 0x6c3 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_info 0x0000af4f 0x7d5 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_info 0x0000b724 0x3c0 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_info 0x0000bae4 0x2959 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_info 0x0000e43d 0x149b ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_info 0x0000f8d8 0x2eed ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_info 0x000127c5 0x17ae ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_info 0x00013f73 0x1043 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_info 0x00014fb6 0xa52 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_info 0x00015a08 0x91c ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_info 0x00016324 0x6a0 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_info 0x000169c4 0x63d ./USB_DEVICE/App/usb_device.o
|
||||
.debug_info 0x00017001 0x8c2 ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_info 0x000178c3 0x44a ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_info 0x00017d0d 0x1864 ./USB_DEVICE/Target/usbd_conf.o
|
||||
|
||||
.debug_abbrev 0x00000000 0x4732
|
||||
.debug_abbrev 0x00000000 0x473a
|
||||
.debug_abbrev 0x00000000 0xeb ./Core/Src/adc.o
|
||||
.debug_abbrev 0x000000eb 0x269 ./Core/Src/cdc_int.o
|
||||
.debug_abbrev 0x00000354 0x199 ./Core/Src/debug.o
|
||||
.debug_abbrev 0x000004ed 0x23a ./Core/Src/eeprom.o
|
||||
.debug_abbrev 0x00000727 0x340 ./Core/Src/main.o
|
||||
.debug_abbrev 0x00000a67 0x1f4 ./Core/Src/pwm.o
|
||||
.debug_abbrev 0x00000c5b 0x274 ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_abbrev 0x00000ecf 0x1b5 ./Core/Src/stm32f1xx_it.o
|
||||
.debug_abbrev 0x00001084 0xbc ./Core/Src/sysmem.o
|
||||
.debug_abbrev 0x00001140 0x13f ./Core/Src/system_stm32f1xx.o
|
||||
.debug_abbrev 0x0000127f 0x24 ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_abbrev 0x000012a3 0x201 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_abbrev 0x000014a4 0x225 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_abbrev 0x000016c9 0x2f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_abbrev 0x000019c1 0x20b ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_abbrev 0x00001bcc 0x250 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_abbrev 0x00001e1c 0x247 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_abbrev 0x00002063 0x1ca ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_abbrev 0x0000222d 0x2d6 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_abbrev 0x00002503 0x189 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_abbrev 0x0000268c 0x2b3 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_abbrev 0x0000293f 0x188 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_abbrev 0x00002ac7 0x277 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_abbrev 0x00002d3e 0x282 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_abbrev 0x00002fc0 0x2f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_abbrev 0x000032b8 0x1de ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_abbrev 0x00003496 0x2d3 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_abbrev 0x00003769 0x24a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_abbrev 0x000039b3 0x26b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_abbrev 0x00003c1e 0x192 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_abbrev 0x00003db0 0x18d ./USB_DEVICE/App/usb_device.o
|
||||
.debug_abbrev 0x00003f3d 0x2e0 ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_abbrev 0x0000421d 0x1ff ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_abbrev 0x0000441c 0x316 ./USB_DEVICE/Target/usbd_conf.o
|
||||
.debug_abbrev 0x000004ed 0x242 ./Core/Src/eeprom.o
|
||||
.debug_abbrev 0x0000072f 0x340 ./Core/Src/main.o
|
||||
.debug_abbrev 0x00000a6f 0x1f4 ./Core/Src/pwm.o
|
||||
.debug_abbrev 0x00000c63 0x274 ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_abbrev 0x00000ed7 0x1b5 ./Core/Src/stm32f1xx_it.o
|
||||
.debug_abbrev 0x0000108c 0xbc ./Core/Src/sysmem.o
|
||||
.debug_abbrev 0x00001148 0x13f ./Core/Src/system_stm32f1xx.o
|
||||
.debug_abbrev 0x00001287 0x24 ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_abbrev 0x000012ab 0x201 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_abbrev 0x000014ac 0x225 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_abbrev 0x000016d1 0x2f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_abbrev 0x000019c9 0x20b ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_abbrev 0x00001bd4 0x250 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_abbrev 0x00001e24 0x247 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_abbrev 0x0000206b 0x1ca ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_abbrev 0x00002235 0x2d6 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_abbrev 0x0000250b 0x189 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_abbrev 0x00002694 0x2b3 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_abbrev 0x00002947 0x188 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_abbrev 0x00002acf 0x277 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_abbrev 0x00002d46 0x282 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_abbrev 0x00002fc8 0x2f8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_abbrev 0x000032c0 0x1de ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_abbrev 0x0000349e 0x2d3 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_abbrev 0x00003771 0x24a ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_abbrev 0x000039bb 0x26b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_abbrev 0x00003c26 0x192 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_abbrev 0x00003db8 0x18d ./USB_DEVICE/App/usb_device.o
|
||||
.debug_abbrev 0x00003f45 0x2e0 ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_abbrev 0x00004225 0x1ff ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_abbrev 0x00004424 0x316 ./USB_DEVICE/Target/usbd_conf.o
|
||||
|
||||
.debug_aranges 0x00000000 0x1648
|
||||
.debug_aranges
|
||||
@@ -6621,42 +6621,42 @@ LOAD C:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.ext
|
||||
.debug_line 0x0001c891 0xb01 ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_line 0x0001d392 0xe34 ./USB_DEVICE/Target/usbd_conf.o
|
||||
|
||||
.debug_str 0x00000000 0x95d23
|
||||
.debug_str 0x00000000 0x95d23 ./Core/Src/adc.o
|
||||
.debug_str 0x00000000 0x95d30
|
||||
.debug_str 0x00000000 0x95d30 ./Core/Src/adc.o
|
||||
0x8ab52 (size before relaxing)
|
||||
.debug_str 0x00095d23 0x9029b ./Core/Src/cdc_int.o
|
||||
.debug_str 0x00095d23 0x8eea7 ./Core/Src/debug.o
|
||||
.debug_str 0x00095d23 0x8b126 ./Core/Src/eeprom.o
|
||||
.debug_str 0x00095d23 0x9101f ./Core/Src/main.o
|
||||
.debug_str 0x00095d23 0x8b781 ./Core/Src/pwm.o
|
||||
.debug_str 0x00095d23 0x8b9ce ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_str 0x00095d23 0x8b615 ./Core/Src/stm32f1xx_it.o
|
||||
.debug_str 0x00095d23 0x7714 ./Core/Src/sysmem.o
|
||||
.debug_str 0x00095d23 0x8ab75 ./Core/Src/system_stm32f1xx.o
|
||||
.debug_str 0x00095d23 0x6e ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_str 0x00095d23 0x8b2a8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_str 0x00095d23 0x8b259 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_str 0x00095d23 0x8b1f4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_str 0x00095d23 0x8af1e ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_str 0x00095d23 0x8ae50 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_str 0x00095d23 0x8affe ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_str 0x00095d23 0x8aefb ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_str 0x00095d23 0x8b492 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_str 0x00095d23 0x8aff4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_str 0x00095d23 0x8afa4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_str 0x00095d23 0x8acf4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_str 0x00095d23 0x8bfa6 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_str 0x00095d23 0x8b7b2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_str 0x00095d23 0x8b615 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_str 0x00095d23 0x8b046 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_str 0x00095d23 0x8fff4 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_str 0x00095d23 0x8f924 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_str 0x00095d23 0x8f83e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_str 0x00095d23 0x8f76b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_str 0x00095d23 0x8faf6 ./USB_DEVICE/App/usb_device.o
|
||||
.debug_str 0x00095d23 0x8fb6d ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_str 0x00095d23 0x8f6a7 ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_str 0x00095d23 0x90581 ./USB_DEVICE/Target/usbd_conf.o
|
||||
.debug_str 0x00095d30 0x902a8 ./Core/Src/cdc_int.o
|
||||
.debug_str 0x00095d30 0x8eea7 ./Core/Src/debug.o
|
||||
.debug_str 0x00095d30 0x8b133 ./Core/Src/eeprom.o
|
||||
.debug_str 0x00095d30 0x9102c ./Core/Src/main.o
|
||||
.debug_str 0x00095d30 0x8b781 ./Core/Src/pwm.o
|
||||
.debug_str 0x00095d30 0x8b9ce ./Core/Src/stm32f1xx_hal_msp.o
|
||||
.debug_str 0x00095d30 0x8b615 ./Core/Src/stm32f1xx_it.o
|
||||
.debug_str 0x00095d30 0x7714 ./Core/Src/sysmem.o
|
||||
.debug_str 0x00095d30 0x8ab75 ./Core/Src/system_stm32f1xx.o
|
||||
.debug_str 0x00095d30 0x6e ./Core/Startup/startup_stm32f103c8tx.o
|
||||
.debug_str 0x00095d30 0x8b2a8 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o
|
||||
.debug_str 0x00095d30 0x8b259 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.o
|
||||
.debug_str 0x00095d30 0x8b1f4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o
|
||||
.debug_str 0x00095d30 0x8af1e ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.o
|
||||
.debug_str 0x00095d30 0x8ae50 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o
|
||||
.debug_str 0x00095d30 0x8affe ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
|
||||
.debug_str 0x00095d30 0x8aefb ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o
|
||||
.debug_str 0x00095d30 0x8b492 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.o
|
||||
.debug_str 0x00095d30 0x8aff4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.o
|
||||
.debug_str 0x00095d30 0x8afa4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o
|
||||
.debug_str 0x00095d30 0x8acf4 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.o
|
||||
.debug_str 0x00095d30 0x8bfa6 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.o
|
||||
.debug_str 0x00095d30 0x8b7b2 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.o
|
||||
.debug_str 0x00095d30 0x8b615 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.o
|
||||
.debug_str 0x00095d30 0x8b046 ./Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.o
|
||||
.debug_str 0x00095d30 0x8fff4 ./Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.o
|
||||
.debug_str 0x00095d30 0x8f924 ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
|
||||
.debug_str 0x00095d30 0x8f83e ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
|
||||
.debug_str 0x00095d30 0x8f76b ./Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
|
||||
.debug_str 0x00095d30 0x8faf6 ./USB_DEVICE/App/usb_device.o
|
||||
.debug_str 0x00095d30 0x8fb6d ./USB_DEVICE/App/usbd_cdc_if.o
|
||||
.debug_str 0x00095d30 0x8f6a7 ./USB_DEVICE/App/usbd_desc.o
|
||||
.debug_str 0x00095d30 0x90581 ./USB_DEVICE/Target/usbd_conf.o
|
||||
|
||||
.comment 0x00000000 0x43
|
||||
.comment 0x00000000 0x43 ./Core/Src/adc.o
|
||||
|
||||
Binary file not shown.
@@ -1,13 +1,13 @@
|
||||
../Core/Src/eeprom.h:110:24:EEW_Read 1
|
||||
../Core/Src/eeprom.c:99:17:EE_GetPageStatus 1
|
||||
../Core/Src/eeprom.c:104:26:EE_FlashProgramHalfWord 1
|
||||
../Core/Src/eeprom.c:115:26:EE_FlashErasePage 1
|
||||
../Core/Src/eeprom.c:134:17:EE_FindFreeAddress 3
|
||||
../Core/Src/eeprom.c:156:18:EE_FindInPage 6
|
||||
../Core/Src/eeprom.c:196:18:EE_Format 4
|
||||
../Core/Src/eeprom.c:214:17:EE_GetOtherPageBase 2
|
||||
../Core/Src/eeprom.c:220:18:EE_PageTransfer 11
|
||||
../Core/Src/eeprom.c:293:10:EE_Init 7
|
||||
../Core/Src/eeprom.c:324:10:EE_ReadVariable 2
|
||||
../Core/Src/eeprom.c:341:10:EE_WriteVariable 4
|
||||
../Core/Src/eeprom.c:364:6:loadEE 1
|
||||
../Core/Src/eeprom.c:140:17:EE_GetPageStatus 1
|
||||
../Core/Src/eeprom.c:145:26:EE_FlashProgramHalfWord 1
|
||||
../Core/Src/eeprom.c:156:26:EE_FlashErasePage 1
|
||||
../Core/Src/eeprom.c:175:17:EE_FindFreeAddress 3
|
||||
../Core/Src/eeprom.c:197:18:EE_FindInPage 6
|
||||
../Core/Src/eeprom.c:237:18:EE_Format 4
|
||||
../Core/Src/eeprom.c:255:17:EE_GetOtherPageBase 2
|
||||
../Core/Src/eeprom.c:261:18:EE_PageTransfer 11
|
||||
../Core/Src/eeprom.c:334:10:EE_Init 7
|
||||
../Core/Src/eeprom.c:365:10:EE_ReadVariable 2
|
||||
../Core/Src/eeprom.c:382:10:EE_WriteVariable 4
|
||||
../Core/Src/eeprom.c:405:6:loadEE 1
|
||||
|
||||
Binary file not shown.
@@ -1,13 +1,13 @@
|
||||
../Core/Src/eeprom.h:110:24:EEW_Read 16 static
|
||||
../Core/Src/eeprom.c:99:17:EE_GetPageStatus 16 static
|
||||
../Core/Src/eeprom.c:104:26:EE_FlashProgramHalfWord 32 static
|
||||
../Core/Src/eeprom.c:115:26:EE_FlashErasePage 40 static
|
||||
../Core/Src/eeprom.c:134:17:EE_FindFreeAddress 32 static
|
||||
../Core/Src/eeprom.c:156:18:EE_FindInPage 40 static
|
||||
../Core/Src/eeprom.c:196:18:EE_Format 8 static
|
||||
../Core/Src/eeprom.c:214:17:EE_GetOtherPageBase 16 static
|
||||
../Core/Src/eeprom.c:220:18:EE_PageTransfer 40 static
|
||||
../Core/Src/eeprom.c:293:10:EE_Init 16 static
|
||||
../Core/Src/eeprom.c:324:10:EE_ReadVariable 24 static
|
||||
../Core/Src/eeprom.c:341:10:EE_WriteVariable 24 static
|
||||
../Core/Src/eeprom.c:364:6:loadEE 8 static
|
||||
../Core/Src/eeprom.c:140:17:EE_GetPageStatus 16 static
|
||||
../Core/Src/eeprom.c:145:26:EE_FlashProgramHalfWord 32 static
|
||||
../Core/Src/eeprom.c:156:26:EE_FlashErasePage 40 static
|
||||
../Core/Src/eeprom.c:175:17:EE_FindFreeAddress 32 static
|
||||
../Core/Src/eeprom.c:197:18:EE_FindInPage 40 static
|
||||
../Core/Src/eeprom.c:237:18:EE_Format 8 static
|
||||
../Core/Src/eeprom.c:255:17:EE_GetOtherPageBase 16 static
|
||||
../Core/Src/eeprom.c:261:18:EE_PageTransfer 40 static
|
||||
../Core/Src/eeprom.c:334:10:EE_Init 16 static
|
||||
../Core/Src/eeprom.c:365:10:EE_ReadVariable 24 static
|
||||
../Core/Src/eeprom.c:382:10:EE_WriteVariable 24 static
|
||||
../Core/Src/eeprom.c:405:6:loadEE 8 static
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user