搜索
bottom↓
回复: 13

iar 430中定义的const变量太多,提示超出范围了,xcl文件怎么

[复制链接]

出0入0汤圆

发表于 2013-11-5 11:25:50 | 显示全部楼层 |阅读模式
我在msp430f5438a上定义一个字库,变量都是用const修饰的,即他们都被放到了flash中。

但是当我再添加一个const数组时编译器提示报错了,看内容说xcl文件中设置的const 空间太小了。我用的软件默认的配置xcl文件。

哪位知道这个怎么改呢?

下面是错误截图:


下面是我的xcl文件:
  1. // ************************************************
  2. //
  3. // XLINK configuration file for MSP430F5438A
  4. //
  5. // Copyright 1996-2010 IAR Systems AB
  6. //
  7. // $Revision: $
  8. //
  9. // ************************************************

  10. // ---------------------------------------------------------
  11. // Description
  12. //

  13. //
  14. // Usage:
  15. //
  16. //   xlink [file file ...] -f lnk430f5438a.xcl
  17. //
  18. // -----------------------------------------------
  19. // Device summary
  20. //

  21. //
  22. // Core:                           MSP430X
  23. //
  24. // Interrupt vectors:              64
  25. //
  26. // Peripheral units:                   0-00FFF
  27. //
  28. // Information memory (FLASH):     01800-019FF
  29. //
  30. // Read/write memory (RAM):        01C00-05BFF
  31. //
  32. // Read-only memory (FLASH):       05C00-0FFFF
  33. //                                 10000-45BFF
  34. //


  35. // -----------------------------------------------
  36. // Segments
  37. //

  38. // -------------------------------------
  39. // Data read/write segments (RAM)
  40. //

  41. //
  42. // The following segments are available for both
  43. // the DATA16 and DATA20 segment groups.
  44. //
  45. // segment         Usage
  46. // -------         --------------------------
  47. // DATA<nn>_Z      Data initialized to zero
  48. // DATA<nn>_I      Data initialized by copying from DATA<nn>_ID
  49. // DATA<nn>_N      Data defined using __no_init
  50. // DATA<nn>_HEAP   The heap used by 'malloc' and 'free'
  51. //
  52. // segment         Usage
  53. // -------         --------------------------
  54. // CSTACK          Runtime stack
  55. // TLS16_I         Thread-local storage for main thread
  56. //                 (require custom runtime library)
  57. //


  58. // -------------------------------------
  59. // Program and data read-only segments (FLASH)
  60. //

  61. //
  62. // The following segments are available for both
  63. // the DATA16 and DATA20 segment groups.
  64. //
  65. // segment         Usage
  66. // -------         --------------------------
  67. // DATA<nn>_C      Constant data, including string literals
  68. // DATA<nn>_ID     initializers for DATA<nn>_I
  69. //
  70. // segment         Usage
  71. // -------         --------------------------
  72. // INFO            Information memory
  73. // INFOA           Information memory, bank A
  74. // INFOB           Information memory, bank B
  75. // INFOC           Information memory, bank C
  76. // INFOD           Information memory, bank D
  77. // CSTART          Program startup code
  78. // CODE            Program code
  79. // ISR_CODE        Program code for interrupt service routines
  80. // DIFUNCT         Dynamic initialization vector used by C++
  81. // CHECKSUM        Checksum byte(s) generated by the -J option
  82. // INTVEC          Interrupt vectors
  83. // RESET           The reset vector
  84. // TLS16_ID        Thread-local initializers for main thread
  85. //                 (require custom runtime library)
  86. //
  87. // Notes:
  88. //
  89. // * The segments CSTART, ISR_CODE, and DIFUNCT, as well as the segments in
  90. //   the DATA16 and TLS16 segment groups must be placed in in the range
  91. //   0000-FFFD.
  92. //
  93. // * The INFOx and INFO segments overlap, this allows data either to be
  94. //   placed in a specific bank or anywhere in the info memory.
  95. //
  96. // * The INTVEC and RESET segments overlap. This allows an application to
  97. //   either use the reset vector provided by the runtime library, or
  98. //   provide a reset function by defining an interrupt function associated
  99. //   with the reset vector.
  100. //


  101. // ---------------------------------------------------------
  102. // Configuation
  103. //

  104. // -----------------------------------------------
  105. // Stack and heap sizes
  106. //

  107. // Uncomment for command line use
  108. //-D_STACK_SIZE=80
  109. //-D_DATA16_HEAP_SIZE=80
  110. //-D_DATA20_HEAP_SIZE=80


  111. // -----------------------------------------------
  112. // Define cpu
  113. //

  114. -cmsp430

  115. // Compensate for hardware bug in CPU
  116. -D?CPU30_OFFSET=2


  117. // -----------------------------------------------
  118. // Support for placing functions in read/write memory
  119. //

  120. -QCODE_I=CODE_ID


  121. // ---------------------------------------------------------
  122. // Placement directives
  123. //

  124. // -----------------------------------------------
  125. // Read/write memory
  126. //

  127. -Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE=1C00-5BFF
  128. -Z(DATA)CODE_I
  129. -Z(DATA)DATA20_I,DATA20_Z,DATA20_N,DATA20_HEAP+_DATA20_HEAP_SIZE
  130. -Z(DATA)CSTACK+_STACK_SIZE#


  131. // -----------------------------------------------
  132. // Read-only memory
  133. //

  134. // -------------------------------------
  135. // Information memory
  136. //

  137. -Z(CONST)INFO=1800-19FF
  138. -Z(CONST)INFOA=1980-19FF
  139. -Z(CONST)INFOB=1900-197F
  140. -Z(CONST)INFOC=1880-18FF
  141. -Z(CONST)INFOD=1800-187F



  142. // -------------------------------------
  143. // Low memory 0-0FFFF
  144. //

  145. // ---------------------------
  146. // Code
  147. //

  148. -Z(CODE)CSTART,ISR_CODE=5C00-FF7F

  149. // ---------------------------
  150. // Constant data
  151. //

  152. -Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=5C00-FF7F


  153. // -------------------------------------
  154. // All memory 0-FFFFF
  155. //

  156. // ---------------------------
  157. // Code
  158. //

  159. -P(CODE)CODE=5C00-FF7F,10000-45BFF
  160. -Z(CODE)CODE_ID

  161. // ---------------------------
  162. // Constant data
  163. //

  164. -Z(CONST)DATA20_C,DATA20_ID=5C00-FF7F,10000-45BFF


  165. // -------------------------------------
  166. // Interrupt vectors
  167. //

  168. -Z(CODE)INTVEC=FF80-FFFF
  169. -Z(CODE)RESET=FFFE-FFFF
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-11-5 11:44:34 | 显示全部楼层
试试把变量定义到DATA20_C行不, @ “DATA20_C”

