我对用 C 语言写作比较陌生。我使用我在网上和印刷品中找到的资源自学了。这是我第一个真正的 C 编程项目。一定要热爱在职培训。
我正在用 C 语言编写一些用于德州仪器 C6701 数字信号处理器的代码。具体来说,我正在编写一组通信函数来通过串行端口进行接口。
我正在进行的项目有一个现有的数据包协议,用于通过串行端口发送数据。这是通过将指针传递给要传输的数据及其长度(以字节为单位)来实现的。我所要做的就是将要传输的字节写入内存中的“数组”(发送器将该字节序列复制到缓冲区中并传输它)。
我的问题与如何最好地格式化要传输的数据有关,我必须发送的数据由几种不同的数据类型(unsigned char、unsigned int、float 等)组成。我无法将所有内容扩展为浮点(或整数),因为我的通信带宽有限,并且需要保持数据包尽可能小。
我本来想用数组来格式化数据,
unsigned char* dataTx[10];
dataTx[0]=char1;
dataTx[1]=char2;
etc...
这会起作用,除非我的所有数据都是 char,有些是 unsigned int 或 unsigned short。
为了处理 short 和 int,我使用了位移(现在让我们忽略 little-endian 与 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 字节块,并可能引入填充字节。
现在我倾向于指针方法。感谢您阅读这篇似乎很长的帖子。