C语言优先级在嵌入式编程中的重要性
2013-01-12 18:46
246 查看
C语言优先级在嵌入式编程中的重要性
最近在弄PIC的一个小项目,之前是前一个同事在原有程序的基础上经行了代码的优化,同时添加了一点新的功能,由于PIC单片机的容量还是相对较小,所以不得不把众多的ADC转换的函数整合到一个函数里,同时又有8位和10位的AD转换功能。
在程序里需要用到C语言里的位运算,PIC16F87x单片机的AD转换默认是10位的,而pic单片机是8位单片机,所以需要两个8位寄存器来存储AD转换的值,并通过ADFM位来设置其左对齐还是右对齐,然后在程序里读取AD转换后的值,读取数值的时候,就要用到位移的运算:
Ret_val=((ADRESH&0x03)<<8) +ADRESL; 当然这个是正确的,我这里加了括号,完全没问题,Ret_val是unsigned int类型的,可是之前的同时是这样写的:((ADRESH&0x03)<<8 +ADRESL);貌似没错啊,可是在C语言里“+”的运算符比“<<”的优先级高,所以他会先进行ADRESH&0x03,而后在8+ADRESL,最后在(ADRESH&0x03)<<(8
+ADRESL),和我们设想的完全不同了,从而到时读到的值就是错误的,害得我弄了两个晚上,幸好我留意了这个语句。
总结:在C语言里,倘若程序员很清楚的知道运算符的优先级,这个自然好,但是如果有点模糊,那就很有可能要出错了,那就去看看C语言书,最保险的是加上括弧,那样也是没有问题的。记住:在嵌入式里位运算运用的还是很广泛的,所以切记切记!~
最近在弄PIC的一个小项目,之前是前一个同事在原有程序的基础上经行了代码的优化,同时添加了一点新的功能,由于PIC单片机的容量还是相对较小,所以不得不把众多的ADC转换的函数整合到一个函数里,同时又有8位和10位的AD转换功能。
在程序里需要用到C语言里的位运算,PIC16F87x单片机的AD转换默认是10位的,而pic单片机是8位单片机,所以需要两个8位寄存器来存储AD转换的值,并通过ADFM位来设置其左对齐还是右对齐,然后在程序里读取AD转换后的值,读取数值的时候,就要用到位移的运算:
Ret_val=((ADRESH&0x03)<<8) +ADRESL; 当然这个是正确的,我这里加了括号,完全没问题,Ret_val是unsigned int类型的,可是之前的同时是这样写的:((ADRESH&0x03)<<8 +ADRESL);貌似没错啊,可是在C语言里“+”的运算符比“<<”的优先级高,所以他会先进行ADRESH&0x03,而后在8+ADRESL,最后在(ADRESH&0x03)<<(8
+ADRESL),和我们设想的完全不同了,从而到时读到的值就是错误的,害得我弄了两个晚上,幸好我留意了这个语句。
总结:在C语言里,倘若程序员很清楚的知道运算符的优先级,这个自然好,但是如果有点模糊,那就很有可能要出错了,那就去看看C语言书,最保险的是加上括弧,那样也是没有问题的。记住:在嵌入式里位运算运用的还是很广泛的,所以切记切记!~
相关文章推荐
- C语言优先级在嵌入式编程中的重要性
- C语言嵌入式系统编程修炼之软件架构篇
- 嵌入式系统编程语言-C语言开发流程及基本结构
- 嵌入式开发:中断优先级的重要性
- 语言特性对于编程的重要性
- c语言数据库编程--ODBC
- __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程)
- 计算机基础知识对编程的重要性
- 专业嵌入式软件开发——全面走向高质高效编程(含DVD光盘1张)
- 单片机嵌入式编程的五个注意事项
- 20161211C语言基础02_编程概述
- 嵌入式C编程经验 之 全局变量猛于虎
- c语言嵌入式系统编程修炼之软件构架
- SharePoint多语言---编程获取用户当前选择的语言
- 【嵌入式Linux C编程】Linux多线程编程
- sql语言艺术(3)SQL的进攻式编程
- 并行编程是否需要新的程序语言
- 嵌入式应用编程经验之谈-IAP(在线升级)
- 【编程之法】A.1 语言基础
- 【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招