feat(device_exmc): 添加GD32E508 EXMC外设支持用于LAN9252通信
添加EXMC 16-bit并行总线驱动实现,用于LAN9252 ESC通信。 在cproject.yml中添加device_exmc组和相关源文件,包括 gd32e50x_exmc.c/h文件,并更新头文件搜索路径。 由于GigaDevice DFP未将EXMC注册为CMSIS组件,需要本地编入 RTE/Device目录下的EXMC源文件以支持LAN9252并行总线功能。 fix(canfd): 优化CANFD驱动中的条件编译和DLC处理逻辑 将CANFD相关的配置项从硬编码改为使用sys/config.h中的配置。 添加对DLC=0情况的支持(表示无数据负载的远程帧), 修正了数据长度检查逻辑,确保DLC为0时不需要提供数据指针。 同时重构了调试代码的条件编译,使用CONFIG_CAN_STARTUP_DIAG_VERBOSE 等配置开关控制调试输出函数的编译。 refactor(ethercat): 统一配置项管理,移除硬编码常量 将EtherCAT相关配置项从硬编码改为统一的sys/config.h配置, 提升代码可维护性。 docs(spi): 更新SPI命令响应缓冲区大小说明 更新CAN桥接和ID快照命令的响应payload大小计算说明, 统一使用AppSpiCommand::kTxBufSize - V2_OVERHEAD作为上限。
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
#include "device/watchdog.h"
|
||||
#include "device/spi/app_spi_command.h"
|
||||
#include "device/canfd.h"
|
||||
#include "device/temp_sensor.h"
|
||||
#include "sys/config.h"
|
||||
#include "sys/ota_boot_request.h"
|
||||
#include "sys/task_manager.h"
|
||||
@@ -208,15 +207,6 @@ void TaskRunner::taskCanRxParse()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 执行状态灯维护任务。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval 无返回值。
|
||||
* @note 当前仅保留任务入口。
|
||||
*/
|
||||
void TaskRunner::taskStatusLed() { /* 预留 */ }
|
||||
|
||||
/**
|
||||
* @brief 执行系统心跳维护任务。
|
||||
* @param[in] 无。
|
||||
@@ -254,7 +244,7 @@ void TaskRunner::taskDiagnosticPrint()
|
||||
static_cast<unsigned long>(vin_adc_mV / 1000U),
|
||||
static_cast<unsigned long>(vin_adc_mV % 1000U));
|
||||
#else
|
||||
printf("[APP] uptime=%lus valid=%u, temp=%ld.%02ld C, vdda=%lu.%03lu V, vin_adc=%lu.%03lu V, rx_ch=%u, rx_id=0x%08lX, rx_len=%u, tx_ch=%u, can_tx=%lu, can_rx=%lu, sw_drop=%lu, hw_full=%lu, hw_over=%lu, tx_drop=%lu, tx_abort=%lu, can_err=%lu\r\n",
|
||||
printf("[APP] uptime=%lus valid=%u, temp=%ld.%02ld C, vdda=%lu.%03lu V, vin_adc=%lu.%03lu V, rx_ch=%u, rx_id=0x%08lX, rx_len=%u, tx_ch=%u, can_tx=%lu, can_rx=%lu, sw_drop=%lu, hw_full=%lu, hw_over=%lu, tx_abort=%lu, can_err=%lu\r\n",
|
||||
(unsigned long)g_app_uptime_sec,
|
||||
static_cast<unsigned int>(s.valid),
|
||||
static_cast<long>(temp_x100 / 100),
|
||||
@@ -272,7 +262,6 @@ void TaskRunner::taskDiagnosticPrint()
|
||||
static_cast<unsigned long>(diag->rx_drop_count),
|
||||
static_cast<unsigned long>(diag->rx_fifo_full_count),
|
||||
static_cast<unsigned long>(diag->rx_fifo_overfull_count),
|
||||
static_cast<unsigned long>(diag->tx_drop_count),
|
||||
static_cast<unsigned long>(diag->tx_abort_count),
|
||||
static_cast<unsigned long>(diag->error_count));
|
||||
#endif
|
||||
@@ -340,9 +329,6 @@ void TaskRunner::runPending()
|
||||
Watchdog::feed();
|
||||
|
||||
/* poll() 含按铃超时看门狗(cancelRing),必须每轮无条件执行。
|
||||
* 否则日志关闭时(CONFIG_SPI_APP_LOG_ENABLE=0) m_logPending 永远为 false,
|
||||
* TASK_SPI_LOG 永不置位,poll() 永不执行,m_ringPending 卡死导致
|
||||
* canFeedbackPushStep() 永久 return -> SPI 反馈链路死锁。
|
||||
* 放在 canFeedbackPushStep() 前确保卡死的按铃先被清掉再推送下一帧。 */
|
||||
AppSpiCommandBus.poll();
|
||||
|
||||
@@ -375,9 +361,7 @@ void TaskRunner::runPending()
|
||||
if(pending & (1UL << TASK_ADC_PROCESS)) taskAdcProcess();
|
||||
if(pending & (1UL << TASK_CAN_RX_PARSE)) taskCanRxParse();
|
||||
if(pending & (1UL << TASK_CAN_TX_SEND)) taskCanTxSend();
|
||||
if(pending & (1UL << TASK_STATUS_LED)) taskStatusLed();
|
||||
if(pending & (1UL << TASK_HEARTBEAT)) taskHeartbeat();
|
||||
if(pending & (1UL << TASK_DIAGNOSTIC_PRINT)) taskDiagnosticPrint();
|
||||
/* TASK_SPI_LOG 的 poll() 已移至 runPending() 开头无条件调用(含按铃看门狗) */
|
||||
if(pending & (1UL << TASK_ETHERCAT_PROCESS)) taskEthercatProcess();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user