OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 正点原子

STM32 大小端模式 与 堆栈及其增长方向分析

  [复制链接]

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-27 14:17:06 | 显示全部楼层
回复【88楼】正点原子:
---------------------------------
回复【50楼】正点原子:
---------------------------------
静态区不连续的吗?是不是这样的顺序:从0x2000 0000开始,依次是静态区(0x2000 0000开始的)、堆区、栈区(栈顶:0x2000 0940)、静态区(总尺寸-1>地址>0x2000 0940的区域)
合肥-文盲
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165464
金钱
165464
注册时间
2010-12-1
在线时间
2115 小时
 楼主| 发表于 2015-8-27 22:39:24 | 显示全部楼层
回复【151楼】合肥-文盲:
---------------------------------
是连续的,只不过有一些字节对其的情况,会占用掉一些内存。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-28 08:45:52 | 显示全部楼层
回复【152楼】正点原子:
---------------------------------
对的  是连续的  对齐可能会多用2-3个字节,从0x2000 0000开始,顺序就是静态区、堆区、栈区
合肥-文盲
回复 支持 反对

使用道具 举报

22

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-5-4
在线时间
34 小时
发表于 2015-11-2 15:00:50 | 显示全部楼层
 回复【4楼】 正点原子 :
---------------------------------
原子大哥,


上图中,RO:常量所占空间
RW:程序中已经初始化的变量所占空间
ZI:未初始化的static变量和全局变量以及堆栈所占的空间

test.c中 stack_dircpu_endian都是未初始化的static变量,为什么是ZI-data=0,RW-data=6呢?

//保存栈增长方向
//0,向下增长;1,向上增长.
static u8 stack_dir;

//CPU大小端
//0,小端模式;1,大端模式.
static u8 cpu_endian;


回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165464
金钱
165464
注册时间
2010-12-1
在线时间
2115 小时
 楼主| 发表于 2015-11-2 21:56:46 | 显示全部楼层
回复【154楼】shblh:
---------------------------------
因为他们是函数内局部变量,存放在堆栈里面,动态处理的.不体现在最终的编译结果里面
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

104

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-5-4
在线时间
34 小时
发表于 2015-11-3 08:44:52 | 显示全部楼层
回复【155楼】正点原子:
---------------------------------
原子大哥,cpu_endian;stack_dir;以及*addr不是用占用6个字节吗?这些是静态变量,不是存放在静态存储区吗?
我是觉得cpu_endian;stack_dir;以及*addr都是未初始化的static变量,应该是ZI-data=6,RW-data=0?
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-12-5 19:57:48 | 显示全部楼层
回复【85楼】kang_zhenyi:
---------------------------------
我觉得你应该是误解了,你只设置了栈的容量,例如“Stack_Size      EQU     0x00000800”,这个地方设置了栈的容量,而你查到的栈顶地址MSP为“0X2000 0940”,你可能以为变量区和堆区范围限制在了剩下的“0X940-0x800 = 0x140”,其实不是的,我实测后发现栈顶地址是根据你定义的全局变量、静态变量(即变量区)所占的内存而改变的,栈顶“地址”不是固定的0X2000 0940,但是“容量”是固定的为“0x800”,这样无论你在变量区定义多少个变量内存都能得到足够的应用(只要不超过内存大小容量),如果你在变量区定义的变量越多,那么栈顶地址就会往上递增,至于栈容量需要设置多大,当然是根据你代码的需要设置了
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-12-5 20:20:50 | 显示全部楼层
回复【151楼】合肥-文盲:
---------------------------------
不是你指示的那样,栈顶地址0x2000 0940不是固定的........是根据你定义的变量区(即静态存储区),静态区你定义的变量越多,栈顶地址就会逐渐往上增长,所以过程还是“0x2000 0000开始,依次是静态区(0x2000 0000开始的)、堆区、栈区”,所有的静态区变量都是在静态区地址开始递增的,后面的堆区如果没有malloc可以为0,栈区设置了大小但没有设定栈顶地址,如156楼
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-12-5 20:40:12 | 显示全部楼层
回复【151楼】 合肥-文盲 :
---------------------------------
当我在静态区定义的变量越多时,栈顶地址不断的往上递增,我定义了12个u32类型的静态全局变量,总共占48个字节=0x30,0x2000 0940+0x30刚好就是0x2000 0970,如下图


