在写到  pwm音阶程序的时候,在代码中有#if...#endif的用法问题,相关音阶的代码如下:

 /*******************************************************/
/* pwm音阶程序 */
/*******************************************************/ #include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */ #define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4 //
#define BUS_CLOCK 32000000
#define OSC_CLOCK 16000000 unsigned int sounghigh[]={
,,,,,,,,,
}; unsigned int soundtone[]={
,,,,,,,
}; unsigned int soundlong[]={
,,,,,,,
}; unsigned int t; /*******************************************************/
/* 初始化锁相环 */
/*******************************************************/
void INIT_PLL(void) {
CLKSEL &= 0x7f;
PLLCTL &= 0x8f;
CRGINT &= 0xdf; #if(BUS_CLOCK == 40000000)
SYNR = 0x44;
#elif(BUS_CLOCK == 32000000)
SYNR = 0x43;
#elif(BUS_CLOCK == 24000000)
SYNR = 0x42;
#endif REFDV = 0X81;
PLLCTL |= 0X70;
asm NOP;
asm NOP;
while(!(CRGFLG&0x08));
CLKSEL |= 0x80;
} /*******************************************************/
/* 初始化PWM */
/*******************************************************/
void init_pwm(void) {
PWMCTL_CON01 = ;
PWMPOL_PPOL1 = ;
PWMPRCLK = 0X55;
PWMCLK = 0X00;
PWMPER01 = ;
PWME_PWME1 = ;
} /*******************************************************/
/* 延时函数 */
/*******************************************************/
void delay(void) {
unsigned int i,j;
for(i=;i<;i++)
for(j=;j<;j++);
} /*******************************************************/
/* 延时函数 */
/*******************************************************/
void delay2(unsigned int n) {
unsigned int i,j,k;
for(k=;k<n;k++)
for(i=;i<;i++)
for(j=;j<;j++);
} /*******************************************************/
/* 主函数 */
/*******************************************************/ void main(void) {
DisableInterrupts;
INIT_PLL();
init_pwm();
LEDCPU_dir=;
LEDCPU=;
EnableInterrupts; for(;;) {
for(t=;t<;t++) {
PWMPER01=sounghigh[soundtone[t]];
PWMDTY01=sounghigh[soundtone[t]]/;
delay2(soundlong[t]);
PWMDTY01=;
delay();
}
delay2(); for(t=;t>;t--) {
PWMPER01=sounghigh[soundtone[t-]];
PWMDTY01=sounghigh[soundtone[t]]/;
delay2(soundlong[t]);
PWMDTY01=;
delay();
}
delay2();
} EnableInterrupts; for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */ }

yinjie

下面笔者来说说 #if...#endif的用法;

#if...#endif是C++种的条件编译预处理命令
有两种格式:
1:#ifdef  标示符
      程序段1
     #else
         程序段2
     #endif 
表示:如果标示符已经被#define命令定义过,则编译程序段1,否则编译程序段2
2:#if
表达式
      程序段1
    #else
         程序段2
    #endif
表示:如果表达式为真,则编译程序段1,否则编译程序段2.
你写出的命令应该属于格式1

  它的意思是,如果在程序中没有对**进行过#defined ** 的定义。则编译下面的语句,否则不编译。这中情况多用在需要经常移植的程序模块上,或是调试的时候用.

  结合使用 #if 与 #else、#elif、#endif、#define 和 #undef 指令,可以根据一个或多个符号是否存在来包含或排除代码。 在编译调试版本的代码或针对特定配置进行编译时,这会很有用。

以 #if 指令开始的条件指令必须用 #endif 指令显式终止。

#define 使您可以定义一个符号,通过将该符号用作传递给 #if 指令的表达式,使该表达式计算为 true。

也可以用 /define 编译器选项来定义符号。 可以用 #undef 来取消定义符号。

