FreeRTOS のコードについて質問

RXマイコン用 FreeRTOS の依存部分コードを観ていて、疑問に思う場所があります。

ソースは

portable/Renesas/RX600/portmacro.h

で、SWINT を起動する部分です。

#pragma inline_asm vPortYield

static void vPortYield( void )
{

/* Save clobbered register - may not actually be necessary if inline asm

functions are considered to use the same rules as function calls by the
compiler. */
PUSH.L R5
/* Set ITU SWINTR. */
MOV.L #553696, R5
MOV.B #1, [R5]
/* Read back to ensure the value is taken before proceeding. */
MOV.L [R5], R5
/* Restore clobbered register to its previous value. */
POP R5

}

上記の「553696」は「0x720E0」で、ICUの「ソフトウェア割り込み起動レジスタ(SWINTR)」

と思いますが、起動させる為、バイトで「1」を書いてから、32ビットで読み出しています。

ICUの説明を読んでも、書き込み後に32ビットで読み出す必要がある事は書かれていません。(RX64Mのハードウェアーマニュアル)

 

そもそも、SWINT を起動するなら、DTC用に用意してあるハードを叩かなくても、

「INT #27」のアセンブラ命令を実行すれば良いように思います。

 

何故、このような実装になっているか判る方いますか?

Parents
  • hirakuni45さん、こんにちは。NoMaYです。

    hirakuni45さんがQiitaに投稿されたFreeRTOSの記事があることに気付いて読ませて頂いたのですが、そこに以下のことが書かれていることに気付きました。実は、RXマイコンのMPU(メモリプロテクションユニット)を有効にしてFreeRTOSを動かしてみたいな、と以前から思っていたのですが、その為には、そもそもタスクをユーザモードで動かさないといけないので、以下のようにした理由(もしも他にも何かFreeRTOSでのRXマイコンのユーザモード/スーパバイザモードに関して遭遇したことがあればそれも)を教えて頂けると嬉しいです。


    RXマイコンの場合、FreeRTOSの起動時、「スーパーバイザモード」にしておく必要があり、自前の「start.s」に手を加えて、ユーザーモードに移行する部分をバイパスする仕組みを追加しています。


    ちなみに、MPUに関しては、かふぇルネの以下のスレッドに幾つか投稿したことがあって、全く知らないという訳では無い、です。

    RX631のメモリプロテクションユニットの件
    japan.renesasrulz.com/cafe_rene/f/forum5/4537/rx631

    RX631スタック領域等を保護するには?
    japan.renesasrulz.com/cafe_rene/f/forum5/4648/rx631
     

Reply
  • hirakuni45さん、こんにちは。NoMaYです。

    hirakuni45さんがQiitaに投稿されたFreeRTOSの記事があることに気付いて読ませて頂いたのですが、そこに以下のことが書かれていることに気付きました。実は、RXマイコンのMPU(メモリプロテクションユニット)を有効にしてFreeRTOSを動かしてみたいな、と以前から思っていたのですが、その為には、そもそもタスクをユーザモードで動かさないといけないので、以下のようにした理由(もしも他にも何かFreeRTOSでのRXマイコンのユーザモード/スーパバイザモードに関して遭遇したことがあればそれも)を教えて頂けると嬉しいです。


    RXマイコンの場合、FreeRTOSの起動時、「スーパーバイザモード」にしておく必要があり、自前の「start.s」に手を加えて、ユーザーモードに移行する部分をバイパスする仕組みを追加しています。


    ちなみに、MPUに関しては、かふぇルネの以下のスレッドに幾つか投稿したことがあって、全く知らないという訳では無い、です。

    RX631のメモリプロテクションユニットの件
    japan.renesasrulz.com/cafe_rene/f/forum5/4537/rx631

    RX631スタック領域等を保護するには?
    japan.renesasrulz.com/cafe_rene/f/forum5/4648/rx631
     

Children
No Data