Skip to content

[Bug] 给sdio的默认栈是否过小 #11694

Description

@kaidegit

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,栈占用也会偏大。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions