OpenEdv-开源电子网

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

怎么通过版本号切换控制IO口切换

[复制链接]

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
发表于 2016-10-27 09:19:49 | 显示全部楼层 |阅读模式
1金钱
我做的工程有多个版本,比如从c版本到d版本更改了板子的IO口,怎么样能够直接从c版本切换到d版本,而不是每次更改了版本号,都要重新把IO口重新改一遍。大家有没有好的想法?

最佳答案

查看完整内容[请看2#楼]

直接将管脚定义成变量的形式,如:GPIO_TypeDef * a=GPIOA; unsigned short b=GPIO_Pin_14;unsigned int c=RCC_AHB1Periph_GPIOA.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-27 09:19:50 | 显示全部楼层
直接将管脚定义成变量的形式,如:GPIO_TypeDef * a=GPIOA;  unsigned short  b=GPIO_Pin_14;unsigned int c=RCC_AHB1Periph_GPIOA.
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13123
金钱
13123
注册时间
2012-11-26
在线时间
3813 小时
发表于 2016-10-27 09:34:54 | 显示全部楼层
#define  LEDPORT   XXXX            #define LEDPIN XXXXXX     #define LEDCLOCK   XXXX
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13123
金钱
13123
注册时间
2012-11-26
在线时间
3813 小时
发表于 2016-10-27 09:37:33 | 显示全部楼层
#if(version == 0x01)
{
   #define  LEDPORT   XXXX            #define LEDPIN XXXXXX     #define LEDCLOCK   XXXX
}
#endif


#if(version == 0x02)
{
   #define  LEDPORT   XXXX            #define LEDPIN XXXXXX     #define LEDCLOCK   XXXX
}
#endif
学无止境
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-27 09:43:33 | 显示全部楼层
jermy_z 发表于 2016-10-27 09:34
#define  LEDPORT   XXXX            #define LEDPIN XXXXXX     #define LEDCLOCK   XXXX

我之前就是在每一个模块前#define的,就是每次改了IO,都得重新改#define。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13123
金钱
13123
注册时间
2012-11-26
在线时间
3813 小时
发表于 2016-10-27 09:48:59 | 显示全部楼层
雨雪纷纷 发表于 2016-10-27 09:43
我之前就是在每一个模块前#define的,就是每次改了IO,都得重新改#define。

那你想怎样?

硬件接口都变了,你指望代码自己变?
学无止境
回复

使用道具 举报

5

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2016-6-5
在线时间
44 小时
发表于 2016-10-27 09:57:06 | 显示全部楼层
板子上放个flash存储硬件版本号,开机先读取
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-27 11:25:56 | 显示全部楼层
jermy_z 发表于 2016-10-27 09:37
#if(version == 0x01)
{
   #define  LEDPORT   XXXX      &nb ...

这样define的话是预编译,编译之前预处理替换的,不是在运行中的东西,对于最终的执行程序而言,它并不知道有宏这么个东西
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13123
金钱
13123
注册时间
2012-11-26
在线时间
3813 小时
发表于 2016-10-27 11:43:52 | 显示全部楼层
雨雪纷纷 发表于 2016-10-27 11:25
这样define的话是预编译,编译之前预处理替换的,不是在运行中的东西,对于最终的执行程序而言,它并不知 ...

呵呵
学无止境
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-10-27 12:08:01 | 显示全部楼层
老老实实的改吧
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-27 13:43:17 | 显示全部楼层

项目优化,要不然后续比较麻烦
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-27 14:34:23 | 显示全部楼层
kykxo 发表于 2016-10-27 09:57
板子上放个flash存储硬件版本号,开机先读取

我们默认版本号的管脚是不变的,就想把其他的管脚动态初始化,,define的话是预编译
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-27 20:34:57 | 显示全部楼层
你这硬件设计的也是很有意思 啊。。。 软件变个版本,硬件就得变个版本。。。我也是醉了。
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-10-28 10:26:51 | 显示全部楼层
正点原子 发表于 2016-10-27 20:34
你这硬件设计的也是很有意思 啊。。。 软件变个版本,硬件就得变个版本。。。我也是醉了。

是硬件变个版本,软件变个版本哈哈,现在已经找到解决办法了,再也不用define,不用预编译
回复

使用道具 举报

0

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2728
注册时间
2015-10-29
在线时间
428 小时
发表于 2016-11-3 21:22:42 | 显示全部楼层
用的什么方法能说下吗!谢谢!
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
 楼主| 发表于 2016-11-7 09:07:14 | 显示全部楼层
kepuple 发表于 2016-11-3 21:22
用的什么方法能说下吗!谢谢!

直接将管脚定义成变量的形式,如:GPIO_TypeDef * a=GPIOA;  unsigned short  b=GPIO_Pin_14;unsigned int c=RCC_AHB1Periph_GPIOA.
回复

使用道具 举报

0

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2728
注册时间
2015-10-29
在线时间
428 小时
发表于 2016-11-8 07:24:32 | 显示全部楼层
雨雪纷纷 发表于 2016-11-7 09:07
直接将管脚定义成变量的形式,如:GPIO_TypeDef * a=GPIOA;  unsigned short  b=GPIO_Pin_14;unsigned int ...

哦,谢谢解说!
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-14 10:45:53 | 显示全部楼层
软件管理多版本或者多产品线的方法,最直接的是条件编译,打开不同的宏定义,就会编译出不同的版本
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 03:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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