据我了解,像Cortex-A9这样的ARMv7处理器通常与旧版ARM体系结构的代码大多数兼容。但是,例如在尝试在Cortex-A8上运行ARM9代码时报告了段错误。
ARMv4/5/6 (ARM7TDMI/ARM9/ARM11)代码中哪些部分不能在ARMv7处理器上工作?存在哪些功能或架构特征,可能导致为这些版本构建的程序在ARMv7上失效?
据我了解,像Cortex-A9这样的ARMv7处理器通常与旧版ARM体系结构的代码大多数兼容。但是,例如在尝试在Cortex-A8上运行ARM9代码时报告了段错误。
ARMv4/5/6 (ARM7TDMI/ARM9/ARM11)代码中哪些部分不能在ARMv7处理器上工作?存在哪些功能或架构特征,可能导致为这些版本构建的程序在ARMv7上失效?
对于应用程序代码而言,主要问题是未对齐的内存访问。在ARMv4之前,并可在ARMv4到ARMv6上进行配置,从未对齐地址进行LDR加载将导致读取数据旋转,其他内存访问则会像地址的最低有效2位为零一样。
编译针对ARM指令集armv4的代码应该能够正常工作。
除了您没有研究这个主题(避免研究它的时间比研究它还长)之外,您提出的问题的真正问题是,您可能希望从一个平台移植到另一个平台的大部分代码与外围设备有关,而不是指令集。大多数代码无法移植,不是由于指令集,而是由于定时器、UART、视频和USB控制器等。这些不是Wintel盒子,它们不试图实现反向兼容性。
您链接的问题实际上没有实质内容,因为OP没有放置任何代码,在stackoverflow上也没有公开讨论过这个问题,这可能是糟糕的代码,与处理器核心无关,或者可能是不存在的外围设备和访问这些设备,人们会期望挂起或崩溃。