如何更改 cortex m3 中的字节顺序设置?
How to change endianess settings in cortex m3?
我在cortex m3 guide(red book)中找到了两个说法
1. Cortex m3 同时支持 Little 和 big endianess。
2. 重置后字节序不能动态改变
所以它间接地告诉重置处理程序中的更改字节顺序设置,是这样吗?
如果是,那么如何改变字节顺序。意味着我需要配置哪个寄存器以及在哪里配置(在重置或异常处理程序中)
改变字节顺序实际上不是个好主意
但出于好奇,我想看看 cortex m3 是否真的支持字节顺序?
Cortex-M 架构 可以配置为支持大端或小端操作。
但是,特定的 Cortex-M 实现 只能支持一种字节顺序——它被硬连接到硅片中,无法更改。我所知道的每个实现都选择了小端。
您需要直接阅读 ARM 文档。技术参考手册涉及到这样的事情。如果您在将 cortex-m3 构建到芯片中时确实拥有 cortex-m3 的源代码,那么您会看到可以触摸的外层和/或配置选项。
来自 cortex-m3 TRM
SETEND always faults. A configuration pin selects Cortex-M3
endianness.
然后我们在另一次点击中获得它:
The processor contains a configuration pin, BIGEND, that enables you
to select either the little-endian or BE-8 big-endian format. This
configuration pin is sampled on reset. You cannot change endianness
when out of reset.
从技术上讲,可以构建一个您可以选择的芯片,它可以设计为连接到 BIGEND 的外部带,它可以是一些保险丝或其他非易失性的东西,您可以触摸它们然后弹出重置在 ARM 内核上,可能有一些其他处理器或逻辑来管理 ARM 内核的启动,并且在 ARM 内核上释放重置之前,您可以与之交谈或对其进行编程。
一般来说,违背架构默认字节顺序的原则是个坏主意。特别是 ARM,现在有两种口味,后者 (BE-8) 更痛苦(比 BE-32)。诚然除了 gcc 之外还有其他工具链,但即使对于绝大多数用户来说,绝大多数间接测试都是在本机(小端)模式下进行的。甚至想知道逻辑是如何真正测试的,ARM 设计验证之外的任何人实际上都在推动该模式吗?他们测试得足够努力了吗?
您是否尝试过实际构建大端 cortex-m3 代码?由于 cortex-m 是一个 16 位指令集(带有 thumb2 扩展),这对 BE-8 有何影响。在带有 ARM 指令的全尺寸 ARM 上使用 BE-8,32 位数据交换,但 32 位指令不交换。也许这是在 TRM 中,我应该阅读更多内容,但它在 cortex-m 上的工作方式是否相同? 16 位指令不交换但数据交换?在带有拇指指令的全尺寸手臂上怎么样?工具链是否符合硬件的预期?
顺便说一句,这意味着当您围绕 cortex-m3 构建芯片时,在您接口的逻辑中有一个名为 BIGEND 的信号,您可以进入该逻辑并更改 BIGEND 的默认设置(我假设他们提供了一个)或者正如我上面提到的那样,您可以在芯片中添加逻辑以使其成为运行时选项而不是编译时。
我在cortex m3 guide(red book)中找到了两个说法 1. Cortex m3 同时支持 Little 和 big endianess。 2. 重置后字节序不能动态改变
所以它间接地告诉重置处理程序中的更改字节顺序设置,是这样吗?
如果是,那么如何改变字节顺序。意味着我需要配置哪个寄存器以及在哪里配置(在重置或异常处理程序中)
改变字节顺序实际上不是个好主意 但出于好奇,我想看看 cortex m3 是否真的支持字节顺序?
Cortex-M 架构 可以配置为支持大端或小端操作。
但是,特定的 Cortex-M 实现 只能支持一种字节顺序——它被硬连接到硅片中,无法更改。我所知道的每个实现都选择了小端。
您需要直接阅读 ARM 文档。技术参考手册涉及到这样的事情。如果您在将 cortex-m3 构建到芯片中时确实拥有 cortex-m3 的源代码,那么您会看到可以触摸的外层和/或配置选项。
来自 cortex-m3 TRM
SETEND always faults. A configuration pin selects Cortex-M3 endianness.
然后我们在另一次点击中获得它:
The processor contains a configuration pin, BIGEND, that enables you to select either the little-endian or BE-8 big-endian format. This configuration pin is sampled on reset. You cannot change endianness when out of reset.
从技术上讲,可以构建一个您可以选择的芯片,它可以设计为连接到 BIGEND 的外部带,它可以是一些保险丝或其他非易失性的东西,您可以触摸它们然后弹出重置在 ARM 内核上,可能有一些其他处理器或逻辑来管理 ARM 内核的启动,并且在 ARM 内核上释放重置之前,您可以与之交谈或对其进行编程。
一般来说,违背架构默认字节顺序的原则是个坏主意。特别是 ARM,现在有两种口味,后者 (BE-8) 更痛苦(比 BE-32)。诚然除了 gcc 之外还有其他工具链,但即使对于绝大多数用户来说,绝大多数间接测试都是在本机(小端)模式下进行的。甚至想知道逻辑是如何真正测试的,ARM 设计验证之外的任何人实际上都在推动该模式吗?他们测试得足够努力了吗?
您是否尝试过实际构建大端 cortex-m3 代码?由于 cortex-m 是一个 16 位指令集(带有 thumb2 扩展),这对 BE-8 有何影响。在带有 ARM 指令的全尺寸 ARM 上使用 BE-8,32 位数据交换,但 32 位指令不交换。也许这是在 TRM 中,我应该阅读更多内容,但它在 cortex-m 上的工作方式是否相同? 16 位指令不交换但数据交换?在带有拇指指令的全尺寸手臂上怎么样?工具链是否符合硬件的预期?
顺便说一句,这意味着当您围绕 cortex-m3 构建芯片时,在您接口的逻辑中有一个名为 BIGEND 的信号,您可以进入该逻辑并更改 BIGEND 的默认设置(我假设他们提供了一个)或者正如我上面提到的那样,您可以在芯片中添加逻辑以使其成为运行时选项而不是编译时。