修改存入flash的时间
This commit is contained in:
parent
8f1a9d9b2b
commit
daec605235
|
@ -1,6 +1,6 @@
|
|||
Address=0x08000000
|
||||
Target Path=obj\mppt_Nos_V0.4.hex
|
||||
Erase All=true
|
||||
Erase All=false
|
||||
Program=true
|
||||
Verify=true
|
||||
Reset=true
|
||||
|
|
|
@ -46,9 +46,9 @@ typedef struct _recv_config_info{
|
|||
uint8_t HighSideMosTemperature_stop[2]; /* 当上桥温度达到该值时,停止输出 (°C) */
|
||||
uint8_t HighSideMosTemperature_end[2]; /* 当上桥温度上升到该值时,降低功率运行 (°C) */
|
||||
uint8_t HighSideMosTemperature_start[2];/* 当上桥温度降低到该值时,按照正常情况输出 (°C) */
|
||||
uint8_t loopImpedance[2]; /* 回路阻抗大小 (Ω) */
|
||||
uint8_t totalElectricityConsumption[2]; /* 总电量消耗 */
|
||||
uint8_t totalChargCapacity[2]; /* 总充电电量 */
|
||||
// uint8_t loopImpedance[2]; /* 回路阻抗大小 (Ω) */
|
||||
// uint8_t totalElectricityConsumption[2]; /* 总电量消耗 */
|
||||
// uint8_t totalChargCapacity[2]; /* 总充电电量 */
|
||||
|
||||
uint8_t checkSolarOpenCircuitVTime[2]; /* 启动任务中太阳能板开路电压检测间隔时间 (S) */
|
||||
// uint8_t registerRefreshTime[2]; /* 寄存器数据刷新时间 (S) */
|
||||
|
@ -88,9 +88,9 @@ typedef struct _config_info{
|
|||
float_t HighSideMosTemperature_stop; /* 当上桥温度达到该值时,停止输出 */
|
||||
float_t HighSideMosTemperature_end; /* 当上桥温度上升到该值时,降低功率运行 */
|
||||
float_t HighSideMosTemperature_start; /* 当上桥温度降低到该值时,按照正常情况输出 */
|
||||
float_t loopImpedance; /* 回路阻抗大小 (Ω) */
|
||||
float_t totalElectricityConsumption; /* 总电量消耗 */
|
||||
float_t totalChargCapacity; /* 总充电电量 */
|
||||
// float_t loopImpedance; /* 回路阻抗大小 (Ω) */
|
||||
// float_t totalElectricityConsumption; /* 总电量消耗 */
|
||||
// float_t totalChargCapacity; /* 总充电电量 */
|
||||
|
||||
uint16_t checkSolarOpenCircuitVTime; /* 启动任务中太阳能板开路电压检测时间 */
|
||||
// uint16_t registerRefreshTime; /* 寄存器数据刷新时间 */
|
||||
|
@ -109,15 +109,24 @@ typedef struct _config_info{
|
|||
#define CONFIG_SAVE_addr (0)
|
||||
#define CONFIG_SAVE_ADDR_BEGIN (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 read_config_info(config_info *output_config_info);
|
||||
void checkFlashContent(void);
|
||||
void saveLoopImpedance(float_t *loopImpedance);
|
||||
void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity);
|
||||
void config_info_start(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);
|
||||
|
||||
#endif /* APP_INC_INFLASH_H_ */
|
||||
|
|
|
@ -535,7 +535,9 @@ void HY_MsgProcFunc_electricityStatistics(device_handle device, void *pMsg, uint
|
|||
/* 꿴璂빈헌왕 */
|
||||
g_otherParameter.totalChargCapacity = 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;
|
||||
pack.frameNumber = Tpack->frameNumber;
|
||||
|
|
|
@ -121,9 +121,9 @@ void checkFlashContent(void)
|
|||
.HighSideMosTemperature_stop = 100,
|
||||
.HighSideMosTemperature_end = 90,
|
||||
.HighSideMosTemperature_start = 50,
|
||||
.loopImpedance = 0.0,
|
||||
.totalElectricityConsumption = 0.0,
|
||||
.totalChargCapacity = 0.0,
|
||||
// .loopImpedance = 0.0,
|
||||
// .totalElectricityConsumption = 0.0,
|
||||
// .totalChargCapacity = 0.0,
|
||||
|
||||
.checkSolarOpenCircuitVTime = 10,
|
||||
// .registerRefreshTime = 1,
|
||||
|
@ -138,41 +138,41 @@ void checkFlashContent(void)
|
|||
save_config_info(&configInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 保存回路阻抗的值
|
||||
* @param loopImpedance 需要保存的回路阻抗的值
|
||||
* @retval
|
||||
*
|
||||
*/
|
||||
void saveLoopImpedance(float_t *loopImpedance)
|
||||
{
|
||||
config_info temp_configInfo;
|
||||
read_config_info(&temp_configInfo);
|
||||
|
||||
temp_configInfo.loopImpedance = *loopImpedance;
|
||||
|
||||
temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||||
save_config_info(&temp_configInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 保存总充电电量和总消耗电量的值
|
||||
* @param totalElectricityConsumption 需要保存的总消耗电量
|
||||
* totalChargCapacity 需要保存的总充电电量
|
||||
* @retval
|
||||
*
|
||||
*/
|
||||
void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity)
|
||||
{
|
||||
config_info temp_configInfo;
|
||||
read_config_info(&temp_configInfo);
|
||||
|
||||
temp_configInfo.totalElectricityConsumption = *totalElectricityConsumption;
|
||||
temp_configInfo.totalChargCapacity = *totalChargCapacity;
|
||||
|
||||
temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||||
save_config_info(&temp_configInfo);
|
||||
}
|
||||
///**
|
||||
// * @brief 保存回路阻抗的值
|
||||
// * @param loopImpedance 需要保存的回路阻抗的值
|
||||
// * @retval
|
||||
// *
|
||||
// */
|
||||
//void saveLoopImpedance(float_t *loopImpedance)
|
||||
//{
|
||||
// config_info temp_configInfo;
|
||||
// read_config_info(&temp_configInfo);
|
||||
//
|
||||
// temp_configInfo.loopImpedance = *loopImpedance;
|
||||
//
|
||||
// temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||||
// save_config_info(&temp_configInfo);
|
||||
//}
|
||||
//
|
||||
///**
|
||||
// * @brief 保存总充电电量和总消耗电量的值
|
||||
// * @param totalElectricityConsumption 需要保存的总消耗电量
|
||||
// * totalChargCapacity 需要保存的总充电电量
|
||||
// * @retval
|
||||
// *
|
||||
// */
|
||||
//void saveTotalPower(float_t *totalElectricityConsumption, float_t *totalChargCapacity)
|
||||
//{
|
||||
// config_info temp_configInfo;
|
||||
// read_config_info(&temp_configInfo);
|
||||
//
|
||||
// temp_configInfo.totalElectricityConsumption = *totalElectricityConsumption;
|
||||
// temp_configInfo.totalChargCapacity = *totalChargCapacity;
|
||||
//
|
||||
// temp_configInfo.crc = configCheckFunc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||||
// save_config_info(&temp_configInfo);
|
||||
//}
|
||||
|
||||
/**
|
||||
* @brief 读取配置文件初始化各参数
|
||||
|
@ -193,7 +193,7 @@ void config_info_start(void)
|
|||
g_controlParameter.stopSolarOpenCircuitV = temp_configInfo.stopSolarOpenCircuitV;
|
||||
g_controlParameter.constantVoltageChargeV = temp_configInfo.constantVoltageChargeV;
|
||||
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_end = temp_configInfo.HighSideMosTemperature_end;
|
||||
g_controlParameter.HighSideMosTemperature_start = temp_configInfo.HighSideMosTemperature_start;
|
||||
|
@ -242,8 +242,8 @@ void config_info_start(void)
|
|||
g_otherParameter.HighSideMos_Temperature = 0;
|
||||
g_otherParameter.Solar_In_Circuit_Voltage = 0;
|
||||
g_otherParameter.Charg_BatteryCurrent = 0;
|
||||
g_otherParameter.totalElectricityConsumption = temp_configInfo.totalElectricityConsumption;
|
||||
g_otherParameter.totalChargCapacity = temp_configInfo.totalChargCapacity;
|
||||
// g_otherParameter.totalElectricityConsumption = temp_configInfo.totalElectricityConsumption;
|
||||
// g_otherParameter.totalChargCapacity = temp_configInfo.totalChargCapacity;
|
||||
g_otherParameter.SOC = 0;
|
||||
g_otherParameter.chargMos_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("%s\n", g_otherParameter.versionInformation);
|
||||
|
@ -518,35 +522,35 @@ void read_and_process_config_data(void)
|
|||
goto err;
|
||||
}
|
||||
|
||||
/* 判断回路阻抗大小是否正确 */
|
||||
save_configInfo.loopImpedance =
|
||||
(float_t)(pack->loopImpedance[0] << 8 | pack->loopImpedance[1]) / enlargeScale / 10;
|
||||
// memset(buffer, 0, sizeof(buffer));
|
||||
// sprintf(buffer, " loopImpedance : %d/100 \n", (int)(save_configInfo.loopImpedance * 100));
|
||||
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
if (save_configInfo.loopImpedance > 1 || save_configInfo.loopImpedance < 0) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* 判断总电量消耗是否正确 */
|
||||
save_configInfo.totalElectricityConsumption =
|
||||
(float_t)(pack->totalElectricityConsumption[0] << 8 | pack->totalElectricityConsumption[1]) / enlargeScale;
|
||||
// memset(buffer, 0, sizeof(buffer));
|
||||
// sprintf(buffer, " totalElectricityConsumption : %d/100 \n", (int)(save_configInfo.totalElectricityConsumption * 100));
|
||||
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
if (save_configInfo.totalElectricityConsumption != 0) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* 判断总充电电量是否正确 */
|
||||
save_configInfo.totalChargCapacity =
|
||||
(float_t)(pack->totalChargCapacity[0] << 8 | pack->totalChargCapacity[1]) / enlargeScale;
|
||||
// memset(buffer, 0, sizeof(buffer));
|
||||
// sprintf(buffer, " totalChargCapacity : %d/100 \n", (int)(save_configInfo.totalChargCapacity * 100));
|
||||
// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
if (save_configInfo.totalChargCapacity != 0) {
|
||||
goto err;
|
||||
}
|
||||
// /* 判断回路阻抗大小是否正确 */
|
||||
// save_configInfo.loopImpedance =
|
||||
// (float_t)(pack->loopImpedance[0] << 8 | pack->loopImpedance[1]) / enlargeScale / 10;
|
||||
//// memset(buffer, 0, sizeof(buffer));
|
||||
//// sprintf(buffer, " loopImpedance : %d/100 \n", (int)(save_configInfo.loopImpedance * 100));
|
||||
//// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
// if (save_configInfo.loopImpedance > 1 || save_configInfo.loopImpedance < 0) {
|
||||
// goto err;
|
||||
// }
|
||||
//
|
||||
// /* 判断总电量消耗是否正确 */
|
||||
// save_configInfo.totalElectricityConsumption =
|
||||
// (float_t)(pack->totalElectricityConsumption[0] << 8 | pack->totalElectricityConsumption[1]) / enlargeScale;
|
||||
//// memset(buffer, 0, sizeof(buffer));
|
||||
//// sprintf(buffer, " totalElectricityConsumption : %d/100 \n", (int)(save_configInfo.totalElectricityConsumption * 100));
|
||||
//// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
// if (save_configInfo.totalElectricityConsumption != 0) {
|
||||
// goto err;
|
||||
// }
|
||||
//
|
||||
// /* 判断总充电电量是否正确 */
|
||||
// save_configInfo.totalChargCapacity =
|
||||
// (float_t)(pack->totalChargCapacity[0] << 8 | pack->totalChargCapacity[1]) / enlargeScale;
|
||||
//// memset(buffer, 0, sizeof(buffer));
|
||||
//// sprintf(buffer, " totalChargCapacity : %d/100 \n", (int)(save_configInfo.totalChargCapacity * 100));
|
||||
//// uart_dev_write(g_gw485_uart4_handle, buffer, sizeof(buffer));
|
||||
// if (save_configInfo.totalChargCapacity != 0) {
|
||||
// goto err;
|
||||
// }
|
||||
|
||||
/* 判断启动任务中太阳能板开路电压检测间隔时间是否正确 */
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -544,7 +544,9 @@ uint16_t SL_WriteRegisterEliminateStatistical(void *pMsg)
|
|||
log_info(" SL_WriteRegisterEliminateStatistical ");
|
||||
g_otherParameter.totalChargCapacity = 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;
|
||||
}
|
||||
|
|
|
@ -88,6 +88,8 @@ void Task_WdiRunled(void)
|
|||
static uint32_t temp = wdi_RESET;
|
||||
if (!(--temp)) {
|
||||
temp = 0;
|
||||
savetotalElectricityConsumption(&g_otherParameter.totalElectricityConsumption);
|
||||
savetotalChargCapacity(&g_otherParameter.totalChargCapacity);
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
BIN
obj/User/main.o
BIN
obj/User/main.o
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
29312
obj/mppt_Nos_V0.4.lst
29312
obj/mppt_Nos_V0.4.lst
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue