zoukankan      html  css  js  c++  java
  • 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语言书,最保险的是加上括弧,那样也是没有问题的。记住:在嵌入式里位运算运用的还是很广泛的,所以切记切记!~

  • 相关阅读:
    lua math 库
    【转】Lua 操作系统库
    lua学习笔记(十三)
    lua学习笔记(十二)
    lua学习笔记(十一)
    lua学习笔记(十)
    lua学习笔记(九)
    lua学习笔记(八)
    lua学习笔记(七)
    lua学习笔记(六)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007521.html
Copyright © 2011-2022 走看看