首先问大家两个问题:
- 8位单片机定义一个int型变量,占几个字节?
- 32位单片机定义一个char型变量,占几个字节?
Keil C51、8位单片机
这一节基于Keil C51工具,8位单片机(AT89C51)进行测试。这是一个很简单的Demo,只针对变量占用空间大小进行测试,主要是对比data的大小,初始值为9。(其中系统【启动文件】占用了9字节RAM空间) 1.char占1字节//char a;void main(void){while(1){}}
定义变量:
char a;
编译结果:
Program Size: data=10.0 xdata=0 code=17
2.short占2字节定义变量:
short a;
编译结果:
Program Size: data=11.0 xdata=0 code=17
3.int占2字节
定义变量:
int a;
编译结果:
Program Size: data=11.0 xdata=0 code=17
4.float占4字节
定义变量:
float a
编译结果:
Program Size: data=13.0 xdata=0 code=17
5.double占4字节
定义变量:
double
编译结果:
Program Size: data=13.0 xdata=0 code=17
Keil MDK、32位单片机
这一节基于Keil MDK工具,32位单片机(STM32)进行测试。这也是一个很简单的Demo,主要是对比RW-data的大小,初始值为0。(其中 ZI-data=1024 为系统分配的栈空间大小) 1.char占1字节//char a;int main(void){while(1){// a++;}}
定义变量:
char a;
编译结果:
Program Size: Code=512 RO-data=436 RW-data=4 ZI-data=1028
啥?占了4个字节? 答案:只占了一个字节,因为32位机是4字节为一个“单元”,一个 char 只占用了其中1字节(类似结构体占用空间大小,这里还牵涉到大小端对齐模式)。 再举一个例子:定义4个 char型变量,还是占用4字节空间(short原理一样)再次提示:
注意4字节为一个“单元”,超过这个单元就分配到“下一个单元”,比如:
char a;int b;char c;
这里就会占用12(3 * 4)字节空间(a、b、c各自占4字节)。
2.short占2字节定义变量:
short a;
编译结果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
这里和 char 类似,如果定义两个 short 也是占用4个字节。 3.int占4字节
定义变量:
int a;
编译结果:
ProgramSize:Code=512RO-data=436RW-data=4ZI-data=1028
32位机,int占用4字节没什么说的。 4.float占4字节
定义变量:
float a;
编译结果:
ProgramSize:Code=520RO-data=436RW-data=4ZI-data=1028
5.double占8字节
定义变量:
double a;
编译结果:
ProgramSize:Code=1156RO-data=436RW-data=8ZI-data=1024
总结
上面验证情况在Keil C51、 8位单片机(AT89C51)中:-
char:占1字节
-
short、int:占2字节
-
float、double:占4字节
-
char:占1字节
-
short:占2字节
-
int、float:占4字节
-
double:占8字节
这里面还有很多细节内容,可能很多人都没有深入研究过,感兴趣的朋友可以自己实验研究一下。struct Str{char a;short b;int c;char d;};
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6078文章
45569浏览量
673385 -
keil
+关注
关注
69文章
1231浏览量
173128
原文标题:用Keil验证8位和32位单片机变量占用空间大小
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
深入剖析LC87F2608A:8位单片机的卓越之选
深入剖析LC87F2608A:8位单片机的卓越之选 引言 在电子工程师的日常工作中,选择一款合适的单片机至关重要。ON Semiconductor的LC87F2608A 8位单片机,以其丰富的功能
项目选型必看:单片机与PLC究竟该怎么选?
工业控制为何用PLC而不用单片机? 这是一个在工业自动化领域非常经典的问题。简单来说, PLC是为工业环境而设计的“加固型”工业控制计算机,而单片机只是一个需要开发者从头搭建系统的核心芯片。 虽然
Keil编译错误汇总
出现多重定义,而全局变量的定义一般在.c文件中,在对应的.h文件中用extern来引用。
3. keil在调试退出时,经常出现“Encountered an improper argument
发表于 01-21 07:40
单片机解密是什么?
芯片的其中一个类。
单片机(MCU)一般都有内部程序区和数据区(或者其一)供用户存放程序和工作数据(或者其一)。为了防止未经授访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密
发表于 12-30 08:19
不同位数的CPU的变量所占的内存
不同位数的CPU(单片机)的变量所占的内存也不尽相同,具体如下表所示。
8位16位32位64位
char1 Byte1 Byte1 Byte1 Byte
short int2 Byte2 Byte2
发表于 12-09 07:30
变量控件实验
目录1、实验目的2、实验设备3、实验步骤3.1新建工程3.2新建画面3.3添加控件3.4模拟工程3.5硬件验证1、实验目的单片机或PLC的串口与智能显示卡相连驱动大尺寸VGA显示器或电视机进行
在Keil中使用J-Link attach到正在运行的代码中
一、设置验证变量
使用 SDK 例程 igpio_led_output,为了便于验证,定义全局变量 count,在 while(1) 中累加。
图 1
二、设置
发表于 11-19 06:54
C语言开发单片机为什么大多数都采用全局变量的形式?
单片机的芯片资源从来都是 “精打细算” 的级别,CPU 主频普遍不高,RAM 总容量本就紧张,分给栈空间的更是少得可怜。要是像普通软件那样,依赖函数返回值传递数据、频繁用局部变量周转,一来二去占用
请问rt-thread studio如何想keil一样在线查看变量?
rt-thread studio如何想keil一样在线查看变量?是我操作不对吗?还是本来就没有这个功能?
发表于 09-17 06:07
怎么测单片机系统频率
单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
单片机怎么烧程序
单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧
怎样学会单片机?
想学会单片机其实没那么复杂,先把心态放平稳,别被那些五花八门的名词吓住。一开始就得把 C 语言基础打扎实,位操作、指针、函数这些概念必须吃透,尤其是指针,单片机里操作寄存器、外设经常要用到,搞不懂
瑞萨RA8系列教程 | 基于 Keil 开发 RA8单片机
本文结合瑞萨Cortext-M85单片机RA8D1、Keil MDK,以及瑞萨自家的代码初始化工具(Smart Configurator)给大家描述一下,快速在Keil MDK上点亮Cortext-M85
如何用Keil来验证单片机变量占多少字节
评论