我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-12-7 13:19:08 | 显示全部楼层
回复【158楼】229382777@qq.com:
---------------------------------
回复【159楼】229382777@qq.com:
---------------------------------
嗯  你说的是对的  栈顶地址不是固定的   .s文件里面Stack_Size      EQU     0x00000800只是设置了栈的大小,栈顶确实受到静态区和堆区的挤压,静态变量用的越多,堆区越大  估计栈顶也就越大
合肥-文盲
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-7-18
在线时间
13 小时
发表于 2016-2-1 11:59:09 | 显示全部楼层
好东西!学习了!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-2-2
在线时间
2 小时
发表于 2016-2-2 16:06:47 | 显示全部楼层
如此好贴,怎能不顶!涨姿势了!
回复 支持 反对

使用道具 举报

44

主题

225

帖子

0

精华

高级会员

Rank: 4

积分
660
金钱
660
注册时间
2013-11-22
在线时间
131 小时
发表于 2016-3-7 11:32:25 | 显示全部楼层
mark下
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2016-4-17
在线时间
4 小时
发表于 2016-4-18 11:50:37 | 显示全部楼层
本帖最后由 XYMtime 于 2016-4-18 11:57 编辑
正点原子 发表于 2013-11-16 14:54
目前还有个问题没解决,就是我提到的,0X2000 0000最开始的4个字节,存储的0X2000 0938,到底是怎么 ...

RW 是程序初始化的变量,初始化后的变量不能放在RAM里面,需要写进flash ,在运行的时候又要将RW的数据回写进RAM(RW最开始还是变量),
所以要在RAM中给RW的预留一定的内存空间,RW数据的起始地址就是0x2000_0000, 在beep.map里面的有一段关于RW的描述,
Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000760, Max: 0x00010000, ABSOLUTE)

    Base Addr            Size         Type   Attr        Idx    E Section Name        Object

    0x20000000   0x00000014   Data   RW          155    .data             system_stm32f10x.o
    0x20000014   0x00000004   Data   RW          197    .data               delay.o
    0x20000018   0x00000006   Data   RW          229    .data               usart.o
    0x2000001e   0x00000014   Data   RW          292    .data               stm32f10x_rcc.o
    0x20000032   0x00000002   PAD
  我自己的RW_data是56,刚好是0x34大小内存,但是后面还有一段
Base Addr            Size           Type     Attr           Idx    E Section Name        Object

    0x20000034   0x000000c8     Zero   RW           228    .bss                    usart.o
    0x200000fc   0x00000060     Zero    RW           354    .bss                   c_w.l(libspace.o)
    0x2000015c   0x00000004    PAD
这个.bss文件还没有搞懂,似乎是预留给嵌入式系统的
接下来是heap和Stack基地址 和大小
Base Addr            Size         Type     Attr        Idx     E Section Name        Object

0x20000160   0x00000200   Zero       RW          261    HEAP          startup_stm32f10x_hd.o

0x20000360   0x00000400   Zero      RW          260    STACK        startup_stm32f10x_hd.o

也就是 heap的起始地址并不是 从0x2000_0000开始,而是从0x2000_0160开始的向上增长


回复 支持 反对

使用道具 举报

25

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2015-8-16
在线时间
116 小时
发表于 2016-5-31 21:37:08 | 显示全部楼层
原子哥,请问如何理解:if(*(char*)&x==1)
回复 支持 反对

使用道具 举报

9

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2016-7-4
在线时间
47 小时
发表于 2016-7-18 09:20:10 | 显示全部楼层

顶,总结的太好了。
回复 支持 反对

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
发表于 2016-8-2 21:18:09 | 显示全部楼层
必须标注一下
回复 支持 反对

使用道具 举报

32

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
617
金钱
617
注册时间
2013-1-16
在线时间
131 小时
发表于 2016-10-13 23:21:00 | 显示全部楼层
程序总共占用内存:20+2348字节=2368=0X940 我是菜鸟,请问下程序占用公的内存和代码占用的内存的区别
回复 支持 反对

使用道具 举报

