其中a、b、c共占9位,占1个字节多,不到2个字节。它的后面为int型,占2个字节。在a、b、c之后7位空间闲置不用,i从另一字节开头起存放。
对于位段成员的引用如下:
data.a =
2;等,但要注意赋值时,不要超出位段定义的范围。如位段成员a定义为2位,最大值为3,即(11)2,所以data.a=5;就会取5的两个低位进行赋值,就得不到想要的值了。
关于位段的定义和引用,有几点重要说明:
①若某一个段要从另一个字开始存放,可以定义:
unsigned a:1;
unsigned b:2;
unsigned :0;
unsigned c:3; (另一单元)
使用长度为0的位段,作用就是使下一个位段从下一个存储单元开始存放。
②一个位段必须存放在用一个存储单元中,不能跨两个单元。
如:
struct T {
unsigned char a : 4;
unsigned char b : 6;
};
结构T的成员a在一个存储单元中,b则在另一个存储单元中。
③可以定义无名位段。如:
unsigned a:1;
unsigned :2; (这两位空间不用)
unsigned b:3;
④位段的长度不能大于存储单元的长度,也不能定义位段数组。
不同编译器处理位段的差异
分类:默认栏目CCS里面认位段是从高位开始的,而Keil和凌阳单片机的编译器UNSP IDE以及NIOS II
IDE,C++Builder里认位段是从低位开始的
同样做一个结构体,在Keil、UNSP IDE、NIOS II IDE、C++Builder里要这样:
#define Uint unsigned int
typedef struct
{
Uint bit0 : 1;
Uint bit1 : 1;
Uint bit2 : 1;
Uint bit3 : 1;
Uint bit4 : 1;
Uint bit5 : 1;
Uint bit6 : 1;
Uint bit7 : 1;
Uint bit8 : 1;
Uint bit9 : 1;
Uint bit10 : 1;
Uint bit11 : 1;
Uint bit12 : 1;
Uint bit13 : 1;
Uint bit14 : 1;
Uint bit15 : 1;
}Bit;
而在CCS里就应该这样:
#define Uint unsigned int
typedef struct
{
Uint bit15 : 1;
Uint bit14 : 1;
Uint bit13 : 1;
Uint bit12 : 1;
Uint bit11 : 1;
Uint bit10 : 1;
Uint bit9 : 1;
Uint bit8 : 1;
Uint bit7 : 1;
Uint bit6 : 1;
Uint bit5 : 1;
Uint bit4 : 1;
Uint bit3 : 1;
Uint bit2 : 1;
Uint bit1 : 1;
Uint bit0 : 1;
}Bit;
在ccs下建立一个工程的步骤
分类:默认栏目建立一个工程的步骤:1.在C:ti或任意目录下建立工程文件名如###.pjt
2.将dsp头文件拷到此文件夹下。将这些头文件添加到工程中,注意:有一个文件DSP281x_usDelay.asm特殊.由于它是asm文件,当在默认的文件类型下全选的时候可能不会选到它,要在文件类型列表里点All
files然后全选。3。在工程下建立主函数C文件,并添加到工程中。4。添加F2812_EzDSP_RAM_lnk.cmd和DSP281x_Headers_nonBIOS.cmd文件5。添加库文件在C:tic2000cgtoolslibrts2800_ml.6.编译运行。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-39167-14.html
别以为这是US的强大
可见我们今天的科技现实
这人唱歌真是非常一般
日本海军强在舰新