单片机C语言易错知识点经验笔记

发布者:MysticGlow最新更新时间:2017-04-04 来源: 21ic关键字:单片机  C语言  知识点 手机看文章 扫描二维码
随时随地手机看文章

今天写这一篇文章并不是因为已经想好了一篇文章才写下来,而是我要将这一篇文章作为一篇笔记来写,一直更新下去。在进行单片机开发时,经常都会出现一些很不起眼的问题,这些问题其实都是很基础的c语言知识点,是一些小细节。但是正是因为很基础,又都是小细节,所以我们往往容易忽视它们。结果有时候我们会花很长的时间纠结一个问题,迟迟找不到问题的所在。当发现原因竟然是这么的简单和不起眼时,我想不单是我,大家都会感到痛不欲生。笔者今天又碰到了这样的问题,实在忍不住了。因为这些问题都是小的知识点,考虑到之前也遇到好多这种问题,于是决定每次遇到问题就记录下来,时刻提醒自己!!

1. !和 ~ 不一样

! 是逻辑非符号,~ 是位取反符号。

对IO口某个管脚赋值时不要错用 !,如

1.jpg

2.<<和>>的优先级低于+、-

比如要实现c=x*2+1,没有加括号会出错

2.jpg

3.移位要防止溢出

其实用移位代替乘除法是个不错的方法,笔者很喜欢拿到一段代码后用移位代替乘除法来进行优化。不过有时候却会出现问题,比如溢出问题。当很明显可能溢出的话我们是会注意的,比如

3.jpg

但是有时候这个问题是不明显的,比如当移位出现在数组索引或函数参数时,有段用液晶显示字符的代码如下

4.jpg

我们可以用左移运算来代替乘法进行优化,如

5.jpg

这本是一个好方法,但是事实上上面的代码是错的。当执行c<<4时,因为没有明显的赋值过程,我们可能认为没问题,而事实上c的高位已经丢失了,所以得到错误的结果。一个可行的做法是先进行强制转换,如

6.jpg

4.无符号数和有符号数混合运算都会被强制转换为无符号数运算

当一个有符号数和一个无符号数进行算术运算时,系统会自动将有符号数强制转换为无符号数再进行运算(即使你使用有符号数强制类型转换),如下面两种写法的运输结果是一样的

 

8.jpg

 

9.jpg

5.局部变量要初始化

局部变量没有初始化的话,因为单片机每次为他分配的是同一个内存区域,当你在函数中是这么使用局部变量时,就可能出问题:

10.jpg

如果第一次调用fun时,a传递的值为0,那么flag = 0x01;执行if(flag&0x01)后面的代码。以后再调用fun时,即使a不为0,但flag依然使用之前的内存区域,所以其值一直为0x01,一直执行的是if后面的代码,而不是else后面的。

如果要避免这个错误,平时要养成对局部变量初始化的习惯。


关键字:单片机  C语言  知识点 引用地址:单片机C语言易错知识点经验笔记

上一篇:程序员必知的十大基础实用算法及其讲解
下一篇:很美!一个程序员写的编程诗

推荐阅读最新更新时间:2024-03-16 15:34

PIC单片机对数字温度传感器的控制设计
#include #define uchar unsigned char #define uint unsigned int #define DQ RC1 #define DQ_HIGH() TRISC1=1 #define DQ_LOW() TRISC1=0;DQ=0 __CONFIG(0x3B31); const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f}; const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; uint te mper; uc
[单片机]
PIC<font color='red'>单片机</font>对数字温度传感器的控制设计
51单片机入门教程(4)——按键控制
单片机与外界的信息交互主要有两大类,输入信息和输出信息。 之前的博客介绍了通过单片机控制LED灯和数码管向外界输出信息,该教程介绍单片机常用的输入设备——独立按键和矩阵键盘。 一、独立按键 1.1 独立按键的原理 独立按键一共有四个针脚,两个短针脚之间默认不导通,两个长针脚之间默认导通。实物图如图: 1.2 独立按键的仿真电路 在Proteus中对按键进行了简化,只有两个接线针脚。按键的一端接到单片机的IO口上,另一端与GND连接。当按键按下时,单片机的IO口与GND连接,端口电平被拉低。因此通过读取端口电平即可获知按键状态。 仿真电路如图: 1.3 按键消抖 关于按键抖动: 通常的按键所用开关为机械弹性开关,
[单片机]
51<font color='red'>单片机</font>入门教程(4)——按键控制
“瑞萨电子”起航,对华策略显露积极信号
  前NEC电子及瑞萨科技宣布,已正式完成合并业务,新成立的瑞萨电子(Renesas Electronics)已于稍早正式开始营运。根据该公司数据,瑞萨电子成为全球第3大半导体制造商,其合并营收达1.05兆日元 (113亿美元),仅次于美国英特尔以及韩国三星电子。   瑞萨电子董事会已于稍早表决通过,由山口纯史担任总裁,并由赤尾泰担任执行董事长。瑞萨电子也同时宣布已向NEC、日立及三菱电子募集资金,增资金额达1,346亿日圆。   瑞萨电子目前股本总额为153,255,000,915日圆,员工人数约47,000人,主要持股人及持股比例分别为:NEC占33.97%;日立占30.62%;三菱电机占25.05%;Japan Trus