32

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2012-3-30
在线时间
321 小时
发表于 2016-10-18 18:24:17 | 显示全部楼层
STM32还是有点复杂啊。
回复 支持 反对

使用道具 举报

39

主题

127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2289
金钱
2289
注册时间
2015-5-6
在线时间
248 小时
发表于 2016-10-18 19:44:30 | 显示全部楼层
MARK,很好的资料,
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-8-8
在线时间
34 小时
发表于 2016-10-25 09:16:47 | 显示全部楼层
顶起 mark
回复 支持 反对

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2016-10-25 11:38:43 | 显示全部楼层
原子哥,好文!
最近爱上了stm32
回复 支持 反对

使用道具 举报

7

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-10-21
在线时间
43 小时
发表于 2016-10-25 13:10:16 | 显示全部楼层
很赞同原子哥的解释,栈和堆都解释得很到位。另,不喜欢别人老是说堆栈、堆栈什么的,堆就是堆,栈就是栈,这是两个不同空间的东西。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2016-5-3
在线时间
42 小时
发表于 2016-10-27 17:34:53 | 显示全部楼层
学习了,菜鸟在次谢过,看来以后要多逛论坛了。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2016-5-3
在线时间
42 小时
发表于 2016-10-27 17:39:35 | 显示全部楼层
那位大神进行解答一下,如何学习stm32?小弟学stm32也有一年有余,可以总是局限在应用层,改改接口什么的,感觉都是三岁小孩所做之事,明知太水,却无从下手。望大神指点迷津,感激不尽。
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-8-8
在线时间
34 小时
发表于 2016-10-28 21:22:11 | 显示全部楼层
F:\E353.tmp.png
E353.tmp.png
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-12-12
在线时间
5 小时
发表于 2017-2-20 15:48:01 | 显示全部楼层
电子爱好探索者 发表于 2016-5-31 21:37
原子哥,请问如何理解:if(*(char*)&x==1)

这个简单啊,你现在应该早就明白了吧。
x是4字节的,x = 0x00 00 00 01,先取x的地址(&x),强制为字节指针访问(char *),然后取最低地址里的数据(*),如果为1,则为小端;如果为0,则为大端。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-12-12
在线时间
5 小时
发表于 2017-2-20 15:49:24 | 显示全部楼层
sky三叶草 发表于 2016-10-27 17:39
那位大神进行解答一下,如何学习stm32?小弟学stm32也有一年有余,可以总是局限在应用层,改改接口什么的, ...

买块开发板,从外设驱动开始,到最后移植系统。打好基础之后,应用其实很重要。
回复 支持 反对

使用道具 举报

13

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2016-2-2
在线时间
80 小时
发表于 2017-5-10 15:16:22 | 显示全部楼层
原子哥  我想问一下,关于栈中还存放着函数的形参应该如何理解呢?RW跟ZI并不会包括形参,那么MSP的地址不过太小吗?还是说在运行过程中根据形参的调用会增加栈的大小?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-7-6
在线时间
5 小时
发表于 2017-7-9 17:00:27 | 显示全部楼层
关于上面的描述有两个问题想要问一下:
1/文中说“程序运行后,MSP就是从这个地址开始(也就是ZI-DATA+RW-DATA总值),往下给函数的局部变量分配地址”,那么在启动段.s文件中划分出的栈空间大小比这个值大还有没有意义?( 栈是从MSP值向下增长,如果启动段划分出的栈空间比这个MSP值大岂不是用栈顶-栈空间就小于了0x20000000了)。但是实际上栈底固定在了0x20000000处,加上了栈空间Stack_Size 划分的大小得到了栈顶的位置。这块为什么加载之后MSP的值不是(0x20000000+Stack_Size )的位置?
2/文中提到“第二种情况(不使用malloc):
STM32的内存分配规律:
从0X20000000开始依次为:静态存储区+栈区“  这样子,静态存储区被包含在了栈区中间了啊?? 还请指点。  
谢谢~
回复 支持 反对

使用道具 举报

17

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2017-7-12
在线时间
20 小时
发表于 2017-7-31 23:29:16 | 显示全部楼层
正点原子 发表于 2014-3-21 14:34
回复【90楼】kang_zhenyi:
---------------------------------
设置小了,程序会跑飞,也就是说,会死机... ...