出0入0汤圆

发表于 2013-11-5 12:09:36 | 显示全部楼层
可以试下看将
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=5C00-FF7F 这一行改为:
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=10000-45BFF
或者
-P(CODE)CODE=5C00-FF7F,10000-45BFF  这一行改为:
-P(CODE)CODE=10000-45BFF

出0入0汤圆

 楼主| 发表于 2013-11-5 12:16:13 | 显示全部楼层
lcofjp 发表于 2013-11-5 11:44
试试把变量定义到DATA20_C行不, @ “DATA20_C”

iar 下面的3个设置我都试了,不行

我觉得还得改xcl文件。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-11-5 12:16:53 | 显示全部楼层
dianyuan 发表于 2013-11-5 12:09
可以试下看将
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=5C00-FF7F 这一行改为:
-Z(CONST)D ...

好的,我试试

出0入0汤圆

发表于 2013-11-5 11:25:51 | 显示全部楼层
xtaens 发表于 2013-11-5 12:16
iar 下面的3个设置我都试了,不行

我觉得还得改xcl文件。。

需要选择large

出0入0汤圆

 楼主| 发表于 2013-11-5 13:29:24 | 显示全部楼层
lcofjp 发表于 2013-11-5 12:38
需要选择large

large 也报错的

出0入0汤圆

