Closed pratik206 closed 4 years ago
The build passes CI and on my local machine, so it is most likely something local to your build environment. I'd suggest asking in the forum (discuss.ardupilot.org) and include information required to reproduce: at a minimum your operating system, compiler version (gcc --version) and ArduPilot code branch (ie release, master, your own etc. Provide the git hash if you can).
issue is solve by modifying flash.c file
@@ -1,136 +1,138 @@ /****
****/ /*
// #pragma GCC optimize("O0") / this driver has been tested with STM32F427 and STM32F412 /
// Refer Flash memory map in the User Manual to fill the following fields per microcontroller
// optionally disable interrupts during flash writes
// the 2nd bank of flash needs to be handled differently
static const uint32_t flash_memmap[STM32_FLASH_NPAGES] = { KB(16), KB(16), KB(16), KB(16), KB(64), KB(128), KB(128), KB(128) };
static const uint32_t flash_memmap[STM32_FLASH_NPAGES] = { KB(16), KB(16), KB(16), KB(16), KB(64), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128) };
static const uint32_t flash_memmap[STM32_FLASH_NPAGES] = { KB(16), KB(16), KB(16), KB(16), KB(64), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128), KB(16), KB(16), KB(16), KB(16), KB(64), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128), KB(128)};
static const uint32_t flash_memmap[STM32_FLASH_NPAGES] = { KB(32), KB(32), KB(32), KB(32), KB(128), KB(256), KB(256), KB(256) };
static const uint32_t flash_memmap[STM32_FLASH_NPAGES] = { KB(32), KB(32), KB(32), KB(32), KB(128), KB(256), KB(256), KB(256), KB(256), KB(256), KB(256), KB(256) };
static_assert(STORAGE_FLASH_PAGE < STM32_FLASH_NPAGES, "STORAGE_FLASH_PAGE out of range");
// keep a cache of the page addresses
static uint32_t flash_pageaddr[STM32_FLASH_NPAGES]; static bool flash_pageaddr_initialised;
static bool flash_keep_unlocked;
/* Some compiler options will convert short loads and stores into byte loads
and stores. We don't want this to happen for IO reads and writes! / / # define getreg16(a) ((volatile uint16_t )(a)) / static inline uint16_t getreg16(unsigned int addr) { uint16_t retval; asm volatile("\tldrh %0, [%1]\n\t" : "=r"(retval) : "r"(addr)); return retval; } / define putreg16(v,a) ((volatile uint16_t )(a) = (v)) / static inline void putreg16(uint16_t val, unsigned int addr) { asm volatile("\tstrh %0, [%1]\n\t": : "r"(val), "r"(addr)); } / # define getreg32(a) ((volatile uint32_t )(a)) / static inline uint32_t getreg32(unsigned int addr) { uint32_t retval; asm volatile("\tldr %0, [%1]\n\t" : "=r"(retval) : "r"(addr)); return retval; } / define putreg32(v,a) / static inline void putreg32(uint32_t val, unsigned int addr) { (volatile uint32_t *)(addr) = val; } static void stm32_flash_wait_idle(void) { __DSB();
while ((FLASH->SR1 & (FLASH_SR_BSY|FLASH_SR_QW|FLASH_SR_WBNE)) || (FLASH->SR2 & (FLASH_SR_BSY|FLASH_SR_QW|FLASH_SR_WBNE))) { // nop }
while (FLASH->SR & FLASH_SR_BSY) { // nop }
} static void stm32_flash_clear_errors(void) {
FLASH->CCR1 = ~0; FLASH->CCR2 = ~0;
FLASH->SR = 0xF3;
} static void stm32_flash_unlock(void) { if (flash_keep_unlocked) { return; } stm32_flash_wait_idle();
if (FLASH->CR1 & FLASH_CR_LOCK) { / Unlock sequence / FLASH->KEYR1 = FLASH_KEY1; FLASH->KEYR1 = FLASH_KEY2; } if (FLASH->CR2 & FLASH_CR_LOCK) { / Unlock sequence / FLASH->KEYR2 = FLASH_KEY1; FLASH->KEYR2 = FLASH_KEY2; }
if (FLASH->CR & FLASH_CR_LOCK) { / Unlock sequence / FLASH->KEYR = FLASH_KEY1; FLASH->KEYR = FLASH_KEY2; }
// disable the data cache - see stm32 errata 2.1.11 FLASH->ACR &= ~FLASH_ACR_DCEN;
} void stm32_flash_lock(void) { if (flash_keep_unlocked) { return; }
if (FLASH->SR1 & FLASH_SR_QW) { FLASH->CR1 |= FLASH_CR_FW; } if (FLASH->SR2 & FLASH_SR_QW) { FLASH->CR2 |= FLASH_CR_FW; } stm32_flash_wait_idle(); FLASH->CR1 |= FLASH_CR_LOCK; FLASH->CR2 |= FLASH_CR_LOCK;
stm32_flash_wait_idle(); FLASH->CR |= FLASH_CR_LOCK;
// reset and re-enable the data cache - see stm32 errata 2.1.11 FLASH->ACR |= FLASH_ACR_DCRST; FLASH->ACR &= ~FLASH_ACR_DCRST; FLASH->ACR |= FLASH_ACR_DCEN;
} / get the memory address of a page / uint32_t stm32_flash_getpageaddr(uint32_t page) { if (page >= STM32_FLASH_NPAGES) { return 0; }
return STM32_FLASH_BASE + page STM32_FLASH_FIXED_PAGE_SIZE 1024;
if (!flash_pageaddr_initialised) { uint32_t address = STM32_FLASH_BASE; uint8_t i; for (i = 0; i < STM32_FLASH_NPAGES; i++) { flash_pageaddr[i] = address; address += stm32_flash_getpagesize(i); } flash_pageaddr_initialised = true; } return flash_pageaddr[page];
} / get size in bytes of a page / uint32_t stm32_flash_getpagesize(uint32_t page) {
(void)page; return STM32_FLASH_FIXED_PAGE_SIZE * 1024;
return flash_memmap[page];
} / return total number of pages / uint32_t stm32_flash_getnumpages() { return STM32_FLASH_NPAGES; } bool stm32_flash_ispageerased(uint32_t page) { uint32_t addr; uint32_t count; if (page >= STM32_FLASH_NPAGES) { return false; } for (addr = stm32_flash_getpageaddr(page), count = stm32_flash_getpagesize(page); count; count -= 4, addr += 4) { uint32_t v = getreg32(addr); if (v != 0xffffffff) { return false; } } return true; } / erase a page / bool stm32_flash_erasepage(uint32_t page) { if (page >= STM32_FLASH_NPAGES) { return false; }
syssts_t sts = chSysGetStatusAndLockX();
stm32_flash_wait_idle(); stm32_flash_unlock(); // clear any previous errors stm32_flash_clear_errors();
if (page < 8) { // first bank FLASH->SR1 = ~0; stm32_flash_wait_idle(); uint32_t snb = page << 8; // use 32 bit operations FLASH->CR1 = FLASH_CR_PSIZE_1 | snb | FLASH_CR_SER; FLASH->CR1 |= FLASH_CR_START; while (FLASH->SR1 & FLASH_SR_QW) ; } else { // second bank FLASH->SR2 = ~0; stm32_flash_wait_idle(); uint32_t snb = (page-8) << 8; // use 32 bit operations FLASH->CR2 = FLASH_CR_PSIZE_1 | snb | FLASH_CR_SER; FLASH->CR2 |= FLASH_CR_START; while (FLASH->SR2 & FLASH_SR_QW) ; }
FLASH->CR = FLASH_CR_PER; FLASH->AR = stm32_flash_getpageaddr(page); FLASH->CR |= FLASH_CR_STRT;
// the snb mask is not contiguous, calculate the mask for the page uint8_t snb = (((page % 12) << 3) | ((page / 12) << 7)); // use 32 bit operations FLASH->CR = FLASH_CR_PSIZE_1 | snb | FLASH_CR_SER; FLASH->CR |= FLASH_CR_STRT;
stm32_flash_wait_idle(); stm32_cacheBufferInvalidate((void*)stm32_flash_getpageaddr(page), stm32_flash_getpagesize(page)); stm32_flash_lock();
chSysRestoreStatusX(sts);
return stm32_flash_ispageerased(page); }
/ the H7 needs special handling, and only writes 32 bytes at a time / static bool stm32h7_flash_write32(uint32_t addr, const void buf) { volatile uint32_t CR, CCR, SR; if (addr - STM32_FLASH_BASE < 8 STM32_FLASH_FIXED_PAGE_SIZE 1024) { CR = &FLASH->CR1; CCR = &FLASH->CCR1; SR = &FLASH->SR1; } else { CR = &FLASH->CR2; CCR = &FLASH->CCR2; SR = &FLASH->SR2; } stm32_flash_wait_idle(); CCR = ~0; CR |= FLASH_CR_PG; const uint32_t v = (const uint32_t )buf; uint8_t i; for (i=0; i<8; i++) { while (SR & (FLASH_SR_BSY|FLASH_SR_QW)) ; putreg32(v, addr); v++; addr += 4; } __DSB(); stm32_flash_wait_idle(); CCR = ~0; CR &= ~FLASH_CR_PG; return true; } static bool stm32_flash_write_h7(uint32_t addr, const void buf, uint32_t count) { uint8_t b = (uint8_t )buf; if ((count & 0x1F) || (addr & 0x1F)) { // only allow 256 bit aligned writes return false; } stm32_flash_unlock(); while (count >= 32) { if (memcmp((void)addr, b, 32) != 0 && !stm32h7_flash_write32(addr, b)) { return false; } // check contents if (memcmp((void *)addr, b, 32) != 0) { stm32_flash_lock(); return false; } addr += 32; count -= 32; b += 32; } stm32_flash_lock(); return true; }
static bool stm32_flash_write_f4f7(uint32_t addr, const void buf, uint32_t count) { uint8_t b = (uint8_t )buf; / STM32 requires half-word access / if (count & 1) { return false; } if ((addr+count) >= STM32_FLASH_BASE+STM32_FLASH_SIZE) { return false; } / Get flash ready and begin flashing */ if (!(RCC->CR & RCC_CR_HSION)) { return false; }
syssts_t sts = chSysGetStatusAndLockX();
stm32_flash_unlock(); // clear previous errors stm32_flash_clear_errors(); stm32_flash_wait_idle(); // do as much as possible with 32 bit writes while (count >= 4 && (addr & 3) == 0) { FLASH->CR &= ~(FLASH_CR_PSIZE); FLASH->CR |= FLASH_CR_PSIZE_1 | FLASH_CR_PG; const uint32_t v1 = (uint32_t )b; putreg32(v1, addr); // ensure write ordering with cache __DSB();
stm32_flash_wait_idle();
const uint32_t v2 = getreg32(addr);
if (v2 != v1) {
FLASH->CR &= ~(FLASH_CR_PG);
goto failed;
}
count -= 4;
b += 4;
addr += 4;
} // the rest as 16 bit while (count >= 2) { FLASH->CR &= ~(FLASH_CR_PSIZE); FLASH->CR |= FLASH_CR_PSIZE_0 | FLASH_CR_PG; putreg16((uint16_t )b, addr); // ensure write ordering with cache __DSB();
stm32_flash_wait_idle();
if (getreg16(addr) != *(uint16_t *)b) {
FLASH->CR &= ~(FLASH_CR_PG);
goto failed;
}
count -= 2;
b += 2;
addr += 2;
} FLASH->CR &= ~(FLASH_CR_PG); stm32_flash_lock();
chSysRestoreStatusX(sts);
return true; failed: stm32_flash_lock();
chSysRestoreStatusX(sts);
return false; }
uint32_t _flash_fail_line; uint32_t _flash_fail_addr; uint32_t _flash_fail_count; uint8_t *_flash_fail_buf;
static bool stm32_flash_write_f1(uint32_t addr, const void buf, uint32_t count) { uint8_t b = (uint8_t )buf; / STM32 requires half-word access */ if (count & 1) { _flash_fail_line = LINE; return false; } if ((addr+count) >= STM32_FLASH_BASE+STM32_FLASH_SIZE) { _flash_fail_line = LINE; return false; }
syssts_t sts = chSysGetStatusAndLockX();
stm32_flash_unlock(); stm32_flash_wait_idle(); // program in 16 bit steps while (count >= 2) { FLASH->CR = FLASH_CR_PG; putreg16((uint16_t )b, addr); stm32_flash_wait_idle(); FLASH->CR = 0; if (getreg16(addr) != (uint16_t )b) { _flash_fail_line = LINE; _flash_fail_addr = addr; _flash_fail_count = count; _flash_fail_buf = b; goto failed; } count -= 2; b += 2; addr += 2; } stm32_flash_lock();
chSysRestoreStatusX(sts);
return true; failed: stm32_flash_lock();
chSysRestoreStatusX(sts);
return false; }
bool stm32_flash_write(uint32_t addr, const void *buf, uint32_t count) {
return stm32_flash_write_f1(addr, buf, count);
return stm32_flash_write_f4f7(addr, buf, count);
return stm32_flash_write_h7(addr, buf, count);
}
void stm32_flash_keep_unlocked(bool set)
{
if (set && !flash_keep_unlocked) {
stm32_flash_unlock();
flash_keep_unlocked = true;
} else if (!set && flash_keep_unlocked) {
flash_keep_unlocked = false;
stm32_flash_lock();
}
}
On Wed, 10 Jun 2020, pratik206 wrote:
../../libraries/AP_HAL_ChibiOS/hwdef/common/flash.c:131:15: note: in expansion of macro 'STORAGE_FLASH_PAGE' static_assert(STORAGE_FLASH_PAGE < STM32_FLASH_NPAGES,
This should already be fixed in master by 6a1f43d5df4867672e0063f4af031d3d5d0ae856
... but really, adding a minimum-compiler-version is probably something we ought to do.
root@DESKTOP-HF52UL6:~/GitHub1/ardupilot# ./waf copter Waf: Entering directory `/root/GitHub1/ardupilot/build/mRoX21-777' Checking for env.py env added BOARD_FLASH_SIZE=2048 env added APJ_BOARD_TYPE=STM32F777xx env added OPTIMIZE=-O2 env added USBID=0x1209/0x5740 env added MAIN_STACK=0x400 env added APJ_BOARD_ID=136 env added HAL_WITH_UAVCAN=1 env added CORTEX=cortex-m7 env added FLASH_RESERVE_START_KB=96 env added CHIBIOS_BUILD_FLAGS=USE_FATFS=yes MCU=cortex-m7 ENV_UDEFS=-DCHPRINTF_USE_FLOAT=1 CHIBIOS_PLATFORM_MK=os/hal/ports/STM32/STM32F7xx/platform.mk CHIBIOS_STARTUP_MK=os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32f7xx.mk env added IOMCU_FW=0 env appended CPU_FLAGS=['-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-DARM_MATH_CM7', '-u_printf_float'] env added PERIPH_FW=0 env added PROCESS_STACK=0x2000 Padded 16 bytes for bootloader.bin to 16576 Embedding file bootloader.bin:/root/GitHub1/ardupilot/Tools/bootloaders/mRoX21-777_bl.bin Embedding file hwdef.dat:/root/GitHub1/ardupilot/build/mRoX21-777/hw.dat Embedding file io_firmware.bin:Tools/IO_Firmware/iofirmware_lowpolh.bin [ 9/10] Linking build/mRoX21-777/modules/ChibiOS/libch.a [1/1] ChibiOS: Compiling flash.c
In file included from ../../libraries/AP_HAL_ChibiOS/hwdef/common/chconf.h:31:0, from ../../modules/ChibiOS/os/rt/include/ch.h:90, from ../../modules/ChibiOS/os/hal/osal/rt/osal.h:32, from ../../modules/ChibiOS/os/hal/include/hal.h:28, from ../../libraries/AP_HAL_ChibiOS/hwdef/common/flash.h:18, from ../../libraries/AP_HAL_ChibiOS/hwdef/common/flash.c:51: ./hwdef.h:57:28: error: expected declaration specifiers or '...' before numeric constant
define STORAGE_FLASH_PAGE 1
../../libraries/AP_HAL_ChibiOS/hwdef/common/flash.c:131:15: note: in expansion of macro 'STORAGE_FLASH_PAGE' static_assert(STORAGE_FLASH_PAGE < STM32_FLASH_NPAGES, ^ ../../libraries/AP_HAL_ChibiOS/hwdef/common/flash.c:132:15: error: expected declaration specifiers or '...' before string constant "STORAGE_FLASH_PAGE out of range"); ^ make: *** [modules/ChibiOS/obj/flash.o] Error 1
Waf: Leaving directory `/root/GitHub1/ardupilot/build/mRoX21-777' Build failed -> task in 'ChibiOS_lib' failed (exit status 2): {task 139666074450112: ChibiOS_lib hwdef.h,hw.dat,include_dirs,board.c,board.h,bouncebuffer.c,bouncebuffer.h,chconf.h,ffconf.h,flash.c,flash.h,halconf.h,hrt.c,hrt.h,malloc.c,mcuconf.h,ppm.h,spi_hook.h,stdio.h,stm32_util.c,stm32_util.h,stm32f1_mcuconf.h,stm32f3_mcuconf.h,stm32f47_mcuconf.h,stm32h7_mcuconf.h,stubs.c,usbcfg.c,usbcfg.h,usbcfg_common.c,usbcfg_dualcdc.c,watchdog.c,watchdog.h,chibios_board.mk,chibios_common.mk,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,hwdef.h,stm32h7_mcuconf.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,buzzer.c,buzzer.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,board.c,board.h,hal.h,hal_adc.h,hal_buffers.h,hal_can.h,hal_channels.h,hal_crypto.h,hal_dac.h,hal_eicu.h,hal_files.h,hal_gpt.h,hal_i2c.h,hal_i2s.h,hal_icu.h,hal_ioblock.h,hal_mac.h,hal_mii.h,hal_mmc_spi.h,hal_mmcsd.h,hal_objects.h,hal_pal.h,hal_persistent.h,hal_pwm.h,hal_queues.h,hal_rtc.h,hal_sdc.h,hal_serial.h,hal_serial_usb.h,hal_sio.h,hal_spi.h,hal_st.h,hal_streams.h,hal_trng.h,hal_uart.h,hal_usb.h,hal_usb_cdc.h,hal_wdg.h,hal_wspi.h,hal_mfs.c,hal_mfs.h,hal_flash_device.c,hal_flash_device.h,hal_flash_device.c,hal_flash_device.h,hal_serial_nor.c,hal_serial_nor.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_displays.h,hal_flash.c,hal_flash.h,hal_accelerometer.h,hal_barometer.h,hal_compass.h,hal_gyroscope.h,hal_hygrometer.h,hal_sensors.h,hal_thermometer.h,chprintf.c,chprintf.h,memstreams.c,memstreams.h,nullstreams.c,nullstreams.h,osal_vt.c,osal_vt.h,osal.c,osal.h,osal.c,osal.h,osal.c,osal.h,osal.c,osal.h,avr_pins.h,avr_timers.h,hal_lld.c,hal_lld.h,hal_adc_lld.c,hal_adc_lld.h,hal_ext_lld.c,hal_ext_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_gpt_lld.c,hal_gpt_lld.h,hal_icu_lld.c,hal_icu_lld.h,hal_pwm_lld.c,hal_pwm_lld.h,hal_st_lld.c,hal_st_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_usb_lld.c,hal_usb_lld.h,hal_lld.c,hal_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_st_lld.c,hal_st_lld.h,hal_uart_lld.c,hal_uart_lld.h,avr_pins.h,avr_timers.h,hal_lld.c,hal_lld.h,hal_crypto_lld.c,hal_crypto_lld.h,hal_dac_lld.c,hal_dac_lld.h,xmega_dma_lld.c,xmega_dma_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_st_lld.c,hal_st_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_uart_lld.c,hal_uart_lld.h,hal_wdg_lld.c,hal_wdg_lld.h,hal_lld.c,hal_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_st_lld.c,hal_st_lld.h,vic.c,vic.h,sama_aes_lld.c,sama_aes_lld.h,sama_crypto_lld.c,sama_crypto_lld.h,sama_gcm_lld.c,sama_gcm_lld.h,sama_sha_lld.c,sama_sha_lld.h,sama_tdes_lld.c,sama_tdes_lld.h,sama_xdmac.c,sama_xdmac.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_mac_lld.c,hal_mac_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_trng_lld.c,hal_trng_lld.h,hal_rtc_lld.c,hal_rtc_lld.h,ch_sdmmc.c,ch_sdmmc.h,ch_sdmmc_cmds.c,ch_sdmmc_cmds.h,ch_sdmmc_device.c,ch_sdmmc_device.h,ch_sdmmc_macros.h,ch_sdmmc_mmc.c,ch_sdmmc_mmc.h,ch_sdmmc_sama5d2.h,ch_sdmmc_sd.c,ch_sdmmc_sd.h,ch_sdmmc_sdio.c,ch_sdmmc_sdio.h,ch_sdmmc_trace.h,sama_sdmmc_conf.h,sama_sdmmc_lld.c,sama_sdmmc_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_uart_lld.c,hal_uart_lld.h,hal_wdg_lld.c,hal_wdg_lld.h,hal_crypto_lld.c,hal_crypto_lld.h,hal_lld.c,hal_lld.h,hal_st_lld.c,hal_st_lld.h,hal_tc_lld.c,hal_tc_lld.h,sama_aic.c,sama_aic.h,sama_cache.c,sama_cache.h,sama_classd.c,sama_classd.h,sama_lcdc.c,sama_lcdc.h,sama_matrix.c,sama_matrix.h,sama_onewire.c,sama_onewire.h,sama_pmc.h,sama_registry.h,sama_rstc.h,sama_secumod.c,sama_secumod.h,sama_tc_lld.c,sama_tc_lld.h,hal_spi_lld.c,hal_spi_lld.h,spc5_dspi.h,spc5_edma.c,spc5_edma.h,hal_serial_lld.c,hal_serial_lld.h,hal_serial_lld.c,hal_serial_lld.h,spc5_linflex.h,hal_pal_lld.c,hal_pal_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_st_lld.c,hal_st_lld.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc560bc.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc560b.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc560d.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc560p.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc563m.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc564a.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc56ec.h,hal_lld.c,hal_lld.h,registers.h,spc5_registry.h,typedefs.h,xpc56el.h,hal_adc_lld.c,hal_adc_lld.h,hal_adc_lld.c,hal_adc_lld.h,hal_adc_lld.c,hal_adc_lld.h,hal_adc_lld.c,hal_adc_lld.h,stm32_bdma.c,stm32_bdma.h,hal_can_lld.c,hal_can_lld.h,hal_crypto_lld.c,hal_crypto_lld.h,hal_dac_lld.c,hal_dac_lld.h,stm32_dma.c,stm32_dma.h,stm32_dma.c,stm32_dma.h,stm32_exti.c,stm32_exti.h,hal_pal_lld.c,hal_pal_lld.h,hal_pal_lld.c,hal_pal_lld.h,stm32_gpio.h,hal_pal_lld.c,hal_pal_lld.h,stm32_gpio.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_mac_lld.c,hal_mac_lld.h,hal_wspi_lld.c,hal_wspi_lld.h,hal_usb_lld.c,hal_usb_lld.h,stm32_otg.h,hal_wspi_lld.c,hal_wspi_lld.h,hal_trng_lld.c,hal_trng_lld.h,hal_rtc_lld.c,hal_rtc_lld.h,hal_rtc_lld.c,hal_rtc_lld.h,hal_sdc_lld.c,hal_sdc_lld.h,hal_sdc_lld.c,hal_sdc_lld.h,hal_sdc_lld.c,hal_sdc_lld.h,hal_i2s_lld.c,hal_i2s_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_i2s_lld.c,hal_i2s_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_eicu_lld.c,hal_eicu_lld.h,hal_gpt_lld.c,hal_gpt_lld.h,hal_icu_lld.c,hal_icu_lld.h,hal_pwm_lld.c,hal_pwm_lld.h,hal_st_lld.c,hal_st_lld.h,stm32_tim.h,hal_serial_lld.c,hal_serial_lld.h,hal_uart_lld.c,hal_uart_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_uart_lld.c,hal_uart_lld.h,hal_usb_lld.c,hal_usb_lld.h,stm32_usb.h,hal_wdg_lld.c,hal_wdg_lld.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_adc_lld.c,hal_adc_lld.h,hal_lld.c,hal_lld.h,hal_lld_f100.h,hal_lld_f103.h,hal_lld_f105_f107.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_adc_lld.c,hal_adc_lld.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,hal_lld_type1.h,hal_lld_type2.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_dmamux.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_adc_lld.c,hal_adc_lld.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,hal_lld.c,hal_lld.h,stm32_dmamux.h,stm32_isr.c,stm32_isr.h,stm32_rcc.h,stm32_registry.h,cache.h,mpu_v7m.h,nvic.c,nvic.h,console.c,console.h,hal_pal_lld.c,hal_pal_lld.h,hal_st_lld.c,hal_st_lld.h,hal_lld.c,hal_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_lld.c,hal_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal.c,hal_adc.c,hal_buffers.c,hal_can.c,hal_crypto.c,hal_dac.c,hal_eicu.c,hal_gpt.c,hal_i2c.c,hal_i2s.c,hal_icu.c,hal_mac.c,hal_mmc_spi.c,hal_mmcsd.c,hal_pal.c,hal_pwm.c,hal_queues.c,hal_rtc.c,hal_sdc.c,hal_serial.c,hal_serial_usb.c,hal_sio.c,hal_spi.c,hal_st.c,hal_trng.c,hal_uart.c,hal_usb.c,hal_wdg.c,hal_wspi.c,board.c,board.h,hal_adc_lld.c,hal_adc_lld.h,hal_can_lld.c,hal_can_lld.h,hal_crypto_lld.c,hal_crypto_lld.h,hal_dac_lld.c,hal_dac_lld.h,hal_gpt_lld.c,hal_gpt_lld.h,hal_i2c_lld.c,hal_i2c_lld.h,hal_i2s_lld.c,hal_i2s_lld.h,hal_icu_lld.c,hal_icu_lld.h,hal_lld.c,hal_lld.h,hal_mac_lld.c,hal_mac_lld.h,hal_pal_lld.c,hal_pal_lld.h,hal_pwm_lld.c,hal_pwm_lld.h,hal_rtc_lld.c,hal_rtc_lld.h,hal_sdc_lld.c,hal_sdc_lld.h,hal_serial_lld.c,hal_serial_lld.h,hal_sio_lld.c,hal_sio_lld.h,hal_spi_lld.c,hal_spi_lld.h,hal_st_lld.c,hal_st_lld.h,hal_trng_lld.c,hal_trng_lld.h,hal_uart_lld.c,hal_uart_lld.h,hal_usb_lld.c,hal_usb_lld.h,hal_wdg_lld.c,hal_wdg_lld.h,hal_wspi_lld.c,hal_wspi_lld.h,halconf.h,mcuconf.h,osal.c,osal.h,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,board.mk,hal.mk,hal_mfs.mk,hal_flash_device.mk,hal_flash_device.mk,streams.mk,osal.mk,osal.mk,osal.mk,osal.mk,platform.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,platform.mk,driver.mk,driver.mk,driver.mk,platform.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,platform.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,driver.mk,platform.mk,platform.mk,platform_f105_f107.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform.mk,platform_l432.mk,platform.mk,platform.mk,platform.mk,board.mk,osal.mk,platform.mk,ap_romfs_embedded.h -> libch.a} (run with -v to display more information)