mtkernel_3
mtkernel_3 copied to clipboard
ARMv7-M 版の問題点
v3.00.05 を使用して ARMv7-M の機種へ移植した際に見つけた問題点です。 ご確認いただければと思います。 取り込めるものを指定していただければ、develop からのブランチに構成し直します。
(1) 一時スタックサイズ変更 config/config.h: #define CNF_TMP_STACK_SIZE (256) → (2048) 一時スタックは、割込ハンドラで使用されることがあるので、256 は少なすぎる。 割込ハンドラで使用されることを考慮し、CNF_EXC_STACK_SIZE と同じ 2048 とした。
(2) FPU コンテキスト削除処理のバグ修正 kernel/sysdepend/cpu/core/armv7m/cpu_task.h: knl_cleanup_context() CONTROL.FPCA をクリアする処理にミスがあったので修正。 (誤) control &= (1<<2); (正) control &= ~(1<<2); →これは v3.00.07 で修正されたようです。
(3) tk_set_reg() のバグ修正 kernel/sysdepend/cpu/core/armv7m/cpu_cntl.c: knl_set_reg() FPU を使用したタスクに対して tk_set_reg() を行うと、タスクコンテキスト(スタ ック)を壊してしまうバグを修正。 コンテキスト(スタック)の位置(アドレス)が間違っていた。 tk_get_reg() の方は正しかったので、修正漏れか何かだと思われる。