发表于 2013-11-5 13:30:37 | 显示全部楼层
这个问题和这个是一样的,http://www.edaboard.com/thread137577.html
继续关注!

出0入0汤圆

 楼主| 发表于 2013-11-5 16:00:03 | 显示全部楼层
dianyuan 发表于 2013-11-5 12:09
可以试下看将
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=5C00-FF7F 这一行改为:
-Z(CONST)D ...

Ls,这个方法不行
第一种改法:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-11-5 16:03:45 | 显示全部楼层
dianyuan 发表于 2013-11-5 12:09
可以试下看将
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=5C00-FF7F 这一行改为:
-Z(CONST)D ...

第二种改法还是不行



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-11-5 20:25:02 | 显示全部楼层
lcofjp 发表于 2013-11-5 11:25
需要选择large

刚才我仔细看了5438A手册中关于flash 的布局与地址分配,发现

这个xcl文件没有一点需要改的地方。

然后又看了iar 430 c compiler中的说明,发现还是要配置data model。我选择了large,但是提示报错,仔细看原来是我包含的启动文件报错了,去掉包含后就不报错了。

不知道large模式下用的是什么启动文件

出0入0汤圆

发表于 2013-11-5 21:24:33 | 显示全部楼层
xtaens 发表于 2013-11-5 20:25
刚才我仔细看了5438A手册中关于flash 的布局与地址分配,发现

这个xcl文件没有一点需要改的地方。

不清楚你的启动文件是什么,因为我用IAR建立C工程的时候,从来就没有过启动文件。

出0入0汤圆

 楼主| 发表于 2013-11-6 09:52:31 | 显示全部楼层
lcofjp 发表于 2013-11-5 21:24
不清楚你的启动文件是什么,因为我用IAR建立C工程的时候,从来就没有过启动文件。 ...

下面是我以前用的启动文件,这个文件在软件安装目录下。

包含到工程中的好处是:可以看到程序到main函数前都干了什么,这个过程都是在启动文件中度过的。

