电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

单片机C言语易错常识点

2017-04-01 12:49分类:PLC基础知识 阅读:

  在进行单片机开发时,常常都会呈现一些很不起眼的疑问,这些疑问正本都是很根底的c言语常识点,是一些小细节。可是恰是由于很根底,又都是小细节,所以咱们一般简略疏忽它们。作用有时分咱们会花很长的时间纠结一个疑问,迟迟找不到疑问的地址。当发现要素竟然是这么的简略和不起眼时,我想不单是我,咱们都会感到痛不欲生。笔者今日又碰到了这么的疑问,真实不由得了。由于这些疑问都是小的常识点,考虑到之前也遇到许多这种疑问,所以抉择每次遇到疑问就记载下来,时间提示自个。
1. !和 ~ 纷歧样
! 是逻辑非符号,~ 是位取反符号。
对IO口某个管脚赋值时不要错用 !,如


2.<<和>>的优先级低于+、-
比方要完毕c=x*2+1,没有加括号会犯错


3.移位要防止溢出
正本用移位替代乘除法是个不错的办法,笔者很喜爱拿到一段代码后用移位替代乘除法来进行优化。不过有时分却会呈现疑问,比方溢出疑问。当很显着或许溢出的话咱们是会留心的,比方


4.无符号数和有符号数混合运算都会被强行变换为无符号数运算
当一个有符号数和一个无符号数进行算术运算时,体系会主动将有符号数强行变换为无符号数再进行运算(即便你运用有符号数强行类型变换),如下面两种写法的运送作用是相同的


5.有些变量要初始化
有些变量没有初始化的话,由于单片机每次为他分配的是同一个内存区域,当你在函数中是这么运用有些变量时,就或许出疑问:


假定榜初度调用fun时,a传递的值为0,那么flag = 0x01;施行if(flag&0x01)后边的代码。往后再调用fun时,即便a不为0,但flag仍然运用之前的内存区域,所以其值一向为0x01,一向施行的是if后边的代码,而不是else后边的。
假定要防止这个过失,往常要养成对有些变量初始化的习气。

上一篇:8255芯片引脚及其功用

下一篇:单片机开发软件介绍及设备

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部