This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6989:速度紧凑与字节对齐与字对齐 MSP430

Guru**** 2589300 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/940776/msp430fr6989-speed-packed-vs-byte-aligned-vs-word-aligned-msp430

器件型号:MSP430FR6989

大家好、  

我在数据对齐速度比较方面绝对不是专家。 但是、从我收集的内容来看、最好在字节或字级(至少在 MSP430中)进行数据对齐、以便可以使用直接汇编命令(例如 MOV.B 和 MOV)。 这样、处理器需要减少工作、从而节省时间。  

但是、按字节、字和两者的混合对齐的数据之间是否存在速度差异(如果使用'packed'属性、则可能发生这种情况)。

例如、使用以下两种结构之一时、速度是否存在差异:  

struct __attribute__((packed)) structure2
{
int id1;
char name;
int id2;
float percentage;
char c;
} 结构;

VS

结构2
{
int ID1;
char name;
int ID2;
float percentage;
char c;
} 结构;

紧凑型的大小为12字节、而非紧凑型的大小为20字节。 不过、我会直观地预期读取打包的数据会更慢、但我不确定是否会出现这种情况、因为汇编器显然也可以读取单个字节。  

此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Daelemans、  

     按字节、字和两者的混合对齐的数据之间没有任何速度差异。 您可以通过输出 GPIO 信号对其进行比较、并通过示波器测量持续时间。  

    谢谢、  

    Lixin  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定您的尺寸来自哪里。 对于未打包的版本、我得到12个字节:浮点值为4、每个为2的值为4 ints。 (char 变量占用一个额外的字节、以保持字边界上的所有其他内容对齐。) 使用 packed 属性可以保存 char 的浪费字节、但代价是使 tid2和百分比不对齐。 访问这些字段不会像 MSP430这样自动执行未对齐字访问的东西那样顺利。

    假设编译器为其生成代码、则会更慢。

    如果您确实需要节省空间、只需将"char c"旁边的"char name"移动即可。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我使用的是 int=4字节的想法。 忘记它在 MSP 上是2。  

    我也在某种程度上"找到"了您找到的解决方案。 我不知道的唯一链接是 MSP430不能自动执行不对齐的字词加速器。  

    我已经比较了两个不同结构中的汇编代码编写、并找到了您所描述的确切行为。 也就是在第二个 int 处、由于这种不对齐、它会写入字节。