单片机编程时关于int

发布者:吉州古玩斋最新更新时间:2016-04-22 来源: eefocus关键字:单片机  编程  int 手机看文章 扫描二维码
随时随地手机看文章
在进行单片机编程时,我们经常用Int定义变量。以前学C语言时,我知道int它表示的位数跟具体的硬件结构有关。不过看了一本书中“慎用int”这节后,我对int又有了更一步的认识。

原来C语言并没有进一步明确不同硬件平台下int位宽由硬件平台决定这一点,从而导致了对int不同的理解。实际上int并没有具体的位宽限制,是由所用硬件平台(MCU)和编译器共同决定位宽为多少,通常情况下编译器会将int的位宽定为与所用MCU的位宽一致。

文中也举了两个例子说明因为对int理解的不够深入而犯的错误。一个是因为将int误理解为32位,而编译器和MCU为16位宽。一个产品需要显示开机后的时间,显示精度为秒。如果按照int为32位的话,定义secondCount为unsigned int的话,这是肯定能满足要求的。但当int被编译器按照16位来处理的话,最大记录的时间只能差不到18小时,产品用到正常上班时段是正常的。如果开机时间长的话,很久才关机一次,那么这个产品就会有问题了。另外一个例子是如果开始一款32位MCU做的产品,后来发现一款16位的MCU可以替代,这时要进行代码的移植。但16位MCU编译器认为int为16位,这是就存在溢出的问题。如果把int替换为long,可能把其他的地方也改动错误。

其实有解决的办法,C语言它本身提供了更为精确的数据类型。char,short,long long 分别严格对应8位,16位,32位,64位。绝大多数编译器编译出来的结果都满足这种对应关系。

最后,文中给出一个建议,用C语言编程的时候,一定要谨慎使用int,最好是不用。

 

参考《删繁就简——单片机入门到精通》

关键字:单片机  编程  int 引用地址:单片机编程时关于int

上一篇:低功耗数据采集系统的USB接口设计
下一篇:指针,其实很危险

推荐阅读最新更新时间:2024-03-16 14:51

单片机学习笔记特殊功能寄存器
 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。   在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器5
[单片机]
89C52单片机与双口RAM如何实现数据通信
1 引言 数字信号处理器(DSP)是一种适合于实现各种数字信号处理运算的微处理器,具有下列主要结构特点:(1)采用改进型哈佛(Harvard)结构,具有独立的程序总线和数据总线,可同时访问指令和数据空间,允许实际在程序存储器和数据存储器之间进行传输;(2)支持流水线处理,处理器对每条指令的操作分为取指、译码、执行等几个阶段,在某一时刻同时对若干条指令进行不同阶段的处理;(3)片内含有专门的硬件乘法器,使乘法可以在单周期内完成;(4)特殊的指令结构和寻址方式,满足数字信号处理FFT、卷积等运算要求;(5)快速的指令周期,能够在每秒钟内处理数以千万次乃至数亿次定点或浮点运算;(6)大多设置了单独的DMA总线及其控制器,可以在基本不影响
[单片机]
89C52<font color='red'>单片机</font>与双口RAM如何实现数据通信
基于I2C总线的新型可编程增益放大电路的设计
在各类遥感遥测系统中,模拟信号的动态范围通常都很大,一般在几mV至几十V范围内(动态范围可达80_90db),有的甚至是几pV_几百V(动态范围可达160db以上)。而且信号的干扰源多,有时甚至掩盖掉有用信号,很难辨识是有用信号还是干扰信号。此外,不同的材料、形状、尺寸,不同的类型,不同的测量速度,得到的信号频谱不同,受干扰信号的特点也不同。对这样的信号进行采集处理,为保证精度,检测系统首先需要对大动态模拟信号的动态范围进行压缩,即对mV甚至pV级的信号进行放大,对几十V甚至几百V的信号进行衰减,将信号的变化幅度调整到A/电路所需要的范围。针对这一问题,本文提出了一种基于I2C总线的新型可编程增益放大器的设计方法,可根据输入的模拟信
[模拟电子]
Silicon电容触摸感应MCU的工作原理与基本特征
  现在的电子产品中,触摸感应技术日益受到更多关注和应用,并不断有新的技术和IC面世。与此同时,高灵敏度的电容触摸技术也在快速地发展起来,其主要应用在电容触摸屏和电容触摸按键,但由于电容会受温度、湿度或接地情况的不同而变化,故稳定性较差,因而要求IC的抗噪性能要好,这样才能保证稳定正确的触摸感应。   针对市场的需求,来自美国的高效能模拟与混合信号IC创新厂商Silicon Laboratories(简称:Silicon Labs)公司特别推出了C8051F7XX和 C8051F8XX系列的MCU(单片机),专门针对电容触摸感应而设计,在抗噪性能和运算速度上表现的非常突出。    一、Silicon Labs公司的电容触摸系
