修改存入flash的时间

This commit is contained in:
起床就犯困 2024-11-08 16:51:14 +08:00
parent 8f1a9d9b2b
commit daec605235
17 changed files with 18539 additions and 18501 deletions

View File

@ -1,6 +1,6 @@
Address=0x08000000 Address=0x08000000
Target Path=obj\mppt_Nos_V0.4.hex Target Path=obj\mppt_Nos_V0.4.hex
Erase All=true Erase All=false
Program=true Program=true
Verify=true Verify=true
Reset=true Reset=true

View File

@ -46,9 +46,9 @@ typedef struct _recv_config_info{
uint8_t HighSideMosTemperature_stop[2]; /* 当上桥温度达到该值时,停止输出 (°C) */ uint8_t HighSideMosTemperature_stop[2]; /* 当上桥温度达到该值时,停止输出 (°C) */
uint8_t HighSideMosTemperature_end[2]; /* 当上桥温度上升到该值时,降低功率运行 (°C) */ uint8_t HighSideMosTemperature_end[2]; /* 当上桥温度上升到该值时,降低功率运行 (°C) */
uint8_t HighSideMosTemperature_start[2];/* 当上桥温度降低到该值时,按照正常情况输出 (°C) */ uint8_t HighSideMosTemperature_start[2];/* 当上桥温度降低到该值时,按照正常情况输出 (°C) */
uint8_t loopImpedance[2]; /* 回路阻抗大小 (Ω) */ // uint8_t loopImpedance[2]; /* 回路阻抗大小 (Ω) */
uint8_t totalElectricityConsumption[2]; /* 总电量消耗 */ // uint8_t totalElectricityConsumption[2]; /* 总电量消耗 */
uint8_t totalChargCapacity[2]; /* 总充电电量 */ // uint8_t totalChargCapacity[2]; /* 总充电电量 */
uint8_t checkSolarOpenCircuitVTime[2]; /* 启动任务中太阳能板开路电压检测间隔时间 (S) */ uint8_t checkSolarOpenCircuitVTime[2]; /* 启动任务中太阳能板开路电压检测间隔时间 (S) */
// uint8_t registerRefreshTime[2]; /* 寄存器数据刷新时间 (S) */ // uint8_t registerRefreshTime[2]; /* 寄存器数据刷新时间 (S) */
@ -88,9 +88,9 @@ typedef struct _config_info{
float_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 */ float_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 */
float_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 */ float_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 */
float_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 */ float_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 */
float_t loopImpedance; /* 回路阻抗大小 (Ω) */ // float_t loopImpedance; /* 回路阻抗大小 (Ω) */
float_t totalElectricityConsumption; /* 总电量消耗 */ // float_t totalElectricityConsumption; /* 总电量消耗 */
float_t totalChargCapacity; /* 总充电电量 */ // float_t totalChargCapacity; /* 总充电电量 */
uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测时间 */ uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测时间 */
// uint16_t registerRefreshTime; /* 寄存器数据刷新时间 */ // uint16_t registerRefreshTime; /* 寄存器数据刷新时间 */
@ -109,15 +109,24 @@ typedef struct _config_info{
#define CONFIG_SAVE_addr (0) #define CONFIG_SAVE_addr (0)
#define CONFIG_SAVE_ADDR_BEGIN (CONFIG_INFO_SIZE) #define CONFIG_SAVE_ADDR_BEGIN (CONFIG_INFO_SIZE)
#define CONFIG_SAVE_ADDR_END (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE) #define CONFIG_SAVE_ADDR_END (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE)
#define LoopImpedance_SAVE_addr (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE + 10)
#define totalElectricityConsumption_SAVE_addr (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE + 20)
#define totalChargCapacity_SAVE_addr (CONFIG_INFO_SIZE + CONFIG_INFO_SIZE + 30)
void save_config_info(config_info *save_config_info); void save_config_info(config_info *save_config_info);
void read_config_info(config_info *output_config_info); void read_config_info(config_info *output_config_info);
void checkFlashContent(void); void checkFlashContent(void);
void saveLoopImpedance(float_t *loopImpedance);
void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity);
void config_info_start(void); void config_info_start(void);
void read_and_process_config_data(void); void read_and_process_config_data(void);
void saveLoopImpedance(float_t *loopImpedance);
void readLoopImpedance(float_t *loopImpedance);
void savetotalElectricityConsumption(float_t *totalElectricityConsumption);
void readtotalElectricityConsumption(float_t *totalElectricityConsumption);
void savetotalChargCapacity(float_t *totalChargCapacity);
void readtotalChargCapacity(float_t *totalChargCapacity);
extern uint16_t configCheckFunc(uint8_t *arr_buff, uint8_t len); extern uint16_t configCheckFunc(uint8_t *arr_buff, uint8_t len);
#endif /* APP_INC_INFLASH_H_ */ #endif /* APP_INC_INFLASH_H_ */

View File

@ -535,7 +535,9 @@ void HY_MsgProcFunc_electricityStatistics(device_handle device, void *pMsg, uint
/* 꿴璂빈헌왕 */ /* 꿴璂빈헌왕 */
g_otherParameter.totalChargCapacity = 0; g_otherParameter.totalChargCapacity = 0;
g_otherParameter.totalElectricityConsumption = 0; g_otherParameter.totalElectricityConsumption = 0;
saveTotalPower(&g_otherParameter.totalElectricityConsumption, &g_otherParameter.totalChargCapacity); // saveTotalPower(&g_otherParameter.totalElectricityConsumption, &g_otherParameter.totalChargCapacity);
savetotalChargCapacity(&g_otherParameter.totalChargCapacity);
savetotalElectricityConsumption(&g_otherParameter.totalElectricityConsumption);
HY_electricityStatisticsQuery *Tpack = (HY_electricityStatisticsQuery *)pMsg; HY_electricityStatisticsQuery *Tpack = (HY_electricityStatisticsQuery *)pMsg;
pack.frameNumber = Tpack->frameNumber; pack.frameNumber = Tpack->frameNumber;

View File

@ -121,9 +121,9 @@ void checkFlashContent(void)
.HighSideMosTemperature_stop = 100, .HighSideMosTemperature_stop = 100,
.HighSideMosTemperature_end = 90, .HighSideMosTemperature_end = 90,
.HighSideMosTemperature_start = 50, .HighSideMosTemperature_start = 50,
.loopImpedance = 0.0, // .loopImpedance = 0.0,
.totalElectricityConsumption = 0.0, // .totalElectricityConsumption = 0.0,
.totalChargCapacity = 0.0, // .totalChargCapacity = 0.0,
.checkSolarOpenCircuitVTime = 10, .checkSolarOpenCircuitVTime = 10,
// .registerRefreshTime = 1, // .registerRefreshTime = 1,
@ -138,41 +138,41 @@ void checkFlashContent(void)
save_config_info(&configInfo); save_config_info(&configInfo);
} }
/** ///**
* @brief // * @brief 保存回路阻抗的值
* @param loopImpedance // * @param loopImpedance 需要保存的回路阻抗的值
* @retval // * @retval
* // *
*/ // */
void saveLoopImpedance(float_t *loopImpedance) //void saveLoopImpedance(float_t *loopImpedance)
{ //{
config_info temp_configInfo; // config_info temp_configInfo;
read_config_info(&temp_configInfo); // read_config_info(&temp_configInfo);
//
temp_configInfo.loopImpedance = *loopImpedance; // temp_configInfo.loopImpedance = *loopImpedance;
//
temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2); // temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
save_config_info(&temp_configInfo); // save_config_info(&temp_configInfo);
} //}
//
/** ///**
* @brief // * @brief 保存总充电电量和总消耗电量的值
* @param totalElectricityConsumption // * @param totalElectricityConsumption 需要保存的总消耗电量
* totalChargCapacity // * totalChargCapacity 需要保存的总充电电量
* @retval // * @retval
* // *
*/ // */
void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity) //void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity)
{ //{
config_info temp_configInfo; // config_info temp_configInfo;
read_config_info(&temp_configInfo); // read_config_info(&temp_configInfo);
//
temp_configInfo.totalElectricityConsumption = *totalElectricityConsumption; // temp_configInfo.totalElectricityConsumption = *totalElectricityConsumption;
temp_configInfo.totalChargCapacity = *totalChargCapacity; // temp_configInfo.totalChargCapacity = *totalChargCapacity;
//
temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2); // temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
save_config_info(&temp_configInfo); // save_config_info(&temp_configInfo);
} //}
/** /**
* @brief * @brief
@ -193,7 +193,7 @@ void config_info_start(void)
g_controlParameter.stopSolarOpenCircuitV = temp_configInfo.stopSolarOpenCircuitV; g_controlParameter.stopSolarOpenCircuitV = temp_configInfo.stopSolarOpenCircuitV;
g_controlParameter.constantVoltageChargeV = temp_configInfo.constantVoltageChargeV; g_controlParameter.constantVoltageChargeV = temp_configInfo.constantVoltageChargeV;
g_controlParameter.FloatV = temp_configInfo.FloatChargeV; g_controlParameter.FloatV = temp_configInfo.FloatChargeV;
g_controlParameter.loopImpedance = temp_configInfo.loopImpedance; // g_controlParameter.loopImpedance = temp_configInfo.loopImpedance;
g_controlParameter.HighSideMosTemperature_stop = temp_configInfo.HighSideMosTemperature_stop; g_controlParameter.HighSideMosTemperature_stop = temp_configInfo.HighSideMosTemperature_stop;
g_controlParameter.HighSideMosTemperature_end = temp_configInfo.HighSideMosTemperature_end; g_controlParameter.HighSideMosTemperature_end = temp_configInfo.HighSideMosTemperature_end;
g_controlParameter.HighSideMosTemperature_start = temp_configInfo.HighSideMosTemperature_start; g_controlParameter.HighSideMosTemperature_start = temp_configInfo.HighSideMosTemperature_start;
@ -242,8 +242,8 @@ void config_info_start(void)
g_otherParameter.HighSideMos_Temperature = 0; g_otherParameter.HighSideMos_Temperature = 0;
g_otherParameter.Solar_In_Circuit_Voltage = 0; g_otherParameter.Solar_In_Circuit_Voltage = 0;
g_otherParameter.Charg_BatteryCurrent = 0; g_otherParameter.Charg_BatteryCurrent = 0;
g_otherParameter.totalElectricityConsumption = temp_configInfo.totalElectricityConsumption; // g_otherParameter.totalElectricityConsumption = temp_configInfo.totalElectricityConsumption;
g_otherParameter.totalChargCapacity = temp_configInfo.totalChargCapacity; // g_otherParameter.totalChargCapacity = temp_configInfo.totalChargCapacity;
g_otherParameter.SOC = 0; g_otherParameter.SOC = 0;
g_otherParameter.chargMos_State = 0; g_otherParameter.chargMos_State = 0;
g_otherParameter.DischargMos_State = 0; g_otherParameter.DischargMos_State = 0;
@ -283,6 +283,10 @@ void config_info_start(void)
} }
} }
readLoopImpedance(&g_controlParameter.loopImpedance);
readtotalElectricityConsumption(&g_otherParameter.totalElectricityConsumption);
readtotalChargCapacity(&g_otherParameter.totalChargCapacity);
// printf(""); // printf("");
printf("%s\n", g_otherParameter.versionInformation); printf("%s\n", g_otherParameter.versionInformation);
@ -518,35 +522,35 @@ void read_and_process_config_data(void)
goto err; goto err;
} }
/* 判断回路阻抗大小是否正确 */ // /* 判断回路阻抗大小是否正确 */
save_configInfo.loopImpedance = // save_configInfo.loopImpedance =
(float_t)(pack->loopImpedance[0] << 8 | pack->loopImpedance[1]) / enlargeScale / 10; // (float_t)(pack->loopImpedance[0] << 8 | pack->loopImpedance[1]) / enlargeScale / 10;
// memset(buffer, 0, sizeof(buffer)); //// memset(buffer, 0, sizeof(buffer));
// sprintf(buffer, " loopImpedance : %d/100 \n", (int)(save_configInfo.loopImpedance * 100)); //// sprintf(buffer, " loopImpedance : %d/100 \n", (int)(save_configInfo.loopImpedance * 100));
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer)); //// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
if (save_configInfo.loopImpedance > 1 || save_configInfo.loopImpedance < 0) { // if (save_configInfo.loopImpedance > 1 || save_configInfo.loopImpedance < 0) {
goto err; // goto err;
} // }
//
/* 判断总电量消耗是否正确 */ // /* 判断总电量消耗是否正确 */
save_configInfo.totalElectricityConsumption = // save_configInfo.totalElectricityConsumption =
(float_t)(pack->totalElectricityConsumption[0] << 8 | pack->totalElectricityConsumption[1]) / enlargeScale; // (float_t)(pack->totalElectricityConsumption[0] << 8 | pack->totalElectricityConsumption[1]) / enlargeScale;
// memset(buffer, 0, sizeof(buffer)); //// memset(buffer, 0, sizeof(buffer));
// sprintf(buffer, " totalElectricityConsumption : %d/100 \n", (int)(save_configInfo.totalElectricityConsumption * 100)); //// sprintf(buffer, " totalElectricityConsumption : %d/100 \n", (int)(save_configInfo.totalElectricityConsumption * 100));
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer)); //// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
if (save_configInfo.totalElectricityConsumption != 0) { // if (save_configInfo.totalElectricityConsumption != 0) {
goto err; // goto err;
} // }
//
/* 判断总充电电量是否正确 */ // /* 判断总充电电量是否正确 */
save_configInfo.totalChargCapacity = // save_configInfo.totalChargCapacity =
(float_t)(pack->totalChargCapacity[0] << 8 | pack->totalChargCapacity[1]) / enlargeScale; // (float_t)(pack->totalChargCapacity[0] << 8 | pack->totalChargCapacity[1]) / enlargeScale;
// memset(buffer, 0, sizeof(buffer)); //// memset(buffer, 0, sizeof(buffer));
// sprintf(buffer, " totalChargCapacity : %d/100 \n", (int)(save_configInfo.totalChargCapacity * 100)); //// sprintf(buffer, " totalChargCapacity : %d/100 \n", (int)(save_configInfo.totalChargCapacity * 100));
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer)); //// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
if (save_configInfo.totalChargCapacity != 0) { // if (save_configInfo.totalChargCapacity != 0) {
goto err; // goto err;
} // }
/* 判断启动任务中太阳能板开路电压检测间隔时间是否正确 */ /* 判断启动任务中太阳能板开路电压检测间隔时间是否正确 */
save_configInfo.checkSolarOpenCircuitVTime = save_configInfo.checkSolarOpenCircuitVTime =
@ -744,6 +748,58 @@ void read_and_process_config_data(void)
} }
} }
/**
* @brief flash中
* @param
*/
void saveLoopImpedance(float_t *loopImpedance)
{
SPI_Flash_Write((uint8_t *)loopImpedance, LoopImpedance_SAVE_addr, sizeof(float_t));
}
/**
* @brief flash中的回路阻抗
* @param
*/
void readLoopImpedance(float_t *loopImpedance)
{
SPI_Flash_Read((uint8_t *)loopImpedance, LoopImpedance_SAVE_addr, sizeof(float_t));
}
/**
* @brief flash中
* @param
*/
void savetotalElectricityConsumption(float_t *totalElectricityConsumption)
{
SPI_Flash_Write((uint8_t *)totalElectricityConsumption, totalElectricityConsumption_SAVE_addr, sizeof(float_t));
}
/**
* @brief flash中的放电量
* @param
*/
void readtotalElectricityConsumption(float_t *totalElectricityConsumption)
{
SPI_Flash_Read((uint8_t *)totalElectricityConsumption, totalElectricityConsumption_SAVE_addr, sizeof(float_t));
}
/**
* @brief flash中
* @param
*/
void savetotalChargCapacity(float_t *totalChargCapacity)
{
SPI_Flash_Write((uint8_t *)totalChargCapacity, totalChargCapacity_SAVE_addr, sizeof(float_t));
}
/**
* @brief flash中的充电量
* @param
*/
void readtotalChargCapacity(float_t *totalChargCapacity)
{
SPI_Flash_Read((uint8_t *)totalChargCapacity, totalChargCapacity_SAVE_addr, sizeof(float_t));
}

