4810|11

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

I/0口整合的困惑 [复制链接]

union mm {
        uchar bbb;
        struct {
                uchar BIT0        :1;                                       /* Port A Bit 0 */
                uchar BIT1        :1;                                       /* Port A Bit 1 */
                uchar PORTE_BIT6  :1;                                       /* Port A Bit 2 */
                uchar BIT3        :1;                                       /* Port A Bit 3 */
                uchar BIT4        :1;                                       /* Port A Bit 4 */
                uchar BIT5        :1;                                       /* Port A Bit 5 */
                uchar BIT6        :1;                                       /* Port A Bit 6 */
                uchar BIT7        :1;                                       /* Port A Bit 7 */
        } Bits;
}mmm;

由于I/0口乱,我想通过如此联合体来重新排布一下,结果发现编译不过去,有语法错误,我确定了:PORTE_BIT6  被定义过的,所以报错。

#defined  lamp   PORTE_BIT6<<7|PORTE_BIT5<<6|PORTE_BIT4<<5|PORTB_BIT4<<4|PORTB_BIT3<<3|PORTB_BIT2<<2|PORTB_BIT1<<1|PORTB_BIT0
也不对。

这两个却都通过了C编译器的编译,且能正常输出结果。

最新回复

   谢谢galle兄,回家了。  详情 回复 发表于 2010-2-10 13:52
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
  怎么了,没有人遇到过类似的问题吗?lamp被define后,成了了l-value,无法继续赋值的。
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
  1. typedef struct
  2. {
  3.     unsigned char ucSyncHead;    //同步头:0xfa
  4.     unsigned ucMachineNo:3; //目标地址。000~011-从机地址;100-主机地址;101-广播。
  5.     unsigned ucSourceNo:3;  //源地址。000~011-从机地址;100-主机地址;101-广播。
  6.     unsigned ucTokenID:2;   //令牌ID(2Bit)

  7.     unsigned ucPrimaryId:3;  //拥有优先权的从机ID(3Bit)
  8.     unsigned ucCmdCode:5;    //帧序号

  9.     unsigned char ucSndData[DATA_LENGTH]; //数据区, 长度为4个字节。
  10.     unsigned char ucChkSum; //校验和。
  11. }CommFrame;


  12. //上例中,ucTokenID就是你需要的定义了,超出范围的赋值是没有意义的了

复制代码
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
使用typedef 另外定义后,在前边的是高位后边的是低位!goodluck!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
printf("%d , \n",sizeof(CommFrame));  结果为什么是24 ?  
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
commframe是什么???
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 cy330206 的回复:
commframe是什么???


数据帧格式吧,不过我没有见过这种。 galle兄留下这个代码就走, 我怎么也弄不清楚。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 hallowwar 的回复:
引用 5 楼 cy330206 的回复:commframe是什么???

数据帧格式吧,不过我没有见过这种。 galle兄留下这个代码就走, 我怎么也弄不清楚。

我定义的是一个通讯的新结构,我只是告诉你要用typedef!定义数据!

  1. typedef struct
  2. {
  3. uchar BIT0        :1;                                      /* Port A Bit 0 */
  4. uchar BIT1        :1;                                      /* Port A Bit 1 */
  5. uchar PORTE_BIT6  :1;                                      /* Port A Bit 2 */
  6. uchar BIT3        :1;                                      /* Port A Bit 3 */
  7. uchar BIT4        :1;                                      /* Port A Bit 4 */
  8. uchar BIT5        :1;                                      /* Port A Bit 5 */
  9. uchar BIT6        :1;                                      /* Port A Bit 6 */
  10. uchar BIT7        :1;                                      /* Port A Bit 7 */

  11. }BITS;
  12. BITS aa;//定义aa为BITS类型
  13. aa.BIT7=1;
  14. //调用的时候,

复制代码
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
上边的定义BIT7和BIT0是颠倒的!你自己改一下!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
galle兄,再问你3个问题:
unsigned ucMachineNo:3; //目标地址。000~011-从机地址;100-主机地址;101-广播。
这个表示的是第三位?还有,sizeof运算怎么不对,我拆开算,累计不是24.
PORTE_BIT6:如果他是已经定义过的位变量的话是不是不可以出现在 :1这种位置?
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

11
 
:表示占用3个bit,即给他赋值时只能最大只能赋值为00000111B超出的部分会被省掉!
DATA_LENGTH没有定义,要看他的长的来决定大小!
已经定义了不能重复使用!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
   谢谢galle兄,回家了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表