株式会社ルネサス北日本セミコンダクタ

Smalight FAQ

Smalightユーザーの皆様からよく寄せられる質問についての回答です。以下の質問を選択すると回答が表示されます。 TCP/IP, SDK につきましては只今準備中ですのでいましばらくお待ちください。

Q&A

区分 質問
共通 どこで購入できるのか?
標準価格はいくらか?
納期はどのくらいか?
カタログが欲しい。
見積書が欲しい。
購入後のサポートについて保守は無償か?
Smalight OS V2
OS SVC サービスコール中は割込みを受け付けますか?
構築 プライオリティタスクとローテーションタスクの定義がわからない
ビルド時にワーニングが出力されます!
Smalight OS V1
OS 割込み 割込み受付サンプルはなぜ3類必要なの?
同じ割込みだけど、ディスパッチしたいときとディスパッチしたくないときがあるのですが?
割込みがタスクスタックに依存しているのでは?
ノンマスカブル割込のサンプルがおかしいのでは?
スタック タスクスタックの計算方法がわかりません
OSスタックの計算方法は?
uinitのスタックはどうなってるの?
割込みスタックの計算方法は?

●Q. どこで購入できるのか?

(株)ルネサステクノロジ製半導体製品を扱っております販売会社・特約店からご購入頂けます。

URL : http://japan.renesas.com/fmwk.jsp?cnt=/eigyou_kyoten.htm&fp=/support/purchasing_info/child_folder&site=i& title=%E5%9B%BD%E5%86%85%E5%96%B6%E6%A5%AD%E4%B8%80%E8%A6%A7>
ご不明な点は、ソフトサポートsoft.support@kitasemi.renesas.com までお問合わせください。
ページトップへ

●Q. 標準価格はいくらか?

ソフトサポートsoft.support@kitasemi.renesas.comまでお問合わせください。
ページトップへ

●Q. 納期はどのくらいか?

ご注文頂いてから2週間です。
ページトップへ

●Q. カタログが欲しい。

Smalightダウンロードコーナーからカタログをダウンロードできます。
そちらをご参照ください。
ページトップへ

●Q. 見積書が欲しい。

(株)ルネサステクノロジ製半導体製品を扱っております販売会社・特約店にご依頼ください。

URL : http://japan.renesas.com/fmwk.jsp?cnt=/eigyou_kyoten.htm&fp=/support/purchasing_info/child_folder& site=i&title=%E5%9B%BD%E5%86%85%E5%96%B6%E6%A5%AD%E4%B8%80%E8%A6%A7

ご不明な点は、ソフトサポートsoft.support@kitasemi.renesas.comまでお問合わせください。
ページトップへ

●Q. 購入後のサポートについて保守は無償か?

有償にてサポート致します。
ご不明な点は、ソフトサポートsoft.support@kitasemi.renesas.comまでお問合わせください。
ページトップへ

●Q. サービスコール中は割込みを受け付けますか?(V2)

コンフィグレーションにて、カーネルマスクレベル(OS動作中の割込みマスクレベル)を定義することができます。 カーネルマスクレベルより高い優先度の割込みはサービスコール中でも受け付けることができます。

但し、カーネルマスクレベルより高い優先度の割込みはdisp無割込みとして実装する必要があります。 disp無割込みからはOSのサービスコールは発行できません。

※ 多重割込みがサポートされていないデバイスではカーネルマスクレベルという概念はサポートされません。
ページトップへ

●Q. プライオリティタスクとローテーションタスクの定義がわからない(V2)

コンフィグレーションにて、タスク数(KNL_TCB_NUM)とプライオリティタスク数(KNL_TCB_PRI_NUM)を指定します。 実際はどのタスクがプライオリティタスクで、どのタスクがローテーションタスクになるかを下記例で説明します。

[config.c]
/*------ TCB Number ------------------------------------------*/    

#define KNL_TCB_NUM         4

#ifdef KNL_BB_PRIORITY

#define KNL_TCB_PRI_NUM     2

#endif

         (中略)

const TCBADDR knl_tcbAddrInit[KNL_TCB_NUM] = {

   { tsk01    },                                     /* TCB1   */

   { tsk02    },                                     /* TCB2   */

   { tsk03    },                                     /* TCB3   */

   { tsk04    }                                      /* TCB4   */

};

タスクIDは1から順に連続で割り当てられます。タスク優先度はプライオリティタスクについてはタスクIDと同一になり ローテーションタスクについては、最低優先度となり、全て優先度は同一になります。タスク優先度は小さい程高くなります。

この場合、プライオリティタスクが tsk01 , tsk02 、ローテーションタスクが tsk03 , tsk04 となります。
ページトップへ

●Q. ビルド時にワーニングが出力されます!(V2)

Smalight OSのワークスペースを開いて、なにも変更せずにビルドすると以下のワーニングが出力されます。

L1100 (W) Cannot find "C" specified in option "start"

このワーニングはCセクションが存在しないのに、セクション定義されていますという意味のワーニングになります。 Cセクションとは const型のデータを格納する定数領域です。提供するサンプルプログラムの雛形に、たまたま、Cセクションが含まれない ためワーニングが出力されます。

コーディングを進めることでたいていCセクションが生成されるため本ワーニングは無視して頂いて問題ないと思いますが、 リンカの設定に含まれるセクション定義からCセクションを削除することで回避できます。
ページトップへ

