ToppersDevel

TOPPERSの環境構築
 
&counter([total|today|yesterday]); - 0 - 0 - 19
 

基本的には文末のほうが古い情報です。



TOPPERS概論

コンパイルの流れ

  1. コンフィギュレーションファイル(.cfg)に生成したいタスクの情報を書く
  2. 定義したタスクの処理本体である関数を(.c)に記述する。 プロトタイプは(.h)に記述する。
  3. コンフィギュレータがkernel_cfg.c, kernel_chk.c, kernel_id.hを生成する。
  4. make

システム構築の考え方

タスク管理機能

生成したタスクの状態は以下のように変化する

  1. 生成したタスクを、まずDORMANT状態にする
  2. act_tskサービスコールの発行で、指定したタスクがREADY状態になる
    起動時にREADY状態にするには、タスク生成オプション(CRE_TSK静的API内)でTA_ACTを指定する。
    一般的には唯一のタスクを自動起動にして、そのタスクからサブシステムのタスクを起動すると良い。
  3. 設定された優先順位に従って、タスクがRUINNING状態になる
  4. タスクへ制御を移す。タスクの処理をした後、以下の選択肢がある
    1. DORMANT状態に移行する->ext_tsk
    2. WAITING状態(起床待ち)->slp_tsk
    3. WAITING状態(資源待ち)->wai_sem
    4. WAITING状態(イベント待ち)->wai_flg
    5. WAITING状態(メッセージ待ち)->rcv_dtq
タスク管理機能
CRE_TSK静的API
ER act_tsk(ID tskid);タスク起動
ER iact_tsk(ID tskid);タスク起動(タスク外で使用)
ER_UINT can_act(ID tskid);処理要求キューの中にある、タスク起動要求のキャンセル
void ext_tsk(void);タスクの終了
ER ter_tsk(ID tskid);タスクの強制終了(DORMANT状態になる)
ER chg_pri(ID tskid, PRI tskpri);タスク優先度の変更
ER get_pri(ID tskid, PRI *p_tskpri);タスク優先度の参照
タスク付属同期機能
ER slp_tsk(void);起床待ち
ER tslp_tsk(TMO tmout);起床待ち(タイムアウトあり)
ER wup_tsk(ID tskid);タスクの起床
ER iwup_tsk(ID tskid);タスクの起床(タスク外で使用)
ER_UINT can_wup(ID tskid);タスクの起床要求を無効化
ER rel_wai(ID tskid);待ち状態の強制解除(READY状態になる)
ER irel_wai(ID tskid);待ち状態の強制解除(READY状態になる)(タスク外で使用)
ER sus_tsk(ID tskid);強制待ち状態への以降(WAITING状態になる?)
ER rsm_tsk(ID tskid);強制待ち状態からの再開(READY状態になる?)
ER frsm_tsk(ID tskid);強制待ち状態で再開(WAITING状態?)
ER dly_tsk(RELTIM dlytim);自タスクの遅延
タスク例外処理機能
DEF_TEX静的API
ER ras_tex(ID tskid, TEXPTN rasptn);タスク例外処理の要求
ER iras_tex(ID tskid, TEXPTN rasptn);タスク例外処理の要求(タスク外で使用)
ER dis_tex(void);タスク例外処理の禁止
ER ena_tex(void);タスク例外処理の許可
BOOL sns_tex(void);タスク例外処理の禁止状態の参照

タスク外とは、ハンドラ内や拡張サービスルーチン内を指す。

main()とコンフィギュレータ

そもそも組込みソフトでmain()は意味が無い。
最初のタスクの起動は、静的に(コンパイル時に)行う。
静的に行うのは面倒なので、コンフィギュレータが導入された。 コンフィギュレーションファイル(.cfg)の記述は静的APIを使う。
sample1.cfgを参照すると良い。

/*
 *  @(#) $Id: sample1.cfg,v 1.7 2003/01/06 08:08:26 hiro Exp $
 */

/*
 *  サンプルプログラム(1)のシステムコンフィギュレーションファイル
 */

#define _MACRO_ONLY
#include "sample1.h"

