单片机c语言预编译时间问题

单片机c语言预编译时间问题,第1张

(65536-Time_Per/Time)/256

(65536-Time_Per/Time)%256

#define Time (121000000)/FOSC

这里进行了大量的实型数据的乘除运算,您可以看看程序生成的汇编,编译器可能生成了大段的汇编来完成这些计算(您可以人工优化这段汇编试一试)。每次定时器中断里面都去计算,这样耗费的时间太多了,造成了很大的误差。改为直接数值代入,那就是几句MOV就完成了,所以能正常运行。

您可以对比一下单片机产生正弦波,如果去计算Y=SIN X,那么只能产生几Hz的。 单片机没有乘法器,虽然能较快地做加减和位移,但是多字节的乘除对51单片机来说,确实比较困难。多采用查表的方法来回避这种计算。

编译器很可能出错,产生大量的冗余编码,这是在实际应用中遇到过的,全靠人工优化(几句C都搞出了将近1K的汇编,那个汗啊)。所以应该尽量避免这种编程方式。

预编译头文件名为 stdafxh

使用预编译头的项目, 所有代码都必须将

#include <stdafxh>

插入到第一行, 但是预处理器不会处理它, 编译器会将其先构建, 再作为库连接

将代码需要大量使用的库的头文件(如 stdioh )包含到 stdafxh 中, 可以提高编译速度

#define MIN(x,y) (x)>(y)(x):(y)

这句是定义了一个求两个数之间较大一个的宏函数(用MAX(x,y)好些)

a=b是把b的值(3)赋给a,此表达式的值即为b的值,即3

此时a==3,b==3,b-a==0

从而s1的值为3

分别编译,通过连接器将其连接,几个cpp文件不会合成为一个文件,头文件中的内容会在两个文件中分别出现,编译器会保留声明但未定义的符号,连接器在生成目标程序时若找不到对应符号是报错,如果找到了就会把信息填入编译时留出的空内。

这种结果基本上和C语言里面的if else 语句一样的

第一个问题,你的回答是肯定的。

第二个问题,#ifdef 是判断一个宏是否已经定义,比如#ifdef XXXXX

就是说如果前面定义了XXXXX,那么这个#ifdef的条件就是真。#if 语句是判断#if后面的条件是不是真 比如说 #if 0,那#if的条件为假,#if 1 #if的条件为真。两个的实质是一眼的,都是判断后面的条件是否为真。

第三个问题,是可以存在这样的结构的。

以上就是关于单片机c语言预编译时间问题全部的内容,包括:单片机c语言预编译时间问题、C语言菜鸟求助,大神预编译头怎么用、C语言预编译处理的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9844721.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存