-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Open
Description
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
Metadata
Metadata
Assignees
Labels
No labels