rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[Bug] 开启DFS后正点原子潘多拉板载支持包编译错误

Open LinuxMint-User opened this issue 2 weeks ago • 0 comments

RT-Thread Version

5.3.0

Hardware Type/Architectures

bsp/stm32/stm32l475-atk-pandora

Develop Toolchain

GCC

Describe the bug

环境

系统:Fedora 43 KDE 工具链:arm-none-eabi-gcc (Fedora 15.2.0-1.fc43) 15.2.0 && scons 使用python虚拟环境运行构建,python版本3.14.0

编译前修改

rtconfig.py:

import os

# toolchains options
ARCH = 'arm'
CPU = 'cortex-m4'
CROSS_TOOL = 'gcc'

# bsp lib config
BSP_LIBRARY_TYPE = None

if os.getenv('RTT_CC'):
    CROSS_TOOL = os.getenv('RTT_CC')
if os.getenv('RTT_ROOT'):
    RTT_ROOT = os.getenv('RTT_ROOT')

# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for Linux use /usr/bin
if CROSS_TOOL == 'gcc':
    PLATFORM = 'gcc'
    EXEC_PATH = '/usr/bin'
elif CROSS_TOOL == 'keil':
    PLATFORM = 'armcc'
    EXEC_PATH = '/usr/bin'  # Keil not available on Linux
elif CROSS_TOOL == 'iar':
    PLATFORM = 'iccarm'
    EXEC_PATH = '/usr/bin'  # IAR not available on Linux
elif CROSS_TOOL == 'llvm-arm':
    PLATFORM = 'llvm-arm'
    EXEC_PATH = '/usr/bin'  # Adjust if LLVM is installed elsewhere

if os.getenv('RTT_EXEC_PATH'):
    EXEC_PATH = os.getenv('RTT_EXEC_PATH')

BUILD = 'debug'

if PLATFORM == 'gcc':
    # toolchains
    PREFIX = 'arm-none-eabi-'
    CC = PREFIX + 'gcc'
    AS = PREFIX + 'gcc'
    AR = PREFIX + 'ar'
    CXX = PREFIX + 'g++'
    LINK = PREFIX + 'gcc'
    TARGET_EXT = 'elf'
    SIZE = PREFIX + 'size'
    OBJDUMP = PREFIX + 'objdump'
    OBJCPY = PREFIX + 'objcopy'

    DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections'
    CFLAGS = DEVICE + ' -Dgcc -fstack-usage -fdump-rtl-dfinish'
    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'

    CPATH = ''
    LPATH = ''

    if BUILD == 'debug':
        CFLAGS += ' -O0 -gdwarf-2 -g'
        AFLAGS += ' -gdwarf-2'
    else:
        CFLAGS += ' -O2'

    CXXFLAGS = CFLAGS

    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'

else:
    print('Unsupported platform: ' + PLATFORM)
    exit(1)

def dist_handle(BSP_ROOT, dist_dir):
    import sys
    cwd_path = os.getcwd()
    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
    from sdk_dist import dist_do_building
    dist_do_building(BSP_ROOT, dist_dir)

编译报错一:

scons: Reading SConscript files ...
Newlib version: 4.5.0
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build/applications/main.o
CC build/applications/samples/aht10_sample.o
CC build/applications/samples/pin_sample.o
CC build/board/CubeMX_Config/Src/stm32l4xx_hal_msp.o
CC build/board/board.o
CC build/board/ports/drv_qspi_flash.o
board/ports/drv_qspi_flash.c: In function 'rt_hw_qspi_flash_with_sfud_init':
board/ports/drv_qspi_flash.c:65:61: error: passing argument 5 of 'rt_hw_qspi_device_attach' from incompatible pointer type [-Wincompatible-pointer-types]
   65 |     rt_hw_qspi_device_attach("qspi1", "qspi10", RT_NULL, 4, w25qxx_enter_qspi_mode, RT_NULL);
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~
      |                                                             |
      |                                                             void (*)(struct rt_qspi_device *)
In file included from board/ports/drv_qspi_flash.c:12:
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.h:20:135: note: expected 'void (*)(void)' but argument is of type 'void (*)(struct rt_qspi_device *)'
   20 |  *bus_name, const char *device_name, rt_base_t cs_pin, rt_uint8_t data_line_width, void (*enter_qspi_mode)(), void (*exit_qspi_mode)());
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~
board/ports/drv_qspi_flash.c:40:6: note: 'w25qxx_enter_qspi_mode' declared here
   40 | void w25qxx_enter_qspi_mode(struct rt_qspi_device *device)
      |      ^~~~~~~~~~~~~~~~~~~~~~
