TOPへ 1. モータの使用

0.プログラムをつくる


導入編では、サンプルプログラムを動かしてみました。今度は自分でプログラムを作ってみましょう。


1.作成の準備

プログラムを保存しておくためのディレクトリ(フォルダ)を作成します。
nxtOSEKでは、プログラムをコンパイルするためには複数のファイルが必要となり、実行ファイル作成時にも数個のファイルが作られるので、作成するプログラム毎にディレクトリを分けをするのが一般的です。
演習室環境では、ホームディレクトリ内(Zドライブ)に適当なディレクトリ(例えば nxtOSEK というディレクトリ)を作って、それ以下にプログラム毎のディレクトリを作成するのがよいでしょう。
ただし oil ファイルや Makefile がほぼ共通の場合は、同じディレクトリに異なるソースファイルをを置くこともあります。


2.材料をそろえる

nxtOSEKでは、プログラムのコンパイルのためにソースファイル、oilファイル、makeファイル(Makefile)の3つのファイルが必要です。

各ファイルの役割は、
ソースファイル(*.c)…プログラムの処理を記述するファイル
oilファイル(*.oil)…プログラムをどう動かすか記述するファイル
makeファイル(Makefile)…コンパイルの仕方を記述するファイル
です。

今回は nxtOSEK のディレクトリの中に test というディレクトリを作成し、そこに次の3つのファイルを用意して実行ファイルを作成します。

test.c
#include "kernel.h"
#include "kernel_id.h"
#include "ecrobot_interface.h"

DeclareTask(Task1);

void ecrobot_device_initialize(){}		//OSEK起動時の処理(何もしない)

void ecrobot_device_terminate(){}		//OSEK終了時の処理(何もしない)

void user_1ms_isr_type2(void){}

TASK(Task1)
{
	while(1){
                display_clear(0);
                display_goto_xy(5,3);
                display_string("TASK1");                /* メッセージを表示する */
                display_update();
                systick_wait_ms(1000);                  /* 1秒待つ */

                display_clear(0);
                display_goto_xy(5,5);
                display_string("TASK2");                /* メッセージを表示する */
                display_update();
                systick_wait_ms(1000);                  /* 1秒待つ */
        }

	TerminateTask();					//処理終了
}
test.oil
#include "implementation.oil"

CPU ATMEL_AT91SAM7S256
{
  OS LEJOS_OSEK
  {
    STATUS = EXTENDED;
    STARTUPHOOK = FALSE;
    SHUTDOWNHOOK = FALSE;
    PRETASKHOOK = FALSE;
    POSTTASKHOOK = FALSE;
    USEGETSERVICEID = FALSE;
    USEPARAMETERACCESS = FALSE;
    USERESSCHEDULER = FALSE;
  };

  /* Definition of application mode */
  APPMODE appmode1{}; 

   TASK Task1						/* Task1 を定義する */
  {
    AUTOSTART = TRUE { APPMODE = appmode1; };
    PRIORITY = 1;
    ACTIVATION = 1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
  };

};
Makefile
# Target specific macros
TARGET = test

# User application source(ここにソースファイルの名前を指定する)
TARGET_SOURCES = test.c

# 自分のフォルダから見たnxtOSEKフォルダの場所またはそのフルパスを指定する。ここでは次のフルパスを指定する。
NXTOSEK_ROOT = /nxtOSEK

# OSEK OIL file(ここにoilファイルの名前を指定する)
TOPPERS_OSEK_OIL_SOURCE = ./test.oil

# below part should not be modified
O_PATH ?= build
include $(NXTOSEK_ROOT)/ecrobot/ecrobot.mak

まだ意味の分からない所も多いかと思いますが結構です。
Makefile内では記述されているプログラムの名前やファイル、フォルダの位置が合っているか確認してください。



3.プログラムの編集について

プログラムの作成は cygwin 内で vi コマンドを使って行うか、Windows で Visual Studio Code や TeraPad を使って行います。以下にその際の設定や注意点について説明します。

3.1 cygwin 内の vi で編集する場合

vi でチュートリアルページのプログラムを貼りつけるために、以下のことを行います。
vi の使用法についてはUNIX入門 vi 講座を参照して下さい。
  1. cygwin の上フレームを上でマウスを右クリックして、プロパティを選択し「簡易編集モード」をチェックします。
  2. コピー対象領域を選択し(Ctrl+C)、vi をインサートモードにした状態で右クリックし、選択領域をコピーします。

3.2 Windows 中の エディタを用いる使う場合

Windows では、Visual Stuido Code , Atom, TeraPad 等のエディタを使用して、プログラムの作成・修正を行います。
  1. アプリケーション検索でエディタ(Visual Studio Code, Atom, Terapadのいずれか)を検索・選択します。
  2. cygwin の端末画面内で空のソースファイル、オイルファイル、Makefile を以下のように touch コマンドで作成します。
    touch  test.c  test.oil  Makefile
    
  3. エディタの「ファイルを開く」の「ファイルの種類」で「全てのファイル(*.*)」を選択し、touch したファイルを開きます。
  4. 該当するファイルに上記のファイルの中身をコピー&ペーストして保存します。
なお、cygwin 内の vi とWindows のエディタでは日本語コードの文字コードが異なるため、TeraPad で作成したファイルを vi で開くと日本語が文字化けします(その逆も同様)。


4.課題

1.プログラムのコンパイル・転送・実行を参考にサンプルプログラムをダウンロードし、動作させて下さい。1秒毎にLCD上で Task1 と Task2 の表示が入れ替わることが確認できれば成功です。
なお、このリンクページではビルドについては、プログラムが異なっていますがコマンドの実行部分のみ参照して下さい。

2.サンプルプログラムとまったく同じものを違う名前で作成し、NXTに転送しなさい。NXTの画面で2つのプログラムが転送されたことを確認しなさい。


TOPへ 1. モータの使用