打印

KEILC UV4 编译器问题

[复制链接]
4068|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用UV4编译器~  

我在外部指定了一个绝对地址的数组~  
U8  xdata m_u8SimComCamRxBuf[SIMCOM_REC_CAM_BUFFER] _at_ 0x0000;
编译结果发现这个数组的确放在这个位置了,但是还有别的没有指定的数组也放在了这个位置,这是为什么呢?
m_u8UartRxBuf. . . . . . . . . . . . .  PUBLIC   XDATA  ARRAY    0000H  250
m_u8SimComCamRxBuf . . . . . . . . . .  PUBLIC   XDATA  ARRAY    0000H  32
请大侠指点迷津啊~~

相关帖子

沙发
ayb_ice| | 2010-11-5 15:28 | 只看该作者
哪有呢
图呢
程序呢

使用特权

评论回复
板凳
dudongdao|  楼主 | 2010-11-5 15:29 | 只看该作者
嗯,我上图,等等~~~   程序要贴吗~~  这里就是变量定义

使用特权

评论回复
地板
dudongdao|  楼主 | 2010-11-5 15:38 | 只看该作者

使用特权

评论回复
5
dudongdao|  楼主 | 2010-11-5 15:40 | 只看该作者
xdata U8   m_u8SimComCamRxBuf[SIMCOM_REC_CAM_BUFFER] _at_ 0x0000;        
xdata U8   m_u8SimComCamTxBuf[SIMCOM_SEND_CAM_BUFFER]_at_ 0x0020;
xdata U8  m_u8SimComCamProBuf[SIM_REC_CAM_PRO_BUF]_at_ 0x0040;


xdata U8  m_u8UartRxBuf[UART_RX_BUF];
xdata U8  m_u8UartTxBuf[UART_TX_BUF];
xdata U8   m_u8UartProBuf[COM_REC_POR_BUFFER];



这是我定义的变量~~  有些指定绝对地址,有些没指定,都是全局变狼,但是地址重复了,这可以避免吗

使用特权

评论回复
6
dudongdao|  楼主 | 2010-11-5 15:47 | 只看该作者
我顶~~

使用特权

评论回复
7
dudongdao|  楼主 | 2010-11-5 15:47 | 只看该作者
我再顶,威望又加三~~~

使用特权

评论回复
8
ayb_ice| | 2010-11-5 16:15 | 只看该作者
要注意计算定义大小是否有冲突
一般不要绝对定位
如果有冲突,编译器会警告,此时要仔细检查,避免冲突

xdata U8   m_u8SimComCamRxBuf[SIMCOM_REC_CAM_BUFFER] _at_ 0x0000;        
xdata U8   m_u8SimComCamTxBuf[SIMCOM_SEND_CAM_BUFFER]_at_ 0x0020;
显然如果SIMCOM_REC_CAM_BUFFER>0x0020,必然重叠
...

使用特权

评论回复
9
dudongdao|  楼主 | 2010-11-5 16:22 | 只看该作者
我一定要用绝对地址的~~  这个是前提~~  
没有重叠,我现在的疑问是我指定了绝对地址,编译器怎么还往绝对地址分配别的变量~~  可以通过设置哪里解决吗?    我的问题点在这里~~   谢谢各位大侠~~

使用特权

评论回复
10
ayb_ice| | 2010-11-5 16:45 | 只看该作者
要不把全部源代码发出来看下

使用特权

评论回复
11
dudongdao|  楼主 | 2010-11-5 16:58 | 只看该作者
太多了,发不完啊~~
我的问题说清楚了吗?   大侠觉得我哪里说的不清楚我补充一下~~

使用特权

评论回复
12
ayb_ice| | 2010-11-5 17:25 | 只看该作者
我就没有遇到过这种问题,所以要看源代码情况

使用特权

评论回复
13
dudongdao|  楼主 | 2010-11-5 17:31 | 只看该作者
:'(

使用特权

评论回复
14
ejack| | 2010-11-5 18:20 | 只看该作者
好稀奇的现象……
编译器就没说点什么?一切OK地编译完成了?

使用特权

评论回复
15
singleywy| | 2010-11-5 18:23 | 只看该作者
overlapenable?

使用特权

评论回复
16
呆板书生| | 2010-11-5 18:27 | 只看该作者
绝对地址除了程序中指定外,可能还要在链接程序中再指定一次

使用特权

评论回复
17
茶竹论道| | 2010-11-5 19:17 | 只看该作者
编译结果发现这个数组的确放在这个位置了,但是英国签证还有别的没有指定的数组也放在了这个位置。

使用特权

评论回复
18
呆板书生| | 2010-11-5 21:48 | 只看该作者
右击工程名,然后点option->BL51

参考设置:
XDATA (« range » « segment « (address) » « , ... » »)

使用特权

评论回复
19
呆板书生| | 2010-11-5 21:50 | 只看该作者
例如,

To specify the order for segments, you must include the names of the segments separated by commas. The following example will place the ?XD?MOD1 and ?XD?MOD2 segments at the beginning of the XDATA memory:

BL51 MOD1.OBJ,MOD2.OBJ CODE(?XD?MOD1, ?XD?MOD2)

You can also specify the memory location for a segment. The example below will place the ?XD?MOD1 segment at 800h:

BL51 MOD1.OBJ,MOD2.OBJ CODE(?XD?MOD1 (0x800))

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dudongdao + 1
20
ayb_ice| | 2010-11-6 08:38 | 只看该作者
如果没有人为改变编译,连接选项
不可能出现这种情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

413

帖子

1

粉丝