谢谢d1d2前辈提供的线索

[复制链接]
2228|5
 楼主| biehoff 发表于 2008-11-25 23:22 | 显示全部楼层 |阅读模式
AD, ni, ROM, RAM, AI
谢谢d1d2前辈提供的线索<br />看了《ARM体系结构与编程》中的连接器部分&nbsp;和ADS的ARM&nbsp;LINKER文档<br />对分散加载有点点了解了&nbsp;&nbsp;试着写了个分散加载的小文件<br /><br />load&nbsp;&nbsp;&nbsp;&nbsp;0x00000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec1&nbsp;&nbsp;&nbsp;&nbsp;0x00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44binit.o(init,+first)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;exec2&nbsp;&nbsp;&nbsp;&nbsp;0x0c000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+rw,+zi)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />烧录后可以运行&nbsp;&nbsp;<br />稍微修改下&nbsp;<br />load1&nbsp;&nbsp;&nbsp;&nbsp;0x00000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec1&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0x00000000是ROM的起始地址<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44binit.o(init,+first)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;exec2&nbsp;&nbsp;&nbsp;&nbsp;0x0c000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0x0c000000是RAM的起始地址<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+rw,+zi)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />load2&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec3&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />也能运行&nbsp;但是发现&nbsp;所有被加载的&nbsp;*.o文件的&nbsp;RO输入段&nbsp;只能再ROM里面<br />不能放到&nbsp;RAM的地址去运行<br />如果改成&nbsp;<br />load2&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec3&nbsp;&nbsp;&nbsp;&nbsp;0x0c100000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />程序就跑飞了<br /><br />暂时结论&nbsp;所有的RO输入段只能再ROM里跑&nbsp;&nbsp;不过相关的RW&nbsp;ZI可以复制到RAM里<br />请前辈指教&nbsp;是这样吗?
dld2 发表于 2008-11-26 08:54 | 显示全部楼层

例子

这是把44b0片内sram的一部分用来跑程序。<br /><br />LOAD_SDRAM&nbsp;0x0c008000&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SDRAM1&nbsp;0x0c008000&nbsp;0x100000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44BINIT.O&nbsp;(INIT&nbsp;+FIRST)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SDRAM2&nbsp;0x0c500000&nbsp;0x80000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SRAM&nbsp;0x10001000&nbsp;0x1000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMMONCALC.O&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />这样COMMONCALC.O的RO部分在链接时定位在SRAM中。<br />但是这部分代码还需要程序拷贝到SRAM才能执行。下面是main中的部分代码:<br /><br />extern&nbsp;char&nbsp;Load$$SRAM$$Base[];<br />extern&nbsp;char&nbsp;Image$$SRAM$$Base[];<br />extern&nbsp;unsigned&nbsp;int&nbsp;Image$$SRAM$$Length;<br />extern&nbsp;char&nbsp;Image$$SRAM$$Limit[];<br />//以上符号是连接器自动生成的。可以当普通变量使用。<br /><br />void&nbsp;Main(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;。。。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
*&nbsp;SRAM&nbsp;load&nbsp;start&nbsp;addr&nbsp;%x&quot;,(unsigned&nbsp;int)Load$$SRAM$$Base);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
*&nbsp;SRAM&nbsp;exec&nbsp;start&nbsp;addr&nbsp;%x&quot;,(unsigned&nbsp;int)Image$$SRAM$$Base);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
*&nbsp;SRAM&nbsp;exec&nbsp;end&nbsp;&nbsp;&nbsp;addr&nbsp;%x&quot;,(unsigned&nbsp;int)Image$$SRAM$$Limit);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;
*&nbsp;SRAM&nbsp;exec&nbsp;image&nbsp;length&nbsp;%x&quot;,(unsigned&nbsp;int)Image$$SRAM$$Length);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将SRAM段从加载地址拷贝到执行地址<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(Image$$SRAM$$Base,&nbsp;Load$$SRAM$$Base,&nbsp;Image$$SRAM$$Limit&nbsp;-&nbsp;Image$$SRAM$$Base);<br />}<br /><br />总的来说:如果加载地址与执行地址不同,需要人工干预。<br />和RW段需要在初始化代码中拷贝是一个道理。<br /><br /><br /><br /><br />
 楼主| biehoff 发表于 2008-11-26 10:54 | 显示全部楼层

谢谢前辈指点

我也曾想过是否要自己写一小段程序&nbsp;&nbsp;把程序拷贝到RAM去&nbsp;&nbsp;书上完全没提过这方面的操作&nbsp;&nbsp;刚开始还天真的以为&nbsp;写个scattered文件&nbsp;编译器就自己去搞定<br /><br />前辈给的例子中<br />&nbsp;&nbsp;&nbsp;&nbsp;SRAM&nbsp;0x10001000&nbsp;0x1000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMMONCALC.O&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />是需要自己拷贝&nbsp;COMMONCALC&nbsp;过去的<br /><br />那么<br />&nbsp;&nbsp;&nbsp;&nbsp;SDRAM2&nbsp;0x0c500000&nbsp;0x80000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />也需要自己拷贝所有的&nbsp;RW&nbsp;ZI吧&nbsp;&nbsp;貌似不拷贝程序也能跑<br />这个要拷贝就好复杂了···&nbsp;&nbsp;<br /><br />使用simple模式的时候&nbsp;初始化程序里有定义<br />&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RO$$Limit|&nbsp;<br />&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RW$$Base|&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Base|&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Limit|&nbsp;&nbsp;<br />这些符号在后面有段汇编程序用来拷贝&nbsp;RW&nbsp;ZI段到RAM里的<br /><br />使用scattered模式时&nbsp;&nbsp;上面的那些符号都没意义的&nbsp;与之相关的&nbsp;拷贝程序<br />也没用了&nbsp;(然后就被我删了)<br />那么要自己使用<br />Load$$SRAM2$$Base<br />Image$$SRAM2$$Base<br />Image$$SRAM2$$Length;<br />Image$$SRAM2$$Limit<br />这些符号&nbsp;自己写程序来完成拷贝吧<br /><br />感谢前辈指点&nbsp;&nbsp;我理解到这里了···<br />
 楼主| biehoff 发表于 2008-11-26 11:34 | 显示全部楼层

