51内存分配问题!

lqshui0501 2009-03-22 12:05:43
在学习的TCP/IP的51协议栈的时候有下面定义的变量,不明白什么意思。
请高手指点!
static BYTE DT_XDATA TCPIPBuf[TCPIP_BUF_SIZE];
static struct SMemHead DT_XDATA * DT_XDATA MemHeadEnd;
static struct SMemHead DT_XDATA * DT_XDATA MemHeadStart;
...全文
185 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqwx_1986 2009-03-22
  • 打赏
  • 举报
回复
#define DT_XDATA ?
mfantonidas 2009-03-22
  • 打赏
  • 举报
回复
struct SMemHead型变量的指针MemHeadEnd是static
:)
kingbozhang 2009-03-22
  • 打赏
  • 举报
回复
看来你是用Keil C在进行8051的开发了。

static BYTE DT_XDATA TCPIPBuf[TCPIP_BUF_SIZE];
static struct SMemHead DT_XDATA * DT_XDATA MemHeadEnd;
static struct SMemHead DT_XDATA * DT_XDATA MemHeadStart;

跟你讲一个复杂的吧,就以static struct SMemHead DT_XDATA * DT_XDATA MemHeadEnd为例。

Keil C将8051的内存区域分成了几个部分:
data ----片内直接寻址ram
idata ----片内间接寻址ram
xdata ----片外ram
code ----片外code

因为8051的内存区域分的比较复杂,导致Keil C在8051下的指针也比较复杂。
指针分为2类:
1. general ptr: 这种指针可以指向每个内存区域,如: int* ptr1--ptr1可以指向任何内存区域
2. memory-specific ptr:这种指针只能指向特定的内存区域,如: xdata int* ptr2--ptr2只能指向xdata区

指针本身也是变量,也占用内存。因此必须指明将指针放在哪个内存区域。
xdata int* data ptr3:ptr3是一个指向xdata区的int型变量的指针,ptr3本身占用的内存在data区。

因此,总结:
static struct SMemHead DT_XDATA * DT_XDATA MemHeadEnd
struct SMemHead DT_XDATA * DT_XDATA MemHeadEnd:MemHeadEnd是一个指向xdata区的SMemHead结构类型的指针,MemHeadEnd本身也放在xdata区。

static跟51没有关系。作业:指针是static,还是struct SMemHead型变量是static?


pengzhixi 2009-03-22
  • 打赏
  • 举报
回复
xdata的定义呢
lqshui0501 2009-03-22
  • 打赏
  • 举报
回复
哦,忘了告诉了
DT_XDATA就是xdata

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