From 075e8299cfc4a4924551310f65df3138b8de058b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E4=BD=B3?= <13101321+jfen5577@user.noreply.gitee.com> Date: Fri, 23 Jan 2026 14:35:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trae/documents/STM32F407项目优化迭代计划.md | 163 ++ BSP/Inc/bsp_board.h | 275 ++- BSP/Inc/bsp_board_manager.h | 8 +- BSP/Inc/bsp_config.h | 185 +- BSP/Inc/bsp_init.h | 6 +- BSP/Inc/bsp_module.h | 401 +++ BSP/Src/bsp_board_manager.c | 20 +- BSP/Src/bsp_config.c | 653 +++++ BSP/Src/bsp_init.c | 222 +- BSP/Src/bsp_key.c | 4 +- BSP/Src/bsp_module.c | 795 ++++++ BSP/Src/bsp_w25qxx.c | 8 +- BSP/Src/stm32f407vet6_board.c | 420 +++- Core/Src/main.c | 15 +- HAL/Inc/arch/stm32f4/hal_stm32f4.h | 2 +- HAL/Inc/hal.h | 346 ++- HAL/Inc/hal_adc.h | 175 ++ HAL/Inc/hal_can.h | 180 ++ HAL/Inc/hal_gpio.h | 14 +- HAL/Inc/hal_i2c.h | 125 + HAL/Inc/hal_spi.h | 21 +- HAL/Inc/hal_uart.h | 25 +- HAL/Src/hal.c | 332 ++- HAL/Src/hal_adc.c | 313 +++ HAL/Src/hal_can.c | 275 +++ HAL/Src/hal_gpio.c | 35 +- HAL/Src/hal_i2c.c | 218 ++ HAL/Src/hal_spi.c | 106 +- HAL/Src/hal_uart.c | 103 +- Modules/uart/src/uart.c | 12 +- build/Debug/.ninja_deps | Bin 52884 -> 62996 bytes build/Debug/.ninja_log | 86 + .../Core/Src/main.c.obj | Bin 1107168 -> 1120964 bytes build/Debug/stm32f407vet6_cmake.elf | Bin 1286016 -> 1295328 bytes build/Debug/stm32f407vet6_cmake.map | 2193 +++++++---------- build_output.txt | Bin 0 -> 287204 bytes 36 files changed, 6146 insertions(+), 1590 deletions(-) create mode 100644 .trae/documents/STM32F407项目优化迭代计划.md create mode 100644 BSP/Inc/bsp_module.h create mode 100644 BSP/Src/bsp_config.c create mode 100644 BSP/Src/bsp_module.c create mode 100644 HAL/Inc/hal_adc.h create mode 100644 HAL/Inc/hal_can.h create mode 100644 HAL/Inc/hal_i2c.h create mode 100644 HAL/Src/hal_adc.c create mode 100644 HAL/Src/hal_can.c create mode 100644 HAL/Src/hal_i2c.c create mode 100644 build_output.txt diff --git a/.trae/documents/STM32F407项目优化迭代计划.md b/.trae/documents/STM32F407项目优化迭代计划.md new file mode 100644 index 0000000..10fd61b --- /dev/null +++ b/.trae/documents/STM32F407项目优化迭代计划.md @@ -0,0 +1,163 @@ +# STM32F407项目优化计划 + +## 1. 项目现状分析 + +通过对代码的深入分析,当前项目已经具备了基本的HAL(硬件抽象层)和BSP(板级支持包)分层设计,但在以下方面还有很大的优化空间: + +### 1.1 HAL层现状 +- 已实现GPIO、UART、SPI等基本外设的HAL驱动 +- 采用了架构分离的设计(通过HAL_TARGET_ARCH宏) +- 缺少统一的错误处理机制 +- 缺少统一的HAL模块管理机制 + +### 1.2 BSP层现状 +- 实现了基本的板级初始化 +- 采用了配置结构体的方式定义板级配置 +- 缺少基于配置文件的初始化机制 +- 模块化程度不够,外设驱动之间耦合度较高 + +## 2. 优化目标 + +### 2.1 HAL层优化目标 +- 完善架构抽象,提高通用性 +- 实现统一的错误处理机制 +- 增加HAL模块管理机制 +- 支持更多外设类型 + +### 2.2 BSP层优化目标 +- 实现基于配置文件的BSP初始化 +- 增加BSP层的模块化设计 +- 优化板级配置结构体 +- 支持动态扩展的外设配置 + +## 3. 具体实施步骤 + +### 3.1 HAL层优化 + +**3.1.1 完善HAL层架构抽象** + +1. **修改`hal.h`** + - 增加HAL模块管理机制 + - 定义统一的错误码枚举 + - 增加HAL层版本信息 + - 完善架构分离机制 + +2. **实现统一的HAL模块初始化** + - 创建`hal_module.h`,定义HAL模块管理接口 + - 实现HAL模块的注册、初始化和卸载功能 + - 支持模块的依赖管理 + +**3.1.2 优化HAL层错误处理** + +1. **定义统一的错误码** + ```c + typedef enum { + HAL_OK = 0, + HAL_ERROR, + HAL_BUSY, + HAL_TIMEOUT, + HAL_INVALID_PARAM, + HAL_NOT_SUPPORTED, + // 更多错误码... + } hal_status_t; + ``` + +2. **修改HAL函数签名** + - 将所有HAL函数改为返回`hal_status_t` + - 增加错误信息传递机制 + - 实现错误日志记录功能 + +3. **实现错误处理工具函数** + - 编写`hal_error.h`,提供错误码转换和处理工具 + - 支持错误信息的格式化输出 + +### 3.2 BSP层优化 + +**3.2.1 实现基于配置文件的BSP初始化** + +1. **设计配置文件格式** + - 采用JSON或二进制格式存储配置 + - 支持分层配置结构 + - 实现配置版本管理 + +2. **实现配置文件解析器** + - 创建`bsp_config_parser.c`,实现配置文件解析功能 + - 支持从Flash或文件系统加载配置 + - 实现配置的验证和默认值填充 + +3. **修改BSP初始化流程** + - 修改`bsp_init.c`,支持从配置文件加载配置 + - 实现配置的动态应用 + - 增加配置变更通知机制 + +**3.2.2 增加BSP层模块化设计** + +1. **实现外设驱动模块化** + - 为每个外设驱动创建独立的模块 + - 实现模块的注册和初始化机制 + - 支持模块的动态加载和卸载 + +2. **创建BSP模块管理机制** + - 编写`bsp_module.h`,定义BSP模块管理接口 + - 实现模块的依赖管理 + - 支持模块的优先级管理 + +3. **优化外设驱动之间的交互** + - 采用事件驱动机制,减少外设驱动之间的耦合 + - 实现外设驱动的异步操作支持 + - 增加外设驱动的状态管理 + +**3.2.3 优化板级配置结构体** + +1. **修改`bsp_board.h`** + - 增加配置结构体的版本字段 + - 支持配置的动态扩展 + - 实现配置的默认值机制 + +2. **设计灵活的配置扩展机制** + - 采用链表或数组方式存储扩展配置 + - 支持配置项的动态添加和删除 + - 实现配置的序列化和反序列化 + +3. **实现配置的校验机制** + - 增加配置项的合法性校验 + - 支持配置的完整性检查 + - 实现配置的自动修复功能 + +## 4. 预期成果 + +通过本次优化,项目将实现: + +- **更完善的HAL层**:具有统一的错误处理机制和模块管理,提高了通用性和可维护性 +- **更灵活的BSP层**:支持基于配置文件的初始化,模块化程度更高,外设驱动之间耦合度更低 +- **更优化的板级配置**:支持动态扩展和版本管理,配置更加灵活和可靠 +- **更好的可扩展性**:便于添加新的外设驱动和支持新的硬件平台 +- **更好的可维护性**:代码结构更清晰,错误处理更完善,便于调试和维护 + +## 5. 实施顺序 + +1. 首先优化HAL层的错误处理机制 +2. 然后完善HAL层的架构抽象 +3. 接着优化板级配置结构体 +4. 然后实现BSP层的模块化设计 +5. 最后实现基于配置文件的BSP初始化 + +## 6. 风险评估 + +- **风险1**:修改HAL函数签名可能导致现有代码无法编译 + - **应对措施**:采用渐进式修改,先添加错误码返回,保持向后兼容 + +- **风险2**:配置文件解析可能增加系统开销 + - **应对措施**:优化解析算法,采用高效的解析库,支持配置的缓存机制 + +- **风险3**:模块化设计可能增加代码复杂度 + - **应对措施**:保持模块接口的简洁性,提供详细的文档和示例代码 + +## 7. 测试计划 + +- 单元测试:测试每个HAL函数的错误处理功能 +- 集成测试:测试HAL模块管理机制 +- 系统测试:测试基于配置文件的BSP初始化 +- 回归测试:确保现有功能不受影响 + +通过以上优化,项目将在架构设计、代码质量和可维护性方面得到显著提升,为后续的功能扩展和平台移植奠定坚实的基础。 \ No newline at end of file diff --git a/BSP/Inc/bsp_board.h b/BSP/Inc/bsp_board.h index 0451755..f437b5c 100644 --- a/BSP/Inc/bsp_board.h +++ b/BSP/Inc/bsp_board.h @@ -11,39 +11,53 @@ #define BSP_BOARD_H #include +#include "hal.h" #include "hal_gpio.h" #include "hal_uart.h" #include "hal_spi.h" +#include "hal_i2c.h" +#include "hal_can.h" +#include "hal_adc.h" + +/** + * @brief BSP configuration version + */ +#define BSP_CONFIG_VERSION_MAJOR 1 +#define BSP_CONFIG_VERSION_MINOR 0 +#define BSP_CONFIG_VERSION_PATCH 0 +#define BSP_CONFIG_VERSION (BSP_CONFIG_VERSION_MAJOR << 16 | BSP_CONFIG_VERSION_MINOR << 8 | BSP_CONFIG_VERSION_PATCH) /** * @brief Board LED configuration structure */ typedef struct { - hal_gpio_port_t port; - hal_gpio_pin_t pin; - hal_gpio_mode_t mode; - hal_gpio_speed_t speed; - hal_gpio_pull_t pull; + uint8_t enable; /*!< LED enable flag */ + hal_gpio_port_t port; /*!< LED GPIO port */ + hal_gpio_pin_t pin; /*!< LED GPIO pin */ + hal_gpio_mode_t mode; /*!< LED GPIO mode */ + hal_gpio_speed_t speed; /*!< LED GPIO speed */ + hal_gpio_pull_t pull; /*!< LED GPIO pull configuration */ } bsp_led_config_t; /** * @brief Board button configuration structure */ typedef struct { - hal_gpio_port_t port; - hal_gpio_pin_t pin; - hal_gpio_mode_t mode; - hal_gpio_speed_t speed; - hal_gpio_pull_t pull; - uint8_t active_high; + hal_gpio_port_t port; /*!< Button GPIO port */ + hal_gpio_pin_t pin; /*!< Button GPIO pin */ + hal_gpio_mode_t mode; /*!< Button GPIO mode */ + hal_gpio_speed_t speed; /*!< Button GPIO speed */ + hal_gpio_pull_t pull; /*!< Button GPIO pull configuration */ + uint8_t active_high; /*!< Button active high flag */ } bsp_button_config_t; /** * @brief Board buttons configuration structure */ typedef struct { - uint8_t count; - const bsp_button_config_t* buttons; + uint8_t enable; /*!< Buttons enable flag */ + uint8_t count; /*!< Number of buttons */ + const bsp_button_config_t* buttons; /*!< Pointer to buttons configuration array */ } bsp_buttons_config_t; /** @@ -63,62 +77,226 @@ typedef enum { * @brief Board UART configuration structure */ typedef struct { - bsp_uart_instance_t instance; - uint32_t baudrate; - hal_uart_parity_t parity; - hal_uart_stopbits_t stopbits; - hal_uart_databits_t databits; - hal_gpio_port_t tx_port; - hal_gpio_pin_t tx_pin; - hal_gpio_port_t rx_port; - hal_gpio_pin_t rx_pin; + uint8_t enable; /*!< UART enable flag */ + bsp_uart_instance_t instance; /*!< UART instance */ + uint32_t baudrate; /*!< UART baudrate */ + hal_uart_parity_t parity; /*!< UART parity */ + hal_uart_stopbits_t stopbits; /*!< UART stop bits */ + hal_uart_databits_t databits; /*!< UART data bits */ + hal_gpio_port_t tx_port; /*!< UART TX port */ + hal_gpio_pin_t tx_pin; /*!< UART TX pin */ + hal_gpio_port_t rx_port; /*!< UART RX port */ + hal_gpio_pin_t rx_pin; /*!< UART RX pin */ } bsp_uart_config_t; /** * @brief Board SPI configuration structure */ typedef struct { - hal_spi_instance_t instance; - hal_spi_mode_t mode; - uint32_t baudrate; - hal_spi_polarity_t polarity; - hal_spi_phase_t phase; - hal_spi_databits_t databits; + uint8_t enable; /*!< SPI enable flag */ + hal_spi_instance_t instance; /*!< SPI instance */ + hal_spi_mode_t mode; /*!< SPI mode */ + uint32_t baudrate; /*!< SPI baudrate */ + hal_spi_polarity_t polarity; /*!< SPI clock polarity */ + hal_spi_phase_t phase; /*!< SPI clock phase */ + hal_spi_databits_t databits; /*!< SPI data bits */ + hal_gpio_port_t sck_port; /*!< SPI SCK port */ + hal_gpio_pin_t sck_pin; /*!< SPI SCK pin */ + hal_gpio_port_t miso_port; /*!< SPI MISO port */ + hal_gpio_pin_t miso_pin; /*!< SPI MISO pin */ + hal_gpio_port_t mosi_port; /*!< SPI MOSI port */ + hal_gpio_pin_t mosi_pin; /*!< SPI MOSI pin */ } bsp_spi_config_t; +/** + * @brief Board I2C configuration structure + */ +typedef struct { + uint8_t enable; /*!< I2C enable flag */ + hal_i2c_instance_t instance; /*!< I2C instance */ + hal_i2c_speed_t speed; /*!< I2C speed */ + hal_i2c_address_mode_t address_mode; /*!< I2C address mode */ + hal_i2c_dutycycle_t dutycycle; /*!< I2C duty cycle */ + uint16_t own_address1; /*!< I2C own address 1 */ + hal_gpio_port_t scl_port; /*!< I2C SCL port */ + hal_gpio_pin_t scl_pin; /*!< I2C SCL pin */ + hal_gpio_port_t sda_port; /*!< I2C SDA port */ + hal_gpio_pin_t sda_pin; /*!< I2C SDA pin */ +} bsp_i2c_config_t; + +/** + * @brief Board CAN configuration structure + */ +typedef struct { + uint8_t enable; /*!< CAN enable flag */ + hal_can_instance_t instance; /*!< CAN instance */ + hal_can_mode_t mode; /*!< CAN mode */ + uint32_t prescaler; /*!< CAN prescaler */ + uint8_t sync_jump_width; /*!< CAN sync jump width */ + uint8_t time_segment1; /*!< CAN time segment 1 */ + uint8_t time_segment2; /*!< CAN time segment 2 */ + hal_gpio_port_t rx_port; /*!< CAN RX port */ + hal_gpio_pin_t rx_pin; /*!< CAN RX pin */ + hal_gpio_port_t tx_port; /*!< CAN TX port */ + hal_gpio_pin_t tx_pin; /*!< CAN TX pin */ +} bsp_can_config_t; + +/** + * @brief Board ADC channel configuration structure + */ +typedef struct { + uint8_t enable; /*!< ADC channel enable flag */ + hal_adc_channel_t channel; /*!< ADC channel */ + hal_adc_sampletime_t sampletime; /*!< ADC sample time */ + uint8_t rank; /*!< ADC channel rank */ +} bsp_adc_channel_config_t; + +/** + * @brief Board ADC configuration structure + */ +typedef struct { + uint8_t enable; /*!< ADC enable flag */ + hal_adc_instance_t instance; /*!< ADC instance */ + hal_adc_resolution_t resolution; /*!< ADC resolution */ + uint8_t scan_conversion_mode; /*!< ADC scan conversion mode */ + uint8_t continuous_conversion_mode; /*!< ADC continuous conversion mode */ + uint8_t channel_count; /*!< Number of ADC channels */ + const bsp_adc_channel_config_t* channels; /*!< Pointer to ADC channels configuration array */ +} bsp_adc_config_t; + /** * @brief Board W25QXX configuration structure */ typedef struct { - hal_gpio_port_t cs_port; - hal_gpio_pin_t cs_pin; - bsp_spi_config_t spi_config; + uint8_t enable; /*!< W25QXX enable flag */ + hal_gpio_port_t cs_port; /*!< W25QXX CS port */ + hal_gpio_pin_t cs_pin; /*!< W25QXX CS pin */ + uint8_t spi_instance; /*!< SPI instance used by W25QXX */ } bsp_w25qxx_config_t; /** * @brief Board peripheral initialization function type */ -typedef void (*bsp_periph_init_func_t)(const void* config); +typedef hal_ret_t (*bsp_periph_init_func_t)(const void* config); + +/** + * @brief Board ID structure + */ +typedef struct { + uint16_t vendor_id; /*!< Board vendor ID */ + uint16_t product_id; /*!< Board product ID */ + uint32_t serial_number; /*!< Board serial number */ +} bsp_board_id_t; + +/** + * @brief Board feature flags + */ +typedef enum { + BSP_BOARD_FEATURE_LED = (1 << 0), /*!< Board has LED support */ + BSP_BOARD_FEATURE_BUTTON = (1 << 1), /*!< Board has button support */ + BSP_BOARD_FEATURE_UART = (1 << 2), /*!< Board has UART support */ + BSP_BOARD_FEATURE_SPI = (1 << 3), /*!< Board has SPI support */ + BSP_BOARD_FEATURE_I2C = (1 << 4), /*!< Board has I2C support */ + BSP_BOARD_FEATURE_CAN = (1 << 5), /*!< Board has CAN support */ + BSP_BOARD_FEATURE_ADC = (1 << 6), /*!< Board has ADC support */ + BSP_BOARD_FEATURE_DAC = (1 << 7), /*!< Board has DAC support */ + BSP_BOARD_FEATURE_TIMER = (1 << 8), /*!< Board has TIMER support */ + BSP_BOARD_FEATURE_RTC = (1 << 9), /*!< Board has RTC support */ + BSP_BOARD_FEATURE_W25QXX = (1 << 10), /*!< Board has W25QXX support */ + BSP_BOARD_FEATURE_DMA = (1 << 11), /*!< Board has DMA support */ + BSP_BOARD_FEATURE_ETH = (1 << 12), /*!< Board has ETH support */ + BSP_BOARD_FEATURE_USB = (1 << 13), /*!< Board has USB support */ + BSP_BOARD_FEATURE_SDIO = (1 << 14), /*!< Board has SDIO support */ + BSP_BOARD_FEATURE_FSMC = (1 << 15), /*!< Board has FSMC support */ +} bsp_board_feature_t; + +/** + * @brief Board hardware information structure + */ +typedef struct { + uint32_t clock_speed; /*!< Board clock speed */ + uint32_t flash_size; /*!< Flash size in bytes */ + uint32_t ram_size; /*!< RAM size in bytes */ + uint32_t eeprom_size; /*!< EEPROM size in bytes */ + uint32_t sram_size; /*!< SRAM size in bytes */ + uint8_t cpu_core; /*!< CPU core type */ + uint8_t cpu_bits; /*!< CPU bits (32 or 64) */ +} bsp_board_hw_info_t; + +/** + * @brief Board peripheral configuration structure + */ +typedef struct { + /* UART configurations */ + uint8_t uart_count; /*!< Number of UARTs */ + const bsp_uart_config_t* uarts; /*!< Pointer to UARTs configuration array */ + + /* SPI configurations */ + uint8_t spi_count; /*!< Number of SPIs */ + const bsp_spi_config_t* spis; /*!< Pointer to SPIs configuration array */ + + /* I2C configurations */ + uint8_t i2c_count; /*!< Number of I2Cs */ + const bsp_i2c_config_t* i2cs; /*!< Pointer to I2Cs configuration array */ + + /* CAN configurations */ + uint8_t can_count; /*!< Number of CANs */ + const bsp_can_config_t* cans; /*!< Pointer to CANs configuration array */ + + /* ADC configurations */ + uint8_t adc_count; /*!< Number of ADCs */ + const bsp_adc_config_t* adcs; /*!< Pointer to ADCs configuration array */ +} bsp_board_periph_config_t; + +/** + * @brief Board initialization function pointers structure + */ +typedef struct { + bsp_periph_init_func_t led_init; /*!< LED initialization function */ + bsp_periph_init_func_t button_init; /*!< Button initialization function */ + bsp_periph_init_func_t uart_init; /*!< UART initialization function */ + bsp_periph_init_func_t spi_init; /*!< SPI initialization function */ + bsp_periph_init_func_t i2c_init; /*!< I2C initialization function */ + bsp_periph_init_func_t can_init; /*!< CAN initialization function */ + bsp_periph_init_func_t adc_init; /*!< ADC initialization function */ + bsp_periph_init_func_t w25qxx_init; /*!< W25QXX initialization function */ +} bsp_board_init_funcs_t; /** * @brief Board configuration structure */ typedef struct { - const char* name; - bsp_led_config_t led; - bsp_buttons_config_t buttons; - bsp_uart_config_t uart; - bsp_w25qxx_config_t w25qxx; + uint32_t version; /*!< Configuration version */ + const char* name; /*!< Board name */ + const char* description; /*!< Board description */ + bsp_board_id_t id; /*!< Board ID information */ - /* Initialization function pointers */ - bsp_periph_init_func_t led_init; - bsp_periph_init_func_t button_init; - bsp_periph_init_func_t uart_init; - bsp_periph_init_func_t w25qxx_init; + /* Board features */ + uint32_t features; /*!< Board feature flags */ + + /* Hardware information */ + bsp_board_hw_info_t hw_info; /*!< Hardware information */ + + /* Peripheral configurations */ + bsp_led_config_t led; /*!< LED configuration */ + bsp_buttons_config_t buttons; /*!< Buttons configuration */ + bsp_w25qxx_config_t w25qxx; /*!< W25QXX configuration */ + + /* Peripheral arrays */ + bsp_board_periph_config_t periphs; /*!< Peripheral configurations */ + + /* Initialization functions */ + bsp_board_init_funcs_t init_funcs; /*!< Initialization function pointers */ /* Additional board-specific configuration */ - uint32_t clock_speed; - uint8_t uart_count; + void* custom_config; /*!< Custom board configuration pointer */ + size_t custom_config_size; /*!< Custom board configuration size */ + + /* Board revision information */ + uint8_t major_rev; /*!< Major revision */ + uint8_t minor_rev; /*!< Minor revision */ + uint8_t patch_rev; /*!< Patch revision */ + const char* revision_desc; /*!< Revision description */ } bsp_board_config_t; /** @@ -128,8 +306,9 @@ extern const bsp_board_config_t stm32f407vet6_board_config; /** * @brief Board hardware initialization + * @retval HAL status code */ -void bsp_board_init(void); +hal_ret_t bsp_board_init(void); /** * @brief Get board name @@ -137,4 +316,10 @@ void bsp_board_init(void); */ const char* bsp_board_get_name(void); +/** + * @brief Get board configuration + * @retval Pointer to board configuration structure + */ +const bsp_board_config_t* bsp_board_get_config(void); + #endif /* BSP_BOARD_H */ diff --git a/BSP/Inc/bsp_board_manager.h b/BSP/Inc/bsp_board_manager.h index 3f40ba4..301b87d 100644 --- a/BSP/Inc/bsp_board_manager.h +++ b/BSP/Inc/bsp_board_manager.h @@ -37,16 +37,16 @@ const bsp_board_config_t* bsp_board_get_by_name(const char* name); /** * @brief Set current board configuration by index * @param index: Board configuration index - * @retval 0 if successful, -1 if invalid index + * @retval HAL status code */ -int8_t bsp_board_set_by_index(uint8_t index); +hal_ret_t bsp_board_set_by_index(uint8_t index); /** * @brief Set current board configuration by name * @param name: Board name string - * @retval 0 if successful, -1 if not found + * @retval HAL status code */ -int8_t bsp_board_set_by_name(const char* name); +hal_ret_t bsp_board_set_by_name(const char* name); /** * @brief Get current board configuration diff --git a/BSP/Inc/bsp_config.h b/BSP/Inc/bsp_config.h index 8ffdea6..251b04b 100644 --- a/BSP/Inc/bsp_config.h +++ b/BSP/Inc/bsp_config.h @@ -2,7 +2,7 @@ /** ****************************************************************************** * @file : bsp_config.h - * @brief : Board support package configuration file + * @brief : Board support package configuration file header ****************************************************************************** */ /* USER CODE END Header */ @@ -10,42 +10,175 @@ #ifndef BSP_CONFIG_H #define BSP_CONFIG_H -#include "hal_gpio.h" -#include "hal_uart.h" +#include +#include "bsp_module.h" +#include "bsp_board.h" +#include "hal.h" /** - * @brief Board name definition + * @brief BSP configuration file format definitions */ -#define BOARD_NAME "STM32F407VET6" +#define BSP_CONFIG_FILE_VERSION "1.0.0" +#define BSP_CONFIG_MAX_LINE_LENGTH 256 +#define BSP_CONFIG_MAX_SECTION_NAME_LENGTH 32 +#define BSP_CONFIG_MAX_KEY_NAME_LENGTH 32 +#define BSP_CONFIG_MAX_VALUE_LENGTH 128 /** - * @brief LED hardware configuration + * @brief BSP configuration section type */ -#define BSP_LED_PORT HAL_GPIO_PORT_A -#define BSP_LED_PIN HAL_GPIO_PIN_6 +typedef enum { + BSP_CONFIG_SECTION_NONE = 0, + BSP_CONFIG_SECTION_BOARD, + BSP_CONFIG_SECTION_MODULE, + BSP_CONFIG_SECTION_PERIPH, + BSP_CONFIG_SECTION_MAX +} bsp_config_section_t; /** - * @brief Button hardware configuration + * @brief BSP configuration entry */ -/* KEY0 - PE4, active low */ -#define BSP_KEY0_PORT HAL_GPIO_PORT_E -#define BSP_KEY0_PIN HAL_GPIO_PIN_4 - -/* KEY1 - PE3, active low */ -#define BSP_KEY1_PORT HAL_GPIO_PORT_E -#define BSP_KEY1_PIN HAL_GPIO_PIN_3 - -/* WK_UP - PA0, active high */ -#define BSP_WKUP_PORT HAL_GPIO_PORT_A -#define BSP_WKUP_PIN HAL_GPIO_PIN_0 +typedef struct { + const char* section; + const char* key; + const char* value; +} bsp_config_entry_t; /** - * @brief UART hardware configuration + * @brief BSP configuration parser context */ -#define BSP_UART_INSTANCE BSP_UART_INSTANCE_1 -#define BSP_UART_BAUDRATE 115200 -#define BSP_UART_PARITY HAL_UART_PARITY_NONE -#define BSP_UART_STOPBITS HAL_UART_STOPBITS_1 -#define BSP_UART_DATABITS HAL_UART_DATABITS_8 +typedef struct { + FILE* file; + char current_section[BSP_CONFIG_MAX_SECTION_NAME_LENGTH]; + char buffer[BSP_CONFIG_MAX_LINE_LENGTH]; + uint32_t line_number; + uint8_t initialized; +} bsp_config_parser_t; + +/** + * @brief BSP configuration file operations + */ +typedef struct { + hal_ret_t (*open)(const char* filename, bsp_config_parser_t* parser); + hal_ret_t (*close)(bsp_config_parser_t* parser); + hal_ret_t (*read_entry)(bsp_config_parser_t* parser, bsp_config_entry_t* entry); + hal_ret_t (*parse_int)(const char* value, int* result); + hal_ret_t (*parse_uint)(const char* value, uint32_t* result); + hal_ret_t (*parse_bool)(const char* value, uint8_t* result); + hal_ret_t (*parse_string)(const char* value, char* result, size_t max_length); +} bsp_config_ops_t; + +/** + * @brief Initialize BSP configuration system + * @retval HAL status code + */ +hal_ret_t bsp_config_init(void); + +/** + * @brief Deinitialize BSP configuration system + * @retval HAL status code + */ +hal_ret_t bsp_config_deinit(void); + +/** + * @brief Load BSP configuration from file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_config_load(const char* filename); + +/** + * @brief Save BSP configuration to file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_config_save(const char* filename); + +/** + * @brief Get configuration value + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store value + * @param max_length: Maximum length of value buffer + * @retval HAL status code + */ +hal_ret_t bsp_config_get_value(const char* section, const char* key, char* value, size_t max_length); + +/** + * @brief Set configuration value + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Configuration value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_value(const char* section, const char* key, const char* value); + +/** + * @brief Get configuration value as integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_int(const char* section, const char* key, int* value); + +/** + * @brief Set configuration value as integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_int(const char* section, const char* key, int value); + +/** + * @brief Get configuration value as unsigned integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store unsigned integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_uint(const char* section, const char* key, uint32_t* value); + +/** + * @brief Set configuration value as unsigned integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Unsigned integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_uint(const char* section, const char* key, uint32_t value); + +/** + * @brief Get configuration value as boolean + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store boolean value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_bool(const char* section, const char* key, uint8_t* value); + +/** + * @brief Set configuration value as boolean + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Boolean value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_bool(const char* section, const char* key, uint8_t value); + +/** + * @brief Parse BSP modules from configuration + * @param config: Pointer to BSP board configuration structure to fill + * @retval HAL status code + */ +hal_ret_t bsp_config_parse_modules(bsp_board_config_t* config); + +/** + * @brief Initialize BSP from configuration file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_init_from_config(const char* filename); #endif /* BSP_CONFIG_H */ diff --git a/BSP/Inc/bsp_init.h b/BSP/Inc/bsp_init.h index 64b3349..a4cbb9d 100644 --- a/BSP/Inc/bsp_init.h +++ b/BSP/Inc/bsp_init.h @@ -14,13 +14,15 @@ /** * @brief Initialize board support package + * @retval HAL status code */ -void bsp_init(void); +hal_ret_t bsp_init(void); /** * @brief Initialize board GPIO + * @retval HAL status code */ -void bsp_gpio_init(void); +hal_ret_t bsp_gpio_init(void); /** * @brief Get board name diff --git a/BSP/Inc/bsp_module.h b/BSP/Inc/bsp_module.h new file mode 100644 index 0000000..45364d3 --- /dev/null +++ b/BSP/Inc/bsp_module.h @@ -0,0 +1,401 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : bsp_module.h + * @brief : Board support package module management header file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#ifndef BSP_MODULE_H +#define BSP_MODULE_H + +#include "hal.h" + +/** + * @brief BSP module type definitions + */ +typedef enum { + BSP_MODULE_TYPE_LED = 0, + BSP_MODULE_TYPE_BUTTON, + BSP_MODULE_TYPE_UART, + BSP_MODULE_TYPE_SPI, + BSP_MODULE_TYPE_I2C, + BSP_MODULE_TYPE_CAN, + BSP_MODULE_TYPE_ADC, + BSP_MODULE_TYPE_DAC, + BSP_MODULE_TYPE_TIMER, + BSP_MODULE_TYPE_RTC, + BSP_MODULE_TYPE_W25QXX, + BSP_MODULE_TYPE_MAX +} bsp_module_type_t; + +/** + * @brief BSP module state definitions + */ +typedef enum { + BSP_MODULE_STATE_UNINIT = 0, + BSP_MODULE_STATE_INIT, + BSP_MODULE_STATE_CONFIGURED, + BSP_MODULE_STATE_RUNNING, + BSP_MODULE_STATE_ERROR +} bsp_module_state_t; + +/** + * @brief BSP module priority definitions + */ +typedef enum { + BSP_MODULE_PRIORITY_HIGHEST = 0, + BSP_MODULE_PRIORITY_HIGH, + BSP_MODULE_PRIORITY_MEDIUM, + BSP_MODULE_PRIORITY_LOW, + BSP_MODULE_PRIORITY_LOWEST +} bsp_module_priority_t; + +/** + * @brief BSP module configuration structure + */ +typedef struct bsp_module_config { + bsp_module_type_t type; /*!< Module type */ + const char* name; /*!< Module name */ + bsp_module_priority_t priority; /*!< Module priority */ + uint32_t version; /*!< Module version */ + uint8_t instance; /*!< Module instance */ + uint8_t enable; /*!< Module enable flag */ + void* config_data; /*!< Module configuration data */ + size_t config_size; /*!< Module configuration size */ + uint32_t dependencies; /*!< Module dependencies bitmask */ +} bsp_module_config_t; + +/** + * @brief BSP module operations structure + */ +typedef struct { + hal_ret_t (*init)(void* config); /*!< Module initialization function */ + hal_ret_t (*deinit)(void); /*!< Module deinitialization function */ + hal_ret_t (*configure)(void* config); /*!< Module configuration function */ + hal_ret_t (*start)(void); /*!< Module start function */ + hal_ret_t (*stop)(void); /*!< Module stop function */ + hal_ret_t (*reset)(void); /*!< Module reset function */ + bsp_module_state_t (*get_state)(void); /*!< Module get state function */ + hal_ret_t (*control)(uint32_t cmd, void* param); /*!< Module control function */ +} bsp_module_ops_t; + +/** + * @brief BSP module version structure + */ +typedef struct { + uint8_t major; + uint8_t minor; + uint8_t patch; +} bsp_module_version_t; + +/** + * @brief Forward declaration of bsp_module_t + */ +typedef struct bsp_module bsp_module_t; + +/** + * @brief BSP module event callback type + */ +typedef hal_ret_t (*bsp_module_event_callback_t)(const bsp_module_t* sender, uint32_t event, void* data); + +/** + * @brief BSP module structure + */ +typedef struct bsp_module { + bsp_module_config_t config; /*!< Module configuration */ + bsp_module_ops_t ops; /*!< Module operations */ + bsp_module_state_t state; /*!< Module state */ + bsp_module_version_t version; /*!< Module version */ + struct bsp_module* next; /*!< Pointer to next module in the list */ + struct bsp_module* prev; /*!< Pointer to previous module in the list */ + void* private_data; /*!< Module private data */ + bsp_module_event_callback_t event_callback; /*!< Event callback */ +} bsp_module_t; + +/** + * @brief BSP module event definitions + */ +#define BSP_MODULE_EVENT_INIT (1 << 0) /*!< Module initialized */ +#define BSP_MODULE_EVENT_DEINIT (1 << 1) /*!< Module deinitialized */ +#define BSP_MODULE_EVENT_START (1 << 2) /*!< Module started */ +#define BSP_MODULE_EVENT_STOP (1 << 3) /*!< Module stopped */ +#define BSP_MODULE_EVENT_ERROR (1 << 4) /*!< Module error */ +#define BSP_MODULE_EVENT_CONFIG (1 << 5) /*!< Module configured */ +#define BSP_MODULE_EVENT_CUSTOM (1 << 8) /*!< Custom module event base */ + +/** + * @brief BSP module auto-registration macros + */ +#define BSP_MODULE_REGISTER(module) \ + static const bsp_module_config_t __bsp_module_##module##_config = { \ + .type = BSP_MODULE_TYPE_##module, \ + .name = #module, \ + .priority = BSP_MODULE_PRIORITY_MEDIUM, \ + .version = 1, \ + .instance = 0, \ + .enable = 1, \ + .config_data = NULL, \ + .config_size = 0, \ + .dependencies = 0 \ + }; \ + static bsp_module_t __bsp_module_##module = { \ + .config = __bsp_module_##module##_config, \ + .state = BSP_MODULE_STATE_UNINIT, \ + .version = {1, 0, 0}, \ + .event_callback = NULL \ + }; + +#define BSP_MODULE_REGISTER_FULL(module, type, priority, instance, deps) \ + static const bsp_module_config_t __bsp_module_##module##_config = { \ + .type = (type), \ + .name = #module, \ + .priority = (priority), \ + .version = 1, \ + .instance = (instance), \ + .enable = 1, \ + .config_data = NULL, \ + .config_size = 0, \ + .dependencies = (deps) \ + }; \ + static bsp_module_t __bsp_module_##module = { \ + .config = __bsp_module_##module##_config, \ + .state = BSP_MODULE_STATE_UNINIT, \ + .version = {1, 0, 0}, \ + .event_callback = NULL \ + }; + +#define BSP_MODULE_REGISTER_AT_STARTUP(module) \ + BSP_MODULE_REGISTER(module) \ + __attribute__((constructor)) static void __bsp_register_##module##_at_startup(void) { \ + bsp_module_register(&__bsp_module_##module); \ + } + +/** + * @brief BSP module manager structure + */ +typedef struct { + bsp_module_t* modules[BSP_MODULE_TYPE_MAX]; /*!< Modules by type */ + bsp_module_t* module_list; /*!< Linked list of all modules */ + uint32_t module_count; /*!< Total number of modules */ +} bsp_module_manager_t; + +/** + * @brief Initialize BSP module manager + * @retval HAL status code + */ +hal_ret_t bsp_module_manager_init(void); + +/** + * @brief Register a BSP module + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_register(bsp_module_t* module); + +/** + * @brief Unregister a BSP module + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_unregister(bsp_module_t* module); + +/** + * @brief Initialize all registered BSP modules + * @retval HAL status code + */ +hal_ret_t bsp_module_init_all(void); + +/** + * @brief Deinitialize all registered BSP modules + * @retval HAL status code + */ +hal_ret_t bsp_module_deinit_all(void); + +/** + * @brief Start all registered BSP modules + * @retval HAL status code + */ +hal_ret_t bsp_module_start_all(void); + +/** + * @brief Stop all registered BSP modules + * @retval HAL status code + */ +hal_ret_t bsp_module_stop_all(void); + +/** + * @brief Initialize a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_init(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Deinitialize a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_deinit(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Configure a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param config: Module configuration data + * @param size: Module configuration size + * @retval HAL status code + */ +hal_ret_t bsp_module_configure(bsp_module_type_t type, uint8_t instance, void* config, size_t size); + +/** + * @brief Start a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_start(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Stop a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_stop(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Reset a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_reset(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Get state of a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param state: Pointer to store module state + * @retval HAL status code + */ +hal_ret_t bsp_module_get_state(bsp_module_type_t type, uint8_t instance, bsp_module_state_t* state); + +/** + * @brief Control a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param cmd: Control command + * @param param: Control parameter + * @retval HAL status code + */ +hal_ret_t bsp_module_control(bsp_module_type_t type, uint8_t instance, uint32_t cmd, void* param); + +/** + * @brief Get a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval Pointer to module structure, or NULL if not found + */ +bsp_module_t* bsp_module_get(bsp_module_type_t type, uint8_t instance); + +/** + * @brief Get all modules of a specific type + * @param type: Module type + * @retval Pointer to module list, or NULL if no modules found + */ +bsp_module_t* bsp_module_get_by_type(bsp_module_type_t type); + +/** + * @brief Get module by name + * @param name: Module name + * @retval Pointer to module structure, or NULL if not found + */ +bsp_module_t* bsp_module_get_by_name(const char* name); + +/** + * @brief Get total number of registered modules + * @retval Number of registered modules + */ +uint32_t bsp_module_get_count(void); + +/** + * @brief Check if all dependencies of a module are satisfied + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_check_dependencies(const bsp_module_t* module); + +/** + * @brief Get module manager instance + * @retval Pointer to module manager structure + */ +bsp_module_manager_t* bsp_module_get_manager(void); + +/** + * @brief Register a module event callback + * @param type: Module type + * @param instance: Module instance + * @param callback: Event callback function + * @retval HAL status code + */ +hal_ret_t bsp_module_register_event_callback(bsp_module_type_t type, uint8_t instance, bsp_module_event_callback_t callback); + +/** + * @brief Trigger a module event + * @param module: Pointer to module structure + * @param event: Event to trigger + * @param data: Event data + * @retval HAL status code + */ +hal_ret_t bsp_module_trigger_event(const bsp_module_t* module, uint32_t event, void* data); + +/** + * @brief Find modules by priority range + * @param min_priority: Minimum priority + * @param max_priority: Maximum priority + * @param count: Pointer to store number of modules found + * @retval Pointer to array of module pointers, or NULL if no modules found + */ +bsp_module_t** bsp_module_find_by_priority_range(bsp_module_priority_t min_priority, bsp_module_priority_t max_priority, uint32_t* count); + +/** + * @brief Set module enable/disable state + * @param type: Module type + * @param instance: Module instance + * @param enable: Enable flag + * @retval HAL status code + */ +hal_ret_t bsp_module_set_enable(bsp_module_type_t type, uint8_t instance, uint8_t enable); + +/** + * @brief Check if module is enabled + * @param type: Module type + * @param instance: Module instance + * @param enable: Pointer to store enable state + * @retval HAL status code + */ +hal_ret_t bsp_module_is_enabled(bsp_module_type_t type, uint8_t instance, uint8_t* enable); + +/** + * @brief Set module priority + * @param type: Module type + * @param instance: Module instance + * @param priority: New priority + * @retval HAL status code + */ +hal_ret_t bsp_module_set_priority(bsp_module_type_t type, uint8_t instance, bsp_module_priority_t priority); + +/** + * @brief Get module priority + * @param type: Module type + * @param instance: Module instance + * @param priority: Pointer to store priority + * @retval HAL return code + */ +hal_ret_t bsp_module_get_priority(bsp_module_type_t type, uint8_t instance, bsp_module_priority_t* priority); + +#endif /* BSP_MODULE_H */ \ No newline at end of file diff --git a/BSP/Src/bsp_board_manager.c b/BSP/Src/bsp_board_manager.c index 03d9fe7..c5dfc0d 100644 --- a/BSP/Src/bsp_board_manager.c +++ b/BSP/Src/bsp_board_manager.c @@ -64,30 +64,34 @@ const bsp_board_config_t* bsp_board_get_by_name(const char* name) { /** * @brief Set current board configuration by index * @param index: Board configuration index - * @retval 0 if successful, -1 if invalid index + * @retval HAL status code */ -int8_t bsp_board_set_by_index(uint8_t index) { +hal_ret_t bsp_board_set_by_index(uint8_t index) { if (index < bsp_board_get_count()) { current_board_index = index; - return 0; + return HAL_RET_OK; } - return -1; + return HAL_RET_INVALID_PARAM; } /** * @brief Set current board configuration by name * @param name: Board name string - * @retval 0 if successful, -1 if not found + * @retval HAL status code */ -int8_t bsp_board_set_by_name(const char* name) { +hal_ret_t bsp_board_set_by_name(const char* name) { + if (name == NULL) { + return HAL_RET_INVALID_PARAM; + } + for (uint8_t i = 0; i < bsp_board_get_count(); i++) { if (supported_boards[i]->name != NULL && strcmp(supported_boards[i]->name, name) == 0) { current_board_index = i; - return 0; + return HAL_RET_OK; } } - return -1; + return HAL_RET_ERROR; } /** diff --git a/BSP/Src/bsp_config.c b/BSP/Src/bsp_config.c new file mode 100644 index 0000000..2bca70d --- /dev/null +++ b/BSP/Src/bsp_config.c @@ -0,0 +1,653 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : bsp_config.c + * @brief : Board support package configuration file source + ****************************************************************************** + */ +/* USER CODE END Header */ + +#include "bsp_config.h" +#include +#include +#include +#include + +/** + * @brief Configuration storage entry + */ +typedef struct bsp_config_storage_entry { + char section[BSP_CONFIG_MAX_SECTION_NAME_LENGTH]; + char key[BSP_CONFIG_MAX_KEY_NAME_LENGTH]; + char value[BSP_CONFIG_MAX_VALUE_LENGTH]; + struct bsp_config_storage_entry* next; +} bsp_config_storage_entry_t; + +/** + * @brief Configuration storage + */ +typedef struct { + bsp_config_storage_entry_t* entries; + uint32_t entry_count; + uint8_t initialized; +} bsp_config_storage_t; + +/** + * @brief Configuration storage instance + */ +static bsp_config_storage_t bsp_config_storage = { + .entries = NULL, + .entry_count = 0, + .initialized = 0 +}; + +/** + * @brief Trim whitespace from a string + * @param str: String to trim + * @return Trimmed string + */ +static char* bsp_config_trim(char* str) { + char* end; + + // Trim leading whitespace + while (isspace((unsigned char)*str)) { + str++; + } + + if (*str == 0) { + return str; + } + + // Trim trailing whitespace + end = str + strlen(str) - 1; + while (end > str && isspace((unsigned char)*end)) { + end--; + } + + // Null terminate + *(end + 1) = 0; + + return str; +} + +/** + * @brief Open configuration file + * @param filename: Configuration file name + * @param parser: Parser context + * @retval HAL status code + */ +static hal_ret_t bsp_config_file_open(const char* filename, bsp_config_parser_t* parser) { + if (filename == NULL || parser == NULL) { + return HAL_INVALID_PARAM; + } + + parser->file = fopen(filename, "r"); + if (parser->file == NULL) { + return HAL_ERROR; + } + + memset(parser->current_section, 0, sizeof(parser->current_section)); + memset(parser->buffer, 0, sizeof(parser->buffer)); + parser->line_number = 0; + parser->initialized = 1; + + return HAL_OK; +} + +/** + * @brief Close configuration file + * @param parser: Parser context + * @retval HAL status code + */ +static hal_ret_t bsp_config_file_close(bsp_config_parser_t* parser) { + if (parser == NULL || !parser->initialized) { + return HAL_INVALID_PARAM; + } + + if (parser->file != NULL) { + fclose(parser->file); + parser->file = NULL; + } + + parser->initialized = 0; + + return HAL_OK; +} + +/** + * @brief Read a configuration entry from file + * @param parser: Parser context + * @param entry: Configuration entry + * @retval HAL status code + */ +static hal_ret_t bsp_config_file_read_entry(bsp_config_parser_t* parser, bsp_config_entry_t* entry) { + if (parser == NULL || entry == NULL || !parser->initialized) { + return HAL_INVALID_PARAM; + } + + if (parser->file == NULL) { + return HAL_ERROR; + } + + while (fgets(parser->buffer, sizeof(parser->buffer), parser->file) != NULL) { + parser->line_number++; + + char* line = bsp_config_trim(parser->buffer); + size_t len = strlen(line); + + // Skip empty lines and comments + if (len == 0 || line[0] == '#') { + continue; + } + + // Check for section header + if (line[0] == '[' && line[len - 1] == ']') { + // Extract section name + memset(parser->current_section, 0, sizeof(parser->current_section)); + strncpy(parser->current_section, line + 1, len - 2); + parser->current_section[len - 2] = '\0'; + continue; + } + + // Check for key-value pair + char* equals = strchr(line, '='); + if (equals != NULL) { + // Extract key and value + *equals = '\0'; + char* key = bsp_config_trim(line); + char* value = bsp_config_trim(equals + 1); + + entry->section = parser->current_section; + entry->key = key; + entry->value = value; + + return HAL_OK; + } + } + + return HAL_TIMEOUT; +} + +/** + * @brief Parse integer value + * @param value: String value to parse + * @param result: Pointer to store result + * @retval HAL status code + */ +static hal_ret_t bsp_config_parse_int(const char* value, int* result) { + if (value == NULL || result == NULL) { + return HAL_INVALID_PARAM; + } + + char* endptr; + long val = strtol(value, &endptr, 0); + + if (*endptr != '\0') { + return HAL_ERROR; + } + + *result = (int)val; + + return HAL_OK; +} + +/** + * @brief Parse unsigned integer value + * @param value: String value to parse + * @param result: Pointer to store result + * @retval HAL status code + */ +static hal_ret_t bsp_config_parse_uint(const char* value, uint32_t* result) { + if (value == NULL || result == NULL) { + return HAL_INVALID_PARAM; + } + + char* endptr; + unsigned long val = strtoul(value, &endptr, 0); + + if (*endptr != '\0') { + return HAL_ERROR; + } + + *result = (uint32_t)val; + + return HAL_OK; +} + +/** + * @brief Parse boolean value + * @param value: String value to parse + * @param result: Pointer to store result + * @retval HAL status code + */ +static hal_ret_t bsp_config_parse_bool(const char* value, uint8_t* result) { + if (value == NULL || result == NULL) { + return HAL_INVALID_PARAM; + } + + if (strcmp(value, "true") == 0 || strcmp(value, "TRUE") == 0 || + strcmp(value, "1") == 0 || strcmp(value, "yes") == 0 || + strcmp(value, "YES") == 0) { + *result = 1; + return HAL_OK; + } else if (strcmp(value, "false") == 0 || strcmp(value, "FALSE") == 0 || + strcmp(value, "0") == 0 || strcmp(value, "no") == 0 || + strcmp(value, "NO") == 0) { + *result = 0; + return HAL_OK; + } + + return HAL_ERROR; +} + +/** + * @brief Parse string value + * @param value: String value to parse + * @param result: Pointer to store result + * @param max_length: Maximum length of result buffer + * @retval HAL status code + */ +static hal_ret_t bsp_config_parse_string(const char* value, char* result, size_t max_length) { + if (value == NULL || result == NULL) { + return HAL_INVALID_PARAM; + } + + strncpy(result, value, max_length - 1); + result[max_length - 1] = '\0'; + + return HAL_OK; +} + +/** + * @brief Add a configuration entry to storage + * @param section: Section name + * @param key: Key name + * @param value: Value + * @retval HAL status code + */ +static hal_ret_t bsp_config_storage_add(const char* section, const char* key, const char* value) { + // Check if entry already exists + bsp_config_storage_entry_t* entry = bsp_config_storage.entries; + while (entry != NULL) { + if (strcmp(entry->section, section) == 0 && strcmp(entry->key, key) == 0) { + // Update existing entry + strncpy(entry->value, value, sizeof(entry->value) - 1); + entry->value[sizeof(entry->value) - 1] = '\0'; + return HAL_OK; + } + entry = entry->next; + } + + // Create new entry + bsp_config_storage_entry_t* new_entry = malloc(sizeof(bsp_config_storage_entry_t)); + if (new_entry == NULL) { + return HAL_OUT_OF_MEMORY; + } + + strncpy(new_entry->section, section, sizeof(new_entry->section) - 1); + strncpy(new_entry->key, key, sizeof(new_entry->key) - 1); + strncpy(new_entry->value, value, sizeof(new_entry->value) - 1); + new_entry->section[sizeof(new_entry->section) - 1] = '\0'; + new_entry->key[sizeof(new_entry->key) - 1] = '\0'; + new_entry->value[sizeof(new_entry->value) - 1] = '\0'; + new_entry->next = NULL; + + // Add to list + if (bsp_config_storage.entries == NULL) { + bsp_config_storage.entries = new_entry; + } else { + entry = bsp_config_storage.entries; + while (entry->next != NULL) { + entry = entry->next; + } + entry->next = new_entry; + } + + bsp_config_storage.entry_count++; + + return HAL_OK; +} + +/** + * @brief Clear configuration storage + */ +static void bsp_config_storage_clear(void) { + bsp_config_storage_entry_t* entry = bsp_config_storage.entries; + while (entry != NULL) { + bsp_config_storage_entry_t* next = entry->next; + free(entry); + entry = next; + } + + bsp_config_storage.entries = NULL; + bsp_config_storage.entry_count = 0; +} + +/** + * @brief Initialize BSP configuration system + * @retval HAL status code + */ +hal_ret_t bsp_config_init(void) { + if (bsp_config_storage.initialized) { + return HAL_OK; + } + + bsp_config_storage_clear(); + bsp_config_storage.initialized = 1; + + return HAL_OK; +} + +/** + * @brief Deinitialize BSP configuration system + * @retval HAL status code + */ +hal_ret_t bsp_config_deinit(void) { + if (!bsp_config_storage.initialized) { + return HAL_OK; + } + + bsp_config_storage_clear(); + bsp_config_storage.initialized = 0; + + return HAL_OK; +} + +/** + * @brief Load BSP configuration from file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_config_load(const char* filename) { + if (!bsp_config_storage.initialized) { + hal_ret_t status = bsp_config_init(); + if (status != HAL_OK) { + return status; + } + } + + bsp_config_parser_t parser; + hal_ret_t status = bsp_config_file_open(filename, &parser); + if (status != HAL_OK) { + return status; + } + + bsp_config_entry_t entry; + while ((status = bsp_config_file_read_entry(&parser, &entry)) == HAL_OK) { + status = bsp_config_storage_add(entry.section, entry.key, entry.value); + if (status != HAL_OK) { + bsp_config_file_close(&parser); + return status; + } + } + + if (status != HAL_TIMEOUT) { + bsp_config_file_close(&parser); + return status; + } + + status = bsp_config_file_close(&parser); + if (status != HAL_OK) { + return status; + } + + return HAL_OK; +} + +/** + * @brief Save BSP configuration to file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_config_save(const char* filename) { + if (!bsp_config_storage.initialized || bsp_config_storage.entry_count == 0) { + return HAL_OK; + } + + FILE* file = fopen(filename, "w"); + if (file == NULL) { + return HAL_ERROR; + } + + fprintf(file, "# BSP Configuration File\n"); + fprintf(file, "# Version: %s\n\n", BSP_CONFIG_FILE_VERSION); + + char current_section[BSP_CONFIG_MAX_SECTION_NAME_LENGTH] = ""; + bsp_config_storage_entry_t* entry = bsp_config_storage.entries; + + while (entry != NULL) { + if (strcmp(entry->section, current_section) != 0) { + // New section + strncpy(current_section, entry->section, sizeof(current_section) - 1); + fprintf(file, "[%s]\n", current_section); + } + + fprintf(file, "%s=%s\n", entry->key, entry->value); + entry = entry->next; + } + + fclose(file); + + return HAL_OK; +} + +/** + * @brief Get configuration value + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store value + * @param max_length: Maximum length of value buffer + * @retval HAL status code + */ +hal_ret_t bsp_config_get_value(const char* section, const char* key, char* value, size_t max_length) { + if (!bsp_config_storage.initialized || section == NULL || key == NULL || value == NULL) { + return HAL_INVALID_PARAM; + } + + bsp_config_storage_entry_t* entry = bsp_config_storage.entries; + while (entry != NULL) { + if (strcmp(entry->section, section) == 0 && strcmp(entry->key, key) == 0) { + strncpy(value, entry->value, max_length - 1); + value[max_length - 1] = '\0'; + return HAL_OK; + } + entry = entry->next; + } + + return HAL_NOT_SUPPORTED; +} + +/** + * @brief Set configuration value + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Configuration value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_value(const char* section, const char* key, const char* value) { + if (!bsp_config_storage.initialized || section == NULL || key == NULL || value == NULL) { + return HAL_INVALID_PARAM; + } + + return bsp_config_storage_add(section, key, value); +} + +/** + * @brief Get configuration value as integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_int(const char* section, const char* key, int* value) { + char str_value[BSP_CONFIG_MAX_VALUE_LENGTH]; + hal_ret_t status = bsp_config_get_value(section, key, str_value, sizeof(str_value)); + if (status != HAL_OK) { + return status; + } + + return bsp_config_parse_int(str_value, value); +} + +/** + * @brief Set configuration value as integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_int(const char* section, const char* key, int value) { + char str_value[BSP_CONFIG_MAX_VALUE_LENGTH]; + snprintf(str_value, sizeof(str_value), "%d", value); + return bsp_config_set_value(section, key, str_value); +} + +/** + * @brief Get configuration value as unsigned integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store unsigned integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_uint(const char* section, const char* key, uint32_t* value) { + char str_value[BSP_CONFIG_MAX_VALUE_LENGTH]; + hal_status_t status = bsp_config_get_value(section, key, str_value, sizeof(str_value)); + if (status != HAL_OK) { + return status; + } + + return bsp_config_parse_uint(str_value, value); +} + +/** + * @brief Set configuration value as unsigned integer + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Unsigned integer value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_uint(const char* section, const char* key, uint32_t value) { + char str_value[BSP_CONFIG_MAX_VALUE_LENGTH]; + snprintf(str_value, sizeof(str_value), "%lu", (unsigned long)value); + return bsp_config_set_value(section, key, str_value); +} + +/** + * @brief Get configuration value as boolean + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Pointer to store boolean value + * @retval HAL status code + */ +hal_ret_t bsp_config_get_bool(const char* section, const char* key, uint8_t* value) { + char str_value[BSP_CONFIG_MAX_VALUE_LENGTH]; + hal_status_t status = bsp_config_get_value(section, key, str_value, sizeof(str_value)); + if (status != HAL_OK) { + return status; + } + + return bsp_config_parse_bool(str_value, value); +} + +/** + * @brief Set configuration value as boolean + * @param section: Configuration section name + * @param key: Configuration key name + * @param value: Boolean value + * @retval HAL status code + */ +hal_ret_t bsp_config_set_bool(const char* section, const char* key, uint8_t value) { + return bsp_config_set_value(section, key, value ? "true" : "false"); +} + +/** + * @brief Parse BSP modules from configuration + * @param config: Pointer to BSP board configuration structure to fill + * @retval HAL status code + */ +hal_ret_t bsp_config_parse_modules(bsp_board_config_t* config) { + if (config == NULL) { + return HAL_INVALID_PARAM; + } + + // TODO: Implement module parsing logic + // This will depend on the specific configuration file format + // and how modules are defined in the configuration + + return HAL_OK; +} + +/** + * @brief Initialize BSP from configuration file + * @param filename: Configuration file name + * @retval HAL status code + */ +hal_ret_t bsp_init_from_config(const char* filename) { + // Load configuration file + hal_ret_t status = bsp_config_load(filename); + if (status != HAL_OK) { + return status; + } + + // Initialize HAL layer + status = hal_init(); + if (status != HAL_OK) { + return status; + } + + // Initialize BSP module manager + status = bsp_module_manager_init(); + if (status != HAL_OK) { + return status; + } + + // Create board configuration from file + bsp_board_config_t board_config; + memset(&board_config, 0, sizeof(board_config)); + + // Parse board information + char board_name[64]; + status = bsp_config_get_value("board", "name", board_name, sizeof(board_name)); + if (status == HAL_OK) { + board_config.name = strdup(board_name); + } else { + board_config.name = "Unknown"; + } + + uint32_t version = BSP_CONFIG_VERSION; + status = bsp_config_get_uint("board", "version", &version); + if (status == HAL_OK) { + board_config.version = version; + } else { + board_config.version = BSP_CONFIG_VERSION; + } + + // Parse modules from configuration + status = bsp_config_parse_modules(&board_config); + if (status != HAL_OK) { + return status; + } + + // Initialize board + status = bsp_board_init(); + if (status != HAL_OK) { + return status; + } + + // Initialize all modules + status = bsp_module_init_all(); + if (status != HAL_OK) { + return status; + } + + // Configure all modules + // TODO: Implement module configuration from file + + // Start all modules + status = bsp_module_start_all(); + if (status != HAL_OK) { + return status; + } + + return HAL_OK; +} diff --git a/BSP/Src/bsp_init.c b/BSP/Src/bsp_init.c index aea7a9b..613ab74 100644 --- a/BSP/Src/bsp_init.c +++ b/BSP/Src/bsp_init.c @@ -16,20 +16,29 @@ /** * @brief Initialize board support package + * @retval HAL status code */ -void bsp_init(void) { +hal_ret_t bsp_init(void) { /* Get board configuration */ const bsp_board_config_t* board_config = bsp_board_get_config(); + hal_ret_t status = HAL_RET_OK; + uint8_t i; /* Initialize HAL layer */ - hal_init(); + status = hal_init(); + if (status != HAL_RET_OK) { + return status; + } /* Initialize peripherals based on configuration */ /* Initialize LED */ - if (board_config->led_init != NULL) { - board_config->led_init(&board_config->led); - } else { + if (board_config->led.enable && board_config->init_funcs.led_init != NULL) { + status = board_config->init_funcs.led_init(&board_config->led); + if (status != HAL_RET_OK) { + return status; + } + } else if (board_config->led.enable) { /* Use default initialization if no function provided */ hal_gpio_config_t gpio_config = { .port = board_config->led.port, @@ -38,53 +47,204 @@ void bsp_init(void) { .speed = board_config->led.speed, .pull = board_config->led.pull }; - hal_gpio_configure_pin(&gpio_config); + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } } /* Initialize Buttons */ - if (board_config->button_init != NULL) { - board_config->button_init(&board_config->buttons); + if (board_config->buttons.enable && board_config->init_funcs.button_init != NULL) { + status = board_config->init_funcs.button_init(&board_config->buttons); + if (status != HAL_RET_OK) { + return status; + } } - /* Initialize UART */ - if (board_config->uart_init != NULL) { - board_config->uart_init(&board_config->uart); + /* Initialize UARTs */ + if (board_config->init_funcs.uart_init != NULL) { + for (i = 0; i < board_config->periphs.uart_count; i++) { + if (board_config->periphs.uarts[i].enable) { + status = board_config->init_funcs.uart_init(&board_config->periphs.uarts[i]); + if (status != HAL_RET_OK) { + return status; + } + } + } } - /* Initialize W25QXX if available */ - if (board_config->w25qxx_init != NULL) { - board_config->w25qxx_init(&board_config->w25qxx); + /* Initialize SPIs */ + if (board_config->init_funcs.spi_init != NULL) { + for (i = 0; i < board_config->periphs.spi_count; i++) { + if (board_config->periphs.spis[i].enable) { + status = board_config->init_funcs.spi_init(&board_config->periphs.spis[i]); + if (status != HAL_RET_OK) { + return status; + } + } + } } + + /* Initialize I2Cs */ + if (board_config->init_funcs.i2c_init != NULL) { + for (i = 0; i < board_config->periphs.i2c_count; i++) { + if (board_config->periphs.i2cs[i].enable) { + status = board_config->init_funcs.i2c_init(&board_config->periphs.i2cs[i]); + if (status != HAL_RET_OK) { + return status; + } + } + } + } + + /* Initialize CANs */ + if (board_config->init_funcs.can_init != NULL) { + for (i = 0; i < board_config->periphs.can_count; i++) { + if (board_config->periphs.cans[i].enable) { + status = board_config->init_funcs.can_init(&board_config->periphs.cans[i]); + if (status != HAL_RET_OK) { + return status; + } + } + } + } + + /* Initialize ADCs */ + if (board_config->init_funcs.adc_init != NULL) { + for (i = 0; i < board_config->periphs.adc_count; i++) { + if (board_config->periphs.adcs[i].enable) { + status = board_config->init_funcs.adc_init(&board_config->periphs.adcs[i]); + if (status != HAL_RET_OK) { + return status; + } + } + } + } + + /* Initialize W25QXX if available and enabled */ + if (board_config->w25qxx.enable && board_config->init_funcs.w25qxx_init != NULL) { + status = board_config->init_funcs.w25qxx_init(&board_config->w25qxx); + if (status != HAL_RET_OK) { + return status; + } + } + + return status; } /** * @brief Initialize board GPIO using configuration + * @retval HAL status code */ -void bsp_gpio_init(void) { +hal_ret_t bsp_gpio_init(void) { /* Get board configuration */ const bsp_board_config_t* board_config = bsp_board_get_config(); + hal_ret_t status = HAL_RET_OK; uint8_t i; /* Initialize LED GPIO */ - hal_gpio_config_t gpio_config = { - .port = board_config->led.port, - .pin = board_config->led.pin, - .mode = board_config->led.mode, - .speed = board_config->led.speed, - .pull = board_config->led.pull - }; - hal_gpio_configure_pin(&gpio_config); + if (board_config->led.enable) { + hal_gpio_config_t gpio_config = { + .port = board_config->led.port, + .pin = board_config->led.pin, + .mode = board_config->led.mode, + .speed = board_config->led.speed, + .pull = board_config->led.pull + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + } /* Initialize Buttons GPIO */ - for (i = 0; i < board_config->buttons.count; i++) { - const bsp_button_config_t* button = &board_config->buttons.buttons[i]; - gpio_config.port = button->port; - gpio_config.pin = button->pin; - gpio_config.mode = button->mode; - gpio_config.speed = button->speed; - gpio_config.pull = button->pull; - hal_gpio_configure_pin(&gpio_config); + if (board_config->buttons.enable) { + for (i = 0; i < board_config->buttons.count; i++) { + const bsp_button_config_t* button = &board_config->buttons.buttons[i]; + hal_gpio_config_t gpio_config = { + .port = button->port, + .pin = button->pin, + .mode = button->mode, + .speed = button->speed, + .pull = button->pull + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + } } + + /* Initialize UART GPIOs */ + for (i = 0; i < board_config->periphs.uart_count; i++) { + if (board_config->periphs.uarts[i].enable) { + /* Initialize TX pin */ + hal_gpio_config_t gpio_config = { + .port = board_config->periphs.uarts[i].tx_port, + .pin = board_config->periphs.uarts[i].tx_pin, + .mode = HAL_GPIO_MODE_AF_PP, + .speed = HAL_GPIO_SPEED_HIGH, + .pull = HAL_GPIO_PULL_NO + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + + /* Initialize RX pin */ + gpio_config.port = board_config->periphs.uarts[i].rx_port; + gpio_config.pin = board_config->periphs.uarts[i].rx_pin; + gpio_config.mode = HAL_GPIO_MODE_AF_PP; + gpio_config.speed = HAL_GPIO_SPEED_HIGH; + gpio_config.pull = HAL_GPIO_PULL_UP; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + } + } + + /* Initialize SPI GPIOs */ + for (i = 0; i < board_config->periphs.spi_count; i++) { + if (board_config->periphs.spis[i].enable) { + /* Initialize SCK pin */ + hal_gpio_config_t gpio_config = { + .port = board_config->periphs.spis[i].sck_port, + .pin = board_config->periphs.spis[i].sck_pin, + .mode = HAL_GPIO_MODE_AF_PP, + .speed = HAL_GPIO_SPEED_HIGH, + .pull = HAL_GPIO_PULL_NO + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + + /* Initialize MISO pin */ + gpio_config.port = board_config->periphs.spis[i].miso_port; + gpio_config.pin = board_config->periphs.spis[i].miso_pin; + gpio_config.mode = HAL_GPIO_MODE_AF_PP; + gpio_config.speed = HAL_GPIO_SPEED_HIGH; + gpio_config.pull = HAL_GPIO_PULL_UP; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + + /* Initialize MOSI pin */ + gpio_config.port = board_config->periphs.spis[i].mosi_port; + gpio_config.pin = board_config->periphs.spis[i].mosi_pin; + gpio_config.mode = HAL_GPIO_MODE_AF_PP; + gpio_config.speed = HAL_GPIO_SPEED_HIGH; + gpio_config.pull = HAL_GPIO_PULL_NO; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + } + } + + return status; } /** diff --git a/BSP/Src/bsp_key.c b/BSP/Src/bsp_key.c index 54fca28..50697a2 100644 --- a/BSP/Src/bsp_key.c +++ b/BSP/Src/bsp_key.c @@ -156,8 +156,8 @@ void bsp_key_init(void) { } /* Call board-specific button initialization if available */ - if (board_config && board_config->button_init) { - board_config->button_init(&board_config->buttons); + if (board_config && board_config->init_funcs.button_init) { + board_config->init_funcs.button_init(&board_config->buttons); } } diff --git a/BSP/Src/bsp_module.c b/BSP/Src/bsp_module.c new file mode 100644 index 0000000..ae21c1a --- /dev/null +++ b/BSP/Src/bsp_module.c @@ -0,0 +1,795 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : bsp_module.c + * @brief : Board support package module management source file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#include "bsp_module.h" +#include + +/** + * @brief Module manager instance + */ +static bsp_module_manager_t bsp_module_manager; + +/** + * @brief Initialize BSP module manager + * @retval HAL status code + */ +hal_ret_t bsp_module_manager_init(void) { + /* Clear module manager */ + memset(&bsp_module_manager, 0, sizeof(bsp_module_manager)); + + /* Initialize module arrays */ + for (uint8_t i = 0; i < BSP_MODULE_TYPE_MAX; i++) { + bsp_module_manager.modules[i] = NULL; + } + + bsp_module_manager.module_list = NULL; + bsp_module_manager.module_count = 0; + + return HAL_RET_OK; +} + +/** + * @brief Register a BSP module + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_register(bsp_module_t* module) { + if (module == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (module->config.type >= BSP_MODULE_TYPE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Check if module already exists */ + if (bsp_module_get(module->config.type, module->config.instance) != NULL) { + return HAL_RESOURCE_LOCKED; + } + + /* Initialize module state */ + module->state = BSP_MODULE_STATE_UNINIT; + module->next = NULL; + module->prev = NULL; + + /* Add module to the linked list */ + if (bsp_module_manager.module_list == NULL) { + bsp_module_manager.module_list = module; + } else { + /* Insert module at the end of the list */ + bsp_module_t* current = bsp_module_manager.module_list; + while (current->next != NULL) { + current = current->next; + } + current->next = module; + module->prev = current; + } + + /* Add module to the type-specific list */ + if (bsp_module_manager.modules[module->config.type] == NULL) { + bsp_module_manager.modules[module->config.type] = module; + } else { + /* Insert module at the end of the type-specific list */ + bsp_module_t* current = bsp_module_manager.modules[module->config.type]; + while (current->next != NULL && current->config.type == module->config.type) { + current = current->next; + } + if (current->config.type == module->config.type) { + current->next = module; + module->prev = current; + } else { + /* Insert between current->prev and current */ + if (current->prev != NULL) { + current->prev->next = module; + } else { + bsp_module_manager.modules[module->config.type] = module; + } + module->prev = current->prev; + module->next = current; + current->prev = module; + } + } + + bsp_module_manager.module_count++; + + return HAL_OK; +} + +/** + * @brief Unregister a BSP module + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_unregister(bsp_module_t* module) { + if (module == NULL) { + return HAL_INVALID_PARAM; + } + + /* Deinitialize module if it's initialized */ + if (module->state != BSP_MODULE_STATE_UNINIT) { + if (module->ops.deinit != NULL) { + module->ops.deinit(); + } + module->state = BSP_MODULE_STATE_UNINIT; + } + + /* Remove module from linked list */ + if (module->prev != NULL) { + module->prev->next = module->next; + } else { + /* Module is first in the list */ + bsp_module_manager.module_list = module->next; + } + + if (module->next != NULL) { + module->next->prev = module->prev; + } + + /* Remove module from type-specific list */ + if (bsp_module_manager.modules[module->config.type] == module) { + bsp_module_manager.modules[module->config.type] = module->next; + } + + /* Reset module pointers */ + module->next = NULL; + module->prev = NULL; + + bsp_module_manager.module_count--; + + return HAL_OK; +} + +/** + * @brief Get a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval Pointer to module structure, or NULL if not found + */ +bsp_module_t* bsp_module_get(bsp_module_type_t type, uint8_t instance) { + if (type >= BSP_MODULE_TYPE_MAX) { + return NULL; + } + + bsp_module_t* current = bsp_module_manager.modules[type]; + while (current != NULL && current->config.type == type) { + if (current->config.instance == instance) { + return current; + } + current = current->next; + } + + return NULL; +} + +/** + * @brief Get all modules of a specific type + * @param type: Module type + * @retval Pointer to module list, or NULL if no modules found + */ +bsp_module_t* bsp_module_get_by_type(bsp_module_type_t type) { + if (type >= BSP_MODULE_TYPE_MAX) { + return NULL; + } + + return bsp_module_manager.modules[type]; +} + +/** + * @brief Get module by name + * @param name: Module name + * @retval Pointer to module structure, or NULL if not found + */ +bsp_module_t* bsp_module_get_by_name(const char* name) { + if (name == NULL) { + return NULL; + } + + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.name != NULL && strcmp(current->config.name, name) == 0) { + return current; + } + current = current->next; + } + + return NULL; +} + +/** + * @brief Check if all dependencies of a module are satisfied + * @param module: Pointer to module structure + * @retval HAL status code + */ +hal_ret_t bsp_module_check_dependencies(const bsp_module_t* module) { + if (module == NULL) { + return HAL_INVALID_PARAM; + } + + /* Check if dependencies are satisfied */ + if (module->config.dependencies == 0) { + /* No dependencies */ + return HAL_OK; + } + + /* Check each dependency bit */ + for (uint8_t i = 0; i < BSP_MODULE_TYPE_MAX; i++) { + if (module->config.dependencies & (1 << i)) { + /* Check if dependency module exists and is initialized */ + bsp_module_t* dep_module = bsp_module_manager.modules[i]; + if (dep_module == NULL) { + return HAL_RET_ERROR; + } + + /* Check if at least one instance is initialized */ + bsp_module_t* current = dep_module; + uint8_t dep_found = 0; + while (current != NULL && current->config.type == i) { + if (current->state >= BSP_MODULE_STATE_INIT) { + dep_found = 1; + break; + } + current = current->next; + } + + if (!dep_found) { + return HAL_ERROR; + } + } + } + + return HAL_OK; +} + +/** + * @brief Initialize a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_init(bsp_module_type_t type, uint8_t instance) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is already initialized */ + if (module->state != BSP_MODULE_STATE_UNINIT) { + return HAL_OK; + } + + /* Check dependencies */ + hal_ret_t status = bsp_module_check_dependencies(module); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + + /* Initialize module */ + if (module->ops.init != NULL) { + status = module->ops.init(module->config.config_data); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + } + + module->state = BSP_MODULE_STATE_INIT; + + return HAL_OK; +} + +/** + * @brief Deinitialize a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_deinit(bsp_module_type_t type, uint8_t instance) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is already uninitialized */ + if (module->state == BSP_MODULE_STATE_UNINIT) { + return HAL_OK; + } + + /* Stop module if it's running */ + if (module->state == BSP_MODULE_STATE_RUNNING && module->ops.stop != NULL) { + module->ops.stop(); + } + + /* Deinitialize module */ + if (module->ops.deinit != NULL) { + hal_ret_t status = module->ops.deinit(); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + } + + module->state = BSP_MODULE_STATE_UNINIT; + + return HAL_OK; +} + +/** + * @brief Configure a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param config: Module configuration data + * @param size: Module configuration size + * @retval HAL status code + */ +hal_ret_t bsp_module_configure(bsp_module_type_t type, uint8_t instance, void* config, size_t size) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is initialized */ + if (module->state < BSP_MODULE_STATE_INIT) { + return HAL_ERROR; + } + + /* Configure module */ + if (module->ops.configure != NULL) { + hal_ret_t status = module->ops.configure(config); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + } + + module->state = BSP_MODULE_STATE_CONFIGURED; + + return HAL_OK; +} + +/** + * @brief Start a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_start(bsp_module_type_t type, uint8_t instance) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is configured */ + if (module->state < BSP_MODULE_STATE_CONFIGURED) { + return HAL_ERROR; + } + + /* Start module */ + if (module->ops.start != NULL) { + hal_ret_t status = module->ops.start(); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + } + + module->state = BSP_MODULE_STATE_RUNNING; + + return HAL_OK; +} + +/** + * @brief Stop a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_stop(bsp_module_type_t type, uint8_t instance) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is running */ + if (module->state != BSP_MODULE_STATE_RUNNING) { + return HAL_OK; + } + + /* Stop module */ + if (module->ops.stop != NULL) { + hal_ret_t status = module->ops.stop(); + if (status != HAL_OK) { + module->state = BSP_MODULE_STATE_ERROR; + return status; + } + } + + module->state = BSP_MODULE_STATE_CONFIGURED; + + return HAL_OK; +} + +/** + * @brief Reset a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @retval HAL status code + */ +hal_ret_t bsp_module_reset(bsp_module_type_t type, uint8_t instance) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Stop module if it's running */ + hal_ret_t status = bsp_module_stop(type, instance); + if (status != HAL_OK) { + return status; + } + + /* Deinitialize module */ + status = bsp_module_deinit(type, instance); + if (status != HAL_OK) { + return status; + } + + /* Reinitialize module */ + status = bsp_module_init(type, instance); + if (status != HAL_OK) { + return status; + } + + /* Configure module */ + if (module->config.config_data != NULL) { + status = bsp_module_configure(type, instance, module->config.config_data, module->config.config_size); + if (status != HAL_OK) { + return status; + } + } + + /* Start module */ + status = bsp_module_start(type, instance); + if (status != HAL_OK) { + return status; + } + + return HAL_OK; +} + +/** + * @brief Get state of a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param state: Pointer to store module state + * @retval HAL status code + */ +hal_ret_t bsp_module_get_state(bsp_module_type_t type, uint8_t instance, bsp_module_state_t* state) { + if (state == NULL) { + return HAL_INVALID_PARAM; + } + + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + *state = BSP_MODULE_STATE_UNINIT; + return HAL_ERROR; + } + + *state = module->state; + + return HAL_OK; +} + +/** + * @brief Control a specific BSP module + * @param type: Module type + * @param instance: Module instance + * @param cmd: Control command + * @param param: Control parameter + * @retval HAL status code + */ +hal_ret_t bsp_module_control(bsp_module_type_t type, uint8_t instance, uint32_t cmd, void* param) { + /* Get module */ + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + /* Check if module is initialized */ + if (module->state < BSP_MODULE_STATE_INIT) { + return HAL_ERROR; + } + + /* Control module */ + if (module->ops.control != NULL) { + return module->ops.control(cmd, param); + } + + return HAL_RET_NOT_SUPPORTED; +} + +/** + * @brief Initialize all registered BSP modules in priority order + * @retval HAL status code + */ +hal_ret_t bsp_module_init_all(void) { + hal_ret_t status = HAL_RET_OK; + + /* Initialize modules by priority */ + for (uint8_t priority = BSP_MODULE_PRIORITY_HIGHEST; priority <= BSP_MODULE_PRIORITY_LOWEST; priority++) { + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.priority == priority) { + status = bsp_module_init(current->config.type, current->config.instance); + if (status != HAL_OK) { + return status; + } + } + current = current->next; + } + } + + return status; +} + +/** + * @brief Deinitialize all registered BSP modules in reverse priority order + * @retval HAL status code + */ +hal_ret_t bsp_module_deinit_all(void) { + hal_status_t status = HAL_OK; + + /* Deinitialize modules by reverse priority */ + for (int8_t priority = BSP_MODULE_PRIORITY_LOWEST; priority >= BSP_MODULE_PRIORITY_HIGHEST; priority--) { + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.priority == priority) { + status = bsp_module_deinit(current->config.type, current->config.instance); + if (status != HAL_OK) { + return status; + } + } + current = current->next; + } + } + + return status; +} + +/** + * @brief Start all registered BSP modules in priority order + * @retval HAL status code + */ +hal_ret_t bsp_module_start_all(void) { + hal_status_t status = HAL_OK; + + /* Start modules by priority */ + for (uint8_t priority = BSP_MODULE_PRIORITY_HIGHEST; priority <= BSP_MODULE_PRIORITY_LOWEST; priority++) { + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.priority == priority && current->state >= BSP_MODULE_STATE_CONFIGURED) { + status = bsp_module_start(current->config.type, current->config.instance); + if (status != HAL_OK) { + return status; + } + } + current = current->next; + } + } + + return status; +} + +/** + * @brief Stop all registered BSP modules in reverse priority order + * @retval HAL status code + */ +hal_ret_t bsp_module_stop_all(void) { + hal_status_t status = HAL_OK; + + /* Stop modules by reverse priority */ + for (int8_t priority = BSP_MODULE_PRIORITY_LOWEST; priority >= BSP_MODULE_PRIORITY_HIGHEST; priority--) { + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.priority == priority && current->state == BSP_MODULE_STATE_RUNNING) { + status = bsp_module_stop(current->config.type, current->config.instance); + if (status != HAL_OK) { + return status; + } + } + current = current->next; + } + } + + return status; +} + +/** + * @brief Get total number of registered modules + * @retval Number of registered modules + */ +uint32_t bsp_module_get_count(void) { + return bsp_module_manager.module_count; +} + +/** + * @brief Get module manager instance + * @retval Pointer to module manager structure + */ +bsp_module_manager_t* bsp_module_get_manager(void) { + return &bsp_module_manager; +} + +/** + * @brief Register a module event callback + * @param type: Module type + * @param instance: Module instance + * @param callback: Event callback function + * @retval HAL status code + */ +hal_ret_t bsp_module_register_event_callback(bsp_module_type_t type, uint8_t instance, bsp_module_event_callback_t callback) { + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + module->event_callback = callback; + return HAL_OK; +} + +/** + * @brief Trigger a module event + * @param module: Pointer to module structure + * @param event: Event to trigger + * @param data: Event data + * @retval HAL status code + */ +hal_ret_t bsp_module_trigger_event(const bsp_module_t* module, uint32_t event, void* data) { + if (module == NULL) { + return HAL_INVALID_PARAM; + } + + // Check if module has an event callback registered + if (module->event_callback != NULL) { + return module->event_callback(module, event, data); + } + + return HAL_OK; +} + +/** + * @brief Find modules by priority range + * @param min_priority: Minimum priority + * @param max_priority: Maximum priority + * @param count: Pointer to store number of modules found + * @retval Pointer to array of module pointers, or NULL if no modules found + */ +bsp_module_t** bsp_module_find_by_priority_range(bsp_module_priority_t min_priority, bsp_module_priority_t max_priority, uint32_t* count) { + if (count == NULL) { + return NULL; + } + + // First pass: count matching modules + uint32_t module_count = 0; + bsp_module_t* current = bsp_module_manager.module_list; + while (current != NULL) { + if (current->config.priority >= min_priority && current->config.priority <= max_priority) { + module_count++; + } + current = current->next; + } + + if (module_count == 0) { + *count = 0; + return NULL; + } + + // Second pass: allocate and fill array + bsp_module_t** modules = (bsp_module_t**)malloc(module_count * sizeof(bsp_module_t*)); + if (modules == NULL) { + *count = 0; + return NULL; + } + + uint32_t index = 0; + current = bsp_module_manager.module_list; + while (current != NULL && index < module_count) { + if (current->config.priority >= min_priority && current->config.priority <= max_priority) { + modules[index++] = current; + } + current = current->next; + } + + *count = module_count; + return modules; +} + +/** + * @brief Set module enable/disable state + * @param type: Module type + * @param instance: Module instance + * @param enable: Enable flag + * @retval HAL status code + */ +hal_ret_t bsp_module_set_enable(bsp_module_type_t type, uint8_t instance, uint8_t enable) { + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + module->config.enable = enable; + return HAL_OK; +} + +/** + * @brief Check if module is enabled + * @param type: Module type + * @param instance: Module instance + * @param enable: Pointer to store enable state + * @retval HAL status code + */ +hal_ret_t bsp_module_is_enabled(bsp_module_type_t type, uint8_t instance, uint8_t* enable) { + if (enable == NULL) { + return HAL_INVALID_PARAM; + } + + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + *enable = 0; + return HAL_ERROR; + } + + *enable = module->config.enable; + return HAL_OK; +} + +/** + * @brief Set module priority + * @param type: Module type + * @param instance: Module instance + * @param priority: New priority + * @retval HAL status code + */ +hal_ret_t bsp_module_set_priority(bsp_module_type_t type, uint8_t instance, bsp_module_priority_t priority) { + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + return HAL_ERROR; + } + + module->config.priority = priority; + return HAL_OK; +} + +/** + * @brief Get module priority + * @param type: Module type + * @param instance: Module instance + * @param priority: Pointer to store priority + * @retval HAL status code + */ +hal_ret_t bsp_module_get_priority(bsp_module_type_t type, uint8_t instance, bsp_module_priority_t* priority) { + if (priority == NULL) { + return HAL_INVALID_PARAM; + } + + bsp_module_t* module = bsp_module_get(type, instance); + if (module == NULL) { + *priority = BSP_MODULE_PRIORITY_MEDIUM; + return HAL_ERROR; + } + + *priority = module->config.priority; + return HAL_OK; +} \ No newline at end of file diff --git a/BSP/Src/bsp_w25qxx.c b/BSP/Src/bsp_w25qxx.c index 9d2ec9a..04f722c 100644 --- a/BSP/Src/bsp_w25qxx.c +++ b/BSP/Src/bsp_w25qxx.c @@ -17,7 +17,7 @@ * @return true if successful, false otherwise */ static bool w25qxx_spi_send(const uint8_t *data, uint16_t size) { - return hal_spi_transmit(W25QXX_SPI_INSTANCE, data, size); + return hal_spi_transmit(W25QXX_SPI_INSTANCE, data, size) == HAL_RET_OK; } /** @@ -27,7 +27,7 @@ static bool w25qxx_spi_send(const uint8_t *data, uint16_t size) { * @return true if successful, false otherwise */ static bool w25qxx_spi_receive(uint8_t *data, uint16_t size) { - return hal_spi_receive(W25QXX_SPI_INSTANCE, data, size); + return hal_spi_receive(W25QXX_SPI_INSTANCE, data, size) == HAL_RET_OK; } /** @@ -38,7 +38,7 @@ static bool w25qxx_spi_receive(uint8_t *data, uint16_t size) { * @return true if successful, false otherwise */ static bool w25qxx_spi_transceive(const uint8_t *tx_data, uint8_t *rx_data, uint16_t size) { - return hal_spi_transmit_receive(W25QXX_SPI_INSTANCE, tx_data, rx_data, size); + return hal_spi_transmit_receive(W25QXX_SPI_INSTANCE, tx_data, rx_data, size) == HAL_RET_OK; } /** @@ -96,7 +96,7 @@ bool bsp_w25qxx_init(void) { .databits = HAL_SPI_DATABITS_8 }; - if (!hal_spi_init(W25QXX_SPI_INSTANCE, &spi_config)) { + if (hal_spi_init(W25QXX_SPI_INSTANCE, &spi_config) != HAL_RET_OK) { return false; } diff --git a/BSP/Src/stm32f407vet6_board.c b/BSP/Src/stm32f407vet6_board.c index be61405..7b50b88 100644 --- a/BSP/Src/stm32f407vet6_board.c +++ b/BSP/Src/stm32f407vet6_board.c @@ -16,8 +16,9 @@ /** * @brief Default LED initialization function * @param config: LED configuration structure + * @retval HAL status code */ -static void default_led_init(const void* config) { +static hal_ret_t default_led_init(const void* config) { const bsp_led_config_t* led_config = (const bsp_led_config_t*)config; hal_gpio_config_t gpio_config = { .port = led_config->port, @@ -26,7 +27,132 @@ static void default_led_init(const void* config) { .speed = led_config->speed, .pull = led_config->pull }; - hal_gpio_configure_pin(&gpio_config); + return hal_gpio_configure_pin(&gpio_config); +} + +/** + * @brief Default button initialization function + * @param config: Button configuration structure + * @retval HAL status code + */ +static hal_ret_t default_button_init(const void* config) { + const bsp_buttons_config_t* buttons_config = (const bsp_buttons_config_t*)config; + uint8_t i; + hal_ret_t status = HAL_RET_OK; + + for (i = 0; i < buttons_config->count; i++) { + const bsp_button_config_t* button_config = &buttons_config->buttons[i]; + hal_gpio_config_t gpio_config = { + .port = button_config->port, + .pin = button_config->pin, + .mode = button_config->mode, + .speed = button_config->speed, + .pull = button_config->pull + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + break; + } + } + + return status; +} + +/** + * @brief Default UART initialization function + * @param config: UART configuration structure + * @retval HAL status code + */ +static hal_ret_t default_uart_init(const void* config) { + const bsp_uart_config_t* uart_config = (const bsp_uart_config_t*)config; + hal_uart_config_t uart_cfg = { + .instance = (hal_uart_instance_t)uart_config->instance, + .baudrate = uart_config->baudrate, + .parity = uart_config->parity, + .stopbits = uart_config->stopbits, + .databits = uart_config->databits + }; + return hal_uart_config(&uart_cfg); +} + +/** + * @brief Default SPI initialization function + * @param config: SPI configuration structure + * @retval HAL status code + */ +static hal_ret_t default_spi_init(const void* config) { + const bsp_spi_config_t* spi_config = (const bsp_spi_config_t*)config; + hal_spi_config_t spi_cfg = { + .instance = spi_config->instance, + .mode = spi_config->mode, + .baudrate = spi_config->baudrate, + .polarity = spi_config->polarity, + .phase = spi_config->phase, + .databits = spi_config->databits + }; + return hal_spi_init(spi_config->instance, &spi_cfg); +} + +/** + * @brief Default I2C initialization function + * @param config: I2C configuration structure + * @retval HAL status code + */ +static hal_ret_t default_i2c_init(const void* config) { + /* TODO: Implement default I2C initialization */ + return HAL_RET_OK; +} + +/** + * @brief Default CAN initialization function + * @param config: CAN configuration structure + * @retval HAL status code + */ +static hal_ret_t default_can_init(const void* config) { + /* TODO: Implement default CAN initialization */ + return HAL_RET_OK; +} + +/** + * @brief Default ADC initialization function + * @param config: ADC configuration structure + * @retval HAL status code + */ +static hal_ret_t default_adc_init(const void* config) { + /* TODO: Implement default ADC initialization */ + return HAL_RET_OK; +} + +/** + * @brief Default W25QXX initialization function + * @param config: W25QXX configuration structure + * @retval HAL status code + */ +static hal_ret_t default_w25qxx_init(const void* config) { + const bsp_w25qxx_config_t* w25qxx_config = (const bsp_w25qxx_config_t*)config; + hal_ret_t status = HAL_RET_OK; + + /* Initialize CS pin */ + hal_gpio_config_t gpio_config = { + .port = w25qxx_config->cs_port, + .pin = w25qxx_config->cs_pin, + .mode = HAL_GPIO_MODE_OUTPUT_PP, + .speed = HAL_GPIO_SPEED_HIGH, + .pull = HAL_GPIO_PULL_NO + }; + status = hal_gpio_configure_pin(&gpio_config); + if (status != HAL_RET_OK) { + return status; + } + + /* Deselect chip initially */ + status = hal_gpio_write_pin(w25qxx_config->cs_port, w25qxx_config->cs_pin, HAL_GPIO_PIN_SET); + if (status != HAL_RET_OK) { + return status; + } + + /* SPI instance is now just an index, actual SPI initialization is handled separately */ + return status; } /** @@ -35,8 +161,8 @@ static void default_led_init(const void* config) { static const bsp_button_config_t stm32f407vet6_buttons[] = { /* KEY0 - PE4, active low */ { - .port = BSP_KEY0_PORT, - .pin = BSP_KEY0_PIN, + .port = HAL_GPIO_PORT_E, + .pin = HAL_GPIO_PIN_4, .mode = HAL_GPIO_MODE_INPUT, .speed = HAL_GPIO_SPEED_LOW, .pull = HAL_GPIO_PULL_UP, @@ -44,8 +170,8 @@ static const bsp_button_config_t stm32f407vet6_buttons[] = { }, /* KEY1 - PE3, active low */ { - .port = BSP_KEY1_PORT, - .pin = BSP_KEY1_PIN, + .port = HAL_GPIO_PORT_E, + .pin = HAL_GPIO_PIN_3, .mode = HAL_GPIO_MODE_INPUT, .speed = HAL_GPIO_SPEED_LOW, .pull = HAL_GPIO_PULL_UP, @@ -53,8 +179,8 @@ static const bsp_button_config_t stm32f407vet6_buttons[] = { }, /* WKUP - PA0, active high */ { - .port = BSP_WKUP_PORT, - .pin = BSP_WKUP_PIN, + .port = HAL_GPIO_PORT_A, + .pin = HAL_GPIO_PIN_0, .mode = HAL_GPIO_MODE_INPUT, .speed = HAL_GPIO_SPEED_LOW, .pull = HAL_GPIO_PULL_DOWN, @@ -66,121 +192,217 @@ static const bsp_button_config_t stm32f407vet6_buttons[] = { * @brief STM32F407VET6 buttons configuration */ static const bsp_buttons_config_t stm32f407vet6_buttons_config = { + .enable = 1, .count = sizeof(stm32f407vet6_buttons) / sizeof(bsp_button_config_t), .buttons = stm32f407vet6_buttons }; /** - * @brief Default button initialization function - * @param config: Button configuration structure + * @brief STM32F407VET6 board UART configurations */ -static void default_button_init(const void* config) { - const bsp_buttons_config_t* buttons_config = (const bsp_buttons_config_t*)config; - uint8_t i; - - for (i = 0; i < buttons_config->count; i++) { - const bsp_button_config_t* button_config = &buttons_config->buttons[i]; - hal_gpio_config_t gpio_config = { - .port = button_config->port, - .pin = button_config->pin, - .mode = button_config->mode, - .speed = button_config->speed, - .pull = button_config->pull - }; - hal_gpio_configure_pin(&gpio_config); +static const bsp_uart_config_t stm32f407vet6_uarts[] = { + /* USART1 - PA9(TX), PA10(RX) */ + { + .enable = 1, + .instance = BSP_UART_INSTANCE_1, + .baudrate = 115200, + .parity = HAL_UART_PARITY_NONE, + .stopbits = HAL_UART_STOPBITS_1, + .databits = HAL_UART_DATABITS_8, + .tx_port = HAL_GPIO_PORT_A, /* USART1_TX - PA9 */ + .tx_pin = HAL_GPIO_PIN_9, + .rx_port = HAL_GPIO_PORT_A, /* USART1_RX - PA10 */ + .rx_pin = HAL_GPIO_PIN_10 } -} +}; /** - * @brief Default UART initialization function - * @param config: UART configuration structure + * @brief STM32F407VET6 board SPI configurations */ -static void default_uart_init(const void* config) { - const bsp_uart_config_t* uart_config = (const bsp_uart_config_t*)config; - hal_uart_config_t uart_cfg = { - .instance = (hal_uart_instance_t)uart_config->instance, - .baudrate = uart_config->baudrate, - .parity = uart_config->parity, - .stopbits = uart_config->stopbits, - .databits = uart_config->databits - }; - hal_uart_config(&uart_cfg); -} +static const bsp_spi_config_t stm32f407vet6_spis[] = { + /* SPI1 - PA5(SCK), PA6(MISO), PA7(MOSI) */ + { + .enable = 1, + .instance = HAL_SPI_INSTANCE_1, + .mode = HAL_SPI_MODE_MASTER, + .baudrate = 1000000, /* 1 MHz */ + .polarity = HAL_SPI_POLARITY_LOW, + .phase = HAL_SPI_PHASE_1EDGE, + .databits = HAL_SPI_DATABITS_8, + .sck_port = HAL_GPIO_PORT_A, + .sck_pin = HAL_GPIO_PIN_5, + .miso_port = HAL_GPIO_PORT_A, + .miso_pin = HAL_GPIO_PIN_6, + .mosi_port = HAL_GPIO_PORT_A, + .mosi_pin = HAL_GPIO_PIN_7 + } +}; /** - * @brief Default W25QXX initialization function - * @param config: W25QXX configuration structure + * @brief STM32F407VET6 board I2C configurations */ -static void default_w25qxx_init(const void* config) { - const bsp_w25qxx_config_t* w25qxx_config = (const bsp_w25qxx_config_t*)config; - - /* Initialize CS pin */ - hal_gpio_config_t gpio_config = { - .port = w25qxx_config->cs_port, - .pin = w25qxx_config->cs_pin, - .mode = HAL_GPIO_MODE_OUTPUT_PP, - .speed = HAL_GPIO_SPEED_HIGH, - .pull = HAL_GPIO_PULL_NO - }; - hal_gpio_configure_pin(&gpio_config); - - /* Deselect chip initially */ - hal_gpio_write_pin(w25qxx_config->cs_port, w25qxx_config->cs_pin, HAL_GPIO_PIN_SET); - - /* Initialize SPI */ - hal_spi_config_t spi_config = { - .instance = w25qxx_config->spi_config.instance, - .mode = w25qxx_config->spi_config.mode, - .baudrate = w25qxx_config->spi_config.baudrate, - .polarity = w25qxx_config->spi_config.polarity, - .phase = w25qxx_config->spi_config.phase, - .databits = w25qxx_config->spi_config.databits - }; - hal_spi_init(w25qxx_config->spi_config.instance, &spi_config); -} +static const bsp_i2c_config_t stm32f407vet6_i2cs[] = { + /* I2C1 - PB6(SCL), PB7(SDA) */ + { + .enable = 0, /* Disabled by default */ + .instance = HAL_I2C_INSTANCE_1, + .speed = HAL_I2C_SPEED_STANDARD, + .address_mode = HAL_I2C_ADDRESS_7BIT, + .dutycycle = HAL_I2C_DUTYCYCLE_2, + .own_address1 = 0x00, + .scl_port = HAL_GPIO_PORT_B, + .scl_pin = HAL_GPIO_PIN_6, + .sda_port = HAL_GPIO_PORT_B, + .sda_pin = HAL_GPIO_PIN_7 + } +}; + +/** + * @brief STM32F407VET6 board CAN configurations + */ +static const bsp_can_config_t stm32f407vet6_cans[] = { + /* CAN1 - PA11(RX), PA12(TX) */ + { + .enable = 0, /* Disabled by default */ + .instance = HAL_CAN_INSTANCE_1, + .mode = HAL_CAN_MODE_NORMAL, + .prescaler = 6, /* 168MHz / 6 = 28MHz */ + .sync_jump_width = 1, + .time_segment1 = 13, + .time_segment2 = 2, + .rx_port = HAL_GPIO_PORT_A, + .rx_pin = HAL_GPIO_PIN_11, + .tx_port = HAL_GPIO_PORT_A, + .tx_pin = HAL_GPIO_PIN_12 + } +}; + +/** + * @brief STM32F407VET6 board ADC channel configurations + */ +static const bsp_adc_channel_config_t stm32f407vet6_adc_channels[] = { + /* ADC1 Channel 0 - PA0 */ + { + .enable = 0, /* Disabled by default */ + .channel = HAL_ADC_CHANNEL_0, + .sampletime = HAL_ADC_SAMPLETIME_56CYCLES, + .rank = 1 + } +}; + +/** + * @brief STM32F407VET6 board ADC configurations + */ +static const bsp_adc_config_t stm32f407vet6_adcs[] = { + /* ADC1 */ + { + .enable = 0, /* Disabled by default */ + .instance = HAL_ADC_INSTANCE_1, + .resolution = HAL_ADC_RESOLUTION_12B, + .scan_conversion_mode = 0, + .continuous_conversion_mode = 0, + .channel_count = sizeof(stm32f407vet6_adc_channels) / sizeof(bsp_adc_channel_config_t), + .channels = stm32f407vet6_adc_channels + } +}; /** * @brief STM32F407VET6 board configuration */ const bsp_board_config_t stm32f407vet6_board_config = { - .name = BOARD_NAME, + .version = BSP_CONFIG_VERSION, + .name = "STM32F407VET6", + .description = "STM32F407VET6 Development Board", + .id = { + .vendor_id = 0x0483, /* STMicroelectronics */ + .product_id = 0x374B, /* STM32F4 Series */ + .serial_number = 0x00000001 /* Default serial number */ + }, + + /* Board features */ + .features = ( + BSP_BOARD_FEATURE_LED | + BSP_BOARD_FEATURE_BUTTON | + BSP_BOARD_FEATURE_UART | + BSP_BOARD_FEATURE_SPI | + BSP_BOARD_FEATURE_I2C | + BSP_BOARD_FEATURE_CAN | + BSP_BOARD_FEATURE_ADC | + BSP_BOARD_FEATURE_W25QXX + ), + + /* Hardware information */ + .hw_info = { + .clock_speed = 168000000, /* 168 MHz */ + .flash_size = 512 * 1024, /* 512 KB */ + .ram_size = 192 * 1024, /* 192 KB */ + .eeprom_size = 0, /* No internal EEPROM */ + .sram_size = 64 * 1024, /* 64 KB SRAM */ + .cpu_core = 0x0F, /* Cortex-M4 */ + .cpu_bits = 32 /* 32-bit CPU */ + }, + + /* Peripheral configurations */ .led = { - .port = BSP_LED_PORT, - .pin = BSP_LED_PIN, + .enable = 1, + .port = HAL_GPIO_PORT_E, + .pin = HAL_GPIO_PIN_5, .mode = HAL_GPIO_MODE_OUTPUT_PP, .speed = HAL_GPIO_SPEED_MEDIUM, .pull = HAL_GPIO_PULL_NO }, .buttons = stm32f407vet6_buttons_config, - .uart = { - .instance = BSP_UART_INSTANCE, - .baudrate = BSP_UART_BAUDRATE, - .parity = BSP_UART_PARITY, - .stopbits = BSP_UART_STOPBITS, - .databits = BSP_UART_DATABITS, - .tx_port = HAL_GPIO_PORT_A, /* USART1_TX - PA9 */ - .tx_pin = HAL_GPIO_PIN_9, - .rx_port = HAL_GPIO_PORT_A, /* USART1_RX - PA10 */ - .rx_pin = HAL_GPIO_PIN_10 - }, .w25qxx = { + .enable = 1, .cs_port = HAL_GPIO_PORT_B, .cs_pin = HAL_GPIO_PIN_0, - .spi_config = { - .instance = HAL_SPI_INSTANCE_1, - .mode = HAL_SPI_MODE_MASTER, - .baudrate = 1000000, /* 1 MHz */ - .polarity = HAL_SPI_POLARITY_LOW, - .phase = HAL_SPI_PHASE_1EDGE, - .databits = HAL_SPI_DATABITS_8 - } + .spi_instance = 0 /* Use SPI instance 0 */ }, - .led_init = default_led_init, - .button_init = default_button_init, - .uart_init = default_uart_init, - .w25qxx_init = default_w25qxx_init, - .clock_speed = 168000000, /* 168 MHz */ - .uart_count = 6 + + /* Peripheral arrays */ + .periphs = { + /* UART configurations */ + .uart_count = 1, + .uarts = stm32f407vet6_uarts, + + /* SPI configurations */ + .spi_count = 1, + .spis = stm32f407vet6_spis, + + /* I2C configurations */ + .i2c_count = 1, + .i2cs = stm32f407vet6_i2cs, + + /* CAN configurations */ + .can_count = 1, + .cans = stm32f407vet6_cans, + + /* ADC configurations */ + .adc_count = 1, + .adcs = stm32f407vet6_adcs + }, + + /* Initialization function pointers */ + .init_funcs = { + .led_init = default_led_init, + .button_init = default_button_init, + .uart_init = default_uart_init, + .spi_init = default_spi_init, + .i2c_init = default_i2c_init, + .can_init = default_can_init, + .adc_init = default_adc_init, + .w25qxx_init = default_w25qxx_init + }, + + /* Additional board-specific configuration */ + .custom_config = NULL, + .custom_config_size = 0, + + /* Board revision information */ + .major_rev = 1, + .minor_rev = 0, + .patch_rev = 0, + .revision_desc = "Original release" }; /** @@ -190,3 +412,11 @@ const bsp_board_config_t stm32f407vet6_board_config = { const char* bsp_board_get_name(void) { return stm32f407vet6_board_config.name; } + +/** + * @brief Get board configuration + * @retval Pointer to board configuration structure + */ +const bsp_board_config_t* bsp_board_get_config(void) { + return &stm32f407vet6_board_config; +} diff --git a/Core/Src/main.c b/Core/Src/main.c index dbaabc4..2cba39d 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -49,12 +49,6 @@ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ -/* LED configuration */ -static led_config_t led_config = { - .gpio_port = BSP_LED_PORT, - .gpio_pin = BSP_LED_PIN -}; - /* LED instance */ static led_t led; @@ -105,10 +99,17 @@ int main(void) bsp_init(); /* USER CODE BEGIN 2 */ /* Initialize modules */ - led_init(&led, &led_config); delay_init(); logging_init(); + /* Get LED configuration from board config */ + const bsp_board_config_t* board_config = bsp_get_board_config(); + led_config_t led_config = { + .gpio_port = board_config->led.port, + .gpio_pin = board_config->led.pin + }; + led_init(&led, &led_config); + /* Initialize keys */ bsp_key_init(); diff --git a/HAL/Inc/arch/stm32f4/hal_stm32f4.h b/HAL/Inc/arch/stm32f4/hal_stm32f4.h index a2bdefa..a8d7148 100644 --- a/HAL/Inc/arch/stm32f4/hal_stm32f4.h +++ b/HAL/Inc/arch/stm32f4/hal_stm32f4.h @@ -14,9 +14,9 @@ #include "stm32f4xx_hal.h" /* Include common HAL headers */ +#include "../../hal_delay.h" #include "../../hal_gpio.h" #include "../../hal_uart.h" -#include "../../hal_delay.h" /** * @brief STM32F4 specific initialization diff --git a/HAL/Inc/hal.h b/HAL/Inc/hal.h index b042894..3012441 100644 --- a/HAL/Inc/hal.h +++ b/HAL/Inc/hal.h @@ -10,6 +10,14 @@ #ifndef HAL_H #define HAL_H +#include + +/* HAL version definitions */ +#define HAL_VERSION_MAJOR 1 +#define HAL_VERSION_MINOR 0 +#define HAL_VERSION_PATCH 0 +#define HAL_VERSION_STRING "1.0.0" + /* Define supported architectures */ #define HAL_ARCH_STM32F1 0 #define HAL_ARCH_STM32F4 1 @@ -21,27 +29,339 @@ #define HAL_TARGET_ARCH HAL_ARCH_STM32F4 #endif -/* Include architecture specific headers */ -#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 -#include "arch/stm32f1/hal_stm32f1.h" -#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 -#include "arch/stm32f4/hal_stm32f4.h" -#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 -#include "arch/stm32f7/hal_stm32f7.h" -#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 -#include "arch/stm32l4/hal_stm32l4.h" -#else -#error "Unsupported HAL architecture: " #HAL_TARGET_ARCH -#endif +/* Architecture specific functions will be included in implementation files */ /* Architecture compatibility check */ #if HAL_TARGET_ARCH < HAL_ARCH_STM32F1 || HAL_TARGET_ARCH > HAL_ARCH_STM32L4 #error "Invalid HAL architecture selection" #endif +/** + * @brief HAL status return codes - renamed to avoid conflict with STM32 HAL + */ +typedef enum { + HAL_RET_OK = 0x00U, /*!< Operation completed successfully */ + HAL_RET_ERROR = 0x01U, /*!< Generic operation failed */ + HAL_RET_BUSY = 0x02U, /*!< Peripheral or resource busy */ + HAL_RET_TIMEOUT = 0x03U, /*!< Operation timed out */ + HAL_RET_INVALID_PARAM = 0x04U, /*!< Invalid parameter */ + HAL_RET_NOT_SUPPORTED = 0x05U, /*!< Operation not supported */ + HAL_RET_OUT_OF_MEMORY = 0x06U, /*!< Out of memory */ + HAL_RET_INTERNAL_ERROR = 0x07U, /*!< Internal error */ + HAL_RET_RESOURCE_LOCKED = 0x08U, /*!< Resource locked */ + HAL_RET_RESOURCE_ERROR = 0x09U, /*!< Resource error */ + HAL_RET_COMM_ERROR = 0x0AU, /*!< Communication error */ + HAL_RET_CONFIG_ERROR = 0x0BU, /*!< Configuration error */ + HAL_RET_INIT_ERROR = 0x0CU, /*!< Initialization error */ + HAL_RET_DEINIT_ERROR = 0x0DU, /*!< Deinitialization error */ + HAL_RET_IO_ERROR = 0x0EU, /*!< I/O operation error */ + HAL_RET_OVERRUN_ERROR = 0x0FU, /*!< Overrun error */ + HAL_RET_UNDERRUN_ERROR = 0x10U, /*!< Underrun error */ + HAL_RET_PARITY_ERROR = 0x11U, /*!< Parity error */ + HAL_RET_FRAMING_ERROR = 0x12U, /*!< Framing error */ + HAL_RET_NOISE_ERROR = 0x13U /*!< Noise error */ +} hal_ret_t; + +/** + * @brief HAL error category definitions + */ +typedef enum { + HAL_ERR_CAT_COMMON = 0x00U, /*!< Common error category */ + HAL_ERR_CAT_GPIO = 0x10U, /*!< GPIO error category */ + HAL_ERR_CAT_UART = 0x20U, /*!< UART error category */ + HAL_ERR_CAT_SPI = 0x30U, /*!< SPI error category */ + HAL_ERR_CAT_I2C = 0x40U, /*!< I2C error category */ + HAL_ERR_CAT_CAN = 0x50U, /*!< CAN error category */ + HAL_ERR_CAT_ADC = 0x60U, /*!< ADC error category */ + HAL_ERR_CAT_DMA = 0x70U, /*!< DMA error category */ + HAL_ERR_CAT_RTC = 0x80U, /*!< RTC error category */ + HAL_ERR_CAT_MODULE = 0x90U, /*!< Module management error category */ + HAL_ERR_CAT_ARCH = 0xA0U, /*!< Architecture specific error category */ + HAL_ERR_CAT_MAX = 0xFFU /*!< Maximum error category */ +} hal_error_category_t; + +/** + * @brief HAL extended error code structure + */ +typedef struct { + hal_ret_t status; /*!< HAL status code */ + hal_error_category_t category; /*!< Error category */ + uint32_t specific_error; /*!< Specific error code (category dependent) */ + const char* file; /*!< File where error occurred */ + uint32_t line; /*!< Line number where error occurred */ + const char* function; /*!< Function where error occurred */ + uint32_t timestamp; /*!< Error timestamp */ +} hal_error_t; + +/** + * @brief HAL error callback type + */ +typedef void (*hal_error_callback_t)(const hal_error_t* error); + +/** + * @brief HAL error information context + */ +typedef struct { + hal_error_callback_t callback; /*!< Error callback function */ + hal_error_t last_error; /*!< Last error information */ + uint32_t error_count; /*!< Total error count */ + uint8_t enabled; /*!< Error logging enabled flag */ +} hal_error_context_t; + +/** + * @brief HAL module types + */ +typedef enum { + HAL_MODULE_GPIO = 0, + HAL_MODULE_UART, + HAL_MODULE_SPI, + HAL_MODULE_I2C, + HAL_MODULE_CAN, + HAL_MODULE_ADC, + HAL_MODULE_DAC, + HAL_MODULE_TIMER, + HAL_MODULE_RTC, + HAL_MODULE_DMA, + HAL_MODULE_MAX +} hal_module_type_t; + +/** + * @brief HAL handle structure - base for all HAL peripherals + */ +typedef struct { + void* instance; + void* config; + hal_ret_t status; + uint32_t lock; + void* user_data; +} hal_handle_t; + +/** + * @brief HAL module operations structure - unified API for all modules + */ +typedef struct { + hal_ret_t (*init)(hal_handle_t* handle); + hal_ret_t (*deinit)(hal_handle_t* handle); + hal_ret_t (*configure)(hal_handle_t* handle, void* config); + hal_ret_t (*control)(hal_handle_t* handle, uint32_t cmd, void* param); + hal_ret_t (*get_status)(hal_handle_t* handle, uint32_t* status); +} hal_module_ops_t; + +/** + * @brief HAL module configuration structure + */ +typedef struct { + hal_module_type_t type; + const char* name; + uint32_t version; + hal_module_ops_t ops; + void* default_config; +} hal_module_config_t; + +/** + * @brief HAL initialization structure + */ +typedef struct { + uint32_t module_count; + const hal_module_config_t* modules; + uint32_t flags; +} hal_init_t; + +/** + * @brief HAL flags definitions + */ +#define HAL_INIT_FLAG_DEBUG (1 << 0) /*!< Enable debug mode */ +#define HAL_INIT_FLAG_NO_CACHE (1 << 1) /*!< Disable cache */ +#define HAL_INIT_FLAG_SAFE_MODE (1 << 2) /*!< Enable safe mode */ + +/** + * @brief HAL peripheral state definitions + */ +typedef enum { + HAL_PERIPH_STATE_RESET = 0, + HAL_PERIPH_STATE_READY, + HAL_PERIPH_STATE_BUSY, + HAL_PERIPH_STATE_TIMEOUT, + HAL_PERIPH_STATE_ERROR +} hal_periph_state_t; + +/** + * @brief HAL lock/unlock macros + */ +#define HAL_LOCK(handle) do { while((handle)->lock); (handle)->lock = 1; } while(0) +#define HAL_UNLOCK(handle) do { (handle)->lock = 0; } while(0) + +/** + * @brief HAL handle initialization macro + */ +#define HAL_HANDLE_INIT(handle) \ + do { \ + memset((handle), 0, sizeof(hal_handle_t)); \ + (handle)->status = HAL_RET_OK; \ + (handle)->lock = 0; \ + } while(0) + +/** + * @brief HAL module registration macro + */ +#define HAL_MODULE_REGISTER(module) \ + static const hal_module_config_t __hal_module_##module##_config = { \ + .type = HAL_MODULE_##module, \ + .name = #module, \ + .version = 1, \ + .ops = __hal_##module##_ops, \ + .default_config = &__hal_##module##_default_config \ + }; + +/** + * @brief HAL module registration at startup + */ +#define HAL_MODULE_REGISTER_STARTUP(module) \ + HAL_MODULE_REGISTER(module) \ + __attribute__((constructor)) static void __hal_register_##module##_at_startup(void) { \ + hal_module_register(&__hal_module_##module##_config); \ + } + /** * @brief HAL module initialization */ -void hal_init(void); +hal_ret_t hal_init(void); + +/** + * @brief Register a HAL module + * @param module_config: Module configuration + * @retval HAL status code + */ +hal_ret_t hal_module_register(const hal_module_config_t* module_config); + +/** + * @brief Initialize a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @retval HAL status code + */ +hal_ret_t hal_module_init(hal_module_type_t module_type, hal_handle_t* handle); + +/** + * @brief Deinitialize a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @retval HAL status code + */ +hal_ret_t hal_module_deinit(hal_module_type_t module_type, hal_handle_t* handle); + +/** + * @brief Configure a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param config: Module configuration data + * @retval HAL status code + */ +hal_ret_t hal_module_configure(hal_module_type_t module_type, hal_handle_t* handle, void* config); + +/** + * @brief Control a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param cmd: Control command + * @param param: Control parameter + * @retval HAL status code + */ +hal_ret_t hal_module_control(hal_module_type_t module_type, hal_handle_t* handle, uint32_t cmd, void* param); + +/** + * @brief Get status of a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param status: Pointer to store module status + * @retval HAL status code + */ +hal_ret_t hal_module_get_status(hal_module_type_t module_type, hal_handle_t* handle, uint32_t* status); + +/** + * @brief Get default configuration for a module + * @param module_type: Module type + * @return Pointer to default configuration, or NULL if not available + */ +void* hal_module_get_default_config(hal_module_type_t module_type); + +/** + * @brief Get HAL version information + * @param major: Pointer to store major version + * @param minor: Pointer to store minor version + * @param patch: Pointer to store patch version + * @retval HAL status code + */ +hal_ret_t hal_get_version(uint8_t* major, uint8_t* minor, uint8_t* patch); + +/** + * @brief Get HAL version string + * @retval Version string + */ +const char* hal_get_version_string(void); + +/** + * @brief Get HAL module count + * @retval Number of registered HAL modules + */ +uint32_t hal_get_module_count(void); + +/** + * @brief Get HAL module configuration + * @param module_type: Module type + * @retval Pointer to module configuration, or NULL if not found + */ +const hal_module_config_t* hal_get_module_config(hal_module_type_t module_type); + +/** + * @brief Initialize HAL error handling system + * @retval HAL status code + */ +hal_ret_t hal_error_init(void); + +/** + * @brief Deinitialize HAL error handling system + * @retval HAL status code + */ +hal_ret_t hal_error_deinit(void); + +/** + * @brief Register an error callback function + * @param callback: Error callback function + * @retval HAL status code + */ +hal_ret_t hal_error_register_callback(hal_error_callback_t callback); + +/** + * @brief Record an error + * @param error: Pointer to error information + * @retval HAL status code + */ +hal_ret_t hal_error_record(const hal_error_t* error); + +/** + * @brief Get last error information + * @retval Pointer to last error information + */ +const hal_error_t* hal_error_get_last(void); + +/** + * @brief Get total error count + * @retval Total error count + */ +uint32_t hal_error_get_count(void); + +/** + * @brief Clear error information + * @retval HAL status code + */ +hal_ret_t hal_error_clear(void); + +/** + * @brief Enable/disable error logging + * @param enable: Enable flag (1 to enable, 0 to disable) + * @retval HAL status code + */ +hal_ret_t hal_error_enable(uint8_t enable); #endif /* HAL_H */ diff --git a/HAL/Inc/hal_adc.h b/HAL/Inc/hal_adc.h new file mode 100644 index 0000000..3750fa7 --- /dev/null +++ b/HAL/Inc/hal_adc.h @@ -0,0 +1,175 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_adc.h + * @brief : ADC hardware abstraction layer header file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#ifndef HAL_ADC_H +#define HAL_ADC_H + +#include +#include +#include "hal.h" + +/** + * @brief ADC instance identifier definitions + */ +typedef enum { + HAL_ADC_INSTANCE_1 = 0, + HAL_ADC_INSTANCE_2, + HAL_ADC_INSTANCE_3, + HAL_ADC_INSTANCE_MAX +} hal_adc_instance_t; + +/** + * @brief ADC resolution definitions + */ +typedef enum { + HAL_ADC_RESOLUTION_12B = 0, + HAL_ADC_RESOLUTION_10B, + HAL_ADC_RESOLUTION_8B, + HAL_ADC_RESOLUTION_6B +} hal_adc_resolution_t; + +/** + * @brief ADC channel definitions + */ +typedef enum { + HAL_ADC_CHANNEL_0 = 0, + HAL_ADC_CHANNEL_1, + HAL_ADC_CHANNEL_2, + HAL_ADC_CHANNEL_3, + HAL_ADC_CHANNEL_4, + HAL_ADC_CHANNEL_5, + HAL_ADC_CHANNEL_6, + HAL_ADC_CHANNEL_7, + HAL_ADC_CHANNEL_8, + HAL_ADC_CHANNEL_9, + HAL_ADC_CHANNEL_10, + HAL_ADC_CHANNEL_11, + HAL_ADC_CHANNEL_12, + HAL_ADC_CHANNEL_13, + HAL_ADC_CHANNEL_14, + HAL_ADC_CHANNEL_15, + HAL_ADC_CHANNEL_16, + HAL_ADC_CHANNEL_17, + HAL_ADC_CHANNEL_18, + HAL_ADC_CHANNEL_MAX +} hal_adc_channel_t; + +/** + * @brief ADC sample time definitions + */ +typedef enum { + HAL_ADC_SAMPLETIME_3CYCLES = 0, + HAL_ADC_SAMPLETIME_15CYCLES, + HAL_ADC_SAMPLETIME_28CYCLES, + HAL_ADC_SAMPLETIME_56CYCLES, + HAL_ADC_SAMPLETIME_84CYCLES, + HAL_ADC_SAMPLETIME_112CYCLES, + HAL_ADC_SAMPLETIME_144CYCLES, + HAL_ADC_SAMPLETIME_480CYCLES +} hal_adc_sampletime_t; + +/** + * @brief ADC channel configuration structure + */ +typedef struct { + hal_adc_channel_t channel; + hal_adc_sampletime_t sampletime; + uint8_t rank; + uint8_t enable; +} hal_adc_channel_config_t; + +/** + * @brief ADC configuration structure + */ +typedef struct { + hal_adc_instance_t instance; + hal_adc_resolution_t resolution; + uint8_t scan_conversion_mode; + uint8_t continuous_conversion_mode; + uint8_t discontinuous_conversion_mode; + uint8_t discontinuous_number_of_conversions; + uint8_t nbr_of_conversions; + uint8_t channel_count; + const hal_adc_channel_config_t* channels; + uint32_t timeout; +} hal_adc_config_t; + +/** + * @brief Initialize ADC hardware + * @param config: ADC configuration structure + * @retval HAL status code + */ +hal_ret_t hal_adc_init(const hal_adc_config_t *config); + +/** + * @brief Deinitialize ADC hardware + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_deinit(hal_adc_instance_t instance); + +/** + * @brief Start ADC conversion + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_start(hal_adc_instance_t instance); + +/** + * @brief Stop ADC conversion + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_stop(hal_adc_instance_t instance); + +/** + * @brief Get ADC conversion value + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @param value: Pointer to store conversion value + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_adc_get_value(hal_adc_instance_t instance, hal_adc_channel_t channel, uint16_t *value, uint32_t timeout); + +/** + * @brief Get multiple ADC conversion values + * @param instance: ADC instance identifier + * @param values: Pointer to store conversion values + * @param length: Number of values to get + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_adc_get_values(hal_adc_instance_t instance, uint16_t *values, uint8_t length, uint32_t timeout); + +/** + * @brief Configure ADC channel + * @param instance: ADC instance identifier + * @param config: ADC channel configuration structure + * @retval HAL status code + */ +hal_ret_t hal_adc_configure_channel(hal_adc_instance_t instance, const hal_adc_channel_config_t *config); + +/** + * @brief Enable ADC channel + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @retval HAL status code + */ +hal_ret_t hal_adc_enable_channel(hal_adc_instance_t instance, hal_adc_channel_t channel); + +/** + * @brief Disable ADC channel + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @retval HAL status code + */ +hal_ret_t hal_adc_disable_channel(hal_adc_instance_t instance, hal_adc_channel_t channel); + +#endif /* HAL_ADC_H */ \ No newline at end of file diff --git a/HAL/Inc/hal_can.h b/HAL/Inc/hal_can.h new file mode 100644 index 0000000..ef42d60 --- /dev/null +++ b/HAL/Inc/hal_can.h @@ -0,0 +1,180 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_can.h + * @brief : CAN hardware abstraction layer header file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#ifndef HAL_CAN_H +#define HAL_CAN_H + +#include +#include +#include "hal.h" + +/** + * @brief CAN instance identifier definitions + */ +typedef enum { + HAL_CAN_INSTANCE_1 = 0, + HAL_CAN_INSTANCE_2, + HAL_CAN_INSTANCE_MAX +} hal_can_instance_t; + +/** + * @brief CAN mode definitions + */ +typedef enum { + HAL_CAN_MODE_NORMAL = 0, + HAL_CAN_MODE_LOOPBACK, + HAL_CAN_MODE_SILENT, + HAL_CAN_MODE_SILENT_LOOPBACK +} hal_can_mode_t; + +/** + * @brief CAN filter mode definitions + */ +typedef enum { + HAL_CAN_FILTER_MODE_IDMASK = 0, + HAL_CAN_FILTER_MODE_IDLIST +} hal_can_filter_mode_t; + +/** + * @brief CAN filter scale definitions + */ +typedef enum { + HAL_CAN_FILTER_SCALE_16BIT = 0, + HAL_CAN_FILTER_SCALE_32BIT +} hal_can_filter_scale_t; + +/** + * @brief CAN filter fifo assignment definitions + */ +typedef enum { + HAL_CAN_FILTER_FIFO0 = 0, + HAL_CAN_FILTER_FIFO1 +} hal_can_filter_fifo_t; + +/** + * @brief CAN frame format definitions + */ +typedef enum { + HAL_CAN_FRAME_STANDARD = 0, + HAL_CAN_FRAME_EXTENDED +} hal_can_frame_format_t; + +/** + * @brief CAN frame type definitions + */ +typedef enum { + HAL_CAN_FRAME_DATA = 0, + HAL_CAN_FRAME_REMOTE +} hal_can_frame_type_t; + +/** + * @brief CAN filter configuration structure + */ +typedef struct { + uint8_t filter_id; + hal_can_filter_mode_t mode; + hal_can_filter_scale_t scale; + hal_can_filter_fifo_t fifo_assignment; + uint32_t filter_mask_id_high; + uint32_t filter_mask_id_low; + uint32_t filter_id_high; + uint32_t filter_id_low; + uint8_t filter_enable; +} hal_can_filter_config_t; + +/** + * @brief CAN configuration structure + */ +typedef struct { + hal_can_instance_t instance; + hal_can_mode_t mode; + uint32_t prescaler; + uint8_t sync_jump_width; + uint8_t time_segment1; + uint8_t time_segment2; + uint8_t filter_count; + const hal_can_filter_config_t* filters; +} hal_can_config_t; + +/** + * @brief CAN message structure + */ +typedef struct { + hal_can_frame_format_t format; + hal_can_frame_type_t type; + uint32_t id; + uint8_t dlc; + uint8_t data[8]; +} hal_can_message_t; + +/** + * @brief Initialize CAN hardware + * @param config: CAN configuration structure + * @retval HAL status code + */ +hal_ret_t hal_can_init(const hal_can_config_t *config); + +/** + * @brief Deinitialize CAN hardware + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_ret_t hal_can_deinit(hal_can_instance_t instance); + +/** + * @brief Start CAN peripheral + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_ret_t hal_can_start(hal_can_instance_t instance); + +/** + * @brief Stop CAN peripheral + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_ret_t hal_can_stop(hal_can_instance_t instance); + +/** + * @brief Send CAN message + * @param instance: CAN instance identifier + * @param message: Pointer to CAN message structure + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_can_send(hal_can_instance_t instance, const hal_can_message_t *message, uint32_t timeout); + +/** + * @brief Receive CAN message + * @param instance: CAN instance identifier + * @param fifo: FIFO number (0 or 1) + * @param message: Pointer to CAN message structure + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_can_receive(hal_can_instance_t instance, uint8_t fifo, hal_can_message_t *message, uint32_t timeout); + +/** + * @brief Get CAN receive FIFO message pending count + * @param instance: CAN instance identifier + * @param fifo: FIFO number (0 or 1) + * @param count: Pointer to store pending message count + * @retval HAL status code + */ +hal_ret_t hal_can_get_pending_count(hal_can_instance_t instance, uint8_t fifo, uint8_t *count); + +/** + * @brief Configure CAN filter + * @param instance: CAN instance identifier + * @param filter_config: Pointer to CAN filter configuration structure + * @retval HAL status code + */ +hal_ret_t hal_can_configure_filter(hal_can_instance_t instance, const hal_can_filter_config_t *filter_config); + +#endif /* HAL_CAN_H */ \ No newline at end of file diff --git a/HAL/Inc/hal_gpio.h b/HAL/Inc/hal_gpio.h index f1df13f..0885309 100644 --- a/HAL/Inc/hal_gpio.h +++ b/HAL/Inc/hal_gpio.h @@ -10,6 +10,8 @@ #ifndef HAL_GPIO_H #define HAL_GPIO_H +#include "hal.h" + /** * @brief GPIO pin state definitions */ @@ -105,29 +107,33 @@ typedef struct { /** * @brief Initialize GPIO hardware + * @retval HAL status code */ -void hal_gpio_init(void); +hal_ret_t hal_gpio_init(void); /** * @brief Configure GPIO pin * @param config: GPIO configuration structure + * @retval HAL status code */ -void hal_gpio_configure_pin(const hal_gpio_config_t *config); +hal_ret_t hal_gpio_configure_pin(const hal_gpio_config_t *config); /** * @brief Write GPIO pin state * @param port: GPIO port * @param pin: GPIO pin * @param state: GPIO pin state + * @retval HAL status code */ -void hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_state_t state); +hal_ret_t hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_state_t state); /** * @brief Toggle GPIO pin state * @param port: GPIO port * @param pin: GPIO pin + * @retval HAL status code */ -void hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin); +hal_ret_t hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin); /** * @brief Read GPIO pin state diff --git a/HAL/Inc/hal_i2c.h b/HAL/Inc/hal_i2c.h new file mode 100644 index 0000000..926d7f4 --- /dev/null +++ b/HAL/Inc/hal_i2c.h @@ -0,0 +1,125 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_i2c.h + * @brief : I2C hardware abstraction layer header file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#ifndef HAL_I2C_H +#define HAL_I2C_H + +#include +#include +#include "hal.h" + +/** + * @brief I2C instance identifier definitions + */ +typedef enum { + HAL_I2C_INSTANCE_1 = 0, + HAL_I2C_INSTANCE_2, + HAL_I2C_INSTANCE_3, + HAL_I2C_INSTANCE_4, + HAL_I2C_INSTANCE_MAX +} hal_i2c_instance_t; + +/** + * @brief I2C clock speed definitions + */ +typedef enum { + HAL_I2C_SPEED_STANDARD = 100000U, /*!< Standard speed (100 kHz) */ + HAL_I2C_SPEED_FAST = 400000U, /*!< Fast speed (400 kHz) */ + HAL_I2C_SPEED_FAST_PLUS = 1000000U, /*!< Fast plus speed (1 MHz) */ + HAL_I2C_SPEED_HIGH = 3400000U /*!< High speed (3.4 MHz) */ +} hal_i2c_speed_t; + +/** + * @brief I2C address mode definitions + */ +typedef enum { + HAL_I2C_ADDRESS_7BIT = 0, + HAL_I2C_ADDRESS_10BIT +} hal_i2c_address_mode_t; + +/** + * @brief I2C duty cycle definitions + */ +typedef enum { + HAL_I2C_DUTYCYCLE_2 = 0, + HAL_I2C_DUTYCYCLE_16_9 +} hal_i2c_dutycycle_t; + +/** + * @brief I2C configuration structure + */ +typedef struct { + hal_i2c_instance_t instance; + hal_i2c_speed_t speed; + hal_i2c_address_mode_t address_mode; + hal_i2c_dutycycle_t dutycycle; + uint16_t own_address1; + uint32_t timeout; +} hal_i2c_config_t; + +/** + * @brief Initialize I2C hardware + * @param config: I2C configuration structure + * @retval HAL status code + */ +hal_ret_t hal_i2c_init(const hal_i2c_config_t *config); + +/** + * @brief Deinitialize I2C hardware + * @param instance: I2C instance identifier + * @retval HAL status code + */ +hal_ret_t hal_i2c_deinit(hal_i2c_instance_t instance); + +/** + * @brief Transmit data to I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param data: Pointer to data buffer + * @param length: Data length in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_i2c_master_transmit(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *data, uint16_t length, uint32_t timeout); + +/** + * @brief Receive data from I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param data: Pointer to data buffer + * @param length: Data length to receive in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_i2c_master_receive(hal_i2c_instance_t instance, uint16_t dev_address, uint8_t *data, uint16_t length, uint32_t timeout); + +/** + * @brief Transmit and receive data from I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param tx_data: Pointer to transmit data buffer + * @param tx_length: Transmit data length in bytes + * @param rx_data: Pointer to receive data buffer + * @param rx_length: Receive data length in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_i2c_master_transmit_receive(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *tx_data, uint16_t tx_length, uint8_t *rx_data, uint16_t rx_length, uint32_t timeout); + +/** + * @brief Check if I2C bus is ready + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param trials: Number of trials + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_i2c_is_device_ready(hal_i2c_instance_t instance, uint16_t dev_address, uint32_t trials, uint32_t timeout); + +#endif /* HAL_I2C_H */ \ No newline at end of file diff --git a/HAL/Inc/hal_spi.h b/HAL/Inc/hal_spi.h index 00a70fe..0ff51fc 100644 --- a/HAL/Inc/hal_spi.h +++ b/HAL/Inc/hal_spi.h @@ -13,6 +13,7 @@ #include #include #include +#include "hal.h" /** * @brief SPI instance identifier definitions @@ -75,34 +76,34 @@ typedef struct { * @brief Initialize SPI hardware * @param instance SPI instance identifier * @param config SPI configuration structure - * @return true if initialization is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_init(hal_spi_instance_t instance, const hal_spi_config_t *config); +hal_ret_t hal_spi_init(hal_spi_instance_t instance, const hal_spi_config_t *config); /** * @brief Deinitialize SPI hardware * @param instance SPI instance identifier - * @return true if deinitialization is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_deinit(hal_spi_instance_t instance); +hal_ret_t hal_spi_deinit(hal_spi_instance_t instance); /** * @brief Transmit data over specific SPI instance * @param instance: SPI instance identifier * @param data: Pointer to data buffer * @param size: Data length in bytes - * @return true if transmission is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_transmit(hal_spi_instance_t instance, const uint8_t *data, uint16_t size); +hal_ret_t hal_spi_transmit(hal_spi_instance_t instance, const uint8_t *data, uint16_t size); /** * @brief Receive data from specific SPI instance * @param instance: SPI instance identifier * @param data: Pointer to data buffer * @param size: Data length to receive in bytes - * @return true if reception is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_receive(hal_spi_instance_t instance, uint8_t *data, uint16_t size); +hal_ret_t hal_spi_receive(hal_spi_instance_t instance, uint8_t *data, uint16_t size); /** * @brief Transmit and receive data simultaneously over specific SPI instance @@ -110,8 +111,8 @@ bool hal_spi_receive(hal_spi_instance_t instance, uint8_t *data, uint16_t size); * @param tx_data: Pointer to transmit data buffer * @param rx_data: Pointer to receive data buffer * @param size: Data length in bytes - * @return true if transmission and reception are successful, false otherwise + * @retval HAL status code */ -bool hal_spi_transmit_receive(hal_spi_instance_t instance, const uint8_t *tx_data, uint8_t *rx_data, uint16_t size); +hal_ret_t hal_spi_transmit_receive(hal_spi_instance_t instance, const uint8_t *tx_data, uint8_t *rx_data, uint16_t size); #endif /* HAL_SPI_H */ diff --git a/HAL/Inc/hal_uart.h b/HAL/Inc/hal_uart.h index 6a4e65d..409efae 100644 --- a/HAL/Inc/hal_uart.h +++ b/HAL/Inc/hal_uart.h @@ -12,6 +12,7 @@ #include #include +#include "hal.h" /** * @brief UART parity definitions @@ -64,44 +65,50 @@ typedef struct { /** * @brief Initialize UART hardware + * @retval HAL status code */ -void hal_uart_init(void); +hal_ret_t hal_uart_init(void); /** * @brief Configure UART parameters for specific instance * @param config: UART configuration structure + * @retval HAL status code */ -void hal_uart_config(const hal_uart_config_t *config); +hal_ret_t hal_uart_config(const hal_uart_config_t *config); /** * @brief Send data over specific UART instance * @param instance: UART instance identifier * @param data: Pointer to data buffer * @param length: Data length in bytes + * @retval HAL status code */ -void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length); +hal_ret_t hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length); /** * @brief Receive data from specific UART instance * @param instance: UART instance identifier * @param data: Pointer to data buffer * @param length: Data length to receive in bytes - * @retval Number of bytes received + * @param received: Pointer to store number of bytes received + * @retval HAL status code */ -size_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length); +hal_ret_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length, size_t *received); /** * @brief Check if specific UART instance is ready to send * @param instance: UART instance identifier - * @retval 1 if ready, 0 otherwise + * @param ready: Pointer to store ready status (1 if ready, 0 otherwise) + * @retval HAL status code */ -uint8_t hal_uart_is_tx_ready(hal_uart_instance_t instance); +hal_ret_t hal_uart_is_tx_ready(hal_uart_instance_t instance, uint8_t *ready); /** * @brief Check if specific UART instance has data to receive * @param instance: UART instance identifier - * @retval 1 if data available, 0 otherwise + * @param ready: Pointer to store ready status (1 if data available, 0 otherwise) + * @retval HAL status code */ -uint8_t hal_uart_is_rx_ready(hal_uart_instance_t instance); +hal_ret_t hal_uart_is_rx_ready(hal_uart_instance_t instance, uint8_t *ready); #endif /* HAL_UART_H */ \ No newline at end of file diff --git a/HAL/Src/hal.c b/HAL/Src/hal.c index d129991..1b31a80 100644 --- a/HAL/Src/hal.c +++ b/HAL/Src/hal.c @@ -8,15 +8,343 @@ /* USER CODE END Header */ #include "hal.h" +#include + +/** + * @brief HAL module registry + */ +static hal_module_config_t hal_module_registry[HAL_MODULE_MAX]; +static uint32_t hal_module_count = 0; + +/** + * @brief HAL error context + */ +static hal_error_context_t hal_error_ctx = { + .callback = NULL, + .error_count = 0, + .enabled = 1 +}; /** * @brief HAL module initialization + * @retval HAL status code */ -void hal_init(void) { +hal_ret_t hal_init(void) { + hal_ret_t status = HAL_RET_OK; + + /* Clear module registry */ + memset(hal_module_registry, 0, sizeof(hal_module_registry)); + hal_module_count = 0; + + /* Initialize error handling system */ + status = hal_error_init(); + if (status != HAL_RET_OK) { + return status; + } + /* Call architecture specific initialization */ -#if HAL_TARGET_ARCH == HAL_ARCH_STM32F4 +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + hal_stm32f1_init(); +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 hal_stm32f4_init(); +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + hal_stm32f7_init(); +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + hal_stm32l4_init(); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + + return HAL_RET_OK; +} + +/** + * @brief Register a HAL module + * @param module_config: Module configuration + * @retval HAL status code + */ +hal_ret_t hal_module_register(const hal_module_config_t* module_config) { + if (module_config == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (module_config->type >= HAL_MODULE_MAX) { + return HAL_RET_INVALID_PARAM; + } + + /* Check if module already registered */ + if (hal_module_registry[module_config->type].ops.init != NULL) { + return HAL_RET_RESOURCE_LOCKED; + } + + /* Register the module */ + memcpy(&hal_module_registry[module_config->type], module_config, sizeof(hal_module_config_t)); + hal_module_count++; + + return HAL_RET_OK; +} + +/** + * @brief Initialize a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @retval HAL status code + */ +hal_ret_t hal_module_init(hal_module_type_t module_type, hal_handle_t* handle) { + if (module_type >= HAL_MODULE_MAX || handle == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (hal_module_registry[module_type].ops.init == NULL) { + return HAL_RET_NOT_SUPPORTED; + } + + /* Initialize handle if not already initialized */ + if (handle->status == HAL_PERIPH_STATE_RESET) { + HAL_HANDLE_INIT(handle); + handle->status = HAL_PERIPH_STATE_READY; + } + + return hal_module_registry[module_type].ops.init(handle); +} + +/** + * @brief Deinitialize a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @retval HAL status code + */ +hal_ret_t hal_module_deinit(hal_module_type_t module_type, hal_handle_t* handle) { + if (module_type >= HAL_MODULE_MAX || handle == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (hal_module_registry[module_type].ops.deinit == NULL) { + return HAL_RET_NOT_SUPPORTED; + } + + hal_ret_t status = hal_module_registry[module_type].ops.deinit(handle); + if (status == HAL_RET_OK) { + handle->status = HAL_PERIPH_STATE_RESET; + } + + return status; +} + +/** + * @brief Configure a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param config: Module configuration data + * @retval HAL status code + */ +hal_ret_t hal_module_configure(hal_module_type_t module_type, hal_handle_t* handle, void* config) { + if (module_type >= HAL_MODULE_MAX || handle == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (hal_module_registry[module_type].ops.configure == NULL) { + return HAL_RET_NOT_SUPPORTED; + } + + return hal_module_registry[module_type].ops.configure(handle, config); +} + +/** + * @brief Control a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param cmd: Control command + * @param param: Control parameter + * @retval HAL status code + */ +hal_ret_t hal_module_control(hal_module_type_t module_type, hal_handle_t* handle, uint32_t cmd, void* param) { + if (module_type >= HAL_MODULE_MAX || handle == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (hal_module_registry[module_type].ops.control == NULL) { + return HAL_RET_NOT_SUPPORTED; + } + + return hal_module_registry[module_type].ops.control(handle, cmd, param); +} + +/** + * @brief Get status of a specific HAL module + * @param module_type: Module type + * @param handle: HAL handle for the module + * @param status: Pointer to store module status + * @retval HAL status code + */ +hal_ret_t hal_module_get_status(hal_module_type_t module_type, hal_handle_t* handle, uint32_t* status) { + if (module_type >= HAL_MODULE_MAX || handle == NULL || status == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (hal_module_registry[module_type].ops.get_status == NULL) { + return HAL_RET_NOT_SUPPORTED; + } + + return hal_module_registry[module_type].ops.get_status(handle, status); +} + +/** + * @brief Get default configuration for a module + * @param module_type: Module type + * @return Pointer to default configuration, or NULL if not available + */ +void* hal_module_get_default_config(hal_module_type_t module_type) { + if (module_type >= HAL_MODULE_MAX) { + return NULL; + } + + return hal_module_registry[module_type].default_config; +} + +/** + * @brief Get HAL version information + * @param major: Pointer to store major version + * @param minor: Pointer to store minor version + * @param patch: Pointer to store patch version + * @retval HAL status code + */ +hal_ret_t hal_get_version(uint8_t* major, uint8_t* minor, uint8_t* patch) { + if (major == NULL || minor == NULL || patch == NULL) { + return HAL_RET_INVALID_PARAM; + } + + *major = HAL_VERSION_MAJOR; + *minor = HAL_VERSION_MINOR; + *patch = HAL_VERSION_PATCH; + + return HAL_RET_OK; +} + +/** + * @brief Get HAL version string + * @retval Version string + */ +const char* hal_get_version_string(void) { + return HAL_VERSION_STRING; +} + +/** + * @brief Get HAL module count + * @retval Number of registered HAL modules + */ +uint32_t hal_get_module_count(void) { + return hal_module_count; +} + +/** + * @brief Get HAL module configuration + * @param module_type: Module type + * @retval Pointer to module configuration, or NULL if not found + */ +const hal_module_config_t* hal_get_module_config(hal_module_type_t module_type) { + if (module_type >= HAL_MODULE_MAX) { + return NULL; + } + + if (hal_module_registry[module_type].ops.init == NULL) { + return NULL; + } + + return &hal_module_registry[module_type]; +} + +/** + * @brief Initialize HAL error handling system + * @retval HAL status code + */ +hal_ret_t hal_error_init(void) { + memset(&hal_error_ctx.last_error, 0, sizeof(hal_error_t)); + hal_error_ctx.error_count = 0; + hal_error_ctx.enabled = 1; + hal_error_ctx.callback = NULL; + return HAL_RET_OK; +} + +/** + * @brief Deinitialize HAL error handling system + * @retval HAL status code + */ +hal_ret_t hal_error_deinit(void) { + hal_error_ctx.enabled = 0; + hal_error_ctx.callback = NULL; + return HAL_RET_OK; +} + +/** + * @brief Register an error callback function + * @param callback: Error callback function + * @retval HAL status code + */ +hal_ret_t hal_error_register_callback(hal_error_callback_t callback) { + hal_error_ctx.callback = callback; + return HAL_RET_OK; +} + +/** + * @brief Record an error + * @param error: Pointer to error information + * @retval HAL status code + */ +hal_ret_t hal_error_record(const hal_error_t* error) { + if (error == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (!hal_error_ctx.enabled) { + return HAL_RET_OK; + } + + /* Copy error information */ + memcpy(&hal_error_ctx.last_error, error, sizeof(hal_error_t)); + hal_error_ctx.error_count++; + + /* Call error callback if registered */ + if (hal_error_ctx.callback != NULL) { + hal_error_ctx.callback(error); + } + + return HAL_RET_OK; +} + +/** + * @brief Get last error information + * @retval Pointer to last error information + */ +const hal_error_t* hal_error_get_last(void) { + return &hal_error_ctx.last_error; +} + +/** + * @brief Get total error count + * @retval Total error count + */ +uint32_t hal_error_get_count(void) { + return hal_error_ctx.error_count; +} + +/** + * @brief Clear error information + * @retval HAL status code + */ +hal_ret_t hal_error_clear(void) { + memset(&hal_error_ctx.last_error, 0, sizeof(hal_error_t)); + hal_error_ctx.error_count = 0; + return HAL_RET_OK; +} + +/** + * @brief Enable/disable error logging + * @param enable: Enable flag (1 to enable, 0 to disable) + * @retval HAL status code + */ +hal_ret_t hal_error_enable(uint8_t enable) { + hal_error_ctx.enabled = enable; + return HAL_RET_OK; } diff --git a/HAL/Src/hal_adc.c b/HAL/Src/hal_adc.c new file mode 100644 index 0000000..0ec947f --- /dev/null +++ b/HAL/Src/hal_adc.c @@ -0,0 +1,313 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_adc.c + * @brief : ADC hardware abstraction layer source file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#include "hal.h" +#include "hal_adc.h" + +/** + * @brief Initialize ADC hardware + * @param config: ADC configuration structure + * @retval HAL status code + */ +hal_ret_t hal_adc_init(const hal_adc_config_t *config) { + if (config == NULL) { + return HAL_INVALID_PARAM; + } + + if (config->instance >= HAL_ADC_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC initialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC initialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Deinitialize ADC hardware + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_deinit(hal_adc_instance_t instance) { + if (instance >= HAL_ADC_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC deinitialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC deinitialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Start ADC conversion + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_start(hal_adc_instance_t instance) { + if (instance >= HAL_ADC_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC start implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC start */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Stop ADC conversion + * @param instance: ADC instance identifier + * @retval HAL status code + */ +hal_ret_t hal_adc_stop(hal_adc_instance_t instance) { + if (instance >= HAL_ADC_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC stop implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC stop */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Get ADC conversion value + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @param value: Pointer to store conversion value + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_adc_get_value(hal_adc_instance_t instance, hal_adc_channel_t channel, uint16_t *value, uint32_t timeout) { + if (value == NULL) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_ADC_INSTANCE_MAX || channel >= HAL_ADC_CHANNEL_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC get value implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC get value */ + *value = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC get value */ + *value = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC get value */ + *value = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC get value */ + *value = 0; + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Get multiple ADC conversion values + * @param instance: ADC instance identifier + * @param values: Pointer to store conversion values + * @param length: Number of values to get + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_ret_t hal_adc_get_values(hal_adc_instance_t instance, uint16_t *values, uint8_t length, uint32_t timeout) { + if (values == NULL || length == 0) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_ADC_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC get values implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC get values */ + for (uint8_t i = 0; i < length; i++) { + values[i] = 0; + } + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC get values */ + for (uint8_t i = 0; i < length; i++) { + values[i] = 0; + } + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC get values */ + for (uint8_t i = 0; i < length; i++) { + values[i] = 0; + } + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC get values */ + for (uint8_t i = 0; i < length; i++) { + values[i] = 0; + } + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Configure ADC channel + * @param instance: ADC instance identifier + * @param config: ADC channel configuration structure + * @retval HAL status code + */ +hal_ret_t hal_adc_configure_channel(hal_adc_instance_t instance, const hal_adc_channel_config_t *config) { + if (config == NULL) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_ADC_INSTANCE_MAX || config->channel >= HAL_ADC_CHANNEL_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC channel configuration implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC channel configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC channel configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC channel configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC channel configuration */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Enable ADC channel + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @retval HAL status code + */ +hal_ret_t hal_adc_enable_channel(hal_adc_instance_t instance, hal_adc_channel_t channel) { + if (instance >= HAL_ADC_INSTANCE_MAX || channel >= HAL_ADC_CHANNEL_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC channel enable implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC channel enable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC channel enable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC channel enable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC channel enable */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Disable ADC channel + * @param instance: ADC instance identifier + * @param channel: ADC channel + * @retval HAL status code + */ +hal_ret_t hal_adc_disable_channel(hal_adc_instance_t instance, hal_adc_channel_t channel) { + if (instance >= HAL_ADC_INSTANCE_MAX || channel >= HAL_ADC_CHANNEL_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific ADC channel disable implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 ADC channel disable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 ADC channel disable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 ADC channel disable */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 ADC channel disable */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} \ No newline at end of file diff --git a/HAL/Src/hal_can.c b/HAL/Src/hal_can.c new file mode 100644 index 0000000..e3f3b64 --- /dev/null +++ b/HAL/Src/hal_can.c @@ -0,0 +1,275 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_can.c + * @brief : CAN hardware abstraction layer source file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#include "hal.h" +#include "hal_can.h" + +/** + * @brief Initialize CAN hardware + * @param config: CAN configuration structure + * @retval HAL status code + */ +hal_status_t hal_can_init(const hal_can_config_t *config) { + if (config == NULL) { + return HAL_INVALID_PARAM; + } + + if (config->instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN initialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN initialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Deinitialize CAN hardware + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_status_t hal_can_deinit(hal_can_instance_t instance) { + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN deinitialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN deinitialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Start CAN peripheral + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_status_t hal_can_start(hal_can_instance_t instance) { + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN start implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN start */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN start */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Stop CAN peripheral + * @param instance: CAN instance identifier + * @retval HAL status code + */ +hal_status_t hal_can_stop(hal_can_instance_t instance) { + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN stop implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN stop */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN stop */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Send CAN message + * @param instance: CAN instance identifier + * @param message: Pointer to CAN message structure + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_can_send(hal_can_instance_t instance, const hal_can_message_t *message, uint32_t timeout) { + if (message == NULL) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN send implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN send */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN send */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN send */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN send */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Receive CAN message + * @param instance: CAN instance identifier + * @param fifo: FIFO number (0 or 1) + * @param message: Pointer to CAN message structure + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_can_receive(hal_can_instance_t instance, uint8_t fifo, hal_can_message_t *message, uint32_t timeout) { + if (message == NULL || fifo > 1) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN receive implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN receive */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Get CAN receive FIFO message pending count + * @param instance: CAN instance identifier + * @param fifo: FIFO number (0 or 1) + * @param count: Pointer to store pending message count + * @retval HAL status code + */ +hal_status_t hal_can_get_pending_count(hal_can_instance_t instance, uint8_t fifo, uint8_t *count) { + if (count == NULL || fifo > 1) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN get pending count implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN get pending count */ + *count = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN get pending count */ + *count = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN get pending count */ + *count = 0; + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN get pending count */ + *count = 0; + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Configure CAN filter + * @param instance: CAN instance identifier + * @param filter_config: Pointer to CAN filter configuration structure + * @retval HAL status code + */ +hal_status_t hal_can_configure_filter(hal_can_instance_t instance, const hal_can_filter_config_t *filter_config) { + if (filter_config == NULL) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_CAN_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific CAN filter configuration implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 CAN filter configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 CAN filter configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 CAN filter configuration */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 CAN filter configuration */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} \ No newline at end of file diff --git a/HAL/Src/hal_gpio.c b/HAL/Src/hal_gpio.c index 3ffaa23..d36ec97 100644 --- a/HAL/Src/hal_gpio.c +++ b/HAL/Src/hal_gpio.c @@ -9,11 +9,13 @@ #include "hal.h" #include "hal_gpio.h" +#include /** * @brief Initialize GPIO hardware + * @retval HAL status code */ -void hal_gpio_init(void) { +hal_ret_t hal_gpio_init(void) { /* Call architecture specific GPIO initialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_gpio_init(); @@ -25,14 +27,21 @@ void hal_gpio_init(void) { hal_stm32l4_gpio_init(); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** * @brief Configure GPIO pin * @param config: GPIO configuration structure + * @retval HAL status code */ -void hal_gpio_configure_pin(const hal_gpio_config_t *config) { +hal_ret_t hal_gpio_configure_pin(const hal_gpio_config_t *config) { + if (config == NULL) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific GPIO configuration */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_gpio_configure_pin(config); @@ -44,7 +53,9 @@ void hal_gpio_configure_pin(const hal_gpio_config_t *config) { hal_stm32l4_gpio_configure_pin(config); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** @@ -52,8 +63,14 @@ void hal_gpio_configure_pin(const hal_gpio_config_t *config) { * @param port: GPIO port * @param pin: GPIO pin * @param state: GPIO pin state + * @retval HAL status code */ -void hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_state_t state) { +hal_ret_t hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_state_t state) { + /* Validate parameters */ + if (port >= HAL_GPIO_PORT_K + 1 || pin >= HAL_GPIO_PIN_ALL) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific GPIO write implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_gpio_write_pin(port, pin, state); @@ -65,15 +82,23 @@ void hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_s hal_stm32l4_gpio_write_pin(port, pin, state); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** * @brief Toggle GPIO pin state * @param port: GPIO port * @param pin: GPIO pin + * @retval HAL status code */ -void hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin) { +hal_ret_t hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin) { + /* Validate parameters */ + if (port >= HAL_GPIO_PORT_K + 1 || pin >= HAL_GPIO_PIN_ALL) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific GPIO toggle implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_gpio_toggle_pin(port, pin); @@ -85,7 +110,9 @@ void hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin) { hal_stm32l4_gpio_toggle_pin(port, pin); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** diff --git a/HAL/Src/hal_i2c.c b/HAL/Src/hal_i2c.c new file mode 100644 index 0000000..70c191b --- /dev/null +++ b/HAL/Src/hal_i2c.c @@ -0,0 +1,218 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : hal_i2c.c + * @brief : I2C hardware abstraction layer source file + ****************************************************************************** + */ +/* USER CODE END Header */ + +#include "hal.h" +#include "hal_i2c.h" + +/** + * @brief Initialize I2C hardware + * @param config: I2C configuration structure + * @retval HAL status code + */ +hal_status_t hal_i2c_init(const hal_i2c_config_t *config) { + if (config == NULL) { + return HAL_INVALID_PARAM; + } + + if (config->instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C initialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C initialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C initialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Deinitialize I2C hardware + * @param instance: I2C instance identifier + * @retval HAL status code + */ +hal_status_t hal_i2c_deinit(hal_i2c_instance_t instance) { + if (instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C deinitialization */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C deinitialization */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C deinitialization */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Transmit data to I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param data: Pointer to data buffer + * @param length: Data length in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_i2c_master_transmit(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *data, uint16_t length, uint32_t timeout) { + if (data == NULL || length == 0) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C transmit implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C transmit */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C transmit */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C transmit */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C transmit */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Receive data from I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param data: Pointer to data buffer + * @param length: Data length to receive in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_i2c_master_receive(hal_i2c_instance_t instance, uint16_t dev_address, uint8_t *data, uint16_t length, uint32_t timeout) { + if (data == NULL || length == 0) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C receive implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C receive */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Transmit and receive data from I2C slave + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param tx_data: Pointer to transmit data buffer + * @param tx_length: Transmit data length in bytes + * @param rx_data: Pointer to receive data buffer + * @param rx_length: Receive data length in bytes + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_i2c_master_transmit_receive(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *tx_data, uint16_t tx_length, uint8_t *rx_data, uint16_t rx_length, uint32_t timeout) { + if (tx_data == NULL || rx_data == NULL || tx_length == 0 || rx_length == 0) { + return HAL_INVALID_PARAM; + } + + if (instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C transmit and receive implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C transmit and receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C transmit and receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C transmit and receive */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C transmit and receive */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} + +/** + * @brief Check if I2C bus is ready + * @param instance: I2C instance identifier + * @param dev_address: Slave device address + * @param trials: Number of trials + * @param timeout: Timeout in milliseconds + * @retval HAL status code + */ +hal_status_t hal_i2c_is_device_ready(hal_i2c_instance_t instance, uint16_t dev_address, uint32_t trials, uint32_t timeout) { + if (instance >= HAL_I2C_INSTANCE_MAX) { + return HAL_INVALID_PARAM; + } + + /* Call architecture specific I2C device ready check implementation */ +#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 + /* TODO: Implement STM32F1 I2C device ready check */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 + /* TODO: Implement STM32F4 I2C device ready check */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 + /* TODO: Implement STM32F7 I2C device ready check */ + return HAL_OK; +#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 + /* TODO: Implement STM32L4 I2C device ready check */ + return HAL_OK; +#else +#error "Unsupported HAL architecture" + return HAL_ERROR; +#endif +} \ No newline at end of file diff --git a/HAL/Src/hal_spi.c b/HAL/Src/hal_spi.c index 50229c9..51e43b6 100644 --- a/HAL/Src/hal_spi.c +++ b/HAL/Src/hal_spi.c @@ -15,42 +15,54 @@ * @brief Initialize SPI hardware * @param instance SPI instance identifier * @param config SPI configuration structure - * @return true if initialization is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_init(hal_spi_instance_t instance, const hal_spi_config_t *config) { +hal_ret_t hal_spi_init(hal_spi_instance_t instance, const hal_spi_config_t *config) { + if (config == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_SPI_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific SPI initialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_spi_init(instance, config); + return hal_stm32f1_spi_init(instance, config) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_spi_init(instance, config); + return hal_stm32f4_spi_init(instance, config) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_spi_init(instance, config); + return hal_stm32f7_spi_init(instance, config) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_spi_init(instance, config); + return hal_stm32l4_spi_init(instance, config) ? HAL_OK : HAL_ERROR; #else #error "Unsupported HAL architecture" - return false; + return HAL_RET_ERROR; #endif } /** * @brief Deinitialize SPI hardware * @param instance SPI instance identifier - * @return true if deinitialization is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_deinit(hal_spi_instance_t instance) { +hal_ret_t hal_spi_deinit(hal_spi_instance_t instance) { + if (instance >= HAL_SPI_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific SPI deinitialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_spi_deinit(instance); + return hal_stm32f1_spi_deinit(instance) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_spi_deinit(instance); + return hal_stm32f4_spi_deinit(instance) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_spi_deinit(instance); + return hal_stm32f7_spi_deinit(instance) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_spi_deinit(instance); + return hal_stm32l4_spi_deinit(instance) ? HAL_OK : HAL_ERROR; #else #error "Unsupported HAL architecture" - return false; + return HAL_RET_ERROR; #endif } @@ -59,21 +71,29 @@ bool hal_spi_deinit(hal_spi_instance_t instance) { * @param instance SPI instance identifier * @param p_data Pointer to data buffer to transmit * @param size Size of data to transmit - * @return true if transmission is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_transmit(hal_spi_instance_t instance, const uint8_t *p_data, uint16_t size) { +hal_ret_t hal_spi_transmit(hal_spi_instance_t instance, const uint8_t *p_data, uint16_t size) { + if (p_data == NULL || size == 0) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_SPI_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific SPI transmit implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_spi_transmit(instance, p_data, size); + return hal_stm32f1_spi_transmit(instance, p_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_spi_transmit(instance, p_data, size); + return hal_stm32f4_spi_transmit(instance, p_data, size) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_spi_transmit(instance, p_data, size); + return hal_stm32f7_spi_transmit(instance, p_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_spi_transmit(instance, p_data, size); + return hal_stm32l4_spi_transmit(instance, p_data, size) ? HAL_OK : HAL_ERROR; #else #error "Unsupported HAL architecture" - return false; + return HAL_RET_ERROR; #endif } @@ -82,21 +102,29 @@ bool hal_spi_transmit(hal_spi_instance_t instance, const uint8_t *p_data, uint16 * @param instance SPI instance identifier * @param p_data Pointer to data buffer to receive * @param size Size of data to receive - * @return true if reception is successful, false otherwise + * @retval HAL status code */ -bool hal_spi_receive(hal_spi_instance_t instance, uint8_t *p_data, uint16_t size) { +hal_ret_t hal_spi_receive(hal_spi_instance_t instance, uint8_t *p_data, uint16_t size) { + if (p_data == NULL || size == 0) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_SPI_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific SPI receive implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_spi_receive(instance, p_data, size); + return hal_stm32f1_spi_receive(instance, p_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_spi_receive(instance, p_data, size); + return hal_stm32f4_spi_receive(instance, p_data, size) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_spi_receive(instance, p_data, size); + return hal_stm32f7_spi_receive(instance, p_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_spi_receive(instance, p_data, size); + return hal_stm32l4_spi_receive(instance, p_data, size) ? HAL_OK : HAL_ERROR; #else #error "Unsupported HAL architecture" - return false; + return HAL_RET_ERROR; #endif } @@ -106,20 +134,28 @@ bool hal_spi_receive(hal_spi_instance_t instance, uint8_t *p_data, uint16_t size * @param p_tx_data Pointer to data buffer to transmit * @param p_rx_data Pointer to data buffer to receive * @param size Size of data to transmit/receive - * @return true if transmission and reception are successful, false otherwise + * @retval HAL status code */ -bool hal_spi_transmit_receive(hal_spi_instance_t instance, const uint8_t *p_tx_data, uint8_t *p_rx_data, uint16_t size) { +hal_ret_t hal_spi_transmit_receive(hal_spi_instance_t instance, const uint8_t *p_tx_data, uint8_t *p_rx_data, uint16_t size) { + if (p_tx_data == NULL || p_rx_data == NULL || size == 0) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_SPI_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific SPI transmit and receive implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_spi_transmit_receive(instance, p_tx_data, p_rx_data, size); + return hal_stm32f1_spi_transmit_receive(instance, p_tx_data, p_rx_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_spi_transmit_receive(instance, p_tx_data, p_rx_data, size); + return hal_stm32f4_spi_transmit_receive(instance, p_tx_data, p_rx_data, size) ? HAL_RET_OK : HAL_RET_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_spi_transmit_receive(instance, p_tx_data, p_rx_data, size); + return hal_stm32f7_spi_transmit_receive(instance, p_tx_data, p_rx_data, size) ? HAL_OK : HAL_ERROR; #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_spi_transmit_receive(instance, p_tx_data, p_rx_data, size); + return hal_stm32l4_spi_transmit_receive(instance, p_tx_data, p_rx_data, size) ? HAL_OK : HAL_ERROR; #else #error "Unsupported HAL architecture" - return false; + return HAL_RET_ERROR; #endif } \ No newline at end of file diff --git a/HAL/Src/hal_uart.c b/HAL/Src/hal_uart.c index b6a390d..6a25348 100644 --- a/HAL/Src/hal_uart.c +++ b/HAL/Src/hal_uart.c @@ -12,8 +12,9 @@ /** * @brief Initialize UART hardware + * @retval HAL status code */ -void hal_uart_init(void) { +hal_ret_t hal_uart_init(void) { /* Call architecture specific UART initialization */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_uart_init(); @@ -25,14 +26,25 @@ void hal_uart_init(void) { hal_stm32l4_uart_init(); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** * @brief Configure UART parameters for specific instance * @param config: UART configuration structure + * @retval HAL status code */ -void hal_uart_config(const hal_uart_config_t *config) { +hal_ret_t hal_uart_config(const hal_uart_config_t *config) { + if (config == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (config->instance >= HAL_UART_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific UART configuration */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_uart_config(config); @@ -44,7 +56,9 @@ void hal_uart_config(const hal_uart_config_t *config) { hal_stm32l4_uart_config(config); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** @@ -52,8 +66,17 @@ void hal_uart_config(const hal_uart_config_t *config) { * @param instance: UART instance identifier * @param data: Pointer to data buffer * @param length: Data length in bytes + * @retval HAL status code */ -void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length) { +hal_ret_t hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length) { + if (data == NULL || length == 0) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_UART_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific UART send implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 hal_stm32f1_uart_send(instance, data, length); @@ -65,7 +88,9 @@ void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t len hal_stm32l4_uart_send(instance, data, length); #else #error "Unsupported HAL architecture" + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** @@ -73,62 +98,92 @@ void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t len * @param instance: UART instance identifier * @param data: Pointer to data buffer * @param length: Data length to receive in bytes - * @retval Number of bytes received + * @param received: Pointer to store number of bytes received + * @retval HAL status code */ -size_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length) { +hal_ret_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length, size_t *received) { + if (data == NULL || received == NULL || length == 0) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_UART_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific UART receive implementation */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_uart_receive(instance, data, length); + *received = hal_stm32f1_uart_receive(instance, data, length); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_uart_receive(instance, data, length); + *received = hal_stm32f4_uart_receive(instance, data, length); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_uart_receive(instance, data, length); + *received = hal_stm32f7_uart_receive(instance, data, length); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_uart_receive(instance, data, length); + *received = hal_stm32l4_uart_receive(instance, data, length); #else #error "Unsupported HAL architecture" - return 0; + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** * @brief Check if specific UART instance is ready to send * @param instance: UART instance identifier - * @retval 1 if ready, 0 otherwise + * @param ready: Pointer to store ready status (1 if ready, 0 otherwise) + * @retval HAL status code */ -uint8_t hal_uart_is_tx_ready(hal_uart_instance_t instance) { +hal_ret_t hal_uart_is_tx_ready(hal_uart_instance_t instance, uint8_t *ready) { + if (ready == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_UART_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific UART TX ready check */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_uart_is_tx_ready(instance); + *ready = hal_stm32f1_uart_is_tx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_uart_is_tx_ready(instance); + *ready = hal_stm32f4_uart_is_tx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_uart_is_tx_ready(instance); + *ready = hal_stm32f7_uart_is_tx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_uart_is_tx_ready(instance); + *ready = hal_stm32l4_uart_is_tx_ready(instance); #else #error "Unsupported HAL architecture" - return 0; + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } /** * @brief Check if specific UART instance has data to receive * @param instance: UART instance identifier - * @retval 1 if data available, 0 otherwise + * @param ready: Pointer to store ready status (1 if data available, 0 otherwise) + * @retval HAL status code */ -uint8_t hal_uart_is_rx_ready(hal_uart_instance_t instance) { +hal_ret_t hal_uart_is_rx_ready(hal_uart_instance_t instance, uint8_t *ready) { + if (ready == NULL) { + return HAL_RET_INVALID_PARAM; + } + + if (instance >= HAL_UART_INSTANCE_MAX) { + return HAL_RET_INVALID_PARAM; + } + /* Call architecture specific UART RX ready check */ #if HAL_TARGET_ARCH == HAL_ARCH_STM32F1 - return hal_stm32f1_uart_is_rx_ready(instance); + *ready = hal_stm32f1_uart_is_rx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4 - return hal_stm32f4_uart_is_rx_ready(instance); + *ready = hal_stm32f4_uart_is_rx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7 - return hal_stm32f7_uart_is_rx_ready(instance); + *ready = hal_stm32f7_uart_is_rx_ready(instance); #elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4 - return hal_stm32l4_uart_is_rx_ready(instance); + *ready = hal_stm32l4_uart_is_rx_ready(instance); #else #error "Unsupported HAL architecture" - return 0; + return HAL_RET_ERROR; #endif + return HAL_RET_OK; } \ No newline at end of file diff --git a/Modules/uart/src/uart.c b/Modules/uart/src/uart.c index b296843..8440313 100644 --- a/Modules/uart/src/uart.c +++ b/Modules/uart/src/uart.c @@ -85,7 +85,9 @@ size_t uart_receive(uint8_t *data, size_t length) { return 0; } - return hal_uart_receive(uart.config.instance, data, length); + size_t received = 0; + hal_uart_receive(uart.config.instance, data, length, &received); + return received; } /** @@ -93,7 +95,9 @@ size_t uart_receive(uint8_t *data, size_t length) { * @retval 1 if ready, 0 otherwise */ uint8_t uart_is_tx_ready(void) { - return hal_uart_is_tx_ready(uart.config.instance); + uint8_t ready = 0; + hal_uart_is_tx_ready(uart.config.instance, &ready); + return ready; } /** @@ -101,5 +105,7 @@ uint8_t uart_is_tx_ready(void) { * @retval 1 if data available, 0 otherwise */ uint8_t uart_is_rx_ready(void) { - return hal_uart_is_rx_ready(uart.config.instance); + uint8_t ready = 0; + hal_uart_is_rx_ready(uart.config.instance, &ready); + return ready; } \ No newline at end of file diff --git a/build/Debug/.ninja_deps b/build/Debug/.ninja_deps index 16adbd31ad66e08ab46ea5bf9feff8a92e2e713e..514aa3b305827f6f8b4f13315667ec67ca7aad4b 100644 GIT binary patch delta 2029 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

