在写到  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. [iOS 多线程 & 网络 - 1.1] - 多线程NSThread

    A.NSThread的基本使用 1.创建和启动线程 一个NSThread对象就代表一条线程创建.启动线程NSThread *thread = [[NSThread alloc] initWithTar ...

  2. .net版本之间的关系

    net framework 2.0,3.0与3.5三个版本之间关系如下: .net framework 2.0 = CLR 2.0 + FCL(framework class library) .ne ...

  3. java.util.Arrays的使用

    在Java.util包中有一个工具类Arrays类,封装了一些操作数组的方法.简单使用如下: package com.arrays.test; import java.util.Arrays; pub ...

  4. mysql数据库表间内外链接详解

    1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 3. 自连接(同一张表内的连接) SQL的标准语法: ...

  5. Hadoop平台配置总结

    hadoop的配置,个人感觉是非常容易出问题.一个原因是要配置的地方多,还有个原因就是集群配置要在几台机器上都配置正确,才能保证配置好hadoop,跑起任务. 经过昨晚加今天上午的折腾,总算成功配好了 ...

  6. 图像切割之(五)活动轮廓模型之Snake模型简单介绍

    图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...

  7. 【M22】考虑以操作符复合形式(op=)取代其独身形式(op)

    1.对于内置类型,x = x+y 与x+=y的结果相同. 2. x=x+y 与 x+=y的结果相同,但二者做的事情差别很大. a.x=x+y做的事情:方法内有个局部对象,值为x+y,返回局部对象,返回 ...

  8. Codeforces Gym 100513I I. Sale in GameStore 暴力

    I. Sale in GameStore Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/p ...

  9. VBA Excel 常用 自定义函数

    1. 将 互换 Excel 列号(数字/字母) Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim ...

  10. Google搜索语法

    原文:http://www.jianshu.com/p/37fe4f1381ef 前言 之前听过一个笑话,有人打开浏览器,输入www.baidu.com, 然后搜索框输入Google,查询google ...