如何更改cortex m3中的endianess设置?

时间:2016-12-17 02:44:04

标签: endianness cortex-m3

我在皮质m3指南中发现了两个陈述(红皮书) 1. Cortex m3同时支持Little和big endianess。 2.复位后,endianess无法动态更改。

所以它间接告诉重置处理程序中的更改字节序设置,是吗?

如果是,那么如何改变结束。我需要配置哪些寄存器以及配置位置(在复位或异常处理程序中)

改变结局并不是一个好主意 但仍然是好奇心,我想看看皮质m3是否真的支持这两个结束?

2 个答案:

答案 0 :(得分:5)

Cortex-M 架构可以配置为支持big-endian或little-endian操作。

但是,特定的Cortex-M 实现只能支持一个字节序 - 它已硬连接到芯片中,并且无法更改。我所知道的每个实现都选择了little-endian。

答案 1 :(得分:0)

您需要直接阅读ARM文档。技术参考手册涉及到这样的事情。如果在将芯片构建到芯片中时实际上有了cortex-m3的源,那么您将看到可以触摸的外层和/或配置选项。

来自cortex-m3 TRM

  

SETEND总是出错。配置引脚选择Cortex-M3   端标记。

然后我们再次点击它了:

  

处理器包含一个配置引脚BIGEND,可以为您提供支持   选择little-endian或BE-8 big-endian格式。这个   配置引脚在复位时采样。你不能改变字节序   当没有重置时。

从技术上讲,可以选择一个可以选择的芯片,可以设计一个连接到BIGEND的外部带子,它可能是一些保险丝或其他非易失性的东西,你可以触摸然后弹出重置ARM内核可以有一些其他处理器或逻辑来管理ARM内核的引导,并在释放ARM内核上的重置之前与之通信或编程。

一般来说,在架构的默认字节顺序上反对谷物是一个坏主意。特别是ARM现在有两种口味而后者(BE-8)更痛苦(比BE-32)。当然还有其他工具链而不是gcc,但即使是绝大多数用户,绝大多数间接测试都采用本机(little-endian)模式。甚至会想知道逻辑是如何真正经过测试的,ARM之外的任何人设计验证是否真的推动了这种模式?他们测试得够吗?

您是否尝试过构建big endian cortex-m3代码?由于cortex-m是一个16位指令集(带有thumb2扩展名),它如何影响BE-8。使用带有ARM指令的全尺寸ARM上的BE-8,32位数据交换,但32位指令不会。也许这是在TRM中,我应该阅读更多,但是在皮层m上的工作原理是否相同? 16位指令不交换但数据呢?用拇指指示在全尺寸手臂上怎么样?工具链是否与硬件期望的相匹配?

BTW这意味着当你在cortex-m3周围建立一个芯片时,你所接口的逻辑中有一个名为BIGEND的信号,你可以进入那个逻辑并更改BIGEND的默认设置(我假设他们有提供一个)或者如上所述,您可以在芯片中添加逻辑,使其成为运行时选项,而不是编译时间。