进料口从「只有 ESP32 SPI 一条」扩成两条,中继引擎不变:主站经 CoE 0x2511 数据窗 把电机固件明文灌进 GD32 的 48KB SRAM 暂存区,再由 comm/ecat_motor_ota 泵进原有 4KB 环缓;AES 握手、CAN 单发停等、重发、0AAC 运行确认全部沿用 MotorOtaRelay。 纯网线(ESP32 WiFi 关断、/motor/ota 打不通)场合因此也能刷电机。 偏移/幂等判据仍只有一份:feedData 拆出 feedAt,两个进料口共用。 同时把审计报告 VULN-12/13/14 落地(此前只存在于文档,一行未实现):start() 第一条 语句在 PRIMASK 内原子置位 s_channel_lock_mask,EtherCAT 桥接 sendBatch/processOutput 与 SPI 0xC0/0xC7 对锁定通道回新码 0xE7=「被电机 OTA 独占」,不冒充「邮箱满」0xE4。 反向互斥一并补上:电机 OTA 活跃时 requestEnterBoot() 直接拒绝——SPI 0xB0、CoE 0x2502、 CAN 0x320 三条交接入口共用这一个判据,避免复位把刷写腰斩在 erase 之后。 完整性口径按链路分开,不互相冒充:块级 CRC32 + 整镜像 CRC32 都在从站核,且核过才 让电机进 BOOT——失败时电机仍跑旧 APP、擦除没开始,不存在「先擦再验」的变砖路径。 CRC 为 CRC-32/B(poly 0x04C11DB7,初值 0xFFFFFFFF,无反射无末尾异或),与 v2_crc32 同算法(用公开向量 123456789=0x0376E6E7 对过)。 块长取 1024 而不是 BOOT 用的 4096:SSC 的分段下载缓冲是全工程唯一的 malloc 用户, 而 APP 的 __HEAP_SIZE 只有 3KB,4096 会被从站当场回 abort 0x05040005 Out of memory (BOOT 的堆是 16KB 才撑得住 4096——块长能抄,堆抄不了)。这是跨仓常量,须与 tools/ecat 的 MFO_CHUNK_OBJ 同步。 APP 1.7.4(RAM ZI 97156)。已实测:0x2510 参数写与一块 1016B 数据写均被从站接受 (staged=1016、phase bit4);端到端电机刷写待复测(native 块长修复后未跑完整一轮)。
186 lines
6.9 KiB
YAML
186 lines
6.9 KiB
YAML
# A project translates into one executable or library.
|
||
project:
|
||
|
||
groups:
|
||
- group: Source Files
|
||
files:
|
||
- file: ./main.h
|
||
- file: ./main.cpp
|
||
- group: sys
|
||
files:
|
||
- file: ./sys/initial.h
|
||
- file: ./sys/initial.cpp
|
||
- file: ./sys/systick.h
|
||
- file: ./sys/systick.cpp
|
||
- file: ./sys/task_manager.h
|
||
- file: ./sys/task_manager.cpp
|
||
- file: ./sys/task_runner.h
|
||
- file: ./sys/task_runner.cpp
|
||
- file: ./sys/cpu_load.h
|
||
- file: ./sys/cpu_load.cpp
|
||
- file: ./sys/ota_boot_request.h
|
||
- file: ./sys/ota_boot_request.cpp
|
||
- file: ./sys/aes128.h
|
||
- file: ./sys/aes128.cpp
|
||
- file: ./sys/motor_ota_relay.h
|
||
- file: ./sys/motor_ota_relay.cpp
|
||
- file: ./sys/hardfault.cpp
|
||
- file: ./sys/cpp_stubs.cpp
|
||
- file: ./sys/config.h
|
||
- file: ./sys/esp32_en.h
|
||
- file: ./sys/esp32_en.cpp
|
||
- group: device
|
||
files:
|
||
- file: ./device/adc.h
|
||
- file: ./device/adc.cpp
|
||
- file: ./device/canfd.h
|
||
- file: ./device/canfd.cpp
|
||
- file: ./device/timer.h
|
||
- file: ./device/timer.cpp
|
||
- file: ./device/usart0.h
|
||
- file: ./device/usart0.cpp
|
||
- file: ./device/watchdog.h
|
||
- file: ./device/watchdog.cpp
|
||
- file: ./device/motor_state.h
|
||
- file: ./device/motor_state.cpp
|
||
- file: ./device/motor_version.h
|
||
- file: ./device/motor_version.cpp
|
||
# GigaDevice DFP 未把 EXMC 注册为 CMSIS 组件(仅有 FMC=片内 Flash),
|
||
# 但外设源文件存在于 Pack;LAN9252 并行总线需要 EXMC,故本地编入。
|
||
- group: device_exmc
|
||
files:
|
||
- file: ./RTE/Device/GD32E508VE/gd32e50x_exmc.c
|
||
- file: ./RTE/Device/GD32E508VE/gd32e50x_exmc.h
|
||
- group: device/spi
|
||
files:
|
||
- file: ./device/spi/app_spi_command.h
|
||
- file: ./device/spi/app_spi_command.cpp
|
||
- file: ./device/spi/spi_command_handler.h
|
||
- file: ./device/spi/app_spi_command_defs.h
|
||
- file: ./device/spi/app_spi_cmd_boot_request.cpp
|
||
- file: ./device/spi/app_spi_cmd_ota_wait.cpp
|
||
- file: ./device/spi/app_spi_cmd_ping.cpp
|
||
- file: ./device/spi/app_spi_cmd_init_status.cpp
|
||
- file: ./device/spi/app_spi_cmd_can_bridge.cpp
|
||
- file: ./device/spi/app_spi_cmd_can_burst.cpp
|
||
- file: ./device/spi/app_spi_cmd_can_feedback.cpp
|
||
- file: ./device/spi/app_spi_cmd_id_snapshot.cpp
|
||
- file: ./device/spi/app_spi_cmd_adc_feedback.cpp
|
||
- file: ./device/spi/app_spi_cmd_motor_state.cpp
|
||
- file: ./device/spi/app_spi_cmd_motor_version.cpp
|
||
- file: ./device/spi/app_spi_cmd_motor_ota.cpp
|
||
- file: ./device/spi/app_spi_cmd_exmc_diag.cpp
|
||
- file: ./device/spi/app_spi_diag.h
|
||
- file: ./device/spi/app_spi_cmd_spi_diag.cpp
|
||
- group: spi_link
|
||
files:
|
||
- file: ../../spi_link/spi_link_v2.cpp
|
||
- group: comm
|
||
files:
|
||
- file: ./comm/esc_exmc_bus.h
|
||
- file: ./comm/esc_exmc_bus.cpp
|
||
- file: ./comm/esc_lan9252.h
|
||
- file: ./comm/esc_lan9252.cpp
|
||
- file: ./comm/ethercat_slave.h
|
||
- file: ./comm/ethercat_slave.cpp
|
||
- file: ./comm/ethercat_sync.h
|
||
- file: ./comm/ethercat_sync.cpp
|
||
- file: ./comm/ethercat_can_bridge.h
|
||
- file: ./comm/ethercat_can_bridge.cpp
|
||
# 电机 OTA 的 EtherCAT 邮箱进料通路(CoE 0x2510/0x2511 → MotorOtaRelay 环缓)
|
||
- file: ./comm/ecat_motor_ota.h
|
||
- file: ./comm/ecat_motor_ota.cpp
|
||
- file: ./comm/ethercat_pdo.h
|
||
- file: ./comm/ethercat_pdo.cpp
|
||
# [DIFF-STATS] 临时仪表:差分写取证,删除时连同本两行与 comm/ethercat_diff_stats.* 一并移除
|
||
- file: ./comm/ethercat_diff_stats.h
|
||
- file: ./comm/ethercat_diff_stats.cpp
|
||
- group: comm/ssc
|
||
files:
|
||
- file: ./comm/ssc/inc/ecatslv.h
|
||
- file: ./comm/ssc/inc/ecatappl.h
|
||
- file: ./comm/ssc/inc/mailbox.h
|
||
- file: ./comm/ssc/inc/ecatcoe.h
|
||
- file: ./comm/ssc/inc/sdoserv.h
|
||
- file: ./comm/ssc/inc/objdef.h
|
||
- file: ./comm/ssc/inc/coeappl.h
|
||
- file: ./comm/ssc/inc/esc.h
|
||
- file: ./comm/ssc/inc/applInterface.h
|
||
- file: ./comm/ssc/inc/el9800hw.h
|
||
- file: ./comm/ssc/src/ecatslv.c
|
||
- file: ./comm/ssc/src/ecatappl.c
|
||
- file: ./comm/ssc/src/mailbox.c
|
||
- file: ./comm/ssc/src/ecatcoe.c
|
||
- file: ./comm/ssc/src/sdoserv.c
|
||
- file: ./comm/ssc/src/objdef.c
|
||
- file: ./comm/ssc/src/coeappl.c
|
||
- file: ./comm/ssc/port/hw_gd32exmc.cpp
|
||
- file: ./comm/ssc/port/dc_app.c
|
||
- file: ./comm/ssc/port/dc_app.h
|
||
- file: ./comm/ssc/port/ecat_def.h
|
||
|
||
# List components to use for your application.
|
||
# A software component is a re-usable unit that may be configurable.
|
||
components:
|
||
- component: ARM::CMSIS:CORE
|
||
- component: Device:Startup
|
||
- component: Device:GD32E50x_StdPeripherals:ADC
|
||
- component: Device:GD32E50x_StdPeripherals:CAN
|
||
- component: Device:GD32E50x_StdPeripherals:CRC
|
||
- component: Device:GD32E50x_StdPeripherals:DBG
|
||
- component: Device:GD32E50x_StdPeripherals:DMA
|
||
- component: Device:GD32E50x_StdPeripherals:EXTI
|
||
- component: Device:GD32E50x_StdPeripherals:FMC
|
||
- component: Device:GD32E50x_StdPeripherals:GPIO
|
||
- component: Device:GD32E50x_StdPeripherals:MISC
|
||
- component: Device:GD32E50x_StdPeripherals:PMU
|
||
- component: Device:GD32E50x_StdPeripherals:RCU
|
||
- component: Device:GD32E50x_StdPeripherals:SPI_I2S
|
||
- component: Device:GD32E50x_StdPeripherals:TIMER
|
||
- component: Device:GD32E50x_StdPeripherals:USART
|
||
- component: Device:GD32E50x_libopt
|
||
- component: Device:GD32E50x_StdPeripherals:FWDGT
|
||
|
||
# List executable file formats to be generated.
|
||
output:
|
||
type:
|
||
- elf
|
||
- hex
|
||
- map
|
||
|
||
misc:
|
||
- for-compiler: AC6
|
||
C-CPP:
|
||
- -DGD32E508
|
||
- -DGD32E50X
|
||
- -DHXTAL_VALUE=8000000U
|
||
- -gdwarf-5
|
||
- -D__MICROLIB
|
||
- -fshort-enums
|
||
- -fshort-wchar
|
||
# EXMC 未作为 CMSIS 组件分发;头文件在 RTE 本地目录
|
||
- -IRTE/Device/GD32E508VE
|
||
- -Wno-register
|
||
- -IG:/Robot_v2/DCU/spi_link
|
||
C:
|
||
- -std=gnu11
|
||
CPP:
|
||
- -std=gnu++17
|
||
# 全工程零使用 RTTI/异常(grep 验证),关闭以剥离 libcppabi 运行时(约 2.5 KB Flash)
|
||
- -fno-rtti
|
||
- -fno-exceptions
|
||
ASM:
|
||
- -DGD32E508
|
||
- -DGD32E50X
|
||
- -DHXTAL_VALUE=8000000U
|
||
- -gdwarf-5
|
||
- -D__MICROLIB
|
||
# 启动文件经 legacy armasm 汇编:消 armclang 驱动"参数未使用"告警 + armasm 弃用告警(A1950W)
|
||
- -Wno-unused-command-line-argument
|
||
- -Wa,armasm,--diag_suppress=A1950W
|
||
Link:
|
||
- --library_type=microlib
|
||
- --entry=Reset_Handler
|
||
# 输出未引用段与总量报告,用于 Flash 尺寸归因
|
||
- --info=unused,totals
|