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.

[参考译文] MSP430FR5949:使用 MSP430内核处理20位数据

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/648768/msp430fr5949-20-bit-data-handling-with-msp430-core

器件型号:

您好!  

我有以下客户问题:

20位值如何存储在 FRAM 存储器中...  它是否需要3个字节或4个字节的存储器来保存单个20位值? 您是否可以打包20位的端到端值,或者它们是否以1或0填充?

当一个值为20位值时、例如、decx.a、一个递增或递减指令对存储器有何影响? 20位值任一侧的位会发生什么情况。  或者、对于这种情况、如果您将一个20位值复制到地址位置、它是否会覆盖已经存在但超出20位范围的数据?

我进入参考手册、发现我们只有针对8位和16位数据的硬件寻址、因此不像您在某些 ARM 上所能做的那样进行"位打包"。

但是、我遇到了20位数据及其处理方式的问题。  在指令集中、我看到几条指令具有位19:16的配置。  因此、我想我会问、而不是从髋部射向430内核上如何处理加减。  ALU 能否处理20位结果?结果是如何存储的?

当使用20位值时、对3 8位值进行数学运算并获取命中速度、或2 16位值并浪费存储器是有利的吗?  或者、它是基于速度/尺寸的权衡而提出的"视情况而定"问题吗?

顺便说一下、客户在汇编中编码、因此他关心字节存储和添加方式的细微差别。

谢谢!  Blake

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

    MSP430内核只能对16位或更少的数据执行操作。 该内核具有仅用于20位寻址的附加配置。 操作码 X 指令用于执行20位寻址处理。

    因此、要处理大于16位的数据、通常在 C 语言中只需使用 long。 我认为、在选择编译器空间优先级时、C 编译器有时会将字打包在一起。 但是、在编译速度时不会发生这种情况。

    如果您正在进行汇编、则如果编码器想要处理大于16位的数字、则由它们决定。 无论采用哪种方法、您仍然必须将数据分解为要处理的16位块。 可能可以使用 CPUx 指令来操作数据、但我不知道有任何人有这样或实际这么做的经验。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Blake Carpenter"]

    器件型号: MSP430FR5949

    顺便说一下、客户在汇编中编码、因此他关心字节存储和添加方式的细微差别。

    [/报价]

    我不使用 C 语言进行编码、因此我不知道如何在那里处理它。 我在汇编器(如客户)中进行编码、并使用20位地址空间和/或数据。

    所有 FRAM 器件都具有20位 CPUXv2、并具有用于处理20位数据的扩展汇编器指令集。 还有20位所谓的地址指令只能在一个周期内执行。 例如...

    add.w R5、R6 ;16位加法、将在一个周期内执行

    ADDA R5、R6 ;20位加法、与 addx.a 不同的所谓地址指令、将在一个周期内执行

    例如、如果16位整数不够(精度/范围/诸如此类)、则可以将其扩展到32位、其中周期数(性能成本)将加倍、与程序大小相同。 如果20位足够(根据我的经验、这并不罕见)、则执行速度和程序大小几乎没有差别。

    在8/16/20位数据方面、使用寄存器没有区别。 但是、关于存储器、将会浪费一些空间、因为具有4字节/双字对齐的两个字(地址中的最后2个位必须为零)用于20位数据。 总共32位中只有20位将被使用、其中 REST (未使用的20-32位)将具有零值。