scons: *** [build/board/ports/drv_qspi_flash.o] Error 1
scons: building terminated because of errors.

编译报错二:

scons: Reading SConscript files ...
Newlib version: 4.5.0
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build/applications/main.o
CC build/applications/samples/aht10_sample.o
CC build/applications/samples/pin_sample.o
CC build/board/CubeMX_Config/Src/stm32l4xx_hal_msp.o
CC build/board/board.o
CC build/board/ports/drv_qspi_flash.o
CC build/board/ports/drv_sensors.o
CC build/kernel/components/dfs/dfs_v1/filesystems/devfs/devfs.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/ff.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/ffunicode.o
CC build/kernel/components/dfs/dfs_v1/src/dfs.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_file.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_fs.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_posix.o
CC build/kernel/components/drivers/core/device.o
CC build/kernel/components/drivers/i2c/dev_i2c_bit_ops.o
CC build/kernel/components/drivers/i2c/dev_i2c_core.o
CC build/kernel/components/drivers/i2c/dev_i2c_dev.o
CC build/kernel/components/drivers/ipc/completion_comm.o
CC build/kernel/components/drivers/ipc/completion_up.o
CC build/kernel/components/drivers/ipc/condvar.o
CC build/kernel/components/drivers/ipc/dataqueue.o
CC build/kernel/components/drivers/ipc/pipe.o
CC build/kernel/components/drivers/ipc/ringblk_buf.o
CC build/kernel/components/drivers/ipc/ringbuffer.o
CC build/kernel/components/drivers/ipc/waitqueue.o
CC build/kernel/components/drivers/ipc/workqueue.o
CC build/kernel/components/drivers/pin/dev_pin.o
CC build/kernel/components/drivers/sensor/v2/sensor.o
CC build/kernel/components/drivers/sensor/v2/sensor_cmd.o
CC build/kernel/components/drivers/serial/dev_serial.o
CC build/kernel/components/drivers/spi/dev_qspi_core.o
CC build/kernel/components/drivers/spi/dev_spi.o
CC build/kernel/components/drivers/spi/dev_spi_core.o
CC build/kernel/components/drivers/spi/dev_spi_flash_sfud.o
CC build/kernel/components/drivers/spi/sfud/src/sfud.o
CC build/kernel/components/drivers/spi/sfud/src/sfud_sfdp.o
CC build/kernel/components/finsh/cmd.o
CC build/kernel/components/finsh/msh.o
CC build/kernel/components/finsh/msh_file.o
CC build/kernel/components/finsh/msh_parse.o
CC build/kernel/components/finsh/shell.o
CC build/kernel/components/libc/compilers/common/cctype.o
CC build/kernel/components/libc/compilers/common/cstdlib.o
CC build/kernel/components/libc/compilers/common/cstring.o
CC build/kernel/components/libc/compilers/common/ctime.o
CC build/kernel/components/libc/compilers/common/cunistd.o
CC build/kernel/components/libc/compilers/common/cwchar.o
CC build/kernel/components/libc/compilers/newlib/syscalls.o
CC build/kernel/libcpu/arm/common/atomic_arm.o
CC build/kernel/libcpu/arm/common/div0.o
CC build/kernel/libcpu/arm/common/showmem.o
AS build/kernel/libcpu/arm/cortex-m4/context_gcc.o
CC build/kernel/libcpu/arm/cortex-m4/cpuport.o
CC build/kernel/src/clock.o
CC build/kernel/src/components.o
CC build/kernel/src/cpu_up.o
CC build/kernel/src/defunct.o
CC build/kernel/src/idle.o
CC build/kernel/src/ipc.o
CC build/kernel/src/irq.o
CC build/kernel/src/klibc/kerrno.o
CC build/kernel/src/klibc/kstdio.o
CC build/kernel/src/klibc/kstring.o
CC build/kernel/src/klibc/rt_vsnprintf_std.o
CC build/kernel/src/klibc/rt_vsscanf.o
CC build/kernel/src/kservice.o
CC build/kernel/src/mem.o
CC build/kernel/src/mempool.o
CC build/kernel/src/object.o
CC build/kernel/src/scheduler_comm.o
CC build/kernel/src/scheduler_up.o
CC build/kernel/src/thread.o
CC build/kernel/src/timer.o
CC build/libraries/HAL_Drivers/drv_common.o
CC build/packages/aht10-latest/samples/aht10_sample.o
CC build/packages/aht10-latest/src/aht10.o
CC build/packages/aht10-latest/src/sensor_asair_aht10.o
AS packages/stm32l4_cmsis_driver-latest/Source/Templates/gcc/startup_stm32l475xx.o
CC packages/stm32l4_cmsis_driver-latest/Source/Templates/system_stm32l4xx.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_comp.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cortex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_crc.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_crc_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cryp.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cryp_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_dma.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_dma_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_exti.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_gpio.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_i2c.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_i2c_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_pwr.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_pwr_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_qspi.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rcc.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rcc_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rng.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_spi.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_spi_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_uart.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_uart_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_usart.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_usart_ex.o
CC /home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_gpio.o
CC /home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.o
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c: In function 'rt_hw_qspi_device_attach':
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c:326:34: error: assignment to 'void (*)(struct rt_qspi_device *)' from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types]
  326 |     qspi_device->enter_qspi_mode = enter_qspi_mode;
      |                                  ^
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c:327:33: error: assignment to 'void (*)(struct rt_qspi_device *)' from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types]
  327 |     qspi_device->exit_qspi_mode = exit_qspi_mode;
      |                                 ^
