ETロボコンの参加者用 sample.c プログラムは公式開発環境の
nxtOSEK (Toppers/ATK) でしか動かない。

nxtJSP(Toppers/JSP、つまりμITRON)で動かすのは、非競争領域なんだそうで、各自で行って申請せよとのこと。

どうせなら、μITRON を使いたんだけど、非サポートということなんで、自分でやってみた。


参考にしたのは;
・「マインドストーム活用のエンジニア教育」のコード

・sample.cpp を nxtJSP に移植したすねいるさんのコード
 (コードは参加者メーリングリスト内)

μITRON準拠TOPPERSの実践活用―製品開発にも学習教材にも使えるフリーのOSプラットホーム (TECH I Embedded Software)μITRON準拠TOPPERSの実践活用―製品開発にも学習教材にも使えるフリーのOSプラットホーム (TECH I Embedded Software)
販売元:CQ出版
発売日:2007-03
おすすめ度:5.0
クチコミを見る
 
って、コンフィグレーションファイル (.cfg)、ヘッダ、Makefile はほとんどそのまんま 

◯sample_jsp.cfg
#define _MACRO_ONLY
#include "../../toppers_jsp/systask/cxxrt.cfg"
#include "sample_jsp.h"
INCLUDE("¥"sample_jsp.h¥"");
CRE_TSK(TSK0, { TA_HLNG | TA_ACT, TSK0, tsk0, 1, 1024, NULL });
#include <at91sam7s.h>
INCLUDE("¥"at91sam7s.h¥"");
DEF_INH(IRQ_PWM_PID, { TA_HLNG, jsp_systick_low_priority });
 

◯sample_jsp.h
#ifndef SAMPLE_JSP_H_
#define SAMPLE_JSP_H_
#include <t_services.h>
#ifndef _MACRO_ONLY
extern void tsk0(VP_INT exinf);
#endif /* _MACRO_ONLY */
#endif /*SAMPLE_JSP_H_*/

◯Makefile
# リアルタイムOSにTOPPERS/JSPを指定
TOPPERS_KERNEL = NXT_JSP
# nxtOSEKルートディレクトリ
NXTOSEK_ROOT = ../../nxtOSEK
# ターゲット実行形式ファイル名
TARGET = sample_jsp
# インクルードパス
USER_INC_PATH= $(NXTOSEK_ROOT)/ecrobot/nxtway_gs_balancer
# ライブラリ
USER_LIB = nxtway_gs_balancer
# Cソースファイル
TARGET_SOURCES = balancer_param.c sample_jsp.c
# TOPPERS/JSP設定ファイル
TOPPERS_JSP_CFG_SOURCE = ./sample_jsp.cfg
# 下記のマクロは変更しないでください
O_PATH ?= build
# Cビルド用makefile
include $(NXTOSEK_ROOT)/ecrobot/ecrobot.mak
 

あと、sample.c をから、sample_jsp.c で変えたのは;
void user_1ms_isr_type2(void){}
をまるまる入れ替え;

//*****************************************************************************
// FUNCTION : jsp_systick_low_priority
// ARGUMENT : none
// RETURN : none
// DESCRIPTION : 1msec periodical ISR
//*****************************************************************************
void jsp_systick_low_priority(void)
{
if (get_OS_flag()) /* check whether JSP already started or not */
{
isig_tim();          /* cyclic task dispatcher */
check_NXT_buttons(); /* this must be called here */
}
}
あと、
TASK(TaskMain)
{
の表現の書き換えだけ;
 
//*****************************************************************************
// タスク名 : Task0
// 概要 : メインタスク
//*****************************************************************************
void tsk0(VP_INT exinf)
{


あんまり分かってないけど、これで動いた(ように見える)んで、
よいのかな?

〈追記 2009.10.5〉
上記のコードは、ETロボコンの利用申請その他に、自由に使用して構いません。リンクもご自由に。
ただし、使用した際の不利益等についての責任は一切負いません。