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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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