[开发工具] 求助RT-Thread studio的编译器问题?

[复制链接]
 楼主| 两只袜子 发表于 2023-5-6 10:00 | 显示全部楼层 |阅读模式
使用RTT Sudio新建的429基于芯片创建的工程,在board.c中定义这个函数RT_WEAK void rt_hw_board_init(),编译提示出现

error: expected '=', ',', ';', 'asm' or 'attribute' before 'void'RT_WEAK void rt_hw_board_init()
错误,一查找才知道在rtdef.h定义的宏为

/* maximum value of ipc type */
#define RT_SEM_VALUE_MAX RT_UINT16_MAX /< Maximum number of semaphore .value */
#define RT_MUTEX_VALUE_MAX RT_UINT16_MAX /< Maximum number of mutex .value */
#define RT_MUTEX_HOLD_MAX RT_UINT8_MAX /< Maximum number of mutex .hold */
#define RT_MB_ENTRY_MAX RT_UINT16_MAX /< Maximum number of mailbox .entry */
#define RT_MQ_ENTRY_MAX RT_UINT16_MAX /**< Maximum number of message queue .entry /
/ Common Utilities /
#define RT_UNUSED(x) ((void)x)
/ compile time assertion /
#define RT_CTASSERT(name, expn) typedef char ct_assert##name[(expn)?1:-1]
/ Compiler Related Definitions /
#if defined(__ARMCC_VERSION) / ARM Compiler */
#define rt_section(x) attribute((section(x)))
#define rt_used attribute((used))
#define rt_align(n) attribute((aligned(n)))
#define rt_weak attribute((weak))
#define rt_inline static __inline
弱函数的宏是rt_weak.但在另一台电脑中安装的RTT Studio的宏定义却是RT_WEAK.
未说出口的像你 发表于 2023-5-9 20:54 | 显示全部楼层
RTT Sudio并没有内置创建429基于芯片的工程功能,429是一个软件框架,而RTT Sudio是一个用于编写软件的工具,需要使用其他工具来创建429基于芯片的工程
失物招領 发表于 2023-5-9 22:11 | 显示全部楼层
#define指令将其替换为要定义的函数名称#define RT_WEAK rt_hw_board_init

白马过平川 发表于 2023-5-9 23:44 | 显示全部楼层
可以在RTdef.h头文件中查找一个名为RT_*_DECLARE_DEFN的宏定义。这个宏定义定义了一个名为RT_WEAK的函数

捧一束彼岸花 发表于 2023-5-10 01:02 | 显示全部楼层
RT_WEAK宏替换为函数名称后,需要在代码中查找该函数的定义

风凉 发表于 2023-5-10 02:45 | 显示全部楼层
函数已经定义,可以在代码中直接使用该函数名称

她已醉 发表于 2023-5-10 04:46 | 显示全部楼层
可能没有指定变量的类型
将爱藏于深海 发表于 2023-5-10 06:05 | 显示全部楼层
RT_WEAK宏的定义前添加一个等号,指定变量的类型

春日负喧 发表于 2023-5-10 07:22 | 显示全部楼层
试试在RT_WEAK宏的定义前添加一个asm关键字

温室雏菊 发表于 2023-5-10 09:33 | 显示全部楼层
在定义RT_CTASSERT(name, expn)时,使用了typedef char ct_assert##name[(expn)?1:-1]的语法,这是一个编译时的断言宏,用于在编译时检查宏名是否正确,并生成相应的错误信息

我吃小朋友 发表于 2023-5-10 11:08 | 显示全部楼层
是不语法使用有问题,使用了__attribute__((weak))的语法,可以在宏定义时为一个或多个指定宏是否是弱标识符

lium 发表于 2023-5-11 22:47 | 显示全部楼层
RTT Sudio并没有内置创建429基于芯片的工程功能,429是一个软件框架,而RTT Sudio是一个用于编写软件的工具,需要使用其他工具来创建429基于芯片的工程
tian111 发表于 2023-5-11 22:48 | 显示全部楼层
用#define指令将其替换为要定义的函数名称#define RT_WEAK rt_hw_board_init
guoyt 发表于 2023-5-11 22:50 | 显示全部楼层
可以在RTdef.h头文件中查找一个名为RT_*_DECLARE_DEFN的宏定义。这个宏定义定义了一个名为RT_WEAK的函数
spark周 发表于 2023-5-11 22:51 | 显示全部楼层
将RT_WEAK宏替换为函数名称后,需要在代码中查找该函数的定义
MessageRing 发表于 2023-5-14 23:36 | 显示全部楼层
是不是变量类型的问题
xxmmi 发表于 2023-5-15 19:16 | 显示全部楼层
函数已经定义,可以在代码中直接使用该函数名称
zwll 发表于 2023-5-15 19:18 | 显示全部楼层
可能没有指定变量的类型
liliang9554 发表于 2023-5-15 19:20 | 显示全部楼层
在RT_WEAK宏的定义前添加一个等号,指定变量的类型
chuxh 发表于 2023-5-15 19:22 | 显示全部楼层
试试在RT_WEAK宏的定义前添加一个asm关键字
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2122

主题

8117

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部

2122

主题

8117

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部