j%&t-sIR-X71 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 delta 309589 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 b;*&H=qo&?ke8Ci diff --git a/build/Debug/stm32f407vet6_cmake.elf b/build/Debug/stm32f407vet6_cmake.elf index 7e509dbf4762d7d0e022f31cccbb89952418ecca..36ef953e8eadb22de1e4e51e8e4e20c5d73c856f 100644 GIT binary patch delta 89346 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 Y*KuV}jJOSj#LoX6S7_uc|K!jA1;zDb!2kdN diff --git a/build/Debug/stm32f407vet6_cmake.map b/build/Debug/stm32f407vet6_cmake.map index 365f102..10a8fde 100644 --- a/build/Debug/stm32f407vet6_cmake.map +++ b/build/Debug/stm32f407vet6_cmake.map @@ -11,8 +11,6 @@ d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thu BSP/libbsp.a(bsp_init.c.obj) CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj (bsp_init) BSP/libbsp.a(stm32f407vet6_board.c.obj) BSP/libbsp.a(bsp_init.c.obj) (bsp_board_get_name) -BSP/libbsp.a(bsp_board_manager.c.obj) - BSP/libbsp.a(bsp_init.c.obj) (bsp_board_get_config) BSP/libbsp.a(bsp_w25qxx.c.obj) CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj (bsp_w25qxx_init) BSP/libbsp.a(bsp_key.c.obj) CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj (bsp_key_init) @@ -50,10 +48,10 @@ d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvm d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) (__aeabi_ldiv0) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj (__errno) +d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + HAL/libhal.a(hal.c.obj) (memcpy) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) Middlewares/logging/liblogging.a(logging.c.obj) (snprintf) -d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) - BSP/libbsp.a(bsp_board_manager.c.obj) (strcmp) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strlen.o) Modules/uart/libuart.a(uart.c.obj) (strlen) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) @@ -64,8 +62,6 @@ d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thu d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) (_printf_i) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memchr.o) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) (memchr) -d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) - d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) (memcpy) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) (memmove) d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) @@ -2061,6 +2057,9 @@ Discarded input sections .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .group 0x00000000 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .text 0x00000000 0x0 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .data 0x00000000 0x0 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .bss 0x00000000 0x0 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj @@ -2456,45 +2455,13 @@ Discarded input sections .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_init.c.obj) .text 0x00000000 0x0 BSP/libbsp.a(bsp_init.c.obj) .data 0x00000000 0x0 BSP/libbsp.a(bsp_init.c.obj) .bss 0x00000000 0x0 BSP/libbsp.a(bsp_init.c.obj) .text.bsp_gpio_init - 0x00000000 0x84 BSP/libbsp.a(bsp_init.c.obj) + 0x00000000 0x300 BSP/libbsp.a(bsp_init.c.obj) .text.bsp_get_board_name 0x00000000 0xe BSP/libbsp.a(bsp_init.c.obj) - .text.bsp_get_board_config - 0x00000000 0xe BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0xa78 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x8e BSP/libbsp.a(bsp_init.c.obj) @@ -2502,8 +2469,10 @@ Discarded input sections .debug_macro 0x00000000 0x103 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x6a BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x1df BSP/libbsp.a(bsp_init.c.obj) + .debug_macro 0x00000000 0x78 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x174 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_init.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x64 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x1e BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_init.c.obj) @@ -2516,36 +2485,34 @@ Discarded input sections .debug_macro 0x00000000 0x182 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x341 BSP/libbsp.a(bsp_init.c.obj) .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x2a1 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x2e BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x2f BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x1c BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0xfb BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x1011 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x11f BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x15ea5 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x6d BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x3693 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x980 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x9e9 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x115 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x13e BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0xa5 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x174 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x287 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x5f BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x236 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x12c BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x21e BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x2e BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x127 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x7e BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x89 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x225 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x2aa BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x217 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00000000 0x12d BSP/libbsp.a(bsp_init.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) .group 0x00000000 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) @@ -2570,68 +2537,38 @@ Discarded input sections .debug_macro 0x00000000 0x103 BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_macro 0x00000000 0x6a BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_macro 0x00000000 0x1df BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x78 BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_macro 0x00000000 0x174 BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_macro 0x00000000 0x22 BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_macro 0x00000000 0x5e BSP/libbsp.a(stm32f407vet6_board.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .group 0x00000000 0xc BSP/libbsp.a(bsp_board_manager.c.obj) - .text 0x00000000 0x0 BSP/libbsp.a(bsp_board_manager.c.obj) - .data 0x00000000 0x0 BSP/libbsp.a(bsp_board_manager.c.obj) - .bss 0x00000000 0x0 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_get_count - 0x00000000 0x10 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_get_by_index - 0x00000000 0x30 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_get_by_name - 0x00000000 0x60 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_set_by_index - 0x00000000 0x34 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_set_by_name - 0x00000000 0x68 BSP/libbsp.a(bsp_board_manager.c.obj) - .text.bsp_board_get_current_index - 0x00000000 0x18 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0xa78 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x8e BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x51 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x103 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x6a BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x1df BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x64 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x1e BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x34 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x174 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x16 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x43 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x34 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x58 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x182 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x341 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_board_manager.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x64 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x1e BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x35 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x34 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x35 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x341 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x43 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x34 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x58 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x182 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x52 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x22 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x52 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0xd5 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x3d BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x16f BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x49 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x00000000 0x22 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_w25qxx.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_w25qxx.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_w25qxx.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_w25qxx.c.obj) @@ -2668,6 +2605,7 @@ Discarded input sections .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_w25qxx.c.obj) .debug_macro 0x00000000 0x174 BSP/libbsp.a(bsp_w25qxx.c.obj) .debug_macro 0x00000000 0xee BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_macro 0x00000000 0x78 BSP/libbsp.a(bsp_w25qxx.c.obj) .debug_macro 0x00000000 0x16 BSP/libbsp.a(bsp_w25qxx.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) @@ -2692,6 +2630,23 @@ Discarded input sections .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) + .group 0x00000000 0xc BSP/libbsp.a(bsp_key.c.obj) .text 0x00000000 0x0 BSP/libbsp.a(bsp_key.c.obj) .data 0x00000000 0x0 BSP/libbsp.a(bsp_key.c.obj) .bss 0x00000000 0x0 BSP/libbsp.a(bsp_key.c.obj) @@ -2708,20 +2663,34 @@ Discarded input sections .debug_macro 0x00000000 0x103 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x6a BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x1df BSP/libbsp.a(bsp_key.c.obj) - .debug_macro 0x00000000 0x174 BSP/libbsp.a(bsp_key.c.obj) - .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x64 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x1e BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x34 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x16 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x341 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x16 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x43 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x34 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x58 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x182 BSP/libbsp.a(bsp_key.c.obj) - .debug_macro 0x00000000 0x341 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x52 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x10 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x52 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0xd5 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x3d BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x16 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x16f BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x78 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x1c BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00000000 0x22 BSP/libbsp.a(bsp_key.c.obj) .debug_macro 0x00000000 0x35 BSP/libbsp.a(bsp_key.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) @@ -2745,98 +2714,67 @@ Discarded input sections .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal.c.obj) .text 0x00000000 0x0 HAL/libhal.a(hal.c.obj) .data 0x00000000 0x0 HAL/libhal.a(hal.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal.c.obj) + .text.hal_module_register + 0x00000000 0x74 HAL/libhal.a(hal.c.obj) + .text.hal_module_init + 0x00000000 0x80 HAL/libhal.a(hal.c.obj) + .text.hal_module_deinit + 0x00000000 0x6c HAL/libhal.a(hal.c.obj) + .text.hal_module_configure + 0x00000000 0x60 HAL/libhal.a(hal.c.obj) + .text.hal_module_control + 0x00000000 0x64 HAL/libhal.a(hal.c.obj) + .text.hal_module_get_status + 0x00000000 0x64 HAL/libhal.a(hal.c.obj) + .text.hal_module_get_default_config + 0x00000000 0x38 HAL/libhal.a(hal.c.obj) + .text.hal_get_version + 0x00000000 0x42 HAL/libhal.a(hal.c.obj) + .rodata 0x00000000 0x6 HAL/libhal.a(hal.c.obj) + .text.hal_get_version_string + 0x00000000 0x14 HAL/libhal.a(hal.c.obj) + .text.hal_get_module_count + 0x00000000 0x18 HAL/libhal.a(hal.c.obj) + .text.hal_get_module_config + 0x00000000 0x4c HAL/libhal.a(hal.c.obj) + .text.hal_error_deinit + 0x00000000 0x24 HAL/libhal.a(hal.c.obj) + .text.hal_error_register_callback + 0x00000000 0x20 HAL/libhal.a(hal.c.obj) + .text.hal_error_record + 0x00000000 0x58 HAL/libhal.a(hal.c.obj) + .text.hal_error_get_last + 0x00000000 0x14 HAL/libhal.a(hal.c.obj) + .text.hal_error_get_count + 0x00000000 0x18 HAL/libhal.a(hal.c.obj) + .text.hal_error_clear + 0x00000000 0x24 HAL/libhal.a(hal.c.obj) + .text.hal_error_enable + 0x00000000 0x24 HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x64 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x1e HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x35 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x34 HAL/libhal.a(hal.c.obj) .debug_macro 0x00000000 0x174 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) + .debug_macro 0x00000000 0x16 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x43 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x34 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x10 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x58 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x182 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x341 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x10 HAL/libhal.a(hal.c.obj) + .debug_macro 0x00000000 0x35 HAL/libhal.a(hal.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) @@ -2850,79 +2788,16 @@ Discarded input sections .data 0x00000000 0x0 HAL/libhal.a(hal_gpio.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal_gpio.c.obj) .text.hal_gpio_init - 0x00000000 0xc HAL/libhal.a(hal_gpio.c.obj) + 0x00000000 0xe HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_gpio.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_gpio.c.obj) .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_gpio.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_delay.c.obj) @@ -2937,76 +2812,13 @@ Discarded input sections .text.hal_delay_us 0x00000000 0x16 HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_delay.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_delay.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_delay.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_uart.c.obj) @@ -3020,82 +2832,20 @@ Discarded input sections .data 0x00000000 0x0 HAL/libhal.a(hal_uart.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal_uart.c.obj) .text.hal_uart_receive - 0x00000000 0x24 HAL/libhal.a(hal_uart.c.obj) + 0x00000000 0x4e HAL/libhal.a(hal_uart.c.obj) .text.hal_uart_is_tx_ready - 0x00000000 0x1c HAL/libhal.a(hal_uart.c.obj) + 0x00000000 0x3a HAL/libhal.a(hal_uart.c.obj) .text.hal_uart_is_rx_ready - 0x00000000 0x1c HAL/libhal.a(hal_uart.c.obj) + 0x00000000 0x3a HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_uart.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_uart.c.obj) .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_uart.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_spi.c.obj) @@ -3110,47 +2860,16 @@ Discarded input sections .data 0x00000000 0x0 HAL/libhal.a(hal_spi.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal_spi.c.obj) .text.hal_spi_deinit - 0x00000000 0x1c HAL/libhal.a(hal_spi.c.obj) + 0x00000000 0x2c HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_spi.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_spi.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_spi.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) @@ -3160,81 +2879,17 @@ Discarded input sections .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) - .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4.c.obj) .text 0x00000000 0x0 HAL/libhal.a(hal_stm32f4.c.obj) .data 0x00000000 0x0 HAL/libhal.a(hal_stm32f4.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_stm32f4.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x1011 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x11f HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x115 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x13e HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0xa5 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x287 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x5f HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x236 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x12c HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x21e HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x127 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x7e HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x89 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x225 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_stm32f4.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_stm32f4.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4_gpio.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4_gpio.c.obj) .group 0x00000000 0xc HAL/libhal.a(hal_stm32f4_gpio.c.obj) @@ -3279,16 +2934,16 @@ Discarded input sections .data 0x00000000 0x0 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .bss 0x00000000 0x0 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_stm32f4_gpio.c.obj) @@ -3368,16 +3023,17 @@ Discarded input sections .text.hal_stm32f4_uart_is_rx_ready 0x00000000 0x34 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_stm32f4_uart.c.obj) @@ -3386,7 +3042,6 @@ Discarded input sections .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_stm32f4_uart.c.obj) @@ -3455,16 +3110,16 @@ Discarded input sections .text.hal_stm32f4_get_dwt_tick 0x00000000 0x18 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_stm32f4_delay.c.obj) @@ -3541,16 +3196,18 @@ Discarded input sections .text.hal_stm32f4_spi_deinit 0x00000000 0x88 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0xa78 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x28 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x8e HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x51 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x103 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x6a HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x1df HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x72 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x2a1 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x2e HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x00000000 0x2f HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x1c HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0xfb HAL/libhal.a(hal_stm32f4_spi.c.obj) @@ -3559,7 +3216,6 @@ Discarded input sections .debug_macro 0x00000000 0x15ea5 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x6d HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x3693 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x174 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x5c HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x980 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x9e9 HAL/libhal.a(hal_stm32f4_spi.c.obj) @@ -3580,7 +3236,7 @@ Discarded input sections .debug_macro 0x00000000 0x2aa HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x217 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_macro 0x00000000 0x12d HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x00000000 0x22 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .group 0x00000000 0xc Modules/led/libled.a(led.c.obj) .group 0x00000000 0xc Modules/led/libled.a(led.c.obj) .group 0x00000000 0xc Modules/led/libled.a(led.c.obj) .group 0x00000000 0xc Modules/led/libled.a(led.c.obj) @@ -3604,6 +3260,7 @@ Discarded input sections .debug_macro 0x00000000 0x6a Modules/led/libled.a(led.c.obj) .debug_macro 0x00000000 0x1df Modules/led/libled.a(led.c.obj) .debug_macro 0x00000000 0x174 Modules/led/libled.a(led.c.obj) + .debug_macro 0x00000000 0x78 Modules/led/libled.a(led.c.obj) .group 0x00000000 0xc Modules/delay/libdelay.a(delay.c.obj) .group 0x00000000 0xc Modules/delay/libdelay.a(delay.c.obj) .group 0x00000000 0xc Modules/delay/libdelay.a(delay.c.obj) @@ -3657,6 +3314,7 @@ Discarded input sections .group 0x00000000 0xc Middlewares/logging/liblogging.a(logging.c.obj) .group 0x00000000 0xc Middlewares/logging/liblogging.a(logging.c.obj) .group 0x00000000 0xc Middlewares/logging/liblogging.a(logging.c.obj) + .group 0x00000000 0xc Middlewares/logging/liblogging.a(logging.c.obj) .text 0x00000000 0x0 Middlewares/logging/liblogging.a(logging.c.obj) .data 0x00000000 0x0 Middlewares/logging/liblogging.a(logging.c.obj) .bss 0x00000000 0x0 Middlewares/logging/liblogging.a(logging.c.obj) @@ -3698,6 +3356,7 @@ Discarded input sections .debug_macro 0x00000000 0x3d Middlewares/logging/liblogging.a(logging.c.obj) .debug_macro 0x00000000 0x16 Middlewares/logging/liblogging.a(logging.c.obj) .debug_macro 0x00000000 0x16f Middlewares/logging/liblogging.a(logging.c.obj) + .debug_macro 0x00000000 0x78 Middlewares/logging/liblogging.a(logging.c.obj) .group 0x00000000 0xc Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .group 0x00000000 0xc Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .group 0x00000000 0xc Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) @@ -3770,6 +3429,7 @@ Discarded input sections .group 0x00000000 0xc Modules/uart/libuart.a(uart.c.obj) .group 0x00000000 0xc Modules/uart/libuart.a(uart.c.obj) .group 0x00000000 0xc Modules/uart/libuart.a(uart.c.obj) + .group 0x00000000 0xc Modules/uart/libuart.a(uart.c.obj) .text 0x00000000 0x0 Modules/uart/libuart.a(uart.c.obj) .data 0x00000000 0x0 Modules/uart/libuart.a(uart.c.obj) .bss 0x00000000 0x0 Modules/uart/libuart.a(uart.c.obj) @@ -3778,11 +3438,11 @@ Discarded input sections .text.uart_send 0x00000000 0x34 Modules/uart/libuart.a(uart.c.obj) .text.uart_receive - 0x00000000 0x38 Modules/uart/libuart.a(uart.c.obj) + 0x00000000 0x3c Modules/uart/libuart.a(uart.c.obj) .text.uart_is_tx_ready - 0x00000000 0x18 Modules/uart/libuart.a(uart.c.obj) + 0x00000000 0x28 Modules/uart/libuart.a(uart.c.obj) .text.uart_is_rx_ready - 0x00000000 0x18 Modules/uart/libuart.a(uart.c.obj) + 0x00000000 0x28 Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0xa78 Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x22 Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x8e Modules/uart/libuart.a(uart.c.obj) @@ -3791,6 +3451,7 @@ Discarded input sections .debug_macro 0x00000000 0x6a Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x1df Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x174 Modules/uart/libuart.a(uart.c.obj) + .debug_macro 0x00000000 0x78 Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x64 Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x1e Modules/uart/libuart.a(uart.c.obj) .debug_macro 0x00000000 0x35 Modules/uart/libuart.a(uart.c.obj) @@ -3814,17 +3475,14 @@ Discarded input sections .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) + .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) .text._snprintf_r 0x00000000 0x5e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) - .text 0x00000000 0x14 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) - .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) - .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) - .debug_frame 0x00000000 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) - .ARM.attributes - 0x00000000 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strcmp.o) .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strlen.o) .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-strlen.o) .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) @@ -3840,9 +3498,6 @@ Discarded input sections .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memchr.o) .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memchr.o) - .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) - .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) - .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) .text 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) .data 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) .bss 0x00000000 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) @@ -3987,7 +3642,7 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o 0x08000000 g_pfnVectors 0x08000188 . = ALIGN (0x4) -.text 0x08000190 0x4ee8 +.text 0x08000190 0x5340 0x08000190 . = ALIGN (0x4) *(.text) .text 0x08000190 0x40 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o @@ -4118,505 +3773,531 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o *fill* 0x080028be 0x2 .text.SPI_EndRxTxTransaction 0x080028c0 0xa8 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj - .text.main 0x08002968 0x28c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .text.main 0x08002968 0x2a4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj 0x08002968 main .text.SystemClock_Config - 0x08002bf4 0xbc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - 0x08002bf4 SystemClock_Config + 0x08002c0c 0xbc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + 0x08002c0c SystemClock_Config .text.Error_Handler - 0x08002cb0 0xa CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - 0x08002cb0 Error_Handler + 0x08002cc8 0xa CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + 0x08002cc8 Error_Handler .text.NMI_Handler - 0x08002cba 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cba NMI_Handler - .text.HardFault_Handler - 0x08002cc0 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cc0 HardFault_Handler - .text.MemManage_Handler - 0x08002cc6 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cc6 MemManage_Handler - .text.BusFault_Handler - 0x08002ccc 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002ccc BusFault_Handler - .text.UsageFault_Handler 0x08002cd2 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cd2 UsageFault_Handler + 0x08002cd2 NMI_Handler + .text.HardFault_Handler + 0x08002cd8 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002cd8 HardFault_Handler + .text.MemManage_Handler + 0x08002cde 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002cde MemManage_Handler + .text.BusFault_Handler + 0x08002ce4 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002ce4 BusFault_Handler + .text.UsageFault_Handler + 0x08002cea 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002cea UsageFault_Handler .text.SVC_Handler - 0x08002cd8 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cd8 SVC_Handler + 0x08002cf0 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002cf0 SVC_Handler .text.DebugMon_Handler - 0x08002ce6 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002ce6 DebugMon_Handler + 0x08002cfe 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002cfe DebugMon_Handler .text.PendSV_Handler - 0x08002cf4 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002cf4 PendSV_Handler + 0x08002d0c 0xe CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002d0c PendSV_Handler .text.SysTick_Handler - 0x08002d02 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - 0x08002d02 SysTick_Handler - *fill* 0x08002d0e 0x2 + 0x08002d1a 0xc CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + 0x08002d1a SysTick_Handler + *fill* 0x08002d26 0x2 .text.HAL_MspInit - 0x08002d10 0x50 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj - 0x08002d10 HAL_MspInit - .text._sbrk 0x08002d60 0x6c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - 0x08002d60 _sbrk + 0x08002d28 0x50 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + 0x08002d28 HAL_MspInit + .text._sbrk 0x08002d78 0x6c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + 0x08002d78 _sbrk .text.Reset_Handler - 0x08002dcc 0x50 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj - 0x08002dcc Reset_Handler + 0x08002de4 0x50 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + 0x08002de4 Reset_Handler .text.Default_Handler - 0x08002e1c 0x2 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj - 0x08002e1c RTC_Alarm_IRQHandler - 0x08002e1c HASH_RNG_IRQHandler - 0x08002e1c EXTI2_IRQHandler - 0x08002e1c TIM8_CC_IRQHandler - 0x08002e1c TIM1_CC_IRQHandler - 0x08002e1c DMA2_Stream5_IRQHandler - 0x08002e1c DMA1_Stream5_IRQHandler - 0x08002e1c PVD_IRQHandler - 0x08002e1c SDIO_IRQHandler - 0x08002e1c TAMP_STAMP_IRQHandler - 0x08002e1c CAN2_RX1_IRQHandler - 0x08002e1c EXTI3_IRQHandler - 0x08002e1c TIM8_TRG_COM_TIM14_IRQHandler - 0x08002e1c TIM1_UP_TIM10_IRQHandler - 0x08002e1c TIM8_UP_TIM13_IRQHandler - 0x08002e1c I2C3_ER_IRQHandler - 0x08002e1c EXTI0_IRQHandler - 0x08002e1c I2C2_EV_IRQHandler - 0x08002e1c DMA1_Stream2_IRQHandler - 0x08002e1c CAN1_RX0_IRQHandler - 0x08002e1c FPU_IRQHandler - 0x08002e1c OTG_HS_WKUP_IRQHandler - 0x08002e1c CAN2_SCE_IRQHandler - 0x08002e1c DMA2_Stream2_IRQHandler - 0x08002e1c SPI1_IRQHandler - 0x08002e1c TIM6_DAC_IRQHandler - 0x08002e1c TIM1_BRK_TIM9_IRQHandler - 0x08002e1c DCMI_IRQHandler - 0x08002e1c CAN2_RX0_IRQHandler - 0x08002e1c DMA2_Stream3_IRQHandler - 0x08002e1c USART6_IRQHandler - 0x08002e1c USART3_IRQHandler - 0x08002e1c CAN1_RX1_IRQHandler - 0x08002e1c UART5_IRQHandler - 0x08002e1c DMA2_Stream0_IRQHandler - 0x08002e1c TIM4_IRQHandler - 0x08002e1c I2C1_EV_IRQHandler - 0x08002e1c DMA1_Stream6_IRQHandler - 0x08002e1c DMA1_Stream1_IRQHandler - 0x08002e1c UART4_IRQHandler - 0x08002e1c TIM3_IRQHandler - 0x08002e1c RCC_IRQHandler - 0x08002e1c TIM8_BRK_TIM12_IRQHandler - 0x08002e1c Default_Handler - 0x08002e1c EXTI15_10_IRQHandler - 0x08002e1c ADC_IRQHandler - 0x08002e1c DMA1_Stream7_IRQHandler - 0x08002e1c TIM7_IRQHandler - 0x08002e1c CAN2_TX_IRQHandler - 0x08002e1c TIM5_IRQHandler - 0x08002e1c DMA2_Stream7_IRQHandler - 0x08002e1c I2C3_EV_IRQHandler - 0x08002e1c EXTI9_5_IRQHandler - 0x08002e1c RTC_WKUP_IRQHandler - 0x08002e1c ETH_WKUP_IRQHandler - 0x08002e1c SPI2_IRQHandler - 0x08002e1c OTG_HS_EP1_IN_IRQHandler - 0x08002e1c DMA1_Stream0_IRQHandler - 0x08002e1c CAN1_TX_IRQHandler - 0x08002e1c EXTI4_IRQHandler - 0x08002e1c FSMC_IRQHandler - 0x08002e1c ETH_IRQHandler - 0x08002e1c OTG_HS_EP1_OUT_IRQHandler - 0x08002e1c WWDG_IRQHandler - 0x08002e1c TIM2_IRQHandler - 0x08002e1c OTG_FS_WKUP_IRQHandler - 0x08002e1c TIM1_TRG_COM_TIM11_IRQHandler - 0x08002e1c OTG_HS_IRQHandler - 0x08002e1c EXTI1_IRQHandler - 0x08002e1c USART2_IRQHandler - 0x08002e1c I2C2_ER_IRQHandler - 0x08002e1c DMA2_Stream1_IRQHandler - 0x08002e1c CAN1_SCE_IRQHandler - 0x08002e1c FLASH_IRQHandler - 0x08002e1c DMA2_Stream4_IRQHandler - 0x08002e1c USART1_IRQHandler - 0x08002e1c OTG_FS_IRQHandler - 0x08002e1c SPI3_IRQHandler - 0x08002e1c DMA1_Stream4_IRQHandler - 0x08002e1c I2C1_ER_IRQHandler - 0x08002e1c DMA2_Stream6_IRQHandler - 0x08002e1c DMA1_Stream3_IRQHandler + 0x08002e34 0x2 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + 0x08002e34 RTC_Alarm_IRQHandler + 0x08002e34 HASH_RNG_IRQHandler + 0x08002e34 EXTI2_IRQHandler + 0x08002e34 TIM8_CC_IRQHandler + 0x08002e34 TIM1_CC_IRQHandler + 0x08002e34 DMA2_Stream5_IRQHandler + 0x08002e34 DMA1_Stream5_IRQHandler + 0x08002e34 PVD_IRQHandler + 0x08002e34 SDIO_IRQHandler + 0x08002e34 TAMP_STAMP_IRQHandler + 0x08002e34 CAN2_RX1_IRQHandler + 0x08002e34 EXTI3_IRQHandler + 0x08002e34 TIM8_TRG_COM_TIM14_IRQHandler + 0x08002e34 TIM1_UP_TIM10_IRQHandler + 0x08002e34 TIM8_UP_TIM13_IRQHandler + 0x08002e34 I2C3_ER_IRQHandler + 0x08002e34 EXTI0_IRQHandler + 0x08002e34 I2C2_EV_IRQHandler + 0x08002e34 DMA1_Stream2_IRQHandler + 0x08002e34 CAN1_RX0_IRQHandler + 0x08002e34 FPU_IRQHandler + 0x08002e34 OTG_HS_WKUP_IRQHandler + 0x08002e34 CAN2_SCE_IRQHandler + 0x08002e34 DMA2_Stream2_IRQHandler + 0x08002e34 SPI1_IRQHandler + 0x08002e34 TIM6_DAC_IRQHandler + 0x08002e34 TIM1_BRK_TIM9_IRQHandler + 0x08002e34 DCMI_IRQHandler + 0x08002e34 CAN2_RX0_IRQHandler + 0x08002e34 DMA2_Stream3_IRQHandler + 0x08002e34 USART6_IRQHandler + 0x08002e34 USART3_IRQHandler + 0x08002e34 CAN1_RX1_IRQHandler + 0x08002e34 UART5_IRQHandler + 0x08002e34 DMA2_Stream0_IRQHandler + 0x08002e34 TIM4_IRQHandler + 0x08002e34 I2C1_EV_IRQHandler + 0x08002e34 DMA1_Stream6_IRQHandler + 0x08002e34 DMA1_Stream1_IRQHandler + 0x08002e34 UART4_IRQHandler + 0x08002e34 TIM3_IRQHandler + 0x08002e34 RCC_IRQHandler + 0x08002e34 TIM8_BRK_TIM12_IRQHandler + 0x08002e34 Default_Handler + 0x08002e34 EXTI15_10_IRQHandler + 0x08002e34 ADC_IRQHandler + 0x08002e34 DMA1_Stream7_IRQHandler + 0x08002e34 TIM7_IRQHandler + 0x08002e34 CAN2_TX_IRQHandler + 0x08002e34 TIM5_IRQHandler + 0x08002e34 DMA2_Stream7_IRQHandler + 0x08002e34 I2C3_EV_IRQHandler + 0x08002e34 EXTI9_5_IRQHandler + 0x08002e34 RTC_WKUP_IRQHandler + 0x08002e34 ETH_WKUP_IRQHandler + 0x08002e34 SPI2_IRQHandler + 0x08002e34 OTG_HS_EP1_IN_IRQHandler + 0x08002e34 DMA1_Stream0_IRQHandler + 0x08002e34 CAN1_TX_IRQHandler + 0x08002e34 EXTI4_IRQHandler + 0x08002e34 FSMC_IRQHandler + 0x08002e34 ETH_IRQHandler + 0x08002e34 OTG_HS_EP1_OUT_IRQHandler + 0x08002e34 WWDG_IRQHandler + 0x08002e34 TIM2_IRQHandler + 0x08002e34 OTG_FS_WKUP_IRQHandler + 0x08002e34 TIM1_TRG_COM_TIM11_IRQHandler + 0x08002e34 OTG_HS_IRQHandler + 0x08002e34 EXTI1_IRQHandler + 0x08002e34 USART2_IRQHandler + 0x08002e34 I2C2_ER_IRQHandler + 0x08002e34 DMA2_Stream1_IRQHandler + 0x08002e34 CAN1_SCE_IRQHandler + 0x08002e34 FLASH_IRQHandler + 0x08002e34 DMA2_Stream4_IRQHandler + 0x08002e34 USART1_IRQHandler + 0x08002e34 OTG_FS_IRQHandler + 0x08002e34 SPI3_IRQHandler + 0x08002e34 DMA1_Stream4_IRQHandler + 0x08002e34 I2C1_ER_IRQHandler + 0x08002e34 DMA2_Stream6_IRQHandler + 0x08002e34 DMA1_Stream3_IRQHandler .text.bsp_init - 0x08002e1e 0x90 BSP/libbsp.a(bsp_init.c.obj) - 0x08002e1e bsp_init + 0x08002e36 0x2d2 BSP/libbsp.a(bsp_init.c.obj) + 0x08002e36 bsp_init + .text.bsp_get_board_config + 0x08003108 0xe BSP/libbsp.a(bsp_init.c.obj) + 0x08003108 bsp_get_board_config .text.default_led_init - 0x08002eae 0x3c BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x08003116 0x3e BSP/libbsp.a(stm32f407vet6_board.c.obj) .text.default_button_init - 0x08002eea 0x60 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x08003154 0x72 BSP/libbsp.a(stm32f407vet6_board.c.obj) .text.default_uart_init - 0x08002f4a 0x3c BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x080031c6 0x3e BSP/libbsp.a(stm32f407vet6_board.c.obj) + .text.default_spi_init + 0x08003204 0x4a BSP/libbsp.a(stm32f407vet6_board.c.obj) + .text.default_i2c_init + 0x0800324e 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .text.default_can_init + 0x08003264 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .text.default_adc_init + 0x0800327a 0x16 BSP/libbsp.a(stm32f407vet6_board.c.obj) .text.default_w25qxx_init - 0x08002f86 0x7a BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x08003290 0x68 BSP/libbsp.a(stm32f407vet6_board.c.obj) .text.bsp_board_get_config - 0x08003000 0x24 BSP/libbsp.a(bsp_board_manager.c.obj) - 0x08003000 bsp_board_get_config + 0x080032f8 0x14 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x080032f8 bsp_board_get_config .text.w25qxx_spi_send - 0x08003024 0x22 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x0800330c 0x2c BSP/libbsp.a(bsp_w25qxx.c.obj) .text.w25qxx_spi_receive - 0x08003046 0x22 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x08003338 0x2c BSP/libbsp.a(bsp_w25qxx.c.obj) .text.w25qxx_spi_transceive - 0x08003068 0x24 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x08003364 0x2e BSP/libbsp.a(bsp_w25qxx.c.obj) .text.w25qxx_cs_set - 0x0800308c 0x24 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x08003392 0x24 BSP/libbsp.a(bsp_w25qxx.c.obj) .text.w25qxx_delay_ms - 0x080030b0 0x16 BSP/libbsp.a(bsp_w25qxx.c.obj) - *fill* 0x080030c6 0x2 + 0x080033b6 0x16 BSP/libbsp.a(bsp_w25qxx.c.obj) .text.bsp_w25qxx_init - 0x080030c8 0x74 BSP/libbsp.a(bsp_w25qxx.c.obj) - 0x080030c8 bsp_w25qxx_init + 0x080033cc 0x6c BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x080033cc bsp_w25qxx_init .text.bsp_w25qxx_get_device_info - 0x0800313c 0x18 BSP/libbsp.a(bsp_w25qxx.c.obj) - 0x0800313c bsp_w25qxx_get_device_info + 0x08003438 0x18 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x08003438 bsp_w25qxx_get_device_info .text.bsp_key_get_button_config - 0x08003154 0x36 BSP/libbsp.a(bsp_key.c.obj) + 0x08003450 0x38 BSP/libbsp.a(bsp_key.c.obj) .text.bsp_key_read_raw - 0x0800318a 0x64 BSP/libbsp.a(bsp_key.c.obj) + 0x08003488 0x64 BSP/libbsp.a(bsp_key.c.obj) .text.bsp_key_get_time_ms - 0x080031ee 0xe BSP/libbsp.a(bsp_key.c.obj) + 0x080034ec 0xe BSP/libbsp.a(bsp_key.c.obj) + *fill* 0x080034fa 0x2 .text.bsp_key_init - 0x080031fc 0x138 BSP/libbsp.a(bsp_key.c.obj) - 0x080031fc bsp_key_init + 0x080034fc 0x138 BSP/libbsp.a(bsp_key.c.obj) + 0x080034fc bsp_key_init .text.bsp_key_update - 0x08003334 0x150 BSP/libbsp.a(bsp_key.c.obj) - 0x08003334 bsp_key_update + 0x08003634 0x150 BSP/libbsp.a(bsp_key.c.obj) + 0x08003634 bsp_key_update .text.bsp_key_get_press_event - 0x08003484 0x44 BSP/libbsp.a(bsp_key.c.obj) - 0x08003484 bsp_key_get_press_event + 0x08003784 0x44 BSP/libbsp.a(bsp_key.c.obj) + 0x08003784 bsp_key_get_press_event .text.bsp_key_get_release_event - 0x080034c8 0x44 BSP/libbsp.a(bsp_key.c.obj) - 0x080034c8 bsp_key_get_release_event + 0x080037c8 0x44 BSP/libbsp.a(bsp_key.c.obj) + 0x080037c8 bsp_key_get_release_event .text.bsp_key_get_long_press_event - 0x0800350c 0x34 BSP/libbsp.a(bsp_key.c.obj) - 0x0800350c bsp_key_get_long_press_event + 0x0800380c 0x34 BSP/libbsp.a(bsp_key.c.obj) + 0x0800380c bsp_key_get_long_press_event .text.bsp_key_get_repeat_event - 0x08003540 0x44 BSP/libbsp.a(bsp_key.c.obj) - 0x08003540 bsp_key_get_repeat_event + 0x08003840 0x44 BSP/libbsp.a(bsp_key.c.obj) + 0x08003840 bsp_key_get_repeat_event .text.bsp_key_get_short_press_event - 0x08003584 0x44 BSP/libbsp.a(bsp_key.c.obj) - 0x08003584 bsp_key_get_short_press_event + 0x08003884 0x44 BSP/libbsp.a(bsp_key.c.obj) + 0x08003884 bsp_key_get_short_press_event .text.hal_init - 0x080035c8 0xc HAL/libhal.a(hal.c.obj) - 0x080035c8 hal_init + 0x080038c8 0x44 HAL/libhal.a(hal.c.obj) + 0x080038c8 hal_init + .text.hal_error_init + 0x0800390c 0x30 HAL/libhal.a(hal.c.obj) + 0x0800390c hal_error_init .text.hal_gpio_configure_pin - 0x080035d4 0x16 HAL/libhal.a(hal_gpio.c.obj) - 0x080035d4 hal_gpio_configure_pin + 0x0800393c 0x22 HAL/libhal.a(hal_gpio.c.obj) + 0x0800393c hal_gpio_configure_pin .text.hal_gpio_write_pin - 0x080035ea 0x26 HAL/libhal.a(hal_gpio.c.obj) - 0x080035ea hal_gpio_write_pin + 0x0800395e 0x3c HAL/libhal.a(hal_gpio.c.obj) + 0x0800395e hal_gpio_write_pin .text.hal_gpio_toggle_pin - 0x08003610 0x24 HAL/libhal.a(hal_gpio.c.obj) - 0x08003610 hal_gpio_toggle_pin + 0x0800399a 0x3a HAL/libhal.a(hal_gpio.c.obj) + 0x0800399a hal_gpio_toggle_pin .text.hal_gpio_read_pin - 0x08003634 0x26 HAL/libhal.a(hal_gpio.c.obj) - 0x08003634 hal_gpio_read_pin + 0x080039d4 0x28 HAL/libhal.a(hal_gpio.c.obj) + 0x080039d4 hal_gpio_read_pin .text.hal_delay_init - 0x0800365a 0xc HAL/libhal.a(hal_delay.c.obj) - 0x0800365a hal_delay_init + 0x080039fc 0xc HAL/libhal.a(hal_delay.c.obj) + 0x080039fc hal_delay_init .text.hal_delay_ms - 0x08003666 0x16 HAL/libhal.a(hal_delay.c.obj) - 0x08003666 hal_delay_ms + 0x08003a08 0x16 HAL/libhal.a(hal_delay.c.obj) + 0x08003a08 hal_delay_ms .text.hal_get_tick - 0x0800367c 0xe HAL/libhal.a(hal_delay.c.obj) - 0x0800367c hal_get_tick + 0x08003a1e 0xe HAL/libhal.a(hal_delay.c.obj) + 0x08003a1e hal_get_tick .text.hal_uart_init - 0x0800368a 0xc HAL/libhal.a(hal_uart.c.obj) - 0x0800368a hal_uart_init + 0x08003a2c 0xe HAL/libhal.a(hal_uart.c.obj) + 0x08003a2c hal_uart_init .text.hal_uart_config - 0x08003696 0x16 HAL/libhal.a(hal_uart.c.obj) - 0x08003696 hal_uart_config + 0x08003a3a 0x2e HAL/libhal.a(hal_uart.c.obj) + 0x08003a3a hal_uart_config .text.hal_uart_send - 0x080036ac 0x22 HAL/libhal.a(hal_uart.c.obj) - 0x080036ac hal_uart_send + 0x08003a68 0x3e HAL/libhal.a(hal_uart.c.obj) + 0x08003a68 hal_uart_send .text.hal_spi_init - 0x080036ce 0x20 HAL/libhal.a(hal_spi.c.obj) - 0x080036ce hal_spi_init + 0x08003aa6 0x3a HAL/libhal.a(hal_spi.c.obj) + 0x08003aa6 hal_spi_init .text.hal_spi_transmit - 0x080036ee 0x26 HAL/libhal.a(hal_spi.c.obj) - 0x080036ee hal_spi_transmit + 0x08003ae0 0x46 HAL/libhal.a(hal_spi.c.obj) + 0x08003ae0 hal_spi_transmit .text.hal_spi_receive - 0x08003714 0x26 HAL/libhal.a(hal_spi.c.obj) - 0x08003714 hal_spi_receive + 0x08003b26 0x46 HAL/libhal.a(hal_spi.c.obj) + 0x08003b26 hal_spi_receive .text.hal_spi_transmit_receive - 0x0800373a 0x2a HAL/libhal.a(hal_spi.c.obj) - 0x0800373a hal_spi_transmit_receive + 0x08003b6c 0x50 HAL/libhal.a(hal_spi.c.obj) + 0x08003b6c hal_spi_transmit_receive .text.hal_stm32f4_init - 0x08003764 0x14 HAL/libhal.a(hal_stm32f4.c.obj) - 0x08003764 hal_stm32f4_init + 0x08003bbc 0x14 HAL/libhal.a(hal_stm32f4.c.obj) + 0x08003bbc hal_stm32f4_init .text.hal_gpio_port_to_stm32 - 0x08003778 0x94 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003bd0 0x94 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .text.hal_gpio_pin_to_stm32 - 0x0800380c 0x20 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003c64 0x20 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .text.hal_gpio_state_to_stm32 - 0x0800382c 0x22 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003c84 0x22 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .text.hal_stm32f4_gpio_init - 0x0800384e 0xe HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0x0800384e hal_stm32f4_gpio_init + 0x08003ca6 0xe HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003ca6 hal_stm32f4_gpio_init .text.hal_stm32f4_gpio_write_pin - 0x0800385c 0x50 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0x0800385c hal_stm32f4_gpio_write_pin + 0x08003cb4 0x50 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003cb4 hal_stm32f4_gpio_write_pin .text.hal_stm32f4_gpio_toggle_pin - 0x080038ac 0x40 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0x080038ac hal_stm32f4_gpio_toggle_pin + 0x08003d04 0x40 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003d04 hal_stm32f4_gpio_toggle_pin .text.hal_stm32f4_gpio_read_pin - 0x080038ec 0x52 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0x080038ec hal_stm32f4_gpio_read_pin - *fill* 0x0800393e 0x2 + 0x08003d44 0x52 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003d44 hal_stm32f4_gpio_read_pin + *fill* 0x08003d96 0x2 .text.hal_stm32f4_gpio_configure_pin - 0x08003940 0x284 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0x08003940 hal_stm32f4_gpio_configure_pin + 0x08003d98 0x284 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x08003d98 hal_stm32f4_gpio_configure_pin .text.hal_stm32f4_uart_init - 0x08003bc4 0xec HAL/libhal.a(hal_stm32f4_uart.c.obj) - 0x08003bc4 hal_stm32f4_uart_init + 0x0800401c 0xec HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0x0800401c hal_stm32f4_uart_init .text.hal_stm32f4_uart_config - 0x08003cb0 0x94 HAL/libhal.a(hal_stm32f4_uart.c.obj) - 0x08003cb0 hal_stm32f4_uart_config + 0x08004108 0x94 HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0x08004108 hal_stm32f4_uart_config .text.hal_stm32f4_uart_send - 0x08003d44 0x40 HAL/libhal.a(hal_stm32f4_uart.c.obj) - 0x08003d44 hal_stm32f4_uart_send + 0x0800419c 0x40 HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0x0800419c hal_stm32f4_uart_send .text.hal_stm32f4_delay_init - 0x08003d84 0x34 HAL/libhal.a(hal_stm32f4_delay.c.obj) - 0x08003d84 hal_stm32f4_delay_init + 0x080041dc 0x34 HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0x080041dc hal_stm32f4_delay_init .text.hal_stm32f4_delay_ms - 0x08003db8 0x16 HAL/libhal.a(hal_stm32f4_delay.c.obj) - 0x08003db8 hal_stm32f4_delay_ms + 0x08004210 0x16 HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0x08004210 hal_stm32f4_delay_ms .text.hal_stm32f4_get_tick - 0x08003dce 0xe HAL/libhal.a(hal_stm32f4_delay.c.obj) - 0x08003dce hal_stm32f4_get_tick + 0x08004226 0xe HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0x08004226 hal_stm32f4_get_tick .text.get_spi_handle - 0x08003ddc 0x70 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x08004234 0x70 HAL/libhal.a(hal_stm32f4_spi.c.obj) .text.hal_stm32f4_spi_init - 0x08003e4c 0x288 HAL/libhal.a(hal_stm32f4_spi.c.obj) - 0x08003e4c hal_stm32f4_spi_init + 0x080042a4 0x288 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x080042a4 hal_stm32f4_spi_init .text.hal_stm32f4_spi_transmit - 0x080040d4 0x62 HAL/libhal.a(hal_stm32f4_spi.c.obj) - 0x080040d4 hal_stm32f4_spi_transmit + 0x0800452c 0x62 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x0800452c hal_stm32f4_spi_transmit .text.hal_stm32f4_spi_receive - 0x08004136 0x62 HAL/libhal.a(hal_stm32f4_spi.c.obj) - 0x08004136 hal_stm32f4_spi_receive + 0x0800458e 0x62 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x0800458e hal_stm32f4_spi_receive .text.hal_stm32f4_spi_transmit_receive - 0x08004198 0x70 HAL/libhal.a(hal_stm32f4_spi.c.obj) - 0x08004198 hal_stm32f4_spi_transmit_receive + 0x080045f0 0x70 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x080045f0 hal_stm32f4_spi_transmit_receive .text.led_init - 0x08004208 0x3e Modules/led/libled.a(led.c.obj) - 0x08004208 led_init + 0x08004660 0x3e Modules/led/libled.a(led.c.obj) + 0x08004660 led_init .text.led_toggle - 0x08004246 0x3c Modules/led/libled.a(led.c.obj) - 0x08004246 led_toggle + 0x0800469e 0x3c Modules/led/libled.a(led.c.obj) + 0x0800469e led_toggle .text.delay_init - 0x08004282 0xc Modules/delay/libdelay.a(delay.c.obj) - 0x08004282 delay_init + 0x080046da 0xc Modules/delay/libdelay.a(delay.c.obj) + 0x080046da delay_init .text.delay_ms - 0x0800428e 0x16 Modules/delay/libdelay.a(delay.c.obj) - 0x0800428e delay_ms + 0x080046e6 0x16 Modules/delay/libdelay.a(delay.c.obj) + 0x080046e6 delay_ms .text.delay_get_tick - 0x080042a4 0xe Modules/delay/libdelay.a(delay.c.obj) - 0x080042a4 delay_get_tick - *fill* 0x080042b2 0x2 + 0x080046fc 0xe Modules/delay/libdelay.a(delay.c.obj) + 0x080046fc delay_get_tick + *fill* 0x0800470a 0x2 .text.log_level_to_string - 0x080042b4 0x68 Middlewares/logging/liblogging.a(logging.c.obj) + 0x0800470c 0x68 Middlewares/logging/liblogging.a(logging.c.obj) .text.logging_init - 0x0800431c 0x20 Middlewares/logging/liblogging.a(logging.c.obj) - 0x0800431c logging_init + 0x08004774 0x20 Middlewares/logging/liblogging.a(logging.c.obj) + 0x08004774 logging_init .text.logging_set_level - 0x0800433c 0x34 Middlewares/logging/liblogging.a(logging.c.obj) - 0x0800433c logging_set_level + 0x08004794 0x34 Middlewares/logging/liblogging.a(logging.c.obj) + 0x08004794 logging_set_level .text.log_internal - 0x08004370 0xe8 Middlewares/logging/liblogging.a(logging.c.obj) + 0x080047c8 0xe8 Middlewares/logging/liblogging.a(logging.c.obj) .text.log_debug - 0x08004458 0x26 Middlewares/logging/liblogging.a(logging.c.obj) - 0x08004458 log_debug + 0x080048b0 0x26 Middlewares/logging/liblogging.a(logging.c.obj) + 0x080048b0 log_debug .text.log_info - 0x0800447e 0x26 Middlewares/logging/liblogging.a(logging.c.obj) - 0x0800447e log_info + 0x080048d6 0x26 Middlewares/logging/liblogging.a(logging.c.obj) + 0x080048d6 log_info .text.log_error - 0x080044a4 0x26 Middlewares/logging/liblogging.a(logging.c.obj) - 0x080044a4 log_error - *fill* 0x080044ca 0x2 + 0x080048fc 0x26 Middlewares/logging/liblogging.a(logging.c.obj) + 0x080048fc log_error + *fill* 0x08004922 0x2 .text.w25qxx_init - 0x080044cc 0x16c Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - 0x080044cc w25qxx_init + 0x08004924 0x16c Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + 0x08004924 w25qxx_init .text.w25qxx_get_device_info - 0x08004638 0x34 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - 0x08004638 w25qxx_get_device_info + 0x08004a90 0x34 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + 0x08004a90 w25qxx_get_device_info .text.uart_init - 0x0800466c 0x3c Modules/uart/libuart.a(uart.c.obj) - 0x0800466c uart_init + 0x08004ac4 0x3c Modules/uart/libuart.a(uart.c.obj) + 0x08004ac4 uart_init .text.uart_send_string - 0x080046a8 0x34 Modules/uart/libuart.a(uart.c.obj) - 0x080046a8 uart_send_string - .text.__errno 0x080046dc 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) - 0x080046dc __errno + 0x08004b00 0x34 Modules/uart/libuart.a(uart.c.obj) + 0x08004b00 uart_send_string + .text.__errno 0x08004b34 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) + 0x08004b34 __errno + .text.memcpy 0x08004b40 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + 0x08004b40 memcpy .text.snprintf - 0x080046e8 0x68 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) - 0x080046e8 sniprintf - 0x080046e8 snprintf + 0x08004b5c 0x68 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) + 0x08004b5c sniprintf + 0x08004b5c snprintf .text._vsnprintf_r - 0x08004750 0x56 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) - 0x08004750 _vsniprintf_r - 0x08004750 _vsnprintf_r - *fill* 0x080047a6 0x2 + 0x08004bc4 0x56 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) + 0x08004bc4 _vsniprintf_r + 0x08004bc4 _vsnprintf_r + *fill* 0x08004c1a 0x2 .text.vsnprintf - 0x080047a8 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) - 0x080047a8 vsniprintf - 0x080047a8 vsnprintf + 0x08004c1c 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) + 0x08004c1c vsniprintf + 0x08004c1c vsnprintf .text.__ssputs_r - 0x080047c4 0xb6 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) - 0x080047c4 __ssputs_r - *fill* 0x0800487a 0x2 + 0x08004c38 0xb6 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) + 0x08004c38 __ssputs_r + *fill* 0x08004cee 0x2 .text._svfprintf_r - 0x0800487c 0x200 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) - 0x0800487c _svfiprintf_r - 0x0800487c _svfprintf_r + 0x08004cf0 0x200 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) + 0x08004cf0 _svfiprintf_r + 0x08004cf0 _svfprintf_r .text._printf_common - 0x08004a7c 0xda d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) - 0x08004a7c _printf_common - *fill* 0x08004b56 0x2 + 0x08004ef0 0xda d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) + 0x08004ef0 _printf_common + *fill* 0x08004fca 0x2 .text._printf_i - 0x08004b58 0x24c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) - 0x08004b58 _printf_i - .text.memcpy 0x08004da4 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) - 0x08004da4 memcpy - .text.memmove 0x08004dc0 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) - 0x08004dc0 memmove - .text._free_r 0x08004df4 0x98 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) - 0x08004df4 _free_r + 0x08004fcc 0x24c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) + 0x08004fcc _printf_i + .text.memmove 0x08005218 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) + 0x08005218 memmove + .text._free_r 0x0800524c 0x98 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) + 0x0800524c _free_r .text.sbrk_aligned - 0x08004e8c 0x40 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + 0x080052e4 0x40 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) .text._malloc_r - 0x08004ecc 0xe8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) - 0x08004ecc _malloc_r + 0x08005324 0xe8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + 0x08005324 _malloc_r .text._realloc_r - 0x08004fb4 0x5e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) - 0x08004fb4 _realloc_r - *fill* 0x08005012 0x2 - .text._sbrk_r 0x08005014 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) - 0x08005014 _sbrk_r + 0x0800540c 0x5e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) + 0x0800540c _realloc_r + *fill* 0x0800546a 0x2 + .text._sbrk_r 0x0800546c 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) + 0x0800546c _sbrk_r .text.__malloc_lock - 0x08005034 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) - 0x08005034 __malloc_lock + 0x0800548c 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) + 0x0800548c __malloc_lock .text.__malloc_unlock - 0x08005040 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) - 0x08005040 __malloc_unlock + 0x08005498 0xc d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) + 0x08005498 __malloc_unlock .text._malloc_usable_size_r - 0x0800504c 0x10 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) - 0x0800504c _malloc_usable_size_r + 0x080054a4 0x10 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) + 0x080054a4 _malloc_usable_size_r .text.__retarget_lock_acquire_recursive - 0x0800505c 0x2 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) - 0x0800505c __retarget_lock_acquire_recursive + 0x080054b4 0x2 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) + 0x080054b4 __retarget_lock_acquire_recursive .text.__retarget_lock_release_recursive - 0x0800505e 0x2 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) - 0x0800505e __retarget_lock_release_recursive + 0x080054b6 0x2 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) + 0x080054b6 __retarget_lock_release_recursive *(.glue_7) - .glue_7 0x08005060 0x0 linker stubs + .glue_7 0x080054b8 0x0 linker stubs *(.glue_7t) - .glue_7t 0x08005060 0x0 linker stubs + .glue_7t 0x080054b8 0x0 linker stubs *(.eh_frame) - .eh_frame 0x08005060 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .eh_frame 0x080054b8 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o *(.init) - .init 0x08005060 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crti.o - 0x08005060 _init - .init 0x08005064 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o + .init 0x080054b8 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crti.o + 0x080054b8 _init + .init 0x080054bc 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o *(.fini) - .fini 0x0800506c 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crti.o - 0x0800506c _fini - .fini 0x08005070 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o - 0x08005078 . = ALIGN (0x4) - 0x08005078 _etext = . + .fini 0x080054c4 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crti.o + 0x080054c4 _fini + .fini 0x080054c8 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x080054d0 . = ALIGN (0x4) + 0x080054d0 _etext = . -.vfp11_veneer 0x08005078 0x0 - .vfp11_veneer 0x08005078 0x0 linker stubs +.vfp11_veneer 0x080054d0 0x0 + .vfp11_veneer 0x080054d0 0x0 linker stubs -.v4_bx 0x08005078 0x0 - .v4_bx 0x08005078 0x0 linker stubs +.v4_bx 0x080054d0 0x0 + .v4_bx 0x080054d0 0x0 linker stubs -.iplt 0x08005078 0x0 - .iplt 0x08005078 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o +.iplt 0x080054d0 0x0 + .iplt 0x080054d0 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o -.rodata 0x08005078 0x46c - 0x08005078 . = ALIGN (0x4) +.rodata 0x080054d0 0x554 + 0x080054d0 . = ALIGN (0x4) *(.rodata) - .rodata 0x08005078 0x30a CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - *fill* 0x08005382 0x2 - .rodata 0x08005384 0xe BSP/libbsp.a(stm32f407vet6_board.c.obj) - *fill* 0x08005392 0x2 - .rodata 0x08005394 0x8 BSP/libbsp.a(bsp_w25qxx.c.obj) - .rodata 0x0800539c 0x20 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .rodata 0x080053bc 0x6e Middlewares/logging/liblogging.a(logging.c.obj) - *fill* 0x0800542a 0x2 - .rodata 0x0800542c 0x3 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .rodata 0x080054d0 0x30a CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + *fill* 0x080057da 0x2 + .rodata 0x080057dc 0x41 BSP/libbsp.a(stm32f407vet6_board.c.obj) + *fill* 0x0800581d 0x3 + .rodata 0x08005820 0x8 BSP/libbsp.a(bsp_w25qxx.c.obj) + .rodata 0x08005828 0x20 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .rodata 0x08005848 0x6e Middlewares/logging/liblogging.a(logging.c.obj) + *fill* 0x080058b6 0x2 + .rodata 0x080058b8 0x3 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) *(.rodata*) - *fill* 0x0800542f 0x1 + *fill* 0x080058bb 0x1 .rodata.AHBPrescTable - 0x08005430 0x10 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj - 0x08005430 AHBPrescTable + 0x080058bc 0x10 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj + 0x080058bc AHBPrescTable .rodata.APBPrescTable - 0x08005440 0x8 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj - 0x08005440 APBPrescTable + 0x080058cc 0x8 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj + 0x080058cc APBPrescTable .rodata.stm32f407vet6_buttons - 0x08005448 0x18 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x080058d4 0x18 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_uarts + 0x080058ec 0x14 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_spis + 0x08005900 0x18 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_i2cs + 0x08005918 0x14 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_cans + 0x0800592c 0x14 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_adc_channels + 0x08005940 0x4 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .rodata.stm32f407vet6_adcs + 0x08005944 0xc BSP/libbsp.a(stm32f407vet6_board.c.obj) .rodata.stm32f407vet6_board_config - 0x08005460 0x50 BSP/libbsp.a(stm32f407vet6_board.c.obj) - 0x08005460 stm32f407vet6_board_config + 0x08005950 0xa0 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x08005950 stm32f407vet6_board_config .rodata._svfprintf_r.str1.1 - 0x080054b0 0x11 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) + 0x080059f0 0x11 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) .rodata._printf_i.str1.1 - 0x080054c1 0x22 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) - 0x080054e4 . = ALIGN (0x4) - *fill* 0x080054e3 0x1 + 0x08005a01 0x22 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) + 0x08005a24 . = ALIGN (0x4) + *fill* 0x08005a23 0x1 -.ARM.extab 0x080054e4 0x0 - 0x080054e4 . = ALIGN (0x4) +.ARM.extab 0x08005a24 0x0 + 0x08005a24 . = ALIGN (0x4) *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x080054e4 . = ALIGN (0x4) + 0x08005a24 . = ALIGN (0x4) -.ARM 0x080054e4 0x8 - 0x080054e4 . = ALIGN (0x4) - 0x080054e4 __exidx_start = . +.ARM 0x08005a24 0x8 + 0x08005a24 . = ALIGN (0x4) + 0x08005a24 __exidx_start = . *(.ARM.exidx*) - .ARM.exidx 0x080054e4 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) - 0x080054ec __exidx_end = . - 0x080054ec . = ALIGN (0x4) + .ARM.exidx 0x08005a24 0x8 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x08005a2c __exidx_end = . + 0x08005a2c . = ALIGN (0x4) -.rel.dyn 0x080054ec 0x0 - .rel.iplt 0x080054ec 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o +.rel.dyn 0x08005a2c 0x0 + .rel.iplt 0x08005a2c 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o -.preinit_array 0x080054ec 0x0 - 0x080054ec . = ALIGN (0x4) - 0x080054ec PROVIDE (__preinit_array_start = .) +.preinit_array 0x08005a2c 0x0 + 0x08005a2c . = ALIGN (0x4) + 0x08005a2c PROVIDE (__preinit_array_start = .) *(.preinit_array*) - 0x080054ec PROVIDE (__preinit_array_end = .) - 0x080054ec . = ALIGN (0x4) + 0x08005a2c PROVIDE (__preinit_array_end = .) + 0x08005a2c . = ALIGN (0x4) -.init_array 0x080054ec 0x4 - 0x080054ec . = ALIGN (0x4) - 0x080054ec PROVIDE (__init_array_start = .) +.init_array 0x08005a2c 0x4 + 0x08005a2c . = ALIGN (0x4) + 0x08005a2c PROVIDE (__init_array_start = .) *(SORT_BY_NAME(.init_array.*)) *(.init_array*) - .init_array 0x080054ec 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o - 0x080054f0 PROVIDE (__init_array_end = .) - 0x080054f0 . = ALIGN (0x4) + .init_array 0x08005a2c 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o + 0x08005a30 PROVIDE (__init_array_end = .) + 0x08005a30 . = ALIGN (0x4) -.fini_array 0x080054f0 0x4 - 0x080054f0 . = ALIGN (0x4) +.fini_array 0x08005a30 0x4 + 0x08005a30 . = ALIGN (0x4) [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_NAME(.fini_array.*)) *(.fini_array*) - .fini_array 0x080054f0 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .fini_array 0x08005a30 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o [!provide] PROVIDE (__fini_array_end = .) - 0x080054f4 . = ALIGN (0x4) - 0x080054f4 _sidata = LOADADDR (.data) + 0x08005a34 . = ALIGN (0x4) + 0x08005a34 _sidata = LOADADDR (.data) -.data 0x20000000 0x90 load address 0x080054f4 +.data 0x20000000 0xac load address 0x08005a34 0x20000000 . = ALIGN (0x4) 0x20000000 _sdata = . *(.data) @@ -4636,25 +4317,23 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o 0x2000006c 0x1 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj 0x2000006c uwTickFreq *fill* 0x2000006d 0x3 - .data.led_config - 0x20000070 0x4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .data.supported_boards - 0x20000074 0x4 BSP/libbsp.a(bsp_board_manager.c.obj) .data.w25qxx_spi_interface - 0x20000078 0x14 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x20000070 0x14 BSP/libbsp.a(bsp_w25qxx.c.obj) + .data.hal_error_ctx + 0x20000084 0x24 HAL/libhal.a(hal.c.obj) .data.current_level - 0x2000008c 0x1 Middlewares/logging/liblogging.a(logging.c.obj) + 0x200000a8 0x1 Middlewares/logging/liblogging.a(logging.c.obj) *(.RamFunc) *(.RamFunc*) - 0x20000090 . = ALIGN (0x4) - *fill* 0x2000008d 0x3 - 0x20000090 _edata = . - 0x08005584 _siccmram = LOADADDR (.ccmram) + 0x200000ac . = ALIGN (0x4) + *fill* 0x200000a9 0x3 + 0x200000ac _edata = . + 0x08005ae0 _siccmram = LOADADDR (.ccmram) -.igot.plt 0x20000090 0x0 load address 0x08005584 - .igot.plt 0x20000090 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o +.igot.plt 0x200000ac 0x0 load address 0x08005ae0 + .igot.plt 0x200000ac 0x0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o -.ccmram 0x10000000 0x0 load address 0x08005584 +.ccmram 0x10000000 0x0 load address 0x08005ae0 0x10000000 . = ALIGN (0x4) 0x10000000 _sccmram = . *(.ccmram) @@ -4663,65 +4342,65 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o 0x10000000 _eccmram = . 0x10000000 . = ALIGN (0x4) -.bss 0x20000090 0x334 - 0x20000090 _sbss = . - 0x20000090 __bss_start__ = _sbss +.bss 0x200000ac 0x49c + 0x200000ac _sbss = . + 0x200000ac __bss_start__ = _sbss *(.bss) - .bss 0x20000090 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o + .bss 0x200000ac 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtbegin.o *(.bss*) - .bss.uwTick 0x200000ac 0x4 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj - 0x200000ac uwTick - .bss.led 0x200000b0 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - *fill* 0x200000b6 0x2 + .bss.uwTick 0x200000c8 0x4 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj + 0x200000c8 uwTick + .bss.led 0x200000cc 0x6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + *fill* 0x200000d2 0x2 .bss.led_toggle_timer - 0x200000b8 0x4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + 0x200000d4 0x4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj .bss.__sbrk_heap_end - 0x200000bc 0x4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .bss.current_board_index - 0x200000c0 0x1 BSP/libbsp.a(bsp_board_manager.c.obj) - *fill* 0x200000c1 0x3 + 0x200000d8 0x4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj .bss.key_state_table - 0x200000c4 0x60 BSP/libbsp.a(bsp_key.c.obj) - .bss.huart1 0x20000124 0x48 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .bss.hspi1 0x2000016c 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .bss.hspi2 0x200001c4 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .bss.hspi3 0x2000021c 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .bss.hspi4 0x20000274 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .bss.hspi5 0x200002cc 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .bss.hspi6 0x20000324 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x200000dc 0x60 BSP/libbsp.a(bsp_key.c.obj) + .bss.hal_module_registry + 0x2000013c 0x168 HAL/libhal.a(hal.c.obj) + .bss.hal_module_count + 0x200002a4 0x4 HAL/libhal.a(hal.c.obj) + .bss.huart1 0x200002a8 0x48 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .bss.hspi1 0x200002f0 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .bss.hspi2 0x20000348 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .bss.hspi3 0x200003a0 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .bss.hspi4 0x200003f8 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .bss.hspi5 0x20000450 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .bss.hspi6 0x200004a8 0x58 HAL/libhal.a(hal_stm32f4_spi.c.obj) .bss.g_spi_interface - 0x2000037c 0x14 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + 0x20000500 0x14 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .bss.g_device_info - 0x20000390 0x14 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .bss.uart 0x200003a4 0x10 Modules/uart/libuart.a(uart.c.obj) + 0x20000514 0x14 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .bss.uart 0x20000528 0x10 Modules/uart/libuart.a(uart.c.obj) .bss.__malloc_free_list - 0x200003b4 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) - 0x200003b4 __malloc_free_list + 0x20000538 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + 0x20000538 __malloc_free_list .bss.__malloc_sbrk_start - 0x200003b8 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) - 0x200003b8 __malloc_sbrk_start - .bss.errno 0x200003bc 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) - 0x200003bc errno + 0x2000053c 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + 0x2000053c __malloc_sbrk_start + .bss.errno 0x20000540 0x4 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) + 0x20000540 errno .bss.__lock___malloc_recursive_mutex - 0x200003c0 0x1 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) - 0x200003c0 __lock___malloc_recursive_mutex + 0x20000544 0x1 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) + 0x20000544 __lock___malloc_recursive_mutex *(COMMON) - 0x200003c4 . = ALIGN (0x4) - *fill* 0x200003c1 0x3 - 0x200003c4 _ebss = . - 0x200003c4 __bss_end__ = _ebss + 0x20000548 . = ALIGN (0x4) + *fill* 0x20000545 0x3 + 0x20000548 _ebss = . + 0x20000548 __bss_end__ = _ebss ._user_heap_stack - 0x200003c4 0x604 - 0x200003c8 . = ALIGN (0x8) - *fill* 0x200003c4 0x4 + 0x20000548 0x600 + 0x20000548 . = ALIGN (0x8) [!provide] PROVIDE (end = .) - 0x200003c8 PROVIDE (_end = .) - 0x200005c8 . = (. + _Min_Heap_Size) - *fill* 0x200003c8 0x200 - 0x200009c8 . = (. + _Min_Stack_Size) - *fill* 0x200005c8 0x400 - 0x200009c8 . = ALIGN (0x8) + 0x20000548 PROVIDE (_end = .) + 0x20000748 . = (. + _Min_Heap_Size) + *fill* 0x20000548 0x200 + 0x20000b48 . = (. + _Min_Stack_Size) + *fill* 0x20000748 0x400 + 0x20000b48 . = ALIGN (0x8) /DISCARD/ libc.a(*) @@ -4774,49 +4453,49 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .ARM.attributes 0x0000037f 0x34 BSP/libbsp.a(stm32f407vet6_board.c.obj) .ARM.attributes - 0x000003b3 0x34 BSP/libbsp.a(bsp_board_manager.c.obj) + 0x000003b3 0x34 BSP/libbsp.a(bsp_w25qxx.c.obj) .ARM.attributes - 0x000003e7 0x34 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x000003e7 0x34 BSP/libbsp.a(bsp_key.c.obj) .ARM.attributes - 0x0000041b 0x34 BSP/libbsp.a(bsp_key.c.obj) + 0x0000041b 0x34 HAL/libhal.a(hal.c.obj) .ARM.attributes - 0x0000044f 0x34 HAL/libhal.a(hal.c.obj) + 0x0000044f 0x34 HAL/libhal.a(hal_gpio.c.obj) .ARM.attributes - 0x00000483 0x34 HAL/libhal.a(hal_gpio.c.obj) + 0x00000483 0x34 HAL/libhal.a(hal_delay.c.obj) .ARM.attributes - 0x000004b7 0x34 HAL/libhal.a(hal_delay.c.obj) + 0x000004b7 0x34 HAL/libhal.a(hal_uart.c.obj) .ARM.attributes - 0x000004eb 0x34 HAL/libhal.a(hal_uart.c.obj) + 0x000004eb 0x34 HAL/libhal.a(hal_spi.c.obj) .ARM.attributes - 0x0000051f 0x34 HAL/libhal.a(hal_spi.c.obj) + 0x0000051f 0x34 HAL/libhal.a(hal_stm32f4.c.obj) .ARM.attributes - 0x00000553 0x34 HAL/libhal.a(hal_stm32f4.c.obj) + 0x00000553 0x34 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .ARM.attributes - 0x00000587 0x34 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x00000587 0x34 HAL/libhal.a(hal_stm32f4_uart.c.obj) .ARM.attributes - 0x000005bb 0x34 HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0x000005bb 0x34 HAL/libhal.a(hal_stm32f4_delay.c.obj) .ARM.attributes - 0x000005ef 0x34 HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0x000005ef 0x34 HAL/libhal.a(hal_stm32f4_spi.c.obj) .ARM.attributes - 0x00000623 0x34 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x00000623 0x34 Modules/led/libled.a(led.c.obj) .ARM.attributes - 0x00000657 0x34 Modules/led/libled.a(led.c.obj) + 0x00000657 0x34 Modules/delay/libdelay.a(delay.c.obj) .ARM.attributes - 0x0000068b 0x34 Modules/delay/libdelay.a(delay.c.obj) + 0x0000068b 0x34 Middlewares/logging/liblogging.a(logging.c.obj) .ARM.attributes - 0x000006bf 0x34 Middlewares/logging/liblogging.a(logging.c.obj) + 0x000006bf 0x34 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .ARM.attributes - 0x000006f3 0x34 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + 0x000006f3 0x34 Modules/uart/libuart.a(uart.c.obj) .ARM.attributes - 0x00000727 0x34 Modules/uart/libuart.a(uart.c.obj) + 0x00000727 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) .ARM.attributes - 0x0000075b 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + 0x00000745 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) .ARM.attributes - 0x00000779 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + 0x00000779 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) .ARM.attributes - 0x000007ad 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_dvmd_tls.o) + 0x00000797 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) .ARM.attributes - 0x000007cb 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) + 0x000007cb 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) .ARM.attributes 0x000007ff 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) .ARM.attributes @@ -4830,27 +4509,25 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .ARM.attributes 0x000008e6 0x1c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memchr.o) .ARM.attributes - 0x00000902 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + 0x00000902 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) .ARM.attributes - 0x00000936 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) + 0x00000936 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) .ARM.attributes - 0x0000096a 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) + 0x0000096a 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) .ARM.attributes - 0x0000099e 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + 0x0000099e 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) .ARM.attributes - 0x000009d2 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) + 0x000009d2 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) .ARM.attributes - 0x00000a06 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) + 0x00000a06 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) .ARM.attributes - 0x00000a3a 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) + 0x00000a3a 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) .ARM.attributes - 0x00000a6e 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) + 0x00000a6e 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) .ARM.attributes - 0x00000aa2 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) + 0x00000aa2 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) .ARM.attributes - 0x00000ad6 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) - .ARM.attributes - 0x00000b0a 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o + 0x00000ad6 0x1e d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard/crtn.o .comment 0x00000000 0x49 .comment 0x00000000 0x49 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj @@ -4867,7 +4544,6 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .comment 0x00000049 0x4a CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj .comment 0x00000049 0x4a BSP/libbsp.a(bsp_init.c.obj) .comment 0x00000049 0x4a BSP/libbsp.a(stm32f407vet6_board.c.obj) - .comment 0x00000049 0x4a BSP/libbsp.a(bsp_board_manager.c.obj) .comment 0x00000049 0x4a BSP/libbsp.a(bsp_w25qxx.c.obj) .comment 0x00000049 0x4a BSP/libbsp.a(bsp_key.c.obj) .comment 0x00000049 0x4a HAL/libhal.a(hal.c.obj) @@ -4886,7 +4562,7 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .comment 0x00000049 0x4a Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .comment 0x00000049 0x4a Modules/uart/libuart.a(uart.c.obj) -.debug_frame 0x00000000 0x3858 +.debug_frame 0x00000000 0x3ad0 .debug_frame 0x00000000 0x2c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-init.o) .debug_frame 0x0000002c 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libc_nano.a(lib_a-memset.o) .debug_frame 0x0000004c 0x58 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj @@ -4900,45 +4576,44 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_frame 0x00001e48 0x104 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj .debug_frame 0x00001f4c 0x38 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj .debug_frame 0x00001f84 0x34 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_frame 0x00001fb8 0x90 BSP/libbsp.a(bsp_init.c.obj) - .debug_frame 0x00002048 0xc0 BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_frame 0x00002108 0x100 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_frame 0x00002208 0x1dc BSP/libbsp.a(bsp_w25qxx.c.obj) - .debug_frame 0x000023e4 0x1f8 BSP/libbsp.a(bsp_key.c.obj) - .debug_frame 0x000025dc 0x2c HAL/libhal.a(hal.c.obj) - .debug_frame 0x00002608 0xbc HAL/libhal.a(hal_gpio.c.obj) - .debug_frame 0x000026c4 0x90 HAL/libhal.a(hal_delay.c.obj) - .debug_frame 0x00002754 0xe0 HAL/libhal.a(hal_uart.c.obj) - .debug_frame 0x00002834 0xc4 HAL/libhal.a(hal_spi.c.obj) - .debug_frame 0x000028f8 0x2c HAL/libhal.a(hal_stm32f4.c.obj) - .debug_frame 0x00002924 0x13c HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_frame 0x00002a60 0xe8 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_frame 0x00002b48 0xb4 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_frame 0x00002bfc 0xf4 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_frame 0x00002cf0 0xc8 Modules/led/libled.a(led.c.obj) - .debug_frame 0x00002db8 0x90 Modules/delay/libdelay.a(delay.c.obj) - .debug_frame 0x00002e48 0x1ec Middlewares/logging/liblogging.a(logging.c.obj) - .debug_frame 0x00003034 0x25c Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_frame 0x00003290 0xf8 Modules/uart/libuart.a(uart.c.obj) - .debug_frame 0x00003388 0x2c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) - .debug_frame 0x000033b4 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) - .debug_frame 0x000033e8 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) - .debug_frame 0x00003408 0x7c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) - .debug_frame 0x00003484 0x4c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) - .debug_frame 0x000034d0 0x90 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) - .debug_frame 0x00003560 0x60 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) - .debug_frame 0x000035c0 0x28 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) - .debug_frame 0x000035e8 0x28 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) - .debug_frame 0x00003610 0x38 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) - .debug_frame 0x00003648 0x4c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) - .debug_frame 0x00003694 0x3c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) - .debug_frame 0x000036d0 0x2c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) - .debug_frame 0x000036fc 0x30 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) - .debug_frame 0x0000372c 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) - .debug_frame 0x0000374c 0x5c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) - .debug_frame 0x000037a8 0xb0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) + .debug_frame 0x00001fb8 0x98 BSP/libbsp.a(bsp_init.c.obj) + .debug_frame 0x00002050 0x17c BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_frame 0x000021cc 0x1dc BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_frame 0x000023a8 0x1f8 BSP/libbsp.a(bsp_key.c.obj) + .debug_frame 0x000025a0 0x2d0 HAL/libhal.a(hal.c.obj) + .debug_frame 0x00002870 0xbc HAL/libhal.a(hal_gpio.c.obj) + .debug_frame 0x0000292c 0x90 HAL/libhal.a(hal_delay.c.obj) + .debug_frame 0x000029bc 0xe0 HAL/libhal.a(hal_uart.c.obj) + .debug_frame 0x00002a9c 0xc4 HAL/libhal.a(hal_spi.c.obj) + .debug_frame 0x00002b60 0x2c HAL/libhal.a(hal_stm32f4.c.obj) + .debug_frame 0x00002b8c 0x13c HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_frame 0x00002cc8 0xe8 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_frame 0x00002db0 0xb4 HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_frame 0x00002e64 0xf4 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_frame 0x00002f58 0xc8 Modules/led/libled.a(led.c.obj) + .debug_frame 0x00003020 0x90 Modules/delay/libdelay.a(delay.c.obj) + .debug_frame 0x000030b0 0x1ec Middlewares/logging/liblogging.a(logging.c.obj) + .debug_frame 0x0000329c 0x25c Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_frame 0x000034f8 0x108 Modules/uart/libuart.a(uart.c.obj) + .debug_frame 0x00003600 0x2c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_aeabi_uldivmod.o) + .debug_frame 0x0000362c 0x34 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a(_udivmoddi4.o) + .debug_frame 0x00003660 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-errno.o) + .debug_frame 0x00003680 0x28 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memcpy-stub.o) + .debug_frame 0x000036a8 0x7c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-snprintf.o) + .debug_frame 0x00003724 0x4c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-vsnprintf.o) + .debug_frame 0x00003770 0x90 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-svfprintf.o) + .debug_frame 0x00003800 0x60 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-vfprintf_i.o) + .debug_frame 0x00003860 0x28 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-memmove.o) + .debug_frame 0x00003888 0x38 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-freer.o) + .debug_frame 0x000038c0 0x4c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-mallocr.o) + .debug_frame 0x0000390c 0x3c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-reallocr.o) + .debug_frame 0x00003948 0x2c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-sbrkr.o) + .debug_frame 0x00003974 0x30 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-mlock.o) + .debug_frame 0x000039a4 0x20 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-nano-msizer.o) + .debug_frame 0x000039c4 0x5c d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-reent.o) + .debug_frame 0x00003a20 0xb0 d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard\libg_nano.a(lib_a-lock.o) -.debug_info 0x00000000 0xf090 +.debug_info 0x00000000 0x11dbe .debug_info 0x00000000 0x523 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_info 0x00000523 0x937 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj .debug_info 0x00000e5a 0x76a cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj @@ -4946,33 +4621,32 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_info 0x00002427 0x929 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj .debug_info 0x00002d50 0x30c0 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c.obj .debug_info 0x00005e10 0x1609 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj - .debug_info 0x00007419 0x748 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_info 0x00007b61 0x119 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - .debug_info 0x00007c7a 0x2a8 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj - .debug_info 0x00007f22 0x15f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_info 0x00008081 0x22 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj - .debug_info 0x000080a3 0x7f9 BSP/libbsp.a(bsp_init.c.obj) - .debug_info 0x0000889c 0xa26 BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_info 0x000092c2 0x850 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_info 0x00009b12 0x7ee BSP/libbsp.a(bsp_w25qxx.c.obj) - .debug_info 0x0000a300 0xbb1 BSP/libbsp.a(bsp_key.c.obj) - .debug_info 0x0000aeb1 0x89 HAL/libhal.a(hal.c.obj) - .debug_info 0x0000af3a 0x37a HAL/libhal.a(hal_gpio.c.obj) - .debug_info 0x0000b2b4 0x101 HAL/libhal.a(hal_delay.c.obj) - .debug_info 0x0000b3b5 0x2fe HAL/libhal.a(hal_uart.c.obj) - .debug_info 0x0000b6b3 0x371 HAL/libhal.a(hal_spi.c.obj) - .debug_info 0x0000ba24 0x89 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_info 0x0000baad 0x8bc HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_info 0x0000c369 0xb59 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_info 0x0000cec2 0x308 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_info 0x0000d1ca 0xdaa HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_info 0x0000df74 0x2d6 Modules/led/libled.a(led.c.obj) - .debug_info 0x0000e24a 0xfa Modules/delay/libdelay.a(delay.c.obj) - .debug_info 0x0000e344 0x30f Middlewares/logging/liblogging.a(logging.c.obj) - .debug_info 0x0000e653 0x6b4 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_info 0x0000ed07 0x389 Modules/uart/libuart.a(uart.c.obj) + .debug_info 0x00007419 0x1502 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_info 0x0000891b 0x119 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + .debug_info 0x00008a34 0x2a8 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + .debug_info 0x00008cdc 0x15f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_info 0x00008e3b 0x22 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + .debug_info 0x00008e5d 0x10a0 BSP/libbsp.a(bsp_init.c.obj) + .debug_info 0x00009efd 0x14f3 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_info 0x0000b3f0 0x87c BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_info 0x0000bc6c 0x140c BSP/libbsp.a(bsp_key.c.obj) + .debug_info 0x0000d078 0x873 HAL/libhal.a(hal.c.obj) + .debug_info 0x0000d8eb 0x46b HAL/libhal.a(hal_gpio.c.obj) + .debug_info 0x0000dd56 0x13f HAL/libhal.a(hal_delay.c.obj) + .debug_info 0x0000de95 0x42c HAL/libhal.a(hal_uart.c.obj) + .debug_info 0x0000e2c1 0x404 HAL/libhal.a(hal_spi.c.obj) + .debug_info 0x0000e6c5 0xbc HAL/libhal.a(hal_stm32f4.c.obj) + .debug_info 0x0000e781 0x8c3 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_info 0x0000f044 0xb60 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_info 0x0000fba4 0x30f HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_info 0x0000feb3 0xdb1 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_info 0x00010c64 0x2dd Modules/led/libled.a(led.c.obj) + .debug_info 0x00010f41 0xfa Modules/delay/libdelay.a(delay.c.obj) + .debug_info 0x0001103b 0x30f Middlewares/logging/liblogging.a(logging.c.obj) + .debug_info 0x0001134a 0x6b4 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_info 0x000119fe 0x3c0 Modules/uart/libuart.a(uart.c.obj) -.debug_abbrev 0x00000000 0x29c6 +.debug_abbrev 0x00000000 0x2bea .debug_abbrev 0x00000000 0x116 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_abbrev 0x00000116 0x262 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj .debug_abbrev 0x00000378 0x1c4 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj @@ -4980,33 +4654,32 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_abbrev 0x00000849 0x1da cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj .debug_abbrev 0x00000a23 0x2b3 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c.obj .debug_abbrev 0x00000cd6 0x23a cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj - .debug_abbrev 0x00000f10 0x199 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_abbrev 0x000010a9 0x61 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - .debug_abbrev 0x0000110a 0xd4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj - .debug_abbrev 0x000011de 0xa6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_abbrev 0x00001284 0x12 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj - .debug_abbrev 0x00001296 0x134 BSP/libbsp.a(bsp_init.c.obj) - .debug_abbrev 0x000013ca 0x15d BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_abbrev 0x00001527 0x152 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_abbrev 0x00001679 0x17a BSP/libbsp.a(bsp_w25qxx.c.obj) - .debug_abbrev 0x000017f3 0x1f8 BSP/libbsp.a(bsp_key.c.obj) - .debug_abbrev 0x000019eb 0x47 HAL/libhal.a(hal.c.obj) - .debug_abbrev 0x00001a32 0x118 HAL/libhal.a(hal_gpio.c.obj) - .debug_abbrev 0x00001b4a 0x9f HAL/libhal.a(hal_delay.c.obj) - .debug_abbrev 0x00001be9 0xed HAL/libhal.a(hal_uart.c.obj) - .debug_abbrev 0x00001cd6 0xb7 HAL/libhal.a(hal_spi.c.obj) - .debug_abbrev 0x00001d8d 0x47 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_abbrev 0x00001dd4 0x1cc HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_abbrev 0x00001fa0 0x1a4 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_abbrev 0x00002144 0x11b HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_abbrev 0x0000225f 0x1c8 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_abbrev 0x00002427 0xed Modules/led/libled.a(led.c.obj) - .debug_abbrev 0x00002514 0x9f Modules/delay/libdelay.a(delay.c.obj) - .debug_abbrev 0x000025b3 0x15b Middlewares/logging/liblogging.a(logging.c.obj) - .debug_abbrev 0x0000270e 0x18d Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_abbrev 0x0000289b 0x12b Modules/uart/libuart.a(uart.c.obj) + .debug_abbrev 0x00000f10 0x1d0 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_abbrev 0x000010e0 0x61 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + .debug_abbrev 0x00001141 0xd4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + .debug_abbrev 0x00001215 0xa6 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_abbrev 0x000012bb 0x12 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + .debug_abbrev 0x000012cd 0x1b1 BSP/libbsp.a(bsp_init.c.obj) + .debug_abbrev 0x0000147e 0x1dc BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_abbrev 0x0000165a 0x17a BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_abbrev 0x000017d4 0x24a BSP/libbsp.a(bsp_key.c.obj) + .debug_abbrev 0x00001a1e 0x211 HAL/libhal.a(hal.c.obj) + .debug_abbrev 0x00001c2f 0x116 HAL/libhal.a(hal_gpio.c.obj) + .debug_abbrev 0x00001d45 0xb9 HAL/libhal.a(hal_delay.c.obj) + .debug_abbrev 0x00001dfe 0xeb HAL/libhal.a(hal_uart.c.obj) + .debug_abbrev 0x00001ee9 0xb7 HAL/libhal.a(hal_spi.c.obj) + .debug_abbrev 0x00001fa0 0x74 HAL/libhal.a(hal_stm32f4.c.obj) + .debug_abbrev 0x00002014 0x1cc HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_abbrev 0x000021e0 0x1a4 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_abbrev 0x00002384 0x11b HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_abbrev 0x0000249f 0x1c8 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_abbrev 0x00002667 0xed Modules/led/libled.a(led.c.obj) + .debug_abbrev 0x00002754 0x9f Modules/delay/libdelay.a(delay.c.obj) + .debug_abbrev 0x000027f3 0x15b Middlewares/logging/liblogging.a(logging.c.obj) + .debug_abbrev 0x0000294e 0x18d Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_abbrev 0x00002adb 0x10f Modules/uart/libuart.a(uart.c.obj) -.debug_aranges 0x00000000 0xdf0 +.debug_aranges 0x00000000 0xe60 .debug_aranges 0x00000000 0x28 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_aranges @@ -5034,45 +4707,43 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_aranges 0x000007f8 0x38 BSP/libbsp.a(bsp_init.c.obj) .debug_aranges - 0x00000830 0x40 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x00000830 0x68 BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_aranges - 0x00000870 0x50 BSP/libbsp.a(bsp_board_manager.c.obj) + 0x00000898 0x80 BSP/libbsp.a(bsp_w25qxx.c.obj) .debug_aranges - 0x000008c0 0x80 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x00000918 0x80 BSP/libbsp.a(bsp_key.c.obj) .debug_aranges - 0x00000940 0x80 BSP/libbsp.a(bsp_key.c.obj) + 0x00000998 0xb8 HAL/libhal.a(hal.c.obj) .debug_aranges - 0x000009c0 0x20 HAL/libhal.a(hal.c.obj) + 0x00000a50 0x40 HAL/libhal.a(hal_gpio.c.obj) .debug_aranges - 0x000009e0 0x40 HAL/libhal.a(hal_gpio.c.obj) + 0x00000a90 0x38 HAL/libhal.a(hal_delay.c.obj) .debug_aranges - 0x00000a20 0x38 HAL/libhal.a(hal_delay.c.obj) + 0x00000ac8 0x48 HAL/libhal.a(hal_uart.c.obj) .debug_aranges - 0x00000a58 0x48 HAL/libhal.a(hal_uart.c.obj) + 0x00000b10 0x40 HAL/libhal.a(hal_spi.c.obj) .debug_aranges - 0x00000aa0 0x40 HAL/libhal.a(hal_spi.c.obj) + 0x00000b50 0x20 HAL/libhal.a(hal_stm32f4.c.obj) .debug_aranges - 0x00000ae0 0x20 HAL/libhal.a(hal_stm32f4.c.obj) + 0x00000b70 0x58 HAL/libhal.a(hal_stm32f4_gpio.c.obj) .debug_aranges - 0x00000b00 0x58 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0x00000bc8 0x48 HAL/libhal.a(hal_stm32f4_uart.c.obj) .debug_aranges - 0x00000b58 0x48 HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0x00000c10 0x40 HAL/libhal.a(hal_stm32f4_delay.c.obj) .debug_aranges - 0x00000ba0 0x40 HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0x00000c50 0x48 HAL/libhal.a(hal_stm32f4_spi.c.obj) .debug_aranges - 0x00000be0 0x48 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0x00000c98 0x40 Modules/led/libled.a(led.c.obj) .debug_aranges - 0x00000c28 0x40 Modules/led/libled.a(led.c.obj) + 0x00000cd8 0x38 Modules/delay/libdelay.a(delay.c.obj) .debug_aranges - 0x00000c68 0x38 Modules/delay/libdelay.a(delay.c.obj) + 0x00000d10 0x68 Middlewares/logging/liblogging.a(logging.c.obj) .debug_aranges - 0x00000ca0 0x68 Middlewares/logging/liblogging.a(logging.c.obj) + 0x00000d78 0x98 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) .debug_aranges - 0x00000d08 0x98 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_aranges - 0x00000da0 0x50 Modules/uart/libuart.a(uart.c.obj) + 0x00000e10 0x50 Modules/uart/libuart.a(uart.c.obj) -.debug_ranges 0x00000000 0xc28 +.debug_ranges 0x00000000 0xcc0 .debug_ranges 0x00000000 0x18 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_ranges 0x00000018 0x78 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj .debug_ranges 0x00000090 0x48 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj @@ -5086,27 +4757,26 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_ranges 0x00000740 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj .debug_ranges 0x00000750 0x20 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj .debug_ranges 0x00000770 0x28 BSP/libbsp.a(bsp_init.c.obj) - .debug_ranges 0x00000798 0x30 BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_ranges 0x000007c8 0x40 BSP/libbsp.a(bsp_board_manager.c.obj) + .debug_ranges 0x00000798 0x70 BSP/libbsp.a(stm32f407vet6_board.c.obj) .debug_ranges 0x00000808 0x70 BSP/libbsp.a(bsp_w25qxx.c.obj) .debug_ranges 0x00000878 0x70 BSP/libbsp.a(bsp_key.c.obj) - .debug_ranges 0x000008e8 0x10 HAL/libhal.a(hal.c.obj) - .debug_ranges 0x000008f8 0x30 HAL/libhal.a(hal_gpio.c.obj) - .debug_ranges 0x00000928 0x28 HAL/libhal.a(hal_delay.c.obj) - .debug_ranges 0x00000950 0x38 HAL/libhal.a(hal_uart.c.obj) - .debug_ranges 0x00000988 0x30 HAL/libhal.a(hal_spi.c.obj) - .debug_ranges 0x000009b8 0x10 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_ranges 0x000009c8 0x48 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_ranges 0x00000a10 0x38 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_ranges 0x00000a48 0x30 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_ranges 0x00000a78 0x38 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_ranges 0x00000ab0 0x30 Modules/led/libled.a(led.c.obj) - .debug_ranges 0x00000ae0 0x28 Modules/delay/libdelay.a(delay.c.obj) - .debug_ranges 0x00000b08 0x58 Middlewares/logging/liblogging.a(logging.c.obj) - .debug_ranges 0x00000b60 0x88 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_ranges 0x00000be8 0x40 Modules/uart/libuart.a(uart.c.obj) + .debug_ranges 0x000008e8 0xa8 HAL/libhal.a(hal.c.obj) + .debug_ranges 0x00000990 0x30 HAL/libhal.a(hal_gpio.c.obj) + .debug_ranges 0x000009c0 0x28 HAL/libhal.a(hal_delay.c.obj) + .debug_ranges 0x000009e8 0x38 HAL/libhal.a(hal_uart.c.obj) + .debug_ranges 0x00000a20 0x30 HAL/libhal.a(hal_spi.c.obj) + .debug_ranges 0x00000a50 0x10 HAL/libhal.a(hal_stm32f4.c.obj) + .debug_ranges 0x00000a60 0x48 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_ranges 0x00000aa8 0x38 HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_ranges 0x00000ae0 0x30 HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_ranges 0x00000b10 0x38 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_ranges 0x00000b48 0x30 Modules/led/libled.a(led.c.obj) + .debug_ranges 0x00000b78 0x28 Modules/delay/libdelay.a(delay.c.obj) + .debug_ranges 0x00000ba0 0x58 Middlewares/logging/liblogging.a(logging.c.obj) + .debug_ranges 0x00000bf8 0x88 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_ranges 0x00000c80 0x40 Modules/uart/libuart.a(uart.c.obj) -.debug_macro 0x00000000 0x2380a +.debug_macro 0x00000000 0x231ae .debug_macro 0x00000000 0x1ce cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_macro 0x000001ce 0xa78 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_macro 0x00000c46 0x2e cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj @@ -5153,72 +4823,76 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_macro 0x0001edad 0x22e cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj .debug_macro 0x0001efdb 0x1cf cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c.obj .debug_macro 0x0001f1aa 0x1dd cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj - .debug_macro 0x0001f387 0x3e4 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f76b 0x64 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f7cf 0x1e CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f7ed 0x35 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f822 0x34 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f856 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f86c 0x35 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001f8a1 0x341 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fbe2 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fbf2 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fc08 0x43 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fc4b 0x34 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fc7f 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fc8f 0x58 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fce7 0x182 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fe69 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fe79 0x1c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fe95 0x52 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001fee7 0x22 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001ff09 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001ff19 0x52 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0001ff6b 0xd5 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x00020040 0x1c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0002005c 0x3d CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x00020099 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x000200af 0x16f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0002021e 0x22 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x00020240 0x5e CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0002029e 0xee CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x0002038c 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_macro 0x000203a2 0x1e2 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - .debug_macro 0x00020584 0x1d8 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj - .debug_macro 0x0002075c 0xec CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x00020848 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x00020858 0x5e CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x000208b6 0x94 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x0002094a 0x57 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x000209a1 0x23b CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_macro 0x00020bdc 0x2fe BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00020eda 0x10 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00020eea 0x28 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00020f12 0x56 BSP/libbsp.a(bsp_init.c.obj) - .debug_macro 0x00020f68 0xaa BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_macro 0x00021012 0x169 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_macro 0x0002117b 0xbf BSP/libbsp.a(bsp_w25qxx.c.obj) - .debug_macro 0x0002123a 0x1aa BSP/libbsp.a(bsp_key.c.obj) - .debug_macro 0x000213e4 0x58 BSP/libbsp.a(bsp_key.c.obj) - .debug_macro 0x0002143c 0x203 HAL/libhal.a(hal.c.obj) - .debug_macro 0x0002163f 0x207 HAL/libhal.a(hal_gpio.c.obj) - .debug_macro 0x00021846 0x207 HAL/libhal.a(hal_delay.c.obj) - .debug_macro 0x00021a4d 0x207 HAL/libhal.a(hal_uart.c.obj) - .debug_macro 0x00021c54 0x224 HAL/libhal.a(hal_spi.c.obj) - .debug_macro 0x00021e78 0x203 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_macro 0x0002207b 0x207 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_macro 0x00022282 0x207 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_macro 0x00022489 0x207 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_macro 0x00022690 0x224 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_macro 0x000228b4 0x80 Modules/led/libled.a(led.c.obj) - .debug_macro 0x00022934 0x77 Modules/delay/libdelay.a(delay.c.obj) - .debug_macro 0x000229ab 0x1eb Middlewares/logging/liblogging.a(logging.c.obj) - .debug_macro 0x00022b96 0xa66 Middlewares/logging/liblogging.a(logging.c.obj) - .debug_macro 0x000235fc 0x4c Middlewares/logging/liblogging.a(logging.c.obj) - .debug_macro 0x00023648 0x84 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_macro 0x000236cc 0x13e Modules/uart/libuart.a(uart.c.obj) + .debug_macro 0x0001f387 0x42f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f7b6 0x78 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f82e 0x64 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f892 0x1e CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f8b0 0x35 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f8e5 0x34 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f919 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f92f 0x35 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001f964 0x341 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fca5 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fcb5 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fccb 0x43 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fd0e 0x34 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fd42 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fd52 0x58 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001fdaa 0x182 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ff2c 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ff3c 0x1c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ff58 0x52 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ffaa 0x22 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ffcc 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0001ffdc 0x52 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002002e 0xd5 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x00020103 0x1c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002011f 0x3d CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002015c 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x00020172 0x16f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x000202e1 0x22 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x00020303 0x1c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002031f 0x49 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x00020368 0x22 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002038a 0xee CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x00020478 0x16 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_macro 0x0002048e 0x1e2 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + .debug_macro 0x00020670 0x1d8 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + .debug_macro 0x00020848 0xec CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x00020934 0x10 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x00020944 0x5e CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x000209a2 0x94 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x00020a36 0x57 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x00020a8d 0x23b CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_macro 0x00020cc8 0x1af BSP/libbsp.a(bsp_init.c.obj) + .debug_macro 0x00020e77 0x10 BSP/libbsp.a(bsp_init.c.obj) + .debug_macro 0x00020e87 0x249 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_macro 0x000210d0 0xc8 BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_macro 0x00021198 0x2b6 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x0002144e 0x97 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x000214e5 0xfd BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x000215e2 0x43 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x00021625 0x16 BSP/libbsp.a(bsp_key.c.obj) + .debug_macro 0x0002163b 0x131 HAL/libhal.a(hal.c.obj) + .debug_macro 0x0002176c 0x72 HAL/libhal.a(hal.c.obj) + .debug_macro 0x000217de 0x89 HAL/libhal.a(hal_gpio.c.obj) + .debug_macro 0x00021867 0x7c HAL/libhal.a(hal_delay.c.obj) + .debug_macro 0x000218e3 0x89 HAL/libhal.a(hal_uart.c.obj) + .debug_macro 0x0002196c 0x9c HAL/libhal.a(hal_spi.c.obj) + .debug_macro 0x00021a08 0x72 HAL/libhal.a(hal_stm32f4.c.obj) + .debug_macro 0x00021a7a 0x1eb HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_macro 0x00021c65 0x1ef HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_macro 0x00021e54 0x1e7 HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_macro 0x0002203b 0x202 HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_macro 0x0002223d 0x89 Modules/led/libled.a(led.c.obj) + .debug_macro 0x000222c6 0x77 Modules/delay/libdelay.a(delay.c.obj) + .debug_macro 0x0002233d 0x1f4 Middlewares/logging/liblogging.a(logging.c.obj) + .debug_macro 0x00022531 0xa66 Middlewares/logging/liblogging.a(logging.c.obj) + .debug_macro 0x00022f97 0x4c Middlewares/logging/liblogging.a(logging.c.obj) + .debug_macro 0x00022fe3 0x84 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_macro 0x00023067 0x147 Modules/uart/libuart.a(uart.c.obj) -.debug_line 0x00000000 0x12abe +.debug_line 0x00000000 0x106ad .debug_line 0x00000000 0x74d cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj .debug_line 0x0000074d 0xd54 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj .debug_line 0x000014a1 0xb36 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c.obj @@ -5226,33 +4900,32 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a .debug_line 0x00002c93 0x9c2 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c.obj .debug_line 0x00003655 0x28b3 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c.obj .debug_line 0x00005f08 0x1cbb cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj - .debug_line 0x00007bc3 0xd37 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - .debug_line 0x000088fa 0x79d CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj - .debug_line 0x00009097 0x6da CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj - .debug_line 0x00009771 0x25c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj - .debug_line 0x000099cd 0xdb CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj - .debug_line 0x00009aa8 0xa9c BSP/libbsp.a(bsp_init.c.obj) - .debug_line 0x0000a544 0x457 BSP/libbsp.a(stm32f407vet6_board.c.obj) - .debug_line 0x0000a99b 0x4b9 BSP/libbsp.a(bsp_board_manager.c.obj) - .debug_line 0x0000ae54 0x527 BSP/libbsp.a(bsp_w25qxx.c.obj) - .debug_line 0x0000b37b 0x762 BSP/libbsp.a(bsp_key.c.obj) - .debug_line 0x0000badd 0x7ec HAL/libhal.a(hal.c.obj) - .debug_line 0x0000c2c9 0x85f HAL/libhal.a(hal_gpio.c.obj) - .debug_line 0x0000cb28 0x846 HAL/libhal.a(hal_delay.c.obj) - .debug_line 0x0000d36e 0x87b HAL/libhal.a(hal_uart.c.obj) - .debug_line 0x0000dbe9 0x887 HAL/libhal.a(hal_spi.c.obj) - .debug_line 0x0000e470 0x803 HAL/libhal.a(hal_stm32f4.c.obj) - .debug_line 0x0000ec73 0x9cb HAL/libhal.a(hal_stm32f4_gpio.c.obj) - .debug_line 0x0000f63e 0x970 HAL/libhal.a(hal_stm32f4_uart.c.obj) - .debug_line 0x0000ffae 0x8a3 HAL/libhal.a(hal_stm32f4_delay.c.obj) - .debug_line 0x00010851 0xa97 HAL/libhal.a(hal_stm32f4_spi.c.obj) - .debug_line 0x000112e8 0x358 Modules/led/libled.a(led.c.obj) - .debug_line 0x00011640 0x301 Modules/delay/libdelay.a(delay.c.obj) - .debug_line 0x00011941 0x5b2 Middlewares/logging/liblogging.a(logging.c.obj) - .debug_line 0x00011ef3 0x7a5 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) - .debug_line 0x00012698 0x426 Modules/uart/libuart.a(uart.c.obj) + .debug_line 0x00007bc3 0xd88 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + .debug_line 0x0000894b 0x79d CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + .debug_line 0x000090e8 0x6da CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + .debug_line 0x000097c2 0x25c CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_line 0x00009a1e 0xdb CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + .debug_line 0x00009af9 0x7a1 BSP/libbsp.a(bsp_init.c.obj) + .debug_line 0x0000a29a 0x610 BSP/libbsp.a(stm32f407vet6_board.c.obj) + .debug_line 0x0000a8aa 0x536 BSP/libbsp.a(bsp_w25qxx.c.obj) + .debug_line 0x0000ade0 0x855 BSP/libbsp.a(bsp_key.c.obj) + .debug_line 0x0000b635 0x5dd HAL/libhal.a(hal.c.obj) + .debug_line 0x0000bc12 0x2dc HAL/libhal.a(hal_gpio.c.obj) + .debug_line 0x0000beee 0x282 HAL/libhal.a(hal_delay.c.obj) + .debug_line 0x0000c170 0x335 HAL/libhal.a(hal_uart.c.obj) + .debug_line 0x0000c4a5 0x3ab HAL/libhal.a(hal_spi.c.obj) + .debug_line 0x0000c850 0x23f HAL/libhal.a(hal_stm32f4.c.obj) + .debug_line 0x0000ca8f 0x915 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + .debug_line 0x0000d3a4 0x8ba HAL/libhal.a(hal_stm32f4_uart.c.obj) + .debug_line 0x0000dc5e 0x7ed HAL/libhal.a(hal_stm32f4_delay.c.obj) + .debug_line 0x0000e44b 0xa5b HAL/libhal.a(hal_stm32f4_spi.c.obj) + .debug_line 0x0000eea6 0x361 Modules/led/libled.a(led.c.obj) + .debug_line 0x0000f207 0x301 Modules/delay/libdelay.a(delay.c.obj) + .debug_line 0x0000f508 0x5bb Middlewares/logging/liblogging.a(logging.c.obj) + .debug_line 0x0000fac3 0x7a5 Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_line 0x00010268 0x445 Modules/uart/libuart.a(uart.c.obj) -.debug_str 0x00000000 0xc883d +.debug_str 0x00000000 0xca1c5 .debug_str 0x00000000 0xbf735 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32f4xx.c.obj 0xbf9b3 (size before relaxing) .debug_str 0x000bf735 0x4b0 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c.obj @@ -5267,53 +4940,51 @@ LOAD d:/arm_gcc/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard\libgcc.a 0xc0351 (size before relaxing) .debug_str 0x000c179c 0x758 cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c.obj 0xc0235 (size before relaxing) - .debug_str 0x000c1ef4 0x42c3 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj - 0xc3d60 (size before relaxing) - .debug_str 0x000c61b7 0x11f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj + .debug_str 0x000c1ef4 0x5c6d CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/main.c.obj + 0xc57ab (size before relaxing) + .debug_str 0x000c7b61 0x11f CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_it.c.obj 0xbf87d (size before relaxing) - .debug_str 0x000c62d6 0x82 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj + .debug_str 0x000c7c80 0x82 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/stm32f4xx_hal_msp.c.obj 0xbf903 (size before relaxing) - .debug_str 0x000c6358 0x534 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj + .debug_str 0x000c7d02 0x534 CMakeFiles/stm32f407vet6_cmake.dir/Core/Src/sysmem.c.obj 0x58a8 (size before relaxing) - .debug_str 0x000c688c 0x89 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj + .debug_str 0x000c8236 0x89 CMakeFiles/stm32f407vet6_cmake.dir/startup_stm32f407xx.s.obj 0xfa (size before relaxing) - .debug_str 0x000c6915 0x6e6 BSP/libbsp.a(bsp_init.c.obj) - 0xc2976 (size before relaxing) - .debug_str 0x000c6ffb 0x22f BSP/libbsp.a(stm32f407vet6_board.c.obj) - 0x4c21 (size before relaxing) - .debug_str 0x000c722a 0x14e BSP/libbsp.a(bsp_board_manager.c.obj) - 0x7199 (size before relaxing) - .debug_str 0x000c7378 0x1b2 BSP/libbsp.a(bsp_w25qxx.c.obj) - 0x4ced (size before relaxing) - .debug_str 0x000c752a 0x34d BSP/libbsp.a(bsp_key.c.obj) - 0x762f (size before relaxing) - .debug_str 0x000c7877 0x7c HAL/libhal.a(hal.c.obj) - 0xbf878 (size before relaxing) - .debug_str 0x000c78f3 0xd6 HAL/libhal.a(hal_gpio.c.obj) - 0xbfca3 (size before relaxing) - .debug_str 0x000c79c9 0xaf HAL/libhal.a(hal_delay.c.obj) - 0xbf8bf (size before relaxing) - .debug_str 0x000c7a78 0xe6 HAL/libhal.a(hal_uart.c.obj) - 0xbfac2 (size before relaxing) - .debug_str 0x000c7b5e 0xff HAL/libhal.a(hal_spi.c.obj) - 0xbfb58 (size before relaxing) - .debug_str 0x000c7c5d 0x99 HAL/libhal.a(hal_stm32f4.c.obj) - 0xbf895 (size before relaxing) - .debug_str 0x000c7cf6 0x179 HAL/libhal.a(hal_stm32f4_gpio.c.obj) - 0xbff08 (size before relaxing) - .debug_str 0x000c7e6f 0x12b HAL/libhal.a(hal_stm32f4_uart.c.obj) - 0xc0115 (size before relaxing) - .debug_str 0x000c7f9a 0x1ba HAL/libhal.a(hal_stm32f4_delay.c.obj) - 0xbfa05 (size before relaxing) - .debug_str 0x000c8154 0x176 HAL/libhal.a(hal_stm32f4_spi.c.obj) - 0xc01d8 (size before relaxing) - .debug_str 0x000c82ca 0xa3 Modules/led/libled.a(led.c.obj) - 0x425f (size before relaxing) - .debug_str 0x000c836d 0x8e Modules/delay/libdelay.a(delay.c.obj) + .debug_str 0x000c82bf 0x11a BSP/libbsp.a(bsp_init.c.obj) + 0x8013 (size before relaxing) + .debug_str 0x000c83d9 0x481 BSP/libbsp.a(stm32f407vet6_board.c.obj) + 0x9b1a (size before relaxing) + .debug_str 0x000c885a 0x1b2 BSP/libbsp.a(bsp_w25qxx.c.obj) + 0x5272 (size before relaxing) + .debug_str 0x000c8a0c 0x34d BSP/libbsp.a(bsp_key.c.obj) + 0x9ab0 (size before relaxing) + .debug_str 0x000c8d59 0x52a HAL/libhal.a(hal.c.obj) + 0x730a (size before relaxing) + .debug_str 0x000c9283 0x15c HAL/libhal.a(hal_gpio.c.obj) + 0x4a29 (size before relaxing) + .debug_str 0x000c93df 0x105 HAL/libhal.a(hal_delay.c.obj) + 0x4169 (size before relaxing) + .debug_str 0x000c94e4 0x186 HAL/libhal.a(hal_uart.c.obj) + 0x4868 (size before relaxing) + .debug_str 0x000c966a 0xff HAL/libhal.a(hal_spi.c.obj) + 0x4846 (size before relaxing) + .debug_str 0x000c9769 0x88 HAL/libhal.a(hal_stm32f4.c.obj) + 0x411f (size before relaxing) + .debug_str 0x000c97f1 0xf3 HAL/libhal.a(hal_stm32f4_gpio.c.obj) + 0xc0266 (size before relaxing) + .debug_str 0x000c98e4 0x94 HAL/libhal.a(hal_stm32f4_uart.c.obj) + 0xc0473 (size before relaxing) + .debug_str 0x000c9978 0x164 HAL/libhal.a(hal_stm32f4_delay.c.obj) + 0xbfd64 (size before relaxing) + .debug_str 0x000c9adc 0x176 HAL/libhal.a(hal_stm32f4_spi.c.obj) + 0xc052a (size before relaxing) + .debug_str 0x000c9c52 0xa3 Modules/led/libled.a(led.c.obj) + 0x4659 (size before relaxing) + .debug_str 0x000c9cf5 0x8e Modules/delay/libdelay.a(delay.c.obj) 0x3d1e (size before relaxing) - .debug_str 0x000c83fb 0x204 Middlewares/logging/liblogging.a(logging.c.obj) - 0x7a70 (size before relaxing) - .debug_str 0x000c85ff 0x19d Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) + .debug_str 0x000c9d83 0x204 Middlewares/logging/liblogging.a(logging.c.obj) + 0x7e6a (size before relaxing) + .debug_str 0x000c9f87 0x19d Modules/w25qxx/libw25qxx.a(w25qxx.c.obj) 0x4771 (size before relaxing) - .debug_str 0x000c879c 0xa1 Modules/uart/libuart.a(uart.c.obj) - 0x6a93 (size before relaxing) + .debug_str 0x000ca124 0xa1 Modules/uart/libuart.a(uart.c.obj) + 0x6e9c (size before relaxing) diff --git a/build_output.txt b/build_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b791a7a69879a2f7adb9559fa2212e26ae5aea5 GIT binary patch literal 287204 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 Zedlm-XKs&=)mpjVyN7FNmItr-{{i`j@#z2n literal 0 HcmV?d00001