View File

@ -544,7 +544,9 @@ uint16_t SL_WriteRegisterEliminateStatistical(void *pMsg)
log_info(" SL_WriteRegisterEliminateStatistical "); log_info(" SL_WriteRegisterEliminateStatistical ");
g_otherParameter.totalChargCapacity = 0; g_otherParameter.totalChargCapacity = 0;
g_otherParameter.totalElectricityConsumption = 0; g_otherParameter.totalElectricityConsumption = 0;
saveTotalPower(&g_otherParameter.totalElectricityConsumption, &g_otherParameter.totalChargCapacity); // saveTotalPower(&g_otherParameter.totalElectricityConsumption, &g_otherParameter.totalChargCapacity);
savetotalChargCapacity(&g_otherParameter.totalChargCapacity);
savetotalElectricityConsumption(&g_otherParameter.totalElectricityConsumption);
return 1; return 1;
} }

View File

@ -88,6 +88,8 @@ void Task_WdiRunled(void)
static uint32_t temp = wdi_RESET; static uint32_t temp = wdi_RESET;
if (!(--temp)) { if (!(--temp)) {
temp = 0; temp = 0;
savetotalElectricityConsumption(&g_otherParameter.totalElectricityConsumption);
savetotalChargCapacity(&g_otherParameter.totalChargCapacity);
NVIC_SystemReset(); NVIC_SystemReset();
} }

