コンテキストスイッチに関するインラインアセンブリ命令について別の質問があります。このコードは機能するかもしれませんが、100%かどうかわからないので、このコードをstackoverflowのプロに送信します;-)
arm7TDMIにgcc(最適化なし)を使用してコンパイルしています。ある時点で、コードはコンテキスト切り替えを実行する必要があります。
/* Software Interrupt */
/* we must save lr in case it is called from SVC mode */
#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr")
// Note : code = 0x23
コンパイルされたコードを確認すると、次の結果が得られます。
svc 0x00000023
これをコーディングした私の前の人は「lrを保存する必要があります」と書いていますが、コンパイルされたコードでは、lrが保存されている痕跡は見当たりません。
コードが間違っている可能性があると思う理由は、リセット例外が発生する前にプログラムがしばらく実行され、コードが最後に実行するのはコンテキストスイッチであるためです...