打印
[STM32F1]

Keil C51中变量的使用

[复制链接]
671|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ulystronglll|  楼主 | 2024-6-30 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Keil C51中变量的使用Keil C51是一款功能强大且广泛应用于8051单片机的编译器,正确地使用变量是获得高效目标代码的关键。Keil C51中变量的使用与标准C有所不同,主要体现在变量的存储模式和类型上。CPU存储结构与变量的关系在标准C中,不加特别定义的变量是放在存储器中的,使用register可以强制变量存储在寄存器中,对于使用特别频繁且数量不多的变量可以选用这种存储模式,以获得更高的工作效率。然而,51内核单片机的存储结构不同,具有3个存储空间:程序存储器空间、片外数据存储器空间和片内数据存储器及特殊功能寄存器空间。因此,在Keil C51中使用变量就和标准C有很大不同。Keil C51变量分析Keil C51支持标准C原有的多数变量类型,但新增了多种存储类型,也新增了一些标准C没有的变量。Keil C51中定义变量的格式如下:[存储种类]数据类型[存储类型]变量名表;其中,[存储类型]是标准C中没有的,共有6种:data、bdata、idata、xdata、pdata和code。每种存储类型都有其特点和应用场景。Keil C51新增的变量类型Keil C51中新增了bit、sfr、sbit、sbitl6等变量类型,这些变量类型不支持数组和指针操作。bit变量存储在片内数据存储器的可位寻址字节上,sfr变量存储在片内特殊功能寄存器中,sbit变量存储在片内特殊功能寄存器的可位寻址字节上,sbitl6变量存储在片内特殊功能寄存器的连续2个字节的低地址上。Keil C51中使用变量存储模式的必要性在Keil C51中,变量的存储模式是一个可选项,如果不使用这个选项,则Keil C51在编译时自动进行优选分配。但这种处理方法有缺点,如系统不知道各种变量的使用频度,可能对使用频度高的变量使用了访问速度慢的片外存储方式,而对使用频高的变量使用了片内存储方式,使得程序的运行效率降低。因此,正确地使用变量存储模式是获得高效目标代码的关键。

使用特权

评论回复
沙发
芯路例程| | 2024-6-30 12:00 | 只看该作者
KeilC51?这个是大学时候用的软件了。

使用特权

评论回复
板凳
caoyunhj2301| | 2024-6-30 14:10 | 只看该作者
bit:存储在片内数据存储器的可位寻址字节上,用于节省存储空间和处理位操作。

使用特权

评论回复
地板
稳稳の幸福| | 2024-6-30 18:29 | 只看该作者
C51有一些自己专属的关键字。如果想写移植性高的程序,要考虑避开这些。

使用特权

评论回复
5
4y1b3| | 2024-6-30 19:51 | 只看该作者
Keil C51 是一款功能强大的编译器,广泛应用于 8051 单片机的开发。

使用特权

评论回复
6
4y1b3| | 2024-6-30 19:51 | 只看该作者
Keil C51 的存储模式与变量关系
8051 单片机的存储结构包括三个存储空间:

程序存储器空间
片外数据存储器空间
片内数据存储器及特殊功能寄存器空间
与标准 C 不同,Keil C51 中需要明确指定变量的存储类型,以提高效率。

使用特权

评论回复
7
4y1b3| | 2024-6-30 19:52 | 只看该作者
变量存储类型
在 Keil C51 中,变量的定义格式为:

c

[存储种类] 数据类型 [存储类型] 变量名表;
存储类型包括:
data:片内数据存储器,可快速访问。
bdata:位寻址的片内数据存储器。
idata:间接寻址的片内数据存储器。
xdata:片外数据存储器。
pdata:带页寻址的片外数据存储器。
code:程序存储器,用于存储只读数据。

使用特权

评论回复
8
4y1b3| | 2024-6-30 19:53 | 只看该作者
data int var1;    // 定义在片内数据存储器的 int 型变量
xdata char var2;  // 定义在片外数据存储器的 char 型变量
code const char message[] = "Hello";  // 定义在程序存储器的只读字符串

使用特权

评论回复
9
4y1b3| | 2024-6-30 19:53 | 只看该作者
Keil C51 新增变量类型
bit:存储在片内数据存储器的可位寻址字节上。适用于单个位的布尔变量。
sfr:特殊功能寄存器变量,用于直接访问 8051 的特殊功能寄存器。
sbit:位于特殊功能寄存器的可位寻址字节上,适用于控制特定位。
sbitl6:位于连续两个字节的低地址上,通常用于特殊应用场景。

使用特权

评论回复
10
4y1b3| | 2024-6-30 19:53 | 只看该作者
bit flag;                // 定义一个位变量
sfr P0 = 0x80;           // 定义特殊功能寄存器 P0
sbit P0_0 = P0^0;        // 定义 P0 寄存器的第 0 位
sbitl6 mySbit = 0x90;    // 假设一个特殊功能寄存器定义

使用特权

评论回复
11
舒伯特玫瑰| | 2024-7-31 00:03 | 只看该作者
如果不使用这个选项,则Keil C51在编译时自动进行优选分配

使用特权

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

本版积分规则

15

主题

1207

帖子

1

粉丝