单片机学习小组
直播中

陈娟

7年用户 191经验值
私信 关注

使用联合体出现了空间溢出

我想把DSP使用到的2个2KB的buf挪用出来作为FLASH的BUF但是现在出现了空间溢出问题,希望有能人帮忙解答下为什么
xdata U8 SPI_FLASH_BUF[4096]_at_ 0x2000;
只是警告提示空间超出
而使用
xdata union
{
    struct
    {
        U8 dsp_ibuf[2048] _at_ 0x2000;
        U8 dsp_obuf[2048] _at_ 0x4000;
    }dsp_buf;
    U8 SPI_FLASH_BUF[4096];
}un_buf;
就会有下面的提示
*** ERROR L107: ADDRESS SPACE OVERFLOW
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT                                             

先谢过大家。

回帖(3)

徐伟

2019-2-19 08:24:30
怀疑你的AT用的有问题,看看DSP内存地址是如何分配的吧。DSP没玩过,呵呵。
举报

陈浩

2019-2-19 08:40:09
 或许是联合体使用的时候SPI_FLASH_BUF的地址是从结构体dsp_buf.dsp_ibuf地址开始,这样导致其实我的目的没有达到,
联合体内的SPI_FLASH_BUF[4096]或许变成了这样的形式 U8 SPI_FLASH_BUF[4096] _at_ 0x2000;那就导致了0x2000
之后的2048个偏移后还有被SPI_FLASH_BUF[4096]多占用了2048个byte。
这样就变成我定义了U8 SPI_FLASH_BUF[4096+2048] _at_ 0x2000;的空间。
哈哈,好像蛮合理,明天到公司编译下看看U8 SPI_FLASH_BUF[4096+2048] _at_ 0x2000;会是什么情况。
WIN8伤不起啊!!!
感谢原子哥的回复。
举报

李子邯

2019-2-19 08:46:24
刚刚试验了下,上面的想法是想当然了正确的原来是得给联合体本身单独开辟一个外部地址给他
xdata union
{
struct 
{
  U8 dsp_ibuf[2048] _at_ 0x2000;
  U8 dsp_obuf[2048] _at_ 0x4000;
}dsp_buf;
U8 SPI_FLASH_BUF[4096];
}un_buf _at_ 0x1000;
就是暂时不明白为什么直接定义不行,等下再研究下是否4K空间可用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分