搜索
bottom↓
回复: 4

IAR for MSP430中头文件中的 位定义是如何实现的 看不明白,

[复制链接]

出0入0汤圆

发表于 2010-10-21 16:24:48 | 显示全部楼层 |阅读模式
__no_init volatile union
{
  unsigned char P1OUT;  /* Port 1 Output */
  
  struct
  {
    unsigned char P1OUT_0        : 1;
    unsigned char P1OUT_1        : 1;
    unsigned char P1OUT_2        : 1;
    unsigned char P1OUT_3        : 1;
    unsigned char P1OUT_4        : 1;
    unsigned char P1OUT_5        : 1;
    unsigned char P1OUT_6        : 1;
    unsigned char P1OUT_7        : 1;
  } P1OUT_bit;  
} @ 0x0021;


enum {
  P1OUT_0             = 0x0001,
  P1OUT_1             = 0x0002,
  P1OUT_2             = 0x0004,
  P1OUT_3             = 0x0008,
  P1OUT_4             = 0x0010,
  P1OUT_5             = 0x0020,
  P1OUT_6             = 0x0040,
  P1OUT_7             = 0x0080,
};

为什么用P1OUT_bit.P1OUT_0 = 1;这样P1OUT寄存器的第0位就变成1了

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-10-21 18:02:43 | 显示全部楼层
因为该数据结构用的是联合,所以P1OUT_bit和P1OUT共用同一处地址,操作P1OUT_bit,相当于在操作P1OUT寄存器。举个例子,你要将一个long型的变量存到EEPROM中,可以利用联合将其拆解成四个字节的数组,达到简化程序的目的
定义:
union xyz
{
  unsigned long l_Data;   
  unsigned char strData[4];  
};

union xyz unTest;
unTest.l_Data = 0x12345678;
执行该指令后,如果系统是小端模式的话,会得到如下结果
unTest.strData[0]=0x78
unTest.strData[1]=0x56
unTest.strData[2]=0x34
unTest.strData[3]=0x12

出0入0汤圆

 楼主| 发表于 2010-10-21 19:30:12 | 显示全部楼层
那么P1OUT_bit.P1OUT_0的意思就是P1OUT寄存器地址的第0位,这句看的不是很明白?

出0入0汤圆

发表于 2010-10-21 23:17:48 | 显示全部楼层
unsigned char P1OUT_0        : 1;  
    unsigned char P1OUT_1        : 1;  
    unsigned char P1OUT_2        : 1;  
    unsigned char P1OUT_3        : 1;  
    unsigned char P1OUT_4        : 1;  
    unsigned char P1OUT_5        : 1;  
    unsigned char P1OUT_6        : 1;  
    unsigned char P1OUT_7        : 1;  

以上分别定义了P1OUT 的八位, 对他们操作意味着对 P1OUT(地址0x0021)的各个位操作。共用体(联合体)中变量占用一个同一个起始地址,共用体的大小为成员中的最大长度的大小。

出0入0汤圆

发表于 2010-10-25 22:23:25 | 显示全部楼层
求助:
我为什么连续安装两个版本的 IAR ew430 (5.10.1和5.10.6)怎么连个新的工程也建不了总是提示:not a valid project file?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-25 22:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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