又发现一点

刚才又发现一点有趣的事<br />load1&nbsp;&nbsp;&nbsp;&nbsp;0x00000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec1&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0x00000000是ROM的起始地址<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;44binit.o(init,+first)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;exec2&nbsp;&nbsp;&nbsp;&nbsp;0x0c000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0x0c000000是RAM的起始地址<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(+rw,+zi)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />load2&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec3&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />上述分散加载程序是可以跑起来的<br /><br />我还没按前辈的指点写拷贝程序&nbsp;&nbsp;只是验证下某些疑问<br /><br />在AXD环境下看编译后的代码<br />main{}果然被放在0x00005000那里了&nbsp;调用main{}&nbsp;就是直接跳转到&nbsp;0x00005000<br /><br />如果改成<br />load2&nbsp;&nbsp;&nbsp;&nbsp;0x00005000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;exec3&nbsp;&nbsp;&nbsp;&nbsp;0x00009000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main.o(+ro)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />程序跑飞了&nbsp;&nbsp;那是当然的····<br />再到AXD下看代码&nbsp;<br />调用main{}&nbsp;就是跳转到&nbsp;0x00009000去执行&nbsp;那里是乱码&nbsp;&nbsp;就跑飞了<br />在回头看看&nbsp;0x00005000&nbsp;好像也是乱码&nbsp;&nbsp;仔细对照了一下此处&nbsp;编译后的机器码&nbsp;和&nbsp;main{}函数的机器码是一样的&nbsp;&nbsp;原来&nbsp;main{}还再原地没动&nbsp;0x00005000<br /><br />很有趣····&nbsp;&nbsp;好像有点理解分散加载的功能了&nbsp;&nbsp;而且要自己写些程序和分散加载功能配合&nbsp;
dld2 发表于 2008-11-26 11:45 | 显示全部楼层

俺是同学,不要太客气

3楼说得对。<br /><br />我改了启动代码:<br />;scatter&nbsp;des&nbsp;file&nbsp;test<br />;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RO$$Limit|&nbsp;&nbsp;;&nbsp;End&nbsp;of&nbsp;ROM&nbsp;code&nbsp;(=start&nbsp;of&nbsp;ROM&nbsp;data)<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$SDRAM1$$Limit|&nbsp;&nbsp;;&nbsp;End&nbsp;of&nbsp;ROM&nbsp;code&nbsp;(=start&nbsp;of&nbsp;ROM&nbsp;data)<br />;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RW$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;of&nbsp;RAM&nbsp;to&nbsp;initialise<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$SDRAM2$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;of&nbsp;RAM&nbsp;to&nbsp;initialise<br />;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;and&nbsp;limit&nbsp;of&nbsp;area<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$SDRAM2$$ZI$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;and&nbsp;limit&nbsp;of&nbsp;area<br />;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Limit|&nbsp;&nbsp;;&nbsp;to&nbsp;zero&nbsp;initialise;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;|Image$$SDRAM2$$ZI$$Limit|&nbsp;&nbsp;;&nbsp;to&nbsp;zero&nbsp;initialise;<br /><br /><br />;scatter&nbsp;des&nbsp;file&nbsp;test<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=|Image$$SDRAM1$$Limit|&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Get&nbsp;pointer&nbsp;to&nbsp;ROM&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$SDRAM2$$Base|&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;and&nbsp;RAM&nbsp;copy<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;=|Image$$SDRAM2$$ZI$$Base|&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;Zero&nbsp;init&nbsp;base&nbsp;=&gt&nbsp;top&nbsp;of&nbsp;initialised&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Check&nbsp;that&nbsp;they&nbsp;are&nbsp;different<br />&nbsp;&nbsp;&nbsp;&nbsp;BEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%F1<br />0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Copy&nbsp;init&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r0],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt&nbsp;LDRCC&nbsp;r2,&nbsp;[r0]&nbsp;+&nbsp;ADD&nbsp;r0,&nbsp;r0,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt&nbsp;STRCC&nbsp;r2,&nbsp;[r1]&nbsp;+&nbsp;ADD&nbsp;r1,&nbsp;r1,&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B0<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$SDRAM2$$ZI$$Limit|&nbsp;;&nbsp;Top&nbsp;of&nbsp;zero&nbsp;init&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Zero&nbsp;init<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r3],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B2<br /><br /><br />-----------------------------------<br />还是很麻烦的,呵呵。<br />
 楼主| biehoff 发表于 2008-11-26 11:50 | 显示全部楼层

RE

哦&nbsp;&nbsp;&nbsp;原来确实是要自己改代码的···<br />早知道&nbsp;没那么便宜的事&nbsp;&nbsp;照着书上讲的写个TXT文件就搞定了&nbsp;&nbsp;那算是YY了<br />&nbsp;&nbsp;&nbsp;很感谢&nbsp;&nbsp;困扰我好几天的问题了···
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

138

帖子

0

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