View File

@ -1 +1 @@
ENTRY( _start ) __stack_size = 2048; PROVIDE( _stack_size = __stack_size ); MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K } SECTIONS { .init : { _sinit = .; . = ALIGN(4); KEEP(*(SORT_NONE(.init))) . = ALIGN(4); _einit = .; } >FLASH AT>FLASH .vector : { *(.vector); . = ALIGN(64); } >FLASH AT>FLASH .text : { . = ALIGN(4); *(.text) *(.text.*) *(.rodata) *(.rodata*) *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH .fini : { KEEP(*(SORT_NONE(.fini))) . = ALIGN(4); } >FLASH AT>FLASH PROVIDE( _etext = . ); PROVIDE( _eitcm = . ); .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH AT>FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH AT>FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH AT>FLASH .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } >FLASH AT>FLASH .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } >FLASH AT>FLASH .dalign : { . = ALIGN(4); PROVIDE(_data_vma = .); } >RAM AT>FLASH .dlalign : { . = ALIGN(4); PROVIDE(_data_lma = .); } >FLASH AT>FLASH .data : { *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.sdata2.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) . = ALIGN(4); PROVIDE( _edata = .); } >RAM AT>FLASH .bss : { . = ALIGN(4); PROVIDE( _sbss = .); *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON*) . = ALIGN(4); PROVIDE( _ebss = .); } >RAM AT>FLASH PROVIDE( _end = _ebss); PROVIDE( end = . ); .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : { PROVIDE( _heap_end = . ); . = ALIGN(4); PROVIDE(_susrstack = . ); . = . + __stack_size; PROVIDE( _eusrstack = .); } >RAM } ENTRY( _start ) __stack_size = 2048; PROVIDE( _stack_size = __stack_size ); MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K /* FLASH (rx) : ORIGIN = 0x00003750, LENGTH = 49K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K */ } SECTIONS { .init : { _sinit = .; . = ALIGN(4); KEEP(*(SORT_NONE(.init))) . = ALIGN(4); _einit = .; } >FLASH AT>FLASH .vector : { *(.vector); . = ALIGN(64); } >FLASH AT>FLASH .text : { . = ALIGN(4); *(.text) *(.text.*) *(.rodata) *(.rodata*) *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH .fini : { KEEP(*(SORT_NONE(.fini))) . = ALIGN(4); } >FLASH AT>FLASH PROVIDE( _etext = . ); PROVIDE( _eitcm = . ); .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH AT>FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH AT>FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH AT>FLASH .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } >FLASH AT>FLASH .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } >FLASH AT>FLASH .dalign : { . = ALIGN(4); PROVIDE(_data_vma = .); } >RAM AT>FLASH .dlalign : { . = ALIGN(4); PROVIDE(_data_lma = .); } >FLASH AT>FLASH .data : { *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.sdata2.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) . = ALIGN(4); PROVIDE( _edata = .); } >RAM AT>FLASH .bss : { . = ALIGN(4); PROVIDE( _sbss = .); *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON*) . = ALIGN(4); PROVIDE( _ebss = .); } >RAM AT>FLASH PROVIDE( _end = _ebss); PROVIDE( end = . ); .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : { PROVIDE( _heap_end = . ); . = ALIGN(4); PROVIDE(_susrstack = . ); . = . + __stack_size; PROVIDE( _eusrstack = .); } >RAM }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff