如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错。
具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打开main.c文件然后编译,直接报错。
报错定位在“drivers/board.c”,再具体定位在代码“RT_WEAK void rt_hw_board_init()”。
以下是代码原码:
board.c
#include <rtthread.h>
#include <board.h>
#include <drv_common.h>
RT_WEAK void rt_hw_board_init()
{
extern void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq);
/* Heap initialization */
#if defined(RT_USING_HEAP)
rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END);
#endif
hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ);
/* Set the shell console output device */
#if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE)
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
/* Board underlying hardware initialization */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
}
解析:
RT_WEAK是一个RT-Thread特有的宏,用于指定一个弱函数。在C语言中,函数可以被定义为弱函数,当在其他文件中有相同名字的强函数时,链接器会优先选择强函数,忽略弱函数。
在RT-Thread中,RT_WEAK用于定义那些可以被其他文件覆盖的函数。
这个错误可能是由于编译器或环境不支持RT_WEAK这个宏。RT_WEAK是RT-Thread特有的宏,如果你在一个非RT-Thread的环境下编译这段代码,可能就会出现这样的错误。
可以改为:
__attribute__((weak)) void rt_hw_board_init()
然后编译,结果如下:0 error ,0 warning。
16:45:36 **** Incremental Build of configuration Debug for project new1 ****
make -j8 all
arm-none-eabi-size --format=berkeley "rtthread.elf"
text data bss dec hex filename
60256 2152 3336 65744 100d0 rtthread.elf
Used Size(B) Used Size(KB)
Flash: 62408 B 60.95 KB
RAM: 5488 B 5.36 KB
16:45:37 Build Finished. 0 errors, 0 warnings. (took 978ms)
标签:RT,rt,Thread,void,init,报错,board,main From: https://www.cnblogs.com/salty-pineapple/p/17794275.html