文件名:cstartup.s43
  1. /**************************************************
  2. *
  3. * System initialization code for the MSP430 IAR C/EC++ Compiler.
  4. *
  5. * Copyright ?2002-2008 IAR Systems AB.
  6. *
  7. * $Revision: 7961 $
  8. *
  9. **************************************************/

  10. //
  11. // There are two libraries provided with compilers from IAR Systems,
  12. // CLib and DLib.  This file is designed to work with both libraries.
  13. // Some parts of it is DLib-specific.  However, those parts will not
  14. // be included when building an application using CLib.
  15. //

  16. //
  17. // Please define one of the following preprocessor symbols in order to
  18. // customize the system initialization process.
  19. //
  20. // IGNORE_SEG_INIT     -- To remove segment initialization
  21. // IGNORE_DATA16_DATA  -- To remove segment initialization of DATA16 data
  22. // IGNORE_DATA20_DATA  -- To remove segment initialization of DATA20 data
  23. // IGNORE_RAMFUNC_INIT -- To remove segment initialization of ramfunc code
  24. // DISABLE_WATCHDOG    -- To disable the watchdog
  25. //
  26. // Note: In the current version the symbols "IGNORE_SEG_INIT" and
  27. // "IGNORE_DATA16_DATA" will perform the same task.  However, both are
  28. // supported in order to be compatible with other IAR Compilers.
  29. //
  30. // Note: To disable the watchdog, a device-specific header file will
  31. // be included.
  32. //

  33. #include "macros.m43"
  34. #include "cfi.m43"

  35. #define DISABLE_WATCHDOG   //新增宏,关闭狗,2013-08-02

  36. #ifdef DISABLE_WATCHDOG
  37. #include "msp430.h"
  38. #endif


  39. #define XRSEGCSTART RSEG CSTART:CODE:NOROOT(1)

  40.         XCFI_NAMES libNames
  41.         XCFI_COMMON libCommon, libNames

  42.         // The CPU40 warning is issued when a Jxx instruction is place
  43.         // at the end of a segment part. However, this case is safe,
  44.         // as we have control of what will be placed right after the
  45.         // instruction.
  46.         SUPPRESS_CPU40_WARNING


  47. // ---------------------------------------------------------
  48. // The cstartup code -- call __low_level_init, perform initialization,
  49. // call constructors and call main.  If main returns the exit system
  50. // is started.
  51. //

  52.         MODULE  ?cstart

  53. //
  54. // Ensure that this is build with the same "positions independent
  55. // code" settings as the compiler uses.
  56. //

  57.         XPICRTMODEL


  58. //
  59. // Forward declarations of segments.
  60. //

  61.         RSEG    HEAP:DATA:NOROOT(1)
  62.         RSEG    CSTACK:DATA:NOROOT

  63.         RSEG    DATA16_Z:DATA:NOROOT
  64.         RSEG    DATA16_I:DATA:NOROOT
  65.         RSEG    DATA16_ID:CONST:NOROOT
  66.         RSEG    CODE_I:DATA:NOROOT
  67.         RSEG    CODE_ID:CONST:NOROOT
  68. #if __CORE__==__430X_CORE__
  69.         RSEG    DATA20_Z:DATA:NOROOT
  70.         RSEG    DATA20_I:DATA:NOROOT
  71.         RSEG    DATA20_ID:CONST:NOROOT
  72. #endif
  73.         RSEG    TLS16_I:DATA:NOROOT
  74.         RSEG    TLS16_ID:CONST:NOROOT

  75. // ---------------------------------------------------------
  76. // System initialization.
  77. //

  78.         XRSEGCSTART
  79.         PUBLIC  __program_start

  80.         EXTERN  ?reset_vector
  81.         REQUIRE ?reset_vector

  82. __program_start:

  83.         PUBLIC ?cstart_begin
  84. ?cstart_begin:

  85.         // --------------------
  86.         // Turn off the watchdog.
  87.         //
  88.         // Note: This is excluded by default. Please define
  89.         // DISABLE_WATCHDOG to include it.
  90.         //

  91. #ifdef DISABLE_WATCHDOG

  92.         MOV     #WDTPW + WDTHOLD, &WDTCTL
  93. #endif

  94.         // --------------------
  95.         // Initialize SP to point to the top of the stack.
  96.         //
  97.         MOV     #SFE(CSTACK), SP

  98.         //
  99.         // Ensure that main is called.
  100.         //
  101.         REQUIRE ?cstart_call_main


  102. // -----------------------------------------------
  103. // Call __low_level_init to perform initialization before initializing
  104. // segments and calling main. If the function returns 0 no segment
  105. // initialization should take place.
  106. //
  107. // Link with your own version of __low_level_init to override the
  108. // default action: to do nothing but return 1.
  109. //

  110.         XRSEGCSTART

  111.         PUBLIC  ?cstart_call_low_level_init
  112.         EXTERN  __low_level_init

  113. ?cstart_call_low_level_init:
  114.         XXCALL  __low_level_init
  115.         CMP     #0, W0
  116.         JEQ     ?cstart_call_main


  117. // -----------------------------------------------
  118. // Segment initialization:
  119. //
  120. // xxx_Z  -- uninitialized data that are filled with zeros.
  121. // xxx_I  -- initialized data that gets the values from the corresponding
  122. //           xxx_ID segment.
  123. //

  124. #ifndef IGNORE_SEG_INIT


  125.         // --------------------
  126.         // Initialize code for __ramfunc functions.
  127.         //

  128.         XRSEGCSTART
  129.         PUBLIC  ?cstart_init_copy_ramfunc

  130. ?cstart_init_copy_ramfunc:

  131. #ifndef IGNORE_RAMFUNC_INIT

  132. #ifndef REGISTER_MODEL_REG20

  133.         MOV     #SFB CODE_I,  CW0
  134.         XMOVROPIADDR SFB CODE_ID, CW1

  135.         MOV     #sizeof CODE_I, CW2

  136.         XXCALL  __data16_memcpy

  137. #else  // MSP430X with 20 bit pointers.

  138.         EXTERN  __data20_memcpy

  139.         MOVA    #SFB CODE_I,  CW0
  140.         XMOVROPIADDR SFB CODE_ID, CW1
  141.         MOV.W   #LWRD(sizeof CODE_I), L1L
  142.         MOV.W   #HWRD(sizeof CODE_I), L1H

  143.         XXCALL  __data20_memcpy


  144. #endif // REGISTER_MODEL_REG20

  145. #endif // IGNORE_RAMFUNC_INIT


  146.         // --------------------
  147.         // Initialize data16
  148.         //

  149. #ifndef IGNORE_DATA16_DATA

  150.         //
  151.         // Clear DATA16_Z.
  152.         //

  153.         XRSEGCSTART
  154.         PUBLIC  ?cstart_init_zero
  155.         EXTERN  __data16_memzero

  156. ?cstart_init_zero:
  157.         MOV     #SFB DATA16_Z,    CW0
  158.         MOV     #sizeof DATA16_Z, CW1

  159.         XXCALL  __data16_memzero


  160.         //
  161.         // Copy DATA16_ID to DATA16_I
  162.         //

  163.         XRSEGCSTART
  164.         PUBLIC  ?cstart_init_copy
  165.         EXTERN  __data16_memcpy

  166. ?cstart_init_copy:
  167.         MOV     #SFB DATA16_I,  CW0
  168.         XMOVROPIADDR SFB DATA16_ID, CW1

  169.         MOV     #sizeof DATA16_I, CW2

  170.         XXCALL  __data16_memcpy

  171. #endif // IGNORE_DATA16_DATA


  172.         // --------------------
  173.         // Data20
  174.         //

  175. #if __CORE__==__430X_CORE__


  176. #ifndef IGNORE_DATA20_DATA

  177.         //
  178.         // Clear DATA20_Z.
  179.         //

  180.         XRSEGCSTART
  181.         PUBLIC  ?cstart_init_zero20
  182.         EXTERN  __data20_memzero

  183. ?cstart_init_zero20:
  184.         MOVA    #SFB DATA20_Z,W0
  185.         MOV.W   #LWRD(sizeof DATA20_Z), L1L
  186.         MOV.W   #HWRD(sizeof DATA20_Z), L1H

  187.         XXCALL  __data20_memzero


  188.         //
  189.         // Copy DATA20_ID to DATA20_I
  190.         //

  191.         XRSEGCSTART
  192.         PUBLIC  ?cstart_init_copy20
  193.         EXTERN  __data20_memcpy

  194. ?cstart_init_copy20:
  195.         MOVA    #SFB DATA20_I,  CW0
  196.         XMOVROPIADDR SFB DATA20_ID, CW1
  197.         MOV.W   #LWRD(sizeof DATA20_I), L1L
  198.         MOV.W   #HWRD(sizeof DATA20_I), L1H

  199.         XXCALL  __data20_memcpy

  200. #endif // IGNORE_DATA20_DATA

  201. #endif // MSP430X


  202.         // --------------------
  203.         // Thread-local storage
  204.         //

  205.         //
  206.         // Copy TLS16_ID to TLS16_I
  207.         //

  208.         XRSEGCSTART
  209.         PUBLIC  __cstart_init_tls
  210.         EXTERN  __data16_memcpy

  211. __cstart_init_tls
  212.         MOV.W   #SFB TLS16_I,    CW0
  213.         XMOVROPIADDR SFB TLS16_ID, CW1
  214.         MOV.W   #sizeof TLS16_I, CW2

  215.         XXCALL  __data16_memcpy

  216. #endif // IGNORE_SEG_INIT



  217. // -----------------------------------------------
  218. // Call constructors of static objects.
  219. //

  220.         RSEG    DIFUNCT:CONST:NOROOT(1)
  221.         XRSEGCSTART
  222.         PUBLIC  ?cstart_call_ctors

  223.         EXTERN  __call_ctors

  224. ?cstart_call_ctors:

  225.         XMOVROPIADDR SFB DIFUNCT, CW0
  226.         XMOVROPIADDR SFE DIFUNCT, CW1

  227.         XXCALL  __call_ctors


  228. // -----------------------------------------------
  229. // Call main() with no arguments and then exit using the return value
  230. // of main as the parameter.
  231. //

  232.         XRSEGCSTART
  233.         PUBLIC  ?cstart_call_main

  234.         EXTERN  main
  235.         EXTERN  exit

  236. ?cstart_call_main:
  237.         XXCALL  main
  238.         XXCALL  exit

  239.         PUBLIC  ?cstart_end
  240. ?cstart_end:

  241.         // Note: "ENDMOD label" means code that this module is the
  242.         // start of the application.
  243.         ENDMOD  __program_start




  244. // ---------------------------------------------------------
  245. // __low_level_init
  246. //
  247. // The only action of this default version of __low_level_init is to
  248. // return 1. By doing so it signals that normal initialization of data
  249. // segments should be done.
  250. //
  251. // A customized version of __low_level_init may be created in order to
  252. // perform initialization before initializing segments and calling main
  253. // and/or to skip initialization of data segments under certain
  254. // circumstances.
  255. //
  256. // For further details see sample file lowinit.c
  257. //


  258.         MODULE  lowinit

  259.         PUBLIC  __low_level_init

  260.         RSEG    CODE:CODE:NOROOT(1)

  261. __low_level_init:
  262.         MOV     #1, W0                  // By returning 1 this function
  263.         XRET                            // indicates that the normal
  264.                                         // initialization should take place

  265.         ENDMOD


  266. // ---------------------------------------------------------
  267. // Define reset vector.
  268. //

  269.         MODULE  ?reset_vector

  270.         RSEG    RESET:CONST:NOROOT(1)
  271.         PUBLIC  ?reset_vector
  272.         EXTERN  __program_start

  273. ?reset_vector:
  274.         DC16    __program_start

  275.         ENDMOD


  276. // ---------------------------------------------------------
  277. // ?CPU30_OFFSET
  278. //
  279. // The compiler compensates for the CPU30 hardware bug by adding or
  280. // subtracting the symbol ?CPU30_OFFSET from certain immediates.  Here,
  281. // it is defined to the default value zero (0), for when the device is
  282. // not affected by CPU30.  If the device is affected, the value must be
  283. // set to two (2) using a linker command line override:
  284. //
  285. //   -D?CPU30_OFFSET=2.
  286. //
  287. // The override is normally placed in the device-specific .xcl file.

  288.         MODULE  ?cpu30_offset

  289.         PUBLIC  ?CPU30_OFFSET

  290. ?CPU30_OFFSET   EQU     0

  291.         ENDMOD

  292.         END
复制代码

出0入0汤圆

发表于 2013-11-6 09:58:30 | 显示全部楼层
xtaens 发表于 2013-11-6 09:52
下面是我以前用的启动文件,这个文件在软件安装目录下。

包含到工程中的好处是:可以看到程序到main函数 ...

分析报错的原因,最终会找到问题所在的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 05:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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