硬汉嵌入式论坛

 找回密码
 立即注册
查看: 728|回复: 11
收起左侧

[以太网] cubemx生成的网络配置问题

[复制链接]

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2024-12-2 13:40:20 | 显示全部楼层 |阅读模式
在ethernetif.c 中会有下面一项定义
#elif defined ( __CC_ARM ) /* MDK ARM Compiler */
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];


1. 我并没有找.Rx_PoolSection的定义
2. memp_memory_RX_POOL_base 这个变量我也没有找到使用的地方

这个定义有什么意义呢?


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-12-3 09:43:19 | 显示全部楼层
以MDK为例,这个是在分散加载文件里面设置的。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2024-12-3 13:08:30 | 显示全部楼层
我查了一下,您说的分散加载文件,就是sct文件对吧。
cubemx生成的工程没有也不加载sct文件。还要自己手动添加是吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-12-4 09:15:38 | 显示全部楼层
zmsxhy 发表于 2024-12-3 13:08
我查了一下,您说的分散加载文件,就是sct文件对吧。
cubemx生成的工程没有也不加载sct文件。还要自己手动 ...

对,要设置下才可以。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2024-12-4 13:59:03 | 显示全部楼层
谢谢啊,我明白了。其实不配置也没有影响,感觉莫名其妙。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

afa

积分
11
发表于 2025-4-16 18:21:34 | 显示全部楼层
我也有这个疑问,在链接文件中设置了这段,重新编译后看map文件,在map文件中没看到这个数据的使用?这个数组的使用是要用内存池才分配吗?还是需要手动分配?硬汉哥?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-4-17 09:45:14 | 显示全部楼层
liushufa 发表于 2025-4-16 18:21
我也有这个疑问,在链接文件中设置了这段,重新编译后看map文件,在map文件中没看到这个数据的使用?这个数 ...

如果你的是MDK的,且使用Rx_PoolSection定义了。

你要手动设置分散加载才会分频到这个段,你可以看下ST的例子,这种的,他们在MDK Option的Linker里面设置了分散加载。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

afa

积分
11
发表于 2025-4-17 10:01:44 | 显示全部楼层
eric2013 发表于 2025-4-17 09:45
如果你的是MDK的,且使用Rx_PoolSection定义了。

你要手动设置分散加载才会分频到这个段,你可以看下S ...

硬汉哥,关于这个问题,可以下面这样理解吗:
1、需要使用到了内存池;若使用内存堆的方式,这个数组则不起作用?
2、如果使用内存池的方案,在MDK中的.sct文件中添加这个段,更改成手动加载.sct文件
这样理解是否对?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-4-18 10:02:27 | 显示全部楼层
liushufa 发表于 2025-4-17 10:01
硬汉哥,关于这个问题,可以下面这样理解吗:
1、需要使用到了内存池;若使用内存堆的方式,这个数组则 ...

他这个目标就是设置内存到指定地址空间。你也可以不用他这个单独设置sct,直接attribute at即可
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 3 天前 | 显示全部楼层
eric2013 发表于 2025-4-18 10:02
他这个目标就是设置内存到指定地址空间。你也可以不用他这个单独设置sct,直接attribute at即可

借楼请问个问题,现在想改用ac6编译器。关于lwip接收内存池
[C] 纯文本查看 复制代码
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];
指定地址时报以下警告。
../LWIP/Target/ethernetif.c(132): warning: section attribute is specified on redeclared variable [-Wsection]
__attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];
                                                        ^
../LWIP/Target/ethernetif.c(101): note: previous declaration is here
LWIP_MEMPOOL_DECLARE(RX_POOL, ETH_RX_BUFFER_CNT, sizeof(RxBuff_t), "Zero-copy RX PBUF pool");
^
../Middlewares/Third_Party/LwIP/src/include\lwip/memp.h(96): note: expanded from macro 'LWIP_MEMPOOL_DECLARE'
  LWIP_DECLARE_MEMORY_ALIGNED(memp_memory_ ## name ## _base, ((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))); \
                              ^
<scratch space>(69): note: expanded from here
memp_memory_RX_POOL_base
个人理解为LWIP_MEMPOOL_DECLARE定义了memp_memory_RX_POOL_base数组,此时未指定具体位置。后续重新声明指定地址冲突发出警告,请问有什么解决办法了?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 前天 07:44 | 显示全部楼层
zgp 发表于 2025-6-6 16:27
借楼请问个问题,现在想改用ac6编译器。关于lwip接收内存池[mw_shl_code=c,false]__attribute__((section ...

ST的例子是采用的这种定义方式,这个是MDK采用了自定义分散加载,这个分散加载在MDK Option Linker里面设置的
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 昨天 17:58 | 显示全部楼层
eric2013 发表于 2025-6-7 07:44
ST的例子是采用的这种定义方式,这个是MDK采用了自定义分散加载,这个分散加载在MDK Option Linker里面设 ...

嗯嗯,这个看到了,分散加载对应也设置了,ac6编译器可能检查的太严了会报上述警告,ac5编译器都没问题。我暂时除了屏蔽这个警告没找到消除这个警告的办法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 19:35 , Processed in 0.414565 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表