Andes Workshop

It is currently Thu Jun 21, 2018 5:42 pm

All times are UTC + 8 hours [ DST ]




Post new topic Reply to topic  [ 2 posts ] 
Author Message
 Post subject: _SDA_BASE_相關問題
PostPosted: Mon Oct 03, 2011 5:48 pm 
Offline
User avatar

Joined: Fri Mar 04, 2011 9:36 pm
Posts: 500
_SDA_BASE_

(1) 它是由linker自動產生的。
(2) 它只是一個constant pointer,不佔空間,也不一定在data區裡。
取值是使用_SDA_BASE_加一個offset,可以減少取global data的指令數。
(3) 如果user希望這個值固定,linker script裡可以指定它的值。
語法:PROVIDE (_SDA_BASE_= 0x1000);
0x1000是想要的位址。
下面是example:
Attachment:
Hello.rar [31.44 KiB]
Downloaded 403 times

如圖,可以看到_SDA_BASE_如linker script裡設定的位址。
Attachment:
sda.gif
sda.gif [ 6.7 KiB | Viewed 3888 times ]


Top
 Profile Send private message E-mail  
 
 Post subject: Re: _SDA_BASE_相關問題
PostPosted: Fri Nov 17, 2017 12:55 pm 
Offline

Joined: Mon Dec 12, 2016 5:07 pm
Posts: 17
The value of _SDA_BASE_ can be change in the sag file via "var" like following
Quote:
VAR _ILM_BASE = 0x00600000 ; ILM base address
VAR _DLM_BASE = 0x00700000 ; DLM base address
VAR _ILM_SIZE = 0x00010000 ; 64Kb
VAR _DLM_SIZE = 0x00010000 ; 64Kb
VAR _SDA_BASE_ = 0x4000

This only change the value of _SDA_BASE_, the .data section still at the same location. Therefore, the offsets get larger comparing to pointing to the middle of the global variables.
Here is my experiment.
---------------------------
The experiment using demo-printf. Add three global variables int a=1, b=2, c=3. Print them.
---------------------------
    Using default _SDA_BASE_:
You can see the .data section is still located at 0x15c0
Quote:
3 .rodata 0000037c 0000122c 0000122c 0000222c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .data 00000018 000015c0 000015c0 000025c0 2**2
CONTENTS, ALLOC, LOAD, DATA
5 .bss 00000010 000015d8 000015d8 000025d8 2**2
ALLOC


The _SDA_BASE_ is assigned with 000015d0
Quote:
00000220 g F .text 00000038 _start
000015d0 w .data 00000000 _SDA_BASE_
00000262 g F .text 00000002 __null_function


The disassembly codes are
Quote:
printf("a=%d\n\r", a);
348: 3c 1d ff fe lwi.gp $r1,[+#-8]
34c: 44 00 12 fc movi $r0,#0x12fc
350: f8 0a ifcall9 364 <main+0x36>
printf("b=%d\n\r", b);
352: 3c 1d ff fd lwi.gp $r1,[+#-12]
356: 44 00 13 04 movi $r0,#0x1304
35a: f8 05 ifcall9 364 <main+0x36>
printf("c=%d\n\r", c);
35c: 3c 1d ff fc lwi.gp $r1,[+#-16]
360: 44 00 13 0c movi $r0,#0x130c
364: 49 00 00 52 jal 408 <printf>

The offsets are small.
---------------------------
    Use var _SDA_BASE=0x4000:
You can see the .data section is still located at 0x15c0
Quote:
3 .rodata 0000037c 0000122c 0000122c 0000222c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .data 00000018 000015c0 000015c0 000025c0 2**2
CONTENTS, ALLOC, LOAD, DATA
5 .bss 00000010 000015d8 000015d8 000025d8 2**2
ALLOC

The _SDA_BASE_ is at 0x4000
Quote:
00000220 g F .text 00000038 _start
00004000 g *ABS* 00000000 _SDA_BASE_
00000262 g F .text 00000002 __null_function


The disassembly codes are
Quote:
printf("a=%d\n\r", a);
348: 3c 1d f5 72 lwi.gp $r1,[+#-10808]
34c: 44 00 12 fc movi $r0,#0x12fc
350: f8 0a ifcall9 364 <main+0x36>
printf("b=%d\n\r", b);
352: 3c 1d f5 71 lwi.gp $r1,[+#-10812]
356: 44 00 13 04 movi $r0,#0x1304
35a: f8 05 ifcall9 364 <main+0x36>
printf("c=%d\n\r", c);
35c: 3c 1d f5 70 lwi.gp $r1,[+#-10816]
360: 44 00 13 0c movi $r0,#0x130c
364: 49 00 00 52 jal 408 <printf>


The experiment case is the data section is small. Changing _SDA_BASE_ only increases the complexity of offset and gets nothing improved.
But if the variable section (more than 512k) is large, moving the _SDA_BASE_ to the most frequently used data will increase the efficiency of the code in run time. Because it replaces 2 instructions into 1 instruction via gp.


Top
 Profile Send private message E-mail  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC + 8 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group