2

ARMv6 引入了一个很棒的特性——未对齐的内存访问,这使得代码中的一些事情变得更加简单和快速。但是微软只在winCE6中为其提供API。现在大多数 PDA 基于 WinMobile6(在 CE 5.x 上)。默认情况下禁用未对齐访问:(

我尝试在 CP15 寄存器中设置未对齐标志,但这不起作用 - 我在读取未对齐数据时崩溃了。

是否可以在 WinMobile6 上启用非对齐访问?


编辑:我找到了可以启用非对齐访问的工具,但我想从我的代码中打开/关闭它。它是nueAdvancedProcessor

4

2 回答 2

3

有一个未对齐的访问标志(CP15 控制寄存器中的 U 位)和一个对齐错误检查器(A 位)。确保您拥有适合您想要做的事情的正确组合。特别是,如果设置了 A 位,则所有未对齐的访问都将导致数据中止异常,即使您打开了 U 位。查看 ARM 文档 - 全部可在http://www.arm.com上找到。

特别是,您需要 ARM 体系结构参考手册中的第 A2.8.2 节“ARMv6 系统中的未对齐数据访问”。文档编号 ARM DDI 0100I。它的标题是“ARMv5 架构参考手册”,但包含最初的 ARMv6 信息。我希望这个链接有效:http: //infocenter.arm.com/help/topic/com.arm.doc.ddi0100i/index.html

于 2009-10-02T18:01:54.917 回答
0

如果由于 STM32F7 或 Cortex-ARMv6、ARMv7 或 ARVv8 上的内存访问未对齐而导致硬故障,请参阅以下链接以获取 IAR 应用笔记表格。https://www.iar.com/support/tech-notes/general/unexpected-usagefault-or-hardfault-exceptions/

详情请参考这里。https://stackoverflow.com/a/63000125/13735764

于 2020-07-20T16:51:31.937 回答