嵌入式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。以便各个公司扩展的。
主要是省空间应该 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。以便各个公司扩展的。
相关文章推荐
- 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译
- python基础教程共60课-第1课安装
- 37.拖放控件Interface Builder
- Day(一)
- Android CheckBox和RadioButton
- openjudge 木材加工
- 【学习笔记】maven下多个web项目使用maven-war-plugin需要注意的问题
- Framework快速部署工具
- simhash算法原理
- Myeclipse中Java的代码全是黑色的了,但jsp代码就有不同颜色显示?
- 关于复选框多重值传到后台的问题
- HDU1429 bfs 状态压缩 xingxing在努力
- java字符串常量池
- hdu 2066floyd算法之一个人的旅行
- 对于三方库之-StreamingKit的简单应用实例
- project euler 3
- 最大流dinic模板
- C++创建和使用DLL
- XCode自动布局Warning: Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
- 抽象类与接口