INCLUDE("\"sample1.h\"");
CRE_TSK(TASK1, { TA_HLNG, (VP_INT) 1, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK2, { TA_HLNG, (VP_INT) 2, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK3, { TA_HLNG, (VP_INT) 3, task, MID_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(MAIN_TASK, { TA_HLNG|TA_ACT, 0, main_task, MAIN_PRIORITY,
			STACK_SIZE, NULL });
DEF_TEX(TASK1, { TA_HLNG, tex_routine });
DEF_TEX(TASK2, { TA_HLNG, tex_routine });
DEF_TEX(TASK3, { TA_HLNG, tex_routine });
CRE_CYC(CYCHDR1, { TA_HLNG, 0, cyclic_handler, 2000, 0 });
#ifdef CPUEXC1
DEF_EXC(CPUEXC1, { TA_HLNG, cpuexc_handler} );
#endif /* CPUEXC1 */

#include "../systask/timer.cfg"
#include "../systask/serial.cfg"
#include "../systask/logtask.cfg"

周期起動タスク

メールボックスの使い方

割込みハンドラからタスクへの情報通知

コンパイル方法

高橋メモ

FDAU TOPPERS memo 2004/9/29 takahashi

  1. target
    AKI-H8/3069F-LAN
    CPU: H8-3069F CLK20MHz MODE5
    ROM: 内蔵512KB 000000h-007FFFh
    RAM: 内蔵 16KB FFBF20h-FFFF1Fh
    RAM: 外部DRAM 8bit幅 CS2 2MB 400000h-5FFFFFh
    RS232C: SCI0(JP1、線を引き出しDsub9を半田付け), SCI1(Dsub9)
    LAN: RTL8019AS 8bit幅 CS1 32B 200000h-20001Fh
  2. tool-chains
    elf形式の、CとC++のコンパイラをつくろうとしたが、 コンパイルできなかったので、あきらめる。 coff形式のCコンパイラを作成する。 TOPPERS/JSP kernel をコンパイルするには、これがあればいいらしい。 Cygwin環境にて構築
     binutils-2.13.2.tar.bz2
     gcc-3.2.1-core.tar.bz2
     h8300-hms-gcc-3.1-1.patch	http://h8300-hms.sourceforge.net/
     newlib-1.11.0.tar.gz
     gdb-5.2.1.tar.bz2
    1. binutils
      オプション --disable-nls (国際化メッセージ無効)はTOPPERS/JSPのカーネルの コンパイルに必要。
      tar xfj binutils-2.13.2.tar.bz2
      cd binutils-2.13.2
      mkdir objdir
      cd objdir
      ../configure --prefix=/usr/local --target=h8300-hms --disable-nls
      make CFLAGS="-O2 -fomit-frame-pointer" all
      make install
    2. gcc and newlib
      Cコンパイラ以外は必要ないのでgcc-coreを使う。 newlibは組み込み用ライブラリ コンパイルには、かなり時間がかかる。
      export PATH=$PATH:/usr/local/bin
      tar xfj gcc-3.2.1-core.tar.bz2
      tar xfz newlib-1.11.0.tar.gz
      cd gcc-3.2.1
      ln -s ../newlib-1.11.0/newlib .
      patch -p1 < ../h8300-hms-gcc-3.1-1.patch
      mkdir objdir
      cd objdir
      ../configure \
              --prefix=/usr/local --target=h8300-hms \
              --enable-languages=c --with-newlib
      make CFLAGS="-O2 -fomit-frame-pointer" all
      make install
    3. gdb
      TOPPERS/JSPカーネル構築に必要ないので後回しにしてよい。
       
      GDBのソースコードを展開したディレクトリ以下の ./gdb/config/h8300/tm-h8300.h を以下のように修正
      L62	#define TARGET_INT_BIT  32
      L155	#define ARGLAST_REGNUM	1
       
      tar xfj gdb-5.2.1.tar.bz2
      cd gdb-5.2.1
      mkdir objdir
      cd objdir
      ../configure --prefix=/usr/local --target=h8300-hms
      make CFLAGS="-O2 -fomit-frame-pointer" all
      make install
  3. TOPPERS/JSP kernel
    jsp-1.4.tar.gzを入手する。 http://www.toppers.jp/jsp-download.html documentはjsp/docにある。
    とりあえずコンパイルしてみる。
    最初にjsp/cfgに移動し、make cfg(.exe) と chk(.exe) を生成する。
    cd ../
    mkdir akih83hms
    cd akih83hms
    ../configure -C h8 -S akih8_3069f
    でコンフィグレーションされる。 configureはperlスクリプトなのでperlつかえないとダメ。
    make depend
    make
    で、カーネル(jsp.exeとjsp.srec)がmakeされる。
  4. TOPPERS/JSP-tinet
    tinet-1.2.tar.gzを入手する。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS