OpenEdv-开源电子网

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

关于STM8端口命名的问题。

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-10-21
在线时间
12 小时
发表于 2017-2-18 11:53:26 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 lzcqust 于 2017-2-18 11:55 编辑

问题:为什么对结构体的引用不是__BITS_PI_DDR.DDR0?而是PI_DDR_bit.DDR0?
Main.c程序中:
PI_DDR_DDR0=1; //配置PI0端口为输出模式
/////////////////////////////////////////////////////////////////////////////////////////////////
Iostm8s208.h
#define PI_DDR_DDR0             PI_DDR_bit.DDR0
/////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct
{
  unsigned char DDR0        : 1;
  unsigned char DDR1        : 1;
  unsigned char DDR2        : 1;
  unsigned char DDR3        : 1;
  unsigned char DDR4        : 1;
  unsigned char DDR5        : 1;
  unsigned char DDR6        : 1;
  unsigned char DDR7        : 1;
} __BITS_PI_DDR;
#endif
__IO_REG8_BIT(PI_DDR,      0x502A, __READ_WRITE, __BITS_PI_DDR);
////////////////////////////////////////////////////////////////////////////////////////////////
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)       \
                      __near __no_init volatile ATTRIBUTE union   \
                        {                                         \
                          unsigned char NAME;                     \
                          BIT_STRUCT NAME ## _bit;                \
                        } @ ADDRESS;

#endif /* __IAR_SYSTEMS_ICC__ */
//////////////////////////////////////////////////////////////////////////////////////////////

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

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6639
金钱
6639
注册时间
2016-5-29
在线时间
907 小时
发表于 2017-2-19 10:12:58 | 显示全部楼层
typedef struct
{
  unsigned char DDR0        : 1;
  unsigned char DDR1        : 1;
  unsigned char DDR2        : 1;
  unsigned char DDR3        : 1;
  unsigned char DDR4        : 1;
  unsigned char DDR5        : 1;
  unsigned char DDR6        : 1;
  unsigned char DDR7        : 1;
} __BITS_PI_DDR;

这个地方有typedef 关键字.表示__BITS_PI_DDR是一个类型.不是一个结构体
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-10-21
在线时间
12 小时
 楼主| 发表于 2017-2-20 14:52:13 | 显示全部楼层
操作系统 发表于 2017-2-19 10:12
typedef struct
{
  unsigned char DDR0        : 1;

哦。。明白了, __BITS_PI_DDR代表上面结构体类型;
但是 PI_DDR_bit.DDR0这个是怎么来的?
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-10-21
在线时间
12 小时
 楼主| 发表于 2017-2-20 14:52:24 | 显示全部楼层
操作系统 发表于 2017-2-19 10:12
typedef struct
{
  unsigned char DDR0        : 1;

哦。。明白了, __BITS_PI_DDR代表上面结构体类型;
但是 PI_DDR_bit.DDR0这个是怎么来的?
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6639
金钱
6639
注册时间
2016-5-29
在线时间
907 小时
发表于 2017-2-20 17:16:40 | 显示全部楼层
__IO_REG8_BIT(PI_DDR,      0x502A, __READ_WRITE, __BITS_PI_DDR);
这不是明摆着吗
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-10-21
在线时间
12 小时
 楼主| 发表于 2017-2-20 23:59:59 | 显示全部楼层
本帖最后由 lzcqust 于 2017-2-21 00:06 编辑
操作系统 发表于 2017-2-20 17:16
__IO_REG8_BIT(PI_DDR,      0x502A, __READ_WRITE, __BITS_PI_DDR);
这不是明摆着吗

看了好长时间,实在是不明白,我把我想的说一下吧。看看问题出在哪,新手,请多指教。
__IO_REG8_BIT(PI_DDR,      0x502A, __READ_WRITE, __BITS_PI_DDR);//函数的说明,实参PI_DDR,      0x502A, __READ_WRITE, __BITS_PI_DDR,但是__BITS_PI_DDR应该是一个类型啊,为什么作为一个形参出现?
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)       \
                      __near __no_init volatile ATTRIBUTE union   \
                        {                                         \
                          unsigned char NAME;                     \
                          BIT_STRUCT NAME ## _bit;                \
                        } @ ADDRESS;
////////////////////////////////////////////////////
把ATTRIBUTE宏定义为__IO_REG8_BIT函数。但是这个宏定义好奇怪啊,一个是函数,一个是联合体,他们之间有什么关系?联合体代表函数的返回值?@ADDRESS又是什么意思?
PI_DDR_bit.DDR0应该是PI_DDR_bit结构体变量中的DDR0位。但是PI_DDR_bit又来自哪里?
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6639
金钱
6639
注册时间
2016-5-29
在线时间
907 小时
发表于 2017-2-21 09:08:57 | 显示全部楼层
多看几次,我也没有研究这么清楚与明白.暂时只会使用.呵呵..
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-28 22:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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