如何在WinMobile6上启用ARMv6未对齐访问?

时间:2009-08-23 15:44:36

标签: memory windows-mobile assembly arm low-level

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

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

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


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

2 个答案:

答案 0 :(得分:1)

存在未对齐的访问标志(CP15控制寄存器中的U位)以及对齐故障检查器(A位)。确保您有适合自己想做的事情的组合。特别是,如果设置了A位,即使您将U位置ON,所有未对齐的访问都将导致数据中止异常。查看有关的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

答案 1 :(得分:0)

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

有关详情,请参阅此。 https://stackoverflow.com/a/63000125/13735764