RXマイコン用 FreeRTOS の依存部分コードを観ていて、疑問に思う場所があります。
ソースは
portable/Renesas/RX600/portmacro.h
で、SWINT を起動する部分です。
#pragma inline_asm vPortYield
/* Save clobbered register - may not actually be necessary if inline asm
}
上記の「553696」は「0x720E0」で、ICUの「ソフトウェア割り込み起動レジスタ(SWINTR)」
と思いますが、起動させる為、バイトで「1」を書いてから、32ビットで読み出しています。
ICUの説明を読んでも、書き込み後に32ビットで読み出す必要がある事は書かれていません。(RX64Mのハードウェアーマニュアル)
そもそも、SWINT を起動するなら、DTC用に用意してあるハードを叩かなくても、
「INT #27」のアセンブラ命令を実行すれば良いように思います。
何故、このような実装になっているか判る方いますか?
hirakuni45さん、こんにちは。NoMaYです。hirakuni45さんがQiitaに投稿されたFreeRTOSの記事があることに気付いて読ませて頂いたのですが、そこに以下のことが書かれていることに気付きました。実は、RXマイコンのMPU(メモリプロテクションユニット)を有効にしてFreeRTOSを動かしてみたいな、と以前から思っていたのですが、その為には、そもそもタスクをユーザモードで動かさないといけないので、以下のようにした理由(もしも他にも何かFreeRTOSでのRXマイコンのユーザモード/スーパバイザモードに関して遭遇したことがあればそれも)を教えて頂けると嬉しいです。「RXマイコンの場合、FreeRTOSの起動時、「スーパーバイザモード」にしておく必要があり、自前の「start.s」に手を加えて、ユーザーモードに移行する部分をバイパスする仕組みを追加しています。」ちなみに、MPUに関しては、かふぇルネの以下のスレッドに幾つか投稿したことがあって、全く知らないという訳では無い、です。RX631のメモリプロテクションユニットの件japan.renesasrulz.com/cafe_rene/f/forum5/4537/rx631RX631スタック領域等を保護するには?japan.renesasrulz.com/cafe_rene/f/forum5/4648/rx631