您的位置:首页 > 其它

嵌入式tips

2015-12-04 20:29 197 查看
1 为啥不用int而用UCHAR

主要是省空间应该 dcs和ecp之间交互的message太多 怕overload吧 尽量节省空间

UCHAR opt_len,

UCHAR *opt_parm,

uchar 是int,uchar *p,是string

这个看你需求了? uchar是用8bit去表示一个数字

如果你printf %d打出来的就是0- 1111 1111之间的数字

unsigned char a = 98;

unsigned char b = 'a';

printf("%d,%c,%d,%c\n", a, a, b, b);

98,b,97,a

就是看你想打印出啥来了 主要是咱们code里面为了省空间有的时候不用一个完整的int去存数字

----是这样,我说why不用int定义呢

主要是省空间应该 dcs和ecp之间交互的message太多 怕overload吧 尽量节省空间

2 字节对齐

typedef packed struct

{

USHORT
msg_id PK_MBR; /* message type */

UCHAR padding PK_MBR;

UCHAR cpu_id PK_MBR;

ULONG result PK_MBR;

ULONG addl_info PK_MBR;

} CBC_TX_BUFFER;

ushort 2

uchar 1

uchar 1

ulong 8

ulong 8

para pragna align 1 不补位对齐。站位共20个字节。

para pragna align 0 补位对齐。就是8字节对齐。站位24个字节。

不补位才能网源传输,因为对端是对等协议。如果补位的话,在读取result的时候,就从补位的4个0开始读取了。

对端之根据协议进行,不管补位。(所有开发的规定,对端来回换,不同cpu优化方式不同,历史造成都是不优化,也是最合理的。

两边对等采用优化读写,类似local读写。理论上也是可以的)

再如:

ifdef GNU

para pragna align 1---- 表示字节不对齐

struct aa {

int a;

char b;

int c;

}AA

endif

传4,1,4;对端根据协议严格按照4,1,4获得。

如果不加限制,则编译器会优化成4,4,4.造成对方接收错误。

3 根据协议补位

struct CBC_RX_STATE {

UCHAR a;

UCHAR fill[7];

UCHAR b;

UCHAR fill2[7];

}

why要补位,直接传2个UCHAR,对端也用两个数组,不就完了吗。多传2个补位数组干嘛。

因为根据协议。补位数组是option。以便各个公司扩展的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: