OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3364|回复: 12

请教一个预编译问题 #if #elif #endif

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-24
在线时间
15 小时
发表于 2018-9-20 19:10:05 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 zzk123 于 2018-9-21 12:05 编辑





#define COMM_PC // ---------------------------------------------------------------------------------------------[1]

#if defined(COMM_PC)
        #define MASTER_COMM_PC                       4  //-----------------------------------------------------[2]
#elif defined(MAX3485_COMM_PC)
        #define MASTER_COMM_PC                       3
#elif defined(MAX3232_COMM_PC)
        #define MASTER_COMM_PC                       1
#else
        #define MASTER_COMM_PC                       4

#endif


#if (MASTER_COMM_PC== 1)
        #define PTZCOMMPC_USARTx USART1    //--------------------------------------------------------------[3]
        #define PTZCOMMPC_NVIC_IRQChannel USART1_IRQn
#elif (MASTER_COMM_PC== 4)
        #define PTZCOMMPC_USARTx UART4//-------------------------------------------------------------------[3]
        #define PTZCOMMPC_NVIC_IRQChannel UART4_IRQn
#else
        #define PTZCOMMPC_USARTx USART2
        #define PTZCOMMPC_NVIC_IRQChannel USART2_IRQn
#endif
背景:因为在项目中,使用的接口会有RS232或者RS485接口,所以想通过预编译指令来条件选择
         本来是想要的执行顺序是   【1】-->【2】-->【3】
         可是编译完成后,Go to Definition “PTZCOMMPC_USARTx”老是执行 绿色的代码【3】;即 【1】-->【2】-->【3】
            //if(USART_GetITStatus(PTZCOMMPC_USARTx, USART_IT_RXNE) != RESET)


请问各位大神,这是什么原因????

补充说明:这部分代码先是裸机下跑没问题,移植到ucosiii出现了这种问题

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-21 08:33:19 | 显示全部楼层
不知道什么语言,#ifdef  #ifndef,我是这么写
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-9-21 08:39:01 | 显示全部楼层
宏定义写的有问题
回复

使用道具 举报

0

主题

109

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2018-9-2
在线时间
8 小时
发表于 2018-9-21 08:41:54 | 显示全部楼层
有些语言是相同的,求分享,谢谢
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-9-21 10:14:04 | 显示全部楼层
#define COMM_PC 你是怎么定义的
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-24
在线时间
15 小时
 楼主| 发表于 2018-9-21 11:59:21 | 显示全部楼层
douxiaolingyun 发表于 2018-9-21 10:14
#define COMM_PC 你是怎么定义的

这张写法只是做编译开关
#define DEBUG
#if define DEBUG
your code(输出调试信息等等)
#endif
DEBUG被定义了的话your code部分会被编译,如果DEBUG未定义,编译器则忽略your code部分
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-24
在线时间
15 小时
 楼主| 发表于 2018-9-21 12:01:24 | 显示全部楼层
hgr211 发表于 2018-9-21 08:33
不知道什么语言,#ifdef  #ifndef,我是这么写

C语言   keil编译环境,stm32f103,
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-24
在线时间
15 小时
 楼主| 发表于 2018-9-21 12:03:42 | 显示全部楼层
HXYDJ 发表于 2018-9-21 08:39
宏定义写的有问题

是第一句define有问题吗?

关于第一句我是这么理解的,如有错误请指明:
#define后面是否只跟一个标识符是按照需求的,如果作为定义常量肯定是要2个标识符的,但是如果仅作为预处理指令的开关符,则只需要一个标识符就可以了。
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-21 12:15:13 | 显示全部楼层
#ifdef COMM_PC
      #define MASTER_COMM_PC                       4  //-----------------------------------------------------[2]
#else
       #ifdef MAX3485_COMM_PC
        #define MASTER_COMM_PC                       3
        #endif
。。。。

#endif
回复

使用道具 举报

4

主题

380

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3088
金钱
3088
注册时间
2015-10-17
在线时间
320 小时
发表于 2018-9-21 13:59:37 | 显示全部楼层
经常#if 0,#if 1,来注释,或者 #ifdef debug_adc,这样子的,连续的几个也许是#ifdef  #else ifdef 。。。  #endif。也有编译条件用#if debug_adc,如果要用就将debug_adc 定义1,不用就定义0。
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17753
金钱
17753
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-9-27 12:08:58 | 显示全部楼层
那不应该的 裸机和有系统的不冲突的。
/*
*
*
*
*
*
*/
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-5-25
在线时间
26 小时
发表于 2018-9-30 10:04:34 | 显示全部楼层
应该是【2】也没有执行,执行的是最下面的那个#else的 #define MASTER_COMM_PC    4,你可以 把#if defined 改为 #ifdef试试
回复

使用道具 举报

17

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2018-12-28
在线时间
39 小时
发表于 2019-12-12 14:31:27 | 显示全部楼层
我也碰到了一样的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 22:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表