新手提问bit数组的问题

[复制链接]
4242|8
 楼主| alex74 发表于 2009-1-13 09:35 | 显示全部楼层 |阅读模式
AN, TE, AI, MCU, IO
PIC16的C代码如下<br />volatile&nbsp;bit&nbsp;cols[3]&nbsp;=<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;RC5,<br />&nbsp;&nbsp;&nbsp;&nbsp;RC6,<br />&nbsp;&nbsp;&nbsp;&nbsp;RC7,<br />};<br /><br />编译结果:<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;396&nbsp;:&nbsp;can't&nbsp;have&nbsp;an&nbsp;array&nbsp;of&nbsp;bits&nbsp;or&nbsp;a&nbsp;pointer&nbsp;to&nbsp;bit<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;398&nbsp;:&nbsp;constant&nbsp;expression&nbsp;required<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;399&nbsp;:&nbsp;constant&nbsp;expression&nbsp;required<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;400&nbsp;:&nbsp;constant&nbsp;expression&nbsp;required<br /><br />这个数组该如何定义?
azafightaza 发表于 2009-1-13 11:20 | 显示全部楼层

改用结构体进行位定义试试

PICC貌似不可以用数组定义位吧?
yewuyi 发表于 2009-1-13 13:12 | 显示全部楼层

只能用结构和联合

  
 楼主| alex74 发表于 2009-1-13 16:49 | 显示全部楼层

谢谢各位

初学者,能不能请给个demo?
yewuyi 发表于 2009-1-13 17:32 | 显示全部楼层

这要什么DEMO ?

自己翻C语言的基础教材把。。。
hotpower 发表于 2009-1-13 17:48 | 显示全部楼层

...

  
 楼主| alex74 发表于 2009-1-14 11:11 | 显示全部楼层

改了个最经典的用法

但是不知道是否最简,八辈子没用过单片机了<br /><br />typedef&nbsp;struct<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;&nbsp;unsigned&nbsp;char*&nbsp;port;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;portMask;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;tGPIO;<br /><br />&nbsp;<br />tGPIO&nbsp;cols[COL_COUNT]&nbsp;=<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;{&TRISC,&nbsp;1&lt&lt5},<br />&nbsp;&nbsp;&nbsp;&nbsp;{&TRISC,&nbsp;1&lt&lt6},<br />&nbsp;&nbsp;&nbsp;&nbsp;{&TRISC,&nbsp;1&lt&lt7},<br />};<br /><br />#define&nbsp;bitset(var,mask)&nbsp;((var)&nbsp;|=&nbsp;(mask))<br />#define&nbsp;bitclr(var,mask)&nbsp;((var)&nbsp;&=&nbsp;~(mask))<br /><br />void&nbsp;KeySetCol(unsigned&nbsp;char&nbsp;col)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&ltCOL_COUNT;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitset(*cols.port,&nbsp;cols.portMask);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bitclr(*cols[col].port,&nbsp;cols[col].portMask);<br />}
 楼主| alex74 发表于 2009-1-14 11:23 | 显示全部楼层

。。。

看了那个高齐的网页和hotpower的网页<br />PICCBITBYTE&nbsp;myvars&nbsp;@(unsigned)0x25;//申请新变量类型PICCBITBYTE名为myvars,并绝对定位在bank0的0x25处<br /><br />#define&nbsp;myvars0&nbsp;myvars.BIT.BIT0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.0<br />#define&nbsp;myvars1&nbsp;myvars.BIT.BIT1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.1<br />#define&nbsp;myvars2&nbsp;myvars.BIT.BIT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.2<br />#define&nbsp;myvars3&nbsp;myvars.BIT.BIT3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.3<br />#define&nbsp;myvars4&nbsp;myvars.BIT.BIT4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.4<br />#define&nbsp;myvars5&nbsp;myvars.BIT.BIT5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.5<br />#define&nbsp;myvars6&nbsp;myvars.BIT.BIT6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.6<br />#define&nbsp;myvars7&nbsp;myvars.BIT.BIT7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//myvars.7<br />这段代码编译结果是:<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;431&nbsp;:&nbsp;struct/union&nbsp;required<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;431&nbsp;:&nbsp;struct/union&nbsp;required<br />Error[000]&nbsp;E:\mcu_kb\main.c&nbsp;431&nbsp;:&nbsp;illegal&nbsp;conversion<br /><br />也可能我哪里没搞对,估计还得写个union,太麻烦了。算了,反正能用了
yewuyi 发表于 2009-1-14 13:41 | 显示全部楼层

哎。。。

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

本版积分规则

43

主题

474

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部