我对C写作相对比较陌生。我已经自学自己使用我在网上和印刷中找到的资源。这是我在C编程中第一个真正的项目。喜欢在职培训。在内存中依次写入不同数据类型的值?或者,具有多种数据类型的数组?
我正在使用德州仪器C6701数字信号处理器的C语言编写一些代码。具体来说,我正在编写一组通信函数来通过串口进行连接。
我所在的项目有一个现有的数据包协议,用于通过串行端口发送数据。这是通过将指针传递给要传输的数据及其以字节为单位的长度来工作的。我所要做的就是将待传输的字节写入内存中的“数组”中(发送器将该字节序列复制到缓冲区并发送)。
我的问题与如何最好地格式化要传输的数据有关,我必须发送的数据由几种不同的数据类型(无符号字符,无符号整数,浮点等)组成。我无法将所有内容扩展到float(或int),因为我的通信带宽有限,需要尽可能小的数据包。
我原想用数组对数据进行格式化,
unsigned char* dataTx[10];
dataTx[0]=char1;
dataTx[1]=char2;
etc...
这只是不是所有的工作,我的数据是char,有些是unsigned int类型或unsigned short。
为了处理short和int我使用了位移(现在让我们忽略little-endian vs big-endian)。
unsigned char* dataTx[10];
dataTx[0]=short1>>8;
dataTx[1]=short1;
dataTx[2]=int1>>24;
dataTx[3]=int1>>16;
etc...
但是,我相信另一个(和更好的?)的方法是使用指针和指针算术。
unsigned char* dataTx[10]
*(dataTx+0) = int1;
*(dataTx+4) = short1;
*(dataTx+6) = char1;
etc...
我的问题(最后)是,是该方法(比特移位或指针运算)是更可接受的方法?另外,运行速度更快吗? (我也有运行时间限制)。
我的要求:数据按顺序位于内存中,没有间隙,中断或填充。
我对结构知之甚少,不知道结构是否可以作为解决方案。具体来说,我不知道一个结构是否总是按顺序分配内存位置并且没有中断。我读了一些表明它们分配在8字节块中的内容,并可能引入填充字节。
现在我倾向于指针方法。感谢您阅读这篇长长的文章。
谢谢你的回应!我有一个问题,在编写长手和写子函数来处理它之间会有什么运行时差异吗?如果这是一个棘手的问题来回答我明白,我只是想知道是否有明显的差异。 –
可能有函数调用/返回的代价;这不太可能是一个严重的问题。如果函数是内联的,那么你可能会离开而没有这个成本。您需要(a)测量它,并(b)评估维护代码的成本与运行代码的成本。如果最坏的情况出现,请考虑使用宏而不是函数;但那绝对是最后的选择。如果这是您应用程序的瓶颈,我会很惊讶。你应该证明它是放弃优秀软件工程原理之前的瓶颈。 –