[半导体设计/制造]
“瑞萨电子”起航,对华策略显露积极信号
AVR单片机JTAG与ISP的区别
(1)、JTAG是一个通信标准,用于计算机和单片机进行实时快速通讯。 AVR 的JTAG功能(只有部分型号才有)使得AVR的调试工作非常简单,可以通过JTAG 接口对Flash、EEPROM、熔丝位和锁定位进行编程。使用AVR studio软件和JTAG硬件( AVR JTAG编程器,AVR JTAG仿真器)可以进行程序下载(编程)和程序在线调试。 JTAG接口有四个引脚。以JTAG的术语来说,这些引脚组成了测试访问端口TAP。这些引脚是: TMS:测试模式选择。此引脚用来实现TAP 控制器各个状态之间的切换。 TCK:测试时钟。JTAG 操作是与TCK 同步的。 TDI: 测试数据输入--需要移位到指令寄存器或数据寄存器(扫
[单片机]
51单片机汇编语言实验(六)-----8255键盘与显示设计
一、实验目的:    掌握8255外接键盘与数码管显示的设计 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    8255键盘与显示设计 四、 8255键盘与显示设计    1、实验原理:    本实验使用8255的PA7到PA0控制数码管字形口、PB5到PB0控制数码管字位口,同时PB4到PB0作为键盘扫描口、PC3~PC0作为键盘读入口。利用CPU控制8255,对4×5键盘进行扫描和键值读取,将键值显示到6位数码管上。本文介绍的是简化版的实验,不控制最后一列键盘,数码管位选端不接线,直接点亮。    2、实验步骤:   ① 按下图拆除14芯扁平电缆;   ②将8
[单片机]
51<font color='red'>单片机</font>汇编语言实验(六)-----8255键盘与显示设计
据说市面上追求极致低功耗的血糖仪都这么做
可穿戴终端设备入侵到医疗电子领域后,便诞生了可穿戴医疗设备,并且由于其具有的技术优势和市场潜力大有异军突起之势。根据IMS Research高级分析师的说法,可穿戴健康医疗市场规模明年或超过29亿美元,占据可穿戴产品销售额至少一半。由此可见,可穿戴医疗设备已点燃了各个 厂商在这片新领域上布局的热情。   家用便携式医疗终端设备未来几年在全球范围内将保持强劲的发展势头。由于糖尿病患者数量呈直线上升之势,加上人们对自身的健康状况越来越重视,血糖测试仪更是出现了跳跃式的增长。尽管此前血糖仪在市场上已出现多年,但厂商对此领域仍持乐观态度。因为相比于医院大型医疗设备,家用便携式电子产品的需求更大。   低功耗与小尺寸一直都是可穿戴产品需要突
[嵌入式]
C语言开发者使用NI LabWindows/CVI 2013提升硬件速度
2013 年 10 月 – 美国国家仪器有限公司(National Instruments,简称NI)近日发布NI LabWindows/CVI 2013,该款久经验证的ANSI C集成开发环境(IDE) 全新采用了符合行业标准的优化编译器和OpenMP并行编程API。 这些关键性能提升帮助开发者在无需重写代码的情况下就能提高应用程序的性能。LabWindows/CVI专用于测试和测量,内置硬件通信和信号处理数据库,可简化工程应用的开发。 25年来,C语言开发一直使用LabWindows/CVI来创建强大、高性能的军事、航空、电信和汽车行业应用。 “LabWindows/CVI IDE 已成为我们自动化测试开发的重要组成部
[嵌入式]
以C8051F340单片机为核心的红外测温系统设计
引言 螺旋装药过程中,经常会因为内部药品温度分布不均匀导致在装药过程中药品内出现气泡的现象,这严重影响了弹体内的药品质量和弹药参数。因此,本文希望通过设计一种温度监测系统来实现对腔体内药品温度检测,寻找装药过程中温度与药品质量之间的关系。由于装药机结构的特殊性,我们无法通过传统的接触测温法获取药品的温度。因此本文设计了一种基于红外测温方法的系统来实现对药品温度的实时检测。 1 时分复用原理 复用方法的设计主要依据TN9红外传感器的信号特征及接口特点,TN9红外温度传感器具有5个接口,其中电源和地不需要接到CPLD上,其余三个接口分别为低电平有效的TN9工作使能接口,工作在主模式的SPI时钟接口和数据接口。采用复用模式是只需通过设置
[单片机]
以C8051F340<font color='red'>单片机</font>为核心的红外测温系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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