Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 3 months ago.
HardFault code execution of SDRAM / SDRAMのコード実行でHardFault
This Question is continue of Can I execute code from SDRAM? / SDRAMに配置したコードを実行したい.
I can now execute from SDRAM. But, code execution is unstable .
breakpoint was placed in the assembler level. Then the code is executed as it was intended. I remove the breakpoint. Then HardFault occurs.
I think cause is different from the operating clock of SDRAM(60MHz) and MCU(120MHz). I have aligned them with 72Mhz. But symptoms did not change.
To me it was not possible causes other than the setting of the clock. Please help me.
Can I execute code from SDRAM? / SDRAMに配置したコードを実行したい の続きです。
上記質問のあと、SDRAM上のコードを実行ができるようになりました。 しかし、コードの実行が不安定です。
アセンブラレベルでブレークポイントをおいて逐次実行するとちゃんと動くのですが、 ブレークポイントなくすと HardFault が発生してしまいます。
SDRAMのクロック(60MHz)とMCUのクロック(120MHz)があっていないのが原因かと思い 試しに SDRAMもMCUも72MHzで揃えてみましたが、改善しませんでしたので、的外れだったようです。
とはいえ、他にブレークポイントの有無で挙動が変わる原因が想定できませんでした。 何か心当たりのある方いらっしゃいませんでしょうか。
1 Answer
9 years, 3 months ago.
こんばんは。
メモリアクセスに関連しているようですので、DMB等のバリア命令を挿入してみては如何でしょうか? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0321a/BIHBGGHF.html
HardFault しなくなるトリガーがわかりました。ブレークポイントの有無は関係なくて、 デバッガで Disassembly を実行したあとでSDRAMのコードを実行するとちゃんと動いて Disassembly せずに実行すると HardFault するようです…。
SDRAMにロードするコードのサイズを大きくすると Disassembly しても動かないので、これをすれば大丈夫。というわけでもなさそうです。
同クロックにしてもSDRAMがMCUについてこれていない可能性を考慮して SDRAMを最大クロックである80MHzに、MCUを最小クロックである12MHzにしてみましたが、症状は変わりませんでした。
posted by Kazutomo Niwa 23 Jul 2015