| @@ -357,6 +357,7 @@ | |||||
| <state>$PROJ_DIR$\..\modbus</state> | <state>$PROJ_DIR$\..\modbus</state> | ||||
| <state>$PROJ_DIR$\..\plsr</state> | <state>$PROJ_DIR$\..\plsr</state> | ||||
| <state>$PROJ_DIR$\..\plsr\param</state> | <state>$PROJ_DIR$\..\plsr\param</state> | ||||
| <state>$PROJ_DIR$\..\plsr\persist</state> | |||||
| <state>$PROJ_DIR$\..\plsr\pulse_driver</state> | <state>$PROJ_DIR$\..\plsr\pulse_driver</state> | ||||
| <state>$PROJ_DIR$\..\plsr\path_plan</state> | <state>$PROJ_DIR$\..\plsr\path_plan</state> | ||||
| <state>$PROJ_DIR$\..\plsr\accel_curve</state> | <state>$PROJ_DIR$\..\plsr\accel_curve</state> | ||||
| @@ -791,7 +792,7 @@ | |||||
| </option> | </option> | ||||
| <option> | <option> | ||||
| <name>IlinkIcfFile</name> | <name>IlinkIcfFile</name> | ||||
| <state>$TOOLKIT_DIR$\config\linker\Geehy\APM32f407xG.icf</state> | |||||
| <state>$PROJ_DIR$\apm32f407xg_flash.icf</state> | |||||
| </option> | </option> | ||||
| <option> | <option> | ||||
| <name>IlinkIcfFileSlave</name> | <name>IlinkIcfFileSlave</name> | ||||
| @@ -2885,6 +2886,15 @@ | |||||
| <name>$PROJ_DIR$\..\plsr\param\plsr_param.h</name> | <name>$PROJ_DIR$\..\plsr\param\plsr_param.h</name> | ||||
| </file> | </file> | ||||
| </group> | </group> | ||||
| <group> | |||||
| <name>persist</name> | |||||
| <file> | |||||
| <name>$PROJ_DIR$\..\plsr\persist\plsr_persist.c</name> | |||||
| </file> | |||||
| <file> | |||||
| <name>$PROJ_DIR$\..\plsr\persist\plsr_persist.h</name> | |||||
| </file> | |||||
| </group> | |||||
| <group> | <group> | ||||
| <name>pulse_driver</name> | <name>pulse_driver</name> | ||||
| <file> | <file> | ||||
| @@ -5,7 +5,7 @@ | |||||
| define symbol __ICFEDIT_intvec_start__ = 0x08000000; | define symbol __ICFEDIT_intvec_start__ = 0x08000000; | ||||
| /*-Memory Regions-*/ | /*-Memory Regions-*/ | ||||
| define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; | define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; | ||||
| define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; | |||||
| define symbol __ICFEDIT_region_ROM_end__ = 0x080DFFFF; /* sector 11 reserved for persist */ | |||||
| define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; | define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; | ||||
| define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; | define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; | ||||
| define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000; | define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000; | ||||
| @@ -3,6 +3,7 @@ | |||||
| * @brief 参数块管理模块实现(运行映像 + 分帧导入/导出) | * @brief 参数块管理模块实现(运行映像 + 分帧导入/导出) | ||||
| */ | */ | ||||
| #include "plsr_param.h" | #include "plsr_param.h" | ||||
| #include "plsr_persist.h" | |||||
| #include "modbus_rtu.h" | #include "modbus_rtu.h" | ||||
| #include "ucos_ii.h" | #include "ucos_ii.h" | ||||
| #include <string.h> | #include <string.h> | ||||
| @@ -230,6 +231,7 @@ uint8_t PlsrParamBlockApplyFromHold(void) | |||||
| seg->jump_seg = ReadHoldReg((uint16_t)(base + PLSR_SEG_OFF_JUMP)); | seg->jump_seg = ReadHoldReg((uint16_t)(base + PLSR_SEG_OFF_JUMP)); | ||||
| } | } | ||||
| PlsrPersistNotifyCommonChanged(); | |||||
| return 1U; | return 1U; | ||||
| } | } | ||||
| @@ -350,6 +352,7 @@ void PlsrParamBlockTask(void *pArg) | |||||
| if (PlsrParamBlockApplyFromHold() != 0U) | if (PlsrParamBlockApplyFromHold() != 0U) | ||||
| { | { | ||||
| PlsrParamSetXferStatus(PLSR_PARAM_XFER_OK, 0U); | PlsrParamSetXferStatus(PLSR_PARAM_XFER_OK, 0U); | ||||
| PlsrPersistPoll(); /* 分帧收齐后尽快落盘,不等 PlsrTask */ | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -6,6 +6,7 @@ | |||||
| #include "plsr_pulse_driver.h" | #include "plsr_pulse_driver.h" | ||||
| #include "plsr_run_control.h" | #include "plsr_run_control.h" | ||||
| #include "plsr_param.h" | #include "plsr_param.h" | ||||
| #include "plsr_persist.h" | |||||
| #include "plsr_command.h" | #include "plsr_command.h" | ||||
| #include "plsr_signal_io.h" | #include "plsr_signal_io.h" | ||||
| #include "ucos_ii.h" | #include "ucos_ii.h" | ||||
| @@ -13,10 +14,11 @@ | |||||
| void PlsrInit(void) | void PlsrInit(void) | ||||
| { | { | ||||
| PlsrParamInitDefault(); | PlsrParamInitDefault(); | ||||
| PlsrPersistLoad(); /* 有 Flash 记录则覆盖公共参数;段表仍用默认 */ | |||||
| PlsrPulseDriverInit(); | PlsrPulseDriverInit(); | ||||
| PlsrSignalIoInit(); | PlsrSignalIoInit(); | ||||
| PlsrRunControlInit(); | PlsrRunControlInit(); | ||||
| PlsrParamBlockExportToHold(); /* 上电把默认映像摊到保持寄存器 */ | |||||
| PlsrParamBlockExportToHold(); /* 上电把运行映像摊到保持寄存器 */ | |||||
| PlsrCommandInit(); | PlsrCommandInit(); | ||||
| } | } | ||||
| @@ -71,7 +73,7 @@ void PlsrTask(void *pArg) | |||||
| for (;;) | for (;;) | ||||
| { | { | ||||
| /* 首次进入:等 Modbus 清寄存器后再导出默认,避免被冲掉 */ | |||||
| /* 首次进入:等 Modbus 清寄存器后再导出运行映像,避免被冲掉 */ | |||||
| if (s_booted == 0U) | if (s_booted == 0U) | ||||
| { | { | ||||
| OSTimeDly(30U); /* ~300ms @ 100Hz tick */ | OSTimeDly(30U); /* ~300ms @ 100Hz tick */ | ||||
| @@ -85,6 +87,7 @@ void PlsrTask(void *pArg) | |||||
| } | } | ||||
| PlsrCommandPoll(); /* 收 START/STOP 等,回写忙闲状态 */ | PlsrCommandPoll(); /* 收 START/STOP 等,回写忙闲状态 */ | ||||
| PlsrPersistPoll(); /* 公共参数有改且空闲则追加写入 Flash */ | |||||
| PlsrRunControlTickMs(); /* 方向延时、段间等待到期处理 */ | PlsrRunControlTickMs(); /* 方向延时、段间等待到期处理 */ | ||||
| #if (PLSR_LOOP_TEST_EN != 0) | #if (PLSR_LOOP_TEST_EN != 0) | ||||
| @@ -2,7 +2,7 @@ | |||||
| * @file plsr.h | * @file plsr.h | ||||
| * @brief PLSR 对外门面:初始化、周期任务、启停与状态查询 | * @brief PLSR 对外门面:初始化、周期任务、启停与状态查询 | ||||
| * | * | ||||
| * 内部模块:参数块 / 指令接口 / 路径规划 / 加减速曲线 / 运行控制 / 脉冲驱动 | |||||
| * 内部模块:参数块 / 公共参数持久化 / 指令接口 / 路径规划 / 加减速曲线 / 运行控制 / 脉冲驱动 | |||||
| */ | */ | ||||
| #ifndef PLSR_H | #ifndef PLSR_H | ||||
| #define PLSR_H | #define PLSR_H | ||||