用 /define 或 #define 定义的符号与具有同一名称的变量不冲突。 即,不应将变量名传递到预处理器指令,并且只能用预处理器指令计算符号。

用 #define 创建的符号的范围是在其中定义该符号的文件。

#if...#endif的用法总结的更多相关文章

  1. #ifndef#define#endif的用法

    在网上看到了感觉作者总结得很好,作者辛苦了! #ifndef#define#endif的用法 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都 ...

  2. #ifndef#define#endif的用法(整理)

    [转] #ifndef#define#endif的用法(整理)    原作者:icwk  文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...

  3. c/c++头文件中#ifndef/#define/#endif的用法

    想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...

  4. #ifndef#define#endif的用法-b

    The special operator defined is used in #if and #elif expressions to test whether a certain name is ...

  5. #ifndef #define #endif 的用法

    1.文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来 ...

  6. [转] #ifndef#define#endif的用法(整理) 原作者:icwk

    文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了, ...

  7. 【转载】C/C++中#ifdef和#endif的用法

    转于 http://www.cnblogs.com/renyuan/archive/2013/05/22/3092362.html 今天笔试的时候遇到这个问题,整理一下! 一般情况下,源程序中所有的行 ...

  8. <!--[if IE]>….<![endif]--> (<!--[if !IE]>||<![endif]-->)的用法

    1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> 2. <!--[if IE]> 所有的IE可识别 ...

  9. #ifdef #else #endif 的用法

    预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译.这样做的好处是,经过处理后的代码,将会变的很精短. 关 ...

随机推荐

  1. Myeclipse2014破解激活

    eclipse使用的很顺手了,但是为了提高学习的效率(Myeclipse创建web项目的时候可以自动生成一些配置文件),在JSP和servlet的学习阶段,我选择使用Myeclipse,这个问题困扰了 ...

  2. ecshop以幻灯版调用首页主广告显示

    默认的是index_ad.lbi模板有一个$flash变量了,但在搜索搜索没发现 <!--{foreach from=$flash name=no item=flash}--> <l ...

  3. 又遇BUG-ORA-01148:数据文件忽然变为recover状态

    现象: RAC环境,数据文件状态变为recover,查看alert日志有如下报错: Wed Jun 26 02:31:03 2013 Thread 1 advanced to log sequence ...

  4. linux 查看当前路径命令:pwd

    查看当前路径命令:pwd pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为: # pwd /home/samlee ...

  5. C#中判断空字符串的3种方法性能分析

    3种方法分别是:string a="";1.if(a=="")2.if(a==String.Empty)3.if(a.Length==0) 3种方法都是等效的, ...

  6. 从零开始学习Hadoop--前言

    Hadoop是最著名使用最广泛的分布式大数据处理框架,它是用Java开发的. 这本书有一个明确的目标:只要有一台能上网的计算机,就可以让读者在最短的时间内,学会Hadoop的初级开发.所以,这本书只讲 ...

  7. (字符串的模式匹配4.7.18)POJ 2406 Power Strings(求一个字符串的最小重复串)

    注意,在IDE运行时,可能会因为开的数组太大而报错,这时我们可以把数组开小一点来进行调试....提交的时候把数组的大小改成1000005即可.... #include <iostream> ...

  8. windows下远程adb

    Android 使用 adb命令 远程安装apk cmd下到你的adb文件夹,一般在platform-tools下. adb devices 列出全部设备 adb connect xxx.xxx.xx ...

  9. delphi TTreeView组件遍历磁盘目录

    TTreeView组件遍历磁盘目录 实例说明 TTreeView组件是一个以分枝结构或者说树状结构显示数据的组件,以该组件显示数据具有较好的等级关系和逻辑层次,并且易于操作.在组件中显示的数据结构与系 ...

  10. delphi 获取驱动盘的卷标 号

    {获取C盘的卷标 格式化硬盘卷标改变} //GetHardDiskSerial('c:\') function GetHardDiskSerial(Drive: string): string; va ...