5

我的理解是,ARMv7處理器(如Cortex-A9)大多向後兼容舊ARM體系結構版本的代碼。不過,我讀過例如segfaults trying to run ARM9 code on a Cortex-A8的報告。ARMv4/5/6代碼的哪些部分不適用於ARMv7?

ARMv4/5/6(ARM7TDMI/ARM9/ARM11)代碼的哪些部分在ARMv7處理器上不起作用?這些較舊的ARM體系結構版本中存在哪些功能或體系結構特性,可能會導致爲這些版本構建的程序在ARMv7上失敗?

+0

http://infocenter.arm.com您需要這個問題的所有文檔都在那裏,請參閱體系結構參考手冊和技術參考手冊。 –

+0

這有點太複雜了,有人可以將這些信息提取到容易理解的地方嗎?我正在尋找一個答案,比如「舊的ARM代碼通常運行在ARMv7處理器上,但以下例外......」 – bwDraco

+1

您是否閱讀過ARMv7a體系結構參考手冊的附錄「M」和「O」?他們似乎給你最接近的答案,你正在尋找。 –

回答

3

對於應用程序代碼,主要問題是未對齊的內存訪問。在ARMv4之前並且可以在ARMv4到ARMv6上進行配置,來自未對齊地址的LDR加載將在讀取數據中旋轉,並且其他內存訪問的行爲就好像最低有效2位爲零。

+1

也就是說,實際上,在[這個問題]中看到的行爲(http://stackoverflow.com/questions/12451230/output-from-arbitrary-dereferenced-指針)。實質上,你是說鏈接問題的OP的旋轉輸出是ARMv6及更早版本的特徵,並且相同的代碼會在ARMv7上崩潰? – bwDraco

3

爲arm指令編譯armv4應該一直工作。

除了不對自己的主題進行研究(花費更長的時間避免研究它而不是研究它)之外,您的問題的真正問題在於大部分代碼可能希望從一個平臺到下一個平臺與外設而不是指令集有關。你的大部分代碼不會由於指令集而移植,而是因爲定時器,飛鏢,視頻和USB控制器等。這些不是wintel盒子,他們不試圖反向兼容。

你真的鏈接的問題有沒有肉給它,因爲OP didnt把任何代碼下來沒有做對主題的任何工作,至少沒有公開的計算器,它可能是糟糕的代碼一個簡單的例子,並沒有什麼可使用處理器內核,或者可能是外圍設備不在那裏並訪問這些外設的情況下,可能會出現掛起或崩潰。

相關問題