scons: *** [/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.o] Error 1
scons: building terminated because of errors.

对编译报错一的修复

vim rt-thread/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_qspi_flash.c
// 添加适配函数
void w25qxx_enter_qspi_mode_adapter(void)
{
    struct rt_qspi_device *device = (struct rt_qspi_device *)rt_device_find("qspi10");
    if (device == RT_NULL)
    {
        rt_kprintf("QSPI device not found!\n");
        return;
    }
    w25qxx_enter_qspi_mode(device);
}

// 修改初始化函数
static int rt_hw_qspi_flash_with_sfud_init(void)
{
    rt_hw_qspi_device_attach("qspi1", "qspi10", RT_NULL, 4,
                             w25qxx_enter_qspi_mode_adapter, // 使用适配器
                             RT_NULL);
    // ... 其余代码不变
}

对编译报错二的修复

vim rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c
// 原代码:
qspi_device->enter_qspi_mode = enter_qspi_mode;
qspi_device->exit_qspi_mode = exit_qspi_mode;

// 修改为:
if (enter_qspi_mode != RT_NULL)
    qspi_device->enter_qspi_mode = (void (*)(struct rt_qspi_device *))enter_qspi_mode;
else
    qspi_device->enter_qspi_mode = RT_NULL;

if (exit_qspi_mode != RT_NULL)
    qspi_device->exit_qspi_mode = (void (*)(struct rt_qspi_device *))exit_qspi_mode;
else
    qspi_device->exit_qspi_mode = RT_NULL;

备注

关于核心驱动 drv_qspi.c 的修改,我并不清楚是否会影响其他板载支持包。关于该板载支持包 drv_qspi_flash.c 的修改,旧写法适配 RT-Thread 4.0.2 版本源码,我并不清楚该改动除了能在5.3.0版本上正常工作是否会影响其在其他版本的 RT-Thread 源码中工作。于是先提交 issue 以供讨论。

Other additional context

No response

LinuxMint-User avatar Dec 10 '25 12:12 LinuxMint-User

Ok, all ready for review now. I don't have any atsamd21 boards, but I've tested USB CDC on an atsamd51, nrf52840, and a pico-w as well as USB mass storage on the pico-w and everything looks good to me

mikesmitty avatar Aug 27 '25 00:08 mikesmitty

Did a quick test on a Circuit Playground Express (atsamd21) and it seems to be working fine!

aykevl avatar Aug 27 '25 14:08 aykevl

@mikesmitty I just switched the branch for this to dev. No merge conflicts. Do you want to squash any of these commits?

Anyone else have any comments on this PR?

deadprogram avatar Sep 12 '25 12:09 deadprogram

Sure, I'll squash them all

mikesmitty avatar Sep 12 '25 13:09 mikesmitty

Before merge, just want to confirm with @sago35 that this does not affect any TinyGo Keeb code. :keyboard:

deadprogram avatar Sep 12 '25 14:09 deadprogram

I’ll make sure to review it early next week.

sago35 avatar Sep 12 '25 23:09 sago35