#include #include "drv_io.h" #include "drv_can.h" #include "drv_watch_dog.h" #include "app.h" #include "app_rs485_1.h" #include "app_rs485_2.h" #include "app_can.h" #include "measure_temprature.h" #include "measure_vol.h" #include "app_bms_1.h" #include "app_bms_2.h" #include "app_end_ctr.h" #include "app_adas.h" #include "hardware_test.h" #include "low_power.h" #include "sw_build_info.h" #include "shark_xl.h" #include "drv_usart.h" #ifdef CONFIG_CAN_IAP extern void qws_iap_write_magic(uint32_t magic); const uint8_t iap_board_name[] __attribute__((at(0x8002800))) = "PS100"; const uint8_t soft_version[] __attribute__((at(0x8002A00))) = CONFIG_VERSION; const uint8_t iap_volume[] __attribute__((at(0x8002C00))) = "App"; #else const uint8_t soft_version[] = CONFIG_VERSION; #endif uint8_t sn[PS100_SERIAL_NUM_SIZE]; uint32_t g_event = NO_EVENT; void Flash_flag_clear(void) { fmc_flag_clear(FMC_FLAG_BANK0_PGERR | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_END); } void Check_SN(void) { uint32_t capacity = (REG32(0x1FFFF7E0) & 0xFFFF) << 10; uint32_t address = 0x08000000 + (capacity - SN_FLASH_ADDRESS); uint8_t i = 0; uint16_t df_value = 0x3030; if (REG32(address) < 0xFFFFFFFF) { memcpy(sn,(uint8_t*)address,sizeof(sn)); return; } fmc_unlock(); Flash_flag_clear(); fmc_page_erase(address); i = 0; while(i