打印
[开发工具]

求助RT-Thread studio的编译器问题?

[复制链接]
655|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 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.

使用特权

评论回复
沙发
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的函数

使用特权

评论回复
5
捧一束彼岸花| | 2023-5-10 01:02 | 只看该作者
RT_WEAK宏替换为函数名称后,需要在代码中查找该函数的定义

使用特权

评论回复
6
风凉| | 2023-5-10 02:45 | 只看该作者
函数已经定义,可以在代码中直接使用该函数名称

使用特权

评论回复
7
她已醉| | 2023-5-10 04:46 | 只看该作者
可能没有指定变量的类型

使用特权

评论回复
8
将爱藏于深海| | 2023-5-10 06:05 | 只看该作者
RT_WEAK宏的定义前添加一个等号,指定变量的类型

使用特权

评论回复
9
春日负喧| | 2023-5-10 07:22 | 只看该作者
试试在RT_WEAK宏的定义前添加一个asm关键字

使用特权

评论回复
10
温室雏菊| | 2023-5-10 09:33 | 只看该作者
在定义RT_CTASSERT(name, expn)时,使用了typedef char ct_assert##name[(expn)?1:-1]的语法,这是一个编译时的断言宏,用于在编译时检查宏名是否正确,并生成相应的错误信息

使用特权

评论回复
11
我吃小朋友| | 2023-5-10 11:08 | 只看该作者
是不语法使用有问题,使用了__attribute__((weak))的语法,可以在宏定义时为一个或多个指定宏是否是弱标识符

使用特权

评论回复
12
lium| | 2023-5-11 22:47 | 只看该作者
RTT Sudio并没有内置创建429基于芯片的工程功能,429是一个软件框架,而RTT Sudio是一个用于编写软件的工具,需要使用其他工具来创建429基于芯片的工程

使用特权

评论回复
13
tian111| | 2023-5-11 22:48 | 只看该作者
用#define指令将其替换为要定义的函数名称#define RT_WEAK rt_hw_board_init

使用特权

评论回复
14
guoyt| | 2023-5-11 22:50 | 只看该作者
可以在RTdef.h头文件中查找一个名为RT_*_DECLARE_DEFN的宏定义。这个宏定义定义了一个名为RT_WEAK的函数

使用特权

评论回复
15
spark周| | 2023-5-11 22:51 | 只看该作者
将RT_WEAK宏替换为函数名称后,需要在代码中查找该函数的定义

使用特权

评论回复
16
MessageRing| | 2023-5-14 23:36 | 只看该作者
是不是变量类型的问题

使用特权

评论回复
17
xxmmi| | 2023-5-15 19:16 | 只看该作者
函数已经定义,可以在代码中直接使用该函数名称

使用特权

评论回复
18
zwll| | 2023-5-15 19:18 | 只看该作者
可能没有指定变量的类型

使用特权

评论回复
19
liliang9554| | 2023-5-15 19:20 | 只看该作者
在RT_WEAK宏的定义前添加一个等号,指定变量的类型

使用特权

评论回复
20
chuxh| | 2023-5-15 19:22 | 只看该作者
试试在RT_WEAK宏的定义前添加一个asm关键字

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1884

主题

6474

帖子

8

粉丝