如果进入一个函数里的话,那么直到这个函数结束为止,所有的动态变量都会被压栈吗,也就是说main函数里定义的动态变量都一直在栈内,进入了更深层的函数,外层的函数里的动态变量也都一直在栈内,可以这么理解吗?
回复 支持 反对

使用道具 举报

1

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-8-21
在线时间
32 小时
发表于 2017-8-21 11:42:12 | 显示全部楼层
真的很不错
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-6-20
在线时间
32 小时
发表于 2017-9-1 16:19:36 | 显示全部楼层
栈顶不应该是低地址吗,怎么是最高地址?
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-9-4 15:14:50 | 显示全部楼层
正点原子 发表于 2013-11-16 14:54
目前还有个问题没解决,就是我提到的,0X2000 0000最开始的4个字节,存储的0X2000 0938,到底是怎么 ...

解决了吗?  多年前的问题
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2017-9-27 21:00:29 | 显示全部楼层
蛮经典的
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2017-9-27 21:01:14 | 显示全部楼层
cjw2017 发表于 2017-9-1 16:19
栈顶不应该是低地址吗,怎么是最高地址?

栈顶就是高地址,向下生长
回复 支持 反对

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-6-20
在线时间
32 小时
发表于 2017-10-9 09:49:02 | 显示全部楼层
一般BDN 发表于 2017-9-27 21:01
栈顶就是高地址,向下生长

是不是不同的架构都不一样,ARM的栈顶是高地址,我之前学C的时候看到过栈顶有低地址的啊
回复 支持 反对

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2017-10-9 20:52:20 | 显示全部楼层
cjw2017 发表于 2017-10-9 09:49
是不是不同的架构都不一样,ARM的栈顶是高地址,我之前学C的时候看到过栈顶有低地址的啊

不好意思这边我说错了,stm32的栈是向下生长的,也就是说入栈的东西是从高地址到低地址这么放置的。但是栈顶确实是低地址,这边我错了,不好意思
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2017-9-14
在线时间
74 小时
发表于 2017-11-8 11:45:06 | 显示全部楼层
mark   
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-12-29
在线时间
7 小时
发表于 2017-11-17 10:06:23 | 显示全部楼层
MARK
回复 支持 反对

使用道具 举报

42

主题

297

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2016-7-22
在线时间
318 小时
发表于 2017-12-7 11:39:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2017-12-21
在线时间
18 小时
发表于 2017-12-29 12:41:25 | 显示全部楼层
精品资料,必须收藏。
回复 支持 反对

使用道具 举报

6

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-7-18
在线时间
31 小时
发表于 2018-7-17 16:15:58 | 显示全部楼层
为什么SRAM的分配顺序是:变量+堆+栈 呢,而不是其他的顺序,如:变量+栈+堆 。是编译器和链接器的原因吗?有没有相关的文字介绍?
回复 支持 反对

使用道具 举报

6

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2017-7-18
在线时间
31 小时
发表于 2018-7-17 17:18:47 | 显示全部楼层
Stack_Size      EQU     0x00000800

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

启动文件中,initial_sp这个栈顶是在SPACE   Heap_Size分配前的啊,怎么理解?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-8-3
在线时间
3 小时
发表于 2018-8-3 10:01:23 | 显示全部楼层
HOA !!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-8-9 15:58:53 | 显示全部楼层
好东西不错不错
回复 支持 反对

使用道具 举报

1

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2018-11-7
在线时间
16 小时
发表于 2018-11-11 13:01:15 | 显示全部楼层
这么好的贴子,必须顶
回复 支持 反对

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2017-10-27
在线时间
19 小时
发表于 2019-1-26 20:20:35 | 显示全部楼层
STM32 大小端模式 与 堆栈及其增长方向分析    Mark一下
回复 支持 反对

使用道具 举报

8

主题

25

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-1-30
在线时间
24 小时
发表于 2019-2-1 14:32:50 | 显示全部楼层
学了很,很不错的帖子。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-8
在线时间
5 小时
发表于 2019-4-23 17:50:15 | 显示全部楼层
mark!!!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-26 18:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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