[单片机]
PIC单片机之定时器(TMR0)
什么是定时器? 定时器顾名思义就是用来定时的。在单片机应用中常常用于各种各样的定时。比如让LED灯每隔 1S 亮一次。 这个1S 就是由定时器做到的。 指令周期 指令周期就是单片机执行一个指令所花费的时间。这也是定时器定时的最小时间单位。时钟频率/4=指令频率。1/指令频率=指令周期。 假设现在的时钟是4MHZ ,4MHz的时钟经过4分频后变成了 1MHz 其周期为0.0000001s也就是1us,这个1us就是指令周期,这1us也就是定时器定时的最小单位。 定时器与预分频器 假设在没有预分频器情况下。开启定时器 每隔一个指令周期定时器就加一。假设时钟是4MHz 也就是每隔 1us 定时器加一。 如果有
[单片机]
PIC<font color='red'>单片机</font>之定时器(TMR0)
USB接口芯片SL811HS在51单片机系统中的应用
摘要:介绍了CYPRESS公司生产的主/从双工作模式USB接口芯片SL811HS的性能与内部结构,给出了SL811HS芯片在单片机系统中扩展USB接口的硬件电路,同时给出了该系统的USB驱动程序及实现U盘读写功能的应用程序。 关键词:SL811HS;USB接口;驱动程序;U盘读写 1 引言 USB(通用串行总线)是INTEL、DEC、MI-CROSOFT、IBM等公司联合提出的、最近几年逐步在PC领域广为应用的新型接口技术。USB接口通用性好、实时性强、传输方式多样、成本低、支持即插即用、易于扩展且便于使用,这些优点使其得到许多硬件厂商的青睐。目前各种类型的USB产品已大量涌入市场,同时也被广泛地用在PC机及嵌入式系统中。
[应用]
如何用AT89C2051单片机自制一个倒计时器
倒计时器在生活非常有用,用单片机自制,不但电路简单,而且功能可根据需要自行设计。由74系列、40系列小规模数字芯片设计的倒计时器非常多,但有显示不直观(无LED数码管);调整参数不灵活;计时精度低(采用RC振荡)等缺点。 一、功能介绍 1. 独立的三路倒计时。均可独立设置启动、关闭。 2. 范围:0~20小时,可任意设定。关机后数据不丢失。计时精度高:《0.1S 3.。独立的三路输出: a:第1路 蜂鸣器输出: 15S b:第2路PNP晶体管输出:5S c:第3路 PNP晶体管输出:直致关机 二、工作原理 电路见上图整机由89c2051、三位LED数码管、K1-K4、R、T等元器件组成。89C2051内部T1定时器完成1
[单片机]
如何用AT89C2051<font color='red'>单片机</font>自制一个倒计时器
节约单片机端口资源的键盘电路
    摘要: I/O端口是单片机实现对目标控制的端口,一般小型单片机的I/O端口都十分宝贵。文中介绍了一种可节省单片机I/O端口的键盘电路,分析了新型键盘电路结构和工作原理。最后给出了基于该键盘电路C51语言程序和软件处理过程。     关键词: 单片机 I/O端口 键盘 组合 扫描 1 新型键盘电路 键盘电路是单片机应用系统最常用的人机接口,往往要占用较多的I/O端口,利用本文介绍的电路,可以最大限度地减少键盘电路对I/O端口的点用。本电路特别适合一些引脚少、结构紧凑的单片机,可为其节省宝贵的I/O资源。 这里以3根I/O线为例,普通接法只能接3个键,即使是采用改进后的组合接法 ,最多也只能接7个
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved