RT-Thread Version
master
Affected area
Device drivers
Hardware/BSP vendor
HPMicro
Architecture
RISC-V
Board and hardware details
hpm63
Develop Toolchain
GCC
Describe the bug
默认的和idle相同的栈大小是不是有点太小了,在idle配成512时候,sdio挂网卡直接爆栈了。不知道其他情况会不会直接爆。
Other additional context
AI的分析:
当前链路是:
上下文 工作
━━━━━━━━━━━━━━━━━
SDXC 硬件 ISR 读取状态、屏蔽 DAT1、释放 host->sdio_irq_sem
─────────────────
sdio_irq 线程 加总线锁,通过 CMD52 读取 CCCR INT_PENDING,分发 function-1 回调,再使能 DAT1
─────────────────
ESP-Hosted 回调 只释放 port irq_sem
─────────────────
sdio_read 线程 读取 ESP 中断状态及实际数据
栈大的原因不是业务复杂,而是 CMD52 穿过了整套通用驱动调用链:
sdio_irq_thread
-> sdio_io_readb
-> sdio_io_rw_direct
-> mmcsd_send_cmd
-> mmcsd_send_request
-> hpm_sdmmc_request
-> hpm_sdmmc_transfer
-> hpm_sdmmc_transfer_interrupt_driven
-> rt_event_recv
仅编译器可见的函数栈帧就超过 624B。其中 hpm_sdmmc_request() 自己占 192B,因为栈上同时放了:
sdxc_adma_config_t
sdxc_xfer_t
sdxc_command_t
sdxc_data_t
再加锁、事件等待、线程入口和内核调用,实测就是 988B。当前还是 -O0,栈占用也会偏大。
RT-Thread Version
master
Affected area
Device drivers
Hardware/BSP vendor
HPMicro
Architecture
RISC-V
Board and hardware details
hpm63
Develop Toolchain
GCC
Describe the bug
默认的和idle相同的栈大小是不是有点太小了,在idle配成512时候,sdio挂网卡直接爆栈了。不知道其他情况会不会直接爆。
Other additional context
AI的分析:
当前链路是:
上下文 工作
━━━━━━━━━━━━━━━━━
SDXC 硬件 ISR 读取状态、屏蔽 DAT1、释放 host->sdio_irq_sem
─────────────────
sdio_irq 线程 加总线锁,通过 CMD52 读取 CCCR INT_PENDING,分发 function-1 回调,再使能 DAT1
─────────────────
ESP-Hosted 回调 只释放 port irq_sem
─────────────────
sdio_read 线程 读取 ESP 中断状态及实际数据
栈大的原因不是业务复杂,而是 CMD52 穿过了整套通用驱动调用链:
sdio_irq_thread
-> sdio_io_readb
-> sdio_io_rw_direct
-> mmcsd_send_cmd
-> mmcsd_send_request
-> hpm_sdmmc_request
-> hpm_sdmmc_transfer
-> hpm_sdmmc_transfer_interrupt_driven
-> rt_event_recv
仅编译器可见的函数栈帧就超过 624B。其中 hpm_sdmmc_request() 自己占 192B,因为栈上同时放了:
sdxc_adma_config_t
sdxc_xfer_t
sdxc_command_t
sdxc_data_t
再加锁、事件等待、线程入口和内核调用,实测就是 988B。当前还是 -O0,栈占用也会偏大。