●Q. 割込み受付サンプルはなぜ3類必要なの?(V1)

Smalight OSでは特徴/用途から以下の3種類の割込みの概念を用いております。
  • 通常割込み(マスカブル割込)
  • ディスパッチ有割込み(マスカブル割込)
  • ノンマスカブル割込
割込み受付のサンプルとしては、通常割込み(マスカブル割込)が共通に使用できますが、 この様な種類分けすることでROMサイズと割込みスタックのサイズを節約することができます。
ページトップへ

●Q. 同じ割込みだけど、ディスパッチしたいときとディスパッチしたくないときがあるのですが?(V1)

この場合は、割込み受付は「通常割込み(マスカブル割込)」のサンプルを利用してください。割込み処理はこの様にコーディングすると実現できます。

[H8/300Hの場合]
void intProc1(B *sp)

{

    if( 条件 ) {

        /* ディスパッチする場合 */

        if(cTCB != 0)

            TCBsp[cTCB-1] = sp;



        disp();

    } else {

        /* ディスパッチしない場合 */      

        ;

    }

}

disp()を発行すると割込み処理から直接ディスパッチャへ処理が移り、発行元には戻りません。
ページトップへ

●Q. 割込みはタスクスタックに依存しているのでは?(V1)

一見、タスクスタックをそのまま使用している様に見えますが、 INTPOP/INTPUSHマクロ内部で割込みスタックにスタックを切り替えを行なっております。 slos.inc を確認してみてください。
ページトップへ

●Q. ノンマスカブル割込のサンプルがおかしいのでは?(V1)

本サンプルは1本のノンマスカブル割込みだけが発生する環境でのみ正常に動作します。

INTPOPマクロはスタック退避した後、スタックを割込みスタックに切り替えます。 ノンマスカブル割込みはマスク不可能な為、割込み処理中、またはOS処理中にも発生します。 そのため、割込み処理中にスタック切り替えすると使用中の割込みスタックを上書きするという現象が発生します(スタック破壊)。

ノンマスカブル割込み中にスタック切り替え、ディスパッチ処理への遷移は禁止されております。

実装する際は、@INTPOP/INTPOPマクロをカスタマイズし、スタック切り替えが発生しない様にする。 または A専用の割込みスタックを作成した上で、INTPOP/INTPOPマクロをカスタマイズしてそれを使用する。 等の方法があります。
ページトップへ

●Q. タスクスタックの計算方法がわかりません(V1)

Smalightサイズ算出サービスで、 希望するCPUのタスク最低スタックサイズを取得できます

そこで記載されるタスク最低スタックサイズは、タスク毎に必要になるスタックの最低スタックサイズです。 タスクの最低スタックサイズとは、タスクからOSサービスコール発行と割込み発生を前提した場合に使用するスタック使用量の最大値を指します。

タスクスタックの計算方法は、関数ネストと各関数のスタック使用量を調査し一番最大になるサイズに、 タスクの最低スタックを加えたものです。

ex) H8/300H Tinyでのタスクスタック計算例
最低スタック
サイズ
64byte
task_01( )
16byte
print( ) 20byte    
cpy_data( ) 34byte
open( ) 28byte  
この場合タスクの最大スタックが 16+34 = 50バイト。 それに最低スタックサイズを加えて 50 + 64 = 114 バイトがタスクスタックサイズです。

例えば、H8系ではルネサス製コンパイラパッケージに callwalker というスタック計算ツールがありますので、 併用することで簡単に計算できます。
ページトップへ

●Q. OSスタックの計算方法は?(V1)

OSスタックはOSで使用されます。OSスタックを使用する処理は以下の通りです。
  • OSメイン処理
  • アイドルタスク(+割込み発生)
  • リセット処理 uinit()
  • タスクスタックの初期化 stack_init()
OSメイン処理、及び、アイドルタスク処理(+サンプルで示す割込み処理)は、 サイズ情報 が示すOSの最低スタックサイズで処理可能です。 uinit() と stack_init () で使用するスタックサイズがOSの最低スタックサイズを超えるような場合は、 OSスタックのサイズを変更する必要があります。

uniit()とstack_init()を呼び出すとき、OSメイン処理からジャンプサブルーチンコールされます。 MCUによってジャンプサブルーチンのスタック使用量は異なりますが、その分余計に必要です。
ページトップへ

●Q. uinitのスタックはどうなってるの?(V1)

OSスタックを使用しております。 ここで説明しているOSスタックサイズを、 uinit()のスタックが超える場合、OSスタックを変更してください。
ページトップへ

●Q. 割込みスタックの計算方法は?(V1)

@INTPUSH BINTPOPは、割込み発生元(タスク、またはOS)のスタックを使用して、 最後に割込みスタックへの切り替えを行なっております。
Aが割込みスタックを使用している個所になります。A部分のスタック使用量を計算してください。

ex) H8/300H,H8/300H Tinyの場合
_int1:
    INTPUSH  ;  register save @
;
    MOV.L     ER0,@-ER7  ;  user stack save A
    JSR       @_intProc1  ;  call interrupt proc    A
  MOV.L     @ER7+,ER0  ;  user stack load A
;
    INTPOP   @ER7+,ER0  ;  register load B

ページトップへ