本帖最后由 warcraftiii 于 2009-11-3 20:07 编辑
在下初学DSP,请教个变量长度问题:
一个例子程序中定义结构体:volatile struct DEV_EMU_REGS DevEmuRegs;
//--DSP28_GlobalVarialbeDefs.c------------------------------------------
#pragma DATA_SECTION(DevEmuRegs,"DevEmuRegsFile");
volatile struct DEV_EMU_REGS DevEmuRegs;
//--DSP28_DevEmu.h-------------------------------------------------------
struct DEV_EMU_REGS {
union DEVICECNF_REG DEVICECNF;
union DEVICEID_REG DEVICEID;
Uint16 PROTSTART;
Uint16 PROTRANGE;
Uint16 rsvd[202];
Uint16 M0RAMDFT;
Uint16 M1RAMDFT;
Uint16 L0RAMDFT;
Uint16 L1RAMDFT;
Uint16 H0RAMDFT;
};
union DEVICECNF_REG {
Uint32 all;
struct DEVICECNF_BITS bit;
};
//--SRAM.cmd-------------------------------------------------------
MEMORY
{....
DEV_EMU : origin = 0x000880, length = 0x000180
FLASH_REGS : origin = 0x000A80, length = 0x000060
......
SYSTEM : origin = 0x007010, length = 0x000020
SPI_A : origin = 0x007040, length = 0x000010
....}
SECTIONS
{.....
DevEmuRegsFile : > DEV_EMU, PAGE = 1
FlashRegsFile : > FLASH_REGS, PAGE = 1
......
SysCtrlRegsFile : > SYSTEM, PAGE = 1
SpiaRegsFile : > SPI_A, PAGE = 1
......}
//--voer-------------------------------------------------------
我对这个定义理解是:变量DevEmuRegs保存在起始于0x000880,长度0x000180的空间内。(384个字节)
但问题是变量 DevEmuRegs 的是DEV_EMU_REGS类型,按照定义长度应该是426个字节,换成16进制是0x1AA。分配空间不够。超出0x000180的长度。
程序是正确的,可以运行。
我不明白哪里理解错了
是计算DevEmuRegs的长度错了吗?还是理解.cmd文件定义的存储器位置错误?
该怎么理解?
Uint16 rsvd[202]; 是404个字节长的数组吗?
在下绝对菜鸟,请指点一下啊,感谢!!
--------------------------
刚才写错了, 重新修改了! |