关于c51存储类型和其数据长度,有点不懂,求指点

如题所述

关于C51存储类型和其数据长度,有点不懂,求指点。
1. 在C51中,数据类型长度并非由变量声明时的存储类型决定,而是由数据类型本身确定。例如:
- `unsigned char` 或 `char` 固定为8位,即一个字节。
- `unsigned short` 或 `short` 固定为16位,即两个字节。
- `unsigned long` 或 `long` 固定为32位,即四个字节。
- `float` 固定为32位,即四个字节。
- `double` 在C51中通常被视为32位浮点数,因为C51将double转换为float来编译。
2. C51还支持`union`和`struct`,这些类型的长度是不固定的,取决于其成员中最大长度。
3. C51扩展了`bit`类型,代表一个位,其长度不取决于任何存储类型,而是固定为1位。
4. 存储类型如`data`, `idata`, `bdata`, `xdata`, `pdata`等,它们指定了变量或常量在内存中的存储位置,而非数据类型长度。这些存储类型与内存区域相关:
- `code` 表示代码区,通常为Flash(ROM),是只读的。
- `data` 表示内部RAM的低128字节,可以直接寻址,访问速度快。
- `idata` 表示内部RAM的高128字节,只能间接寻址,速度较`data`慢。
- `pdata` 指的是外部RAM的前256个字节(即00--FF),只能用`MOVX`间接寻址,但由于可以使用累加器R0作为指针,其访问速度与`idata`相同。
- `xdata` 指的是外部RAM的全部,包括前256个字节,通常用`MOVX`和`DPTR`联合寻址,速度最慢。
5. 举例说明:
- `data unsigned char a;` 变量`a`存储在内部RAM空间的低128字节,长度为8位。
- `idata unsigned char a;` 变量`a`存储在内部RAM空间的高128字节,长度为8位。
- `pdata unsigned char a;` 变量`a`存储在外部RAM空间的低256字节,长度为8位。
建议参考提供的链接以获取更详细的信息。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