-1
使用編譯器選項,是否可以限制例程使用某些寄存器組? 例如限制例程僅使用R0-R8;ARM:限制例程使用有限的寄存器
目的:如果某些編譯器選項可用,那麼我可以確保某些例程(如中斷服務例程)只使用有限的寄存器集,從而限制上下文保存還原。
使用編譯器選項,是否可以限制例程使用某些寄存器組? 例如限制例程僅使用R0-R8;ARM:限制例程使用有限的寄存器
目的:如果某些編譯器選項可用,那麼我可以確保某些例程(如中斷服務例程)只使用有限的寄存器集,從而限制上下文保存還原。
When this was last discussed,一致認爲,這是不可能在逐個功能的基礎上。
可以在整個編譯過程中限制寄存器的使用,所以如果你把中斷例程放在一個單獨的編譯單元中,你可以使用the gcc
switch -ffixed-reg
。如果您希望編譯器不使用R0
生成代碼,我相信它將用於像-ffixed-R0
。
這是關於[寄存器和線程]的類似問題(http://stackoverflow.com/questions/16718484/is-it-possible-to-share-a-register-between-threads)。由於它涉及ARM,IRQ已經擁有了'sp'和'lr'。 [FIQ](http://stackoverflow.com/questions/973933/what-is-the-difference-between-fiq-and-irq-interrupt-system)有更多的存儲寄存器,它可能是你的解決方案。也可以使用'-ffixed-reg'。按照第一個鏈接,當你保留這樣的**通用**寄存器時,你將阻礙編譯器並強制它在大多數函數中使用內存。 – 2014-10-30 15:38:31