原创 关于协议组帧的想法

2013-2-25 18:21 890 7 9 分类: 消费电子

 

之前在组帧时,是定义一个帧结构的结构体,然后在各个函数中,依次填充各个帧结构体中的元素(即帧中的各个field字段),填充完毕后,调用一个函数将帧结构体中的元素的值再依次写入帧缓冲区的内存中。
 
最近再次写一个协议的组帧函数,发现这样会造成多余的内存拷贝和内存访问,如果一开始就将数据写入帧缓冲区的内存中这样也避免了定义一个帧结构体的,省了一些内存。一举多得。
 
使用帧结构的结构体,并非不必要,而是在帧解析的时候,这个时候,将帧缓冲区的数据,一次写入帧结构体中,可以在使用时提取需要的数据。同时这个帧结构体中的数据,使用指针替代数组,这样减少内存的拷贝。提高程序的速度,同时减小程序使用的内存。
 

文章评论2条评论)

登录后参与讨论

1989tie_959541171 2013-2-28 19:09

谢谢你的建议。 关于这种方式,指针操作是要点,能够减少拷贝。 对于这种方式,要考虑结构体的字节对齐问题,如果考虑不到位,反而会出现难以调试的问题。这个在《字节对齐与内存访问》一文中,说明过一些Allen Zhang的评论更是将其细化。尤其是他的两篇博客,关于这个讲解的很好。 所以在文中建议,将成员使用指针,而不是结构体使用指针。

用户1380059 2013-2-28 10:49

这是给你的参考,即可以在组帧时获得帧结构体的优点,也可以消除不必要的复制。 struct PACKET { }; void pack(void* bufffer,size_t buf_size) { assert(sizeof(struct PACKET) == buf_size); struct PACKET* packet = (struct PACKET*)buffer; // fill in member of packet }

用户603060 2013-2-1 11:43

LED,激光什么的可行,白炽灯什么的,大家都懂的~

用户1619720 2013-2-1 10:01

有点新意啊

用户1625273 2013-1-9 19:12

想法很好。继续努力。

用户1406868 2013-1-9 03:07

希望能把信息控制欲者淹没在无处不在的信息海洋里。

相关推荐阅读
catch2000 2015-07-19 11:44
信号线小电阻的作用
在一块新的PCB上,测试系统能否正常运行的时候,发现系统上电后没有正常启动。  系统框图如下:   在上电的时刻,CPU A(GPIO电平2.6V)会向串口发送启动日志数据,CPU A启动后,...
catch2000 2015-07-05 17:04
协议设计中ACK机制的影响
在TCP/IP中,延时ACK和Nagle算法。  TCP为了同时处理成块数据(通常为512字节的用户数据)和交互数据(通常用户数据比较少,例如不大于10个字节),采用了延时ACK和Nagle算法...
catch2000 2015-05-23 15:48
话说物联网操作系统
最近好多家都宣布推出自己的物联网操作系统。   1. Google将要在Google I/O大会发布的Brillo; 2. 三星推出的Artik芯片搭载Mentor Graphics的...
catch2000 2015-03-31 23:52
不要采用异或来交换两个变量
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y;   y = x ^ y;   x = x ^ y; } 而不是...
catch2000 2014-10-09 07:28
为什么要测试先行
在产品的研发过程中,测试一项至关重要。不论是软件还是硬件。   软件的测试先行,在研发过程中,就做到质量的保证,因为在出现Bug的时候,容易定位Bug,而且即使是在客户端出现Bug,也能够...
catch2000 2014-10-09 07:26
C语言的面向对象编程(一)
一、前言 对于编程而言,重要的是解决问题的方式,而不是语言本身。面向对象与面向过程是解决问题和思考问题的方式。C语言常说是面向过程开发的语言,因为其缺少很多对于面向对象特性的支持。但,这并不影...
我要评论
2
7
关闭 站长推荐上一条 /2 下一条