2
1

TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(2)第一回(2011)アプリケーション開発部門金賞インテリジェント・チョロQコントローラ/TOPPERS/JSP, 山浦幹,(有)シンビー

Last updated at Posted at 2018-06-20

TOPPERS「活用アイデア」・「アプリケーション開発」コンテスト
は、2011年から毎年実施されています。
https://www.toppers.jp/contest.html

「アプケーション開発」は、ソースコードの公開を前提としています。
「活用アイデア」でも、その後実現したソースコードなどもある。探しながら紹介。

なお、この記事は、TOPPERSプロジェクトの公式見解ではなく、
小川清 の 技術者個人の考えに基づいています。

目的(purpose)

TOPPERS開発アイデア・アプリケーション開発コンテスト受賞作品には、良質な算譜、技術的に崇高な志向、目的を達成するための意思などが感じられる。広く、source codeを表示して紹介し、次の応募作品を促す。

成果(outcome)

応募作品の算譜を眺めると、その技術者の得意分野や技法を感じることができる。応募作品のソースコードを使ってみようという気になる。自分も良い作品を作ろうという気になる。

アプリケーション開発コンテスト受賞作品紹介(2) アプリケーション開発部門金賞

##インテリジェント・チョロQコントローラ / TOPPERS/JSP 山浦幹((有)シンビー)

応募資料(application material)

Readme.txt
http://www.cam.hi-ho.ne.jp/yamaura/Icqc/Readme.txt

インテリジェント・チョロQコントローラソース
http://www.cam.hi-ho.ne.jp/yamaura/Icqc/Icqc-20111228.tar.gz
コンテスト応募資料
http://www.cam.hi-ho.ne.jp/yamaura/Icqc/IdeaAppContest2011.pdf
作成参考資料
http://www.cam.hi-ho.ne.jp/yamaura/Icqc/Icqc2011Dec.pdf

算譜(source code)

sample1.c
#include <t_services.h>
#include <s_services.h>

#include "kernel_id.h"
#include "sample1.h"
#include "cpu_init.h"
#include "led.h"
#include "LCDpanel.h"
#include "graphics.h"
#include "TouchPanel.h"
#include "drive.h"

/****************************************************************
*  ループ回数
****************************************************************/
UW	task_loop;	// タスク内でのループ回数
UW	tex_loop;	// 例外処理ルーチン内でのループ回数

int	sec=0;		// 秒
short	ledCnt;		// リモコンパターン送信カウンタ
int	doGetImage=0;	// 画像処理RAM 転送スイッチ

// チョロQ現在位置
int	cq_pos_x = -1;
int	cq_pos_y = -1;


Console	con1;		// グラフィック画面1
Console	con2;		// コンソール


static	void init(void);
int	getPositionx(int *px,int *py);	// チョロQ位置検出
void	movex(int vect);
int	getDirx(int vect,int *px,int *py);
int	turnx(int vect);

/****************************************************************
*  メインタスク
****************************************************************/
void main_task(VP_INT exinf)
{
	int	tx,ty;

	init();

	vmsk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
	syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (INT) exinf);

	syscall(serial_ctl_por(TASK_PORTID,
			(IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));

	/****************************************************************
 	*  タスクの起動
	****************************************************************/
	sta_cyc(CYCHDR1);

	ledCnt = 0;	// Remote control stop

	tx=ty=-1;
	for(;;)
	{
		if(TOUCH_stat > 10)
		{
			dispStr(&con2,0,0," Intelligent ChQ Ctr");
		
			TOUCH_xy();
			dispNum(&con2, 7,1,TOUCH_X  ,4,10);
			dispNum(&con2,13,1,TOUCH_Y  ,4,10);

			CON_mark(&con2,MARK_SQR,tx,ty,0);		// 消去
			CON_mark(&con2,MARK_PLUS,TOUCH_X,TOUCH_Y,0xf800);// +を表示する
			tx = TOUCH_X;
			ty = TOUCH_Y;
			TOUCH_stat = 0;

			act_tsk(TASK_CQ);
			syslog(LOG_NOTICE, "==========================");
			syslog(LOG_NOTICE, "task sleep main.");
			slp_tsk();
			syslog(LOG_NOTICE, "task wup   main.\r\n---");
		}
		// タッチ位置を検出したらチョロQの位置検出を行う
		// チョロQ検出タスクに移行するか、、
	}

	syslog(LOG_NOTICE, "Sample program ends.");
	kernel_exit();
}
/****************************************************************
*  チョロQ制御タスク
****************************************************************/
void taskCq(VP_INT exinf)
{
	int	goalStep;

	ena_tex();	// タスク例外処理の許可

	syslog(LOG_NOTICE, "----taskCq----");

	dispStr(&con2,8,2,"------");

	goalStep = 0;

	while(toGoal(&goalStep) != 0)
	{
	}

	dispStr(&con2,8,2,"-Goal-");
	syslog(LOG_NOTICE, "----Goal----");

	wup_tsk(MAIN_TASK);
	ext_tsk();
}
/****************************************************************
*	初期化
****************************************************************/
static void init(void)
{
	int	i;

	define_int_plevel (IPR10, 15, 0);	// CMT1 
	define_int_plevel (IPR10,  3, 8);	// VDC3 

	CPU_BusInitialize();
	PWMInitialize();
	DMAInitialize();

	LCDpanel_Initialize();	// LCDパネル初期化
	TOUCH_Initialize();

	initConsole(&con1,GRA1_HORIZONTAL_SIZE,
		GRA1_VERTICAL_SIZE,(ushort *)GRA1_VRAM_BASE);

	initConsole(&con2,GRA2_HORIZONTAL_SIZE,
		GRA2_VERTICAL_SIZE,(ushort *)GRA2_VRAM_BASE);

	makeGrCntTbl();		// グレースケール変換テーブル作成

	Con_fill(&con1,0x0000);
	Con_fill(&con2,0x0000);

	CMT_1_Initialize();

	dispStr(&con2,0,0," Intelligent ChQ Ctr");

	mVIDEO_MODE.video_main_exe = 1;
	mVIDEO_INT_CNT.int_f_en    = 1;	// 割込許可

	// コマンド生成データを作っておく
	for(i=0;i<16;i++)
		ledPtnSet(RM_BAND,i,&ledPtnList[i]);

}
/****************************************************************
 *  周期ハンドラ
 *  タッチ位置検出
****************************************************************/
void cyclic_handler(VP_INT exinf)
{
	TOUCH_sta();	// タッチ位置検出
}
/****************************************************************
*  並行して実行されるタスク用のタスク例外処理ルーチン
****************************************************************/
void tex_routine(TEXPTN texptn, VP_INT exinf)
{
	volatile UW	i;
	INT	tskno = (INT) exinf;

	syslog(LOG_NOTICE, "task%d receives exception 0x%04x. ",
					tskno, texptn);
	for (i = 0; i < tex_loop; i++);

	if (texptn & 0x8000) {
		syslog(LOG_INFO, "#%d#ext_tsk()", tskno);
		ext_tsk();
	}
}
/****************************************************************
*  CPU例外ハンドラ
****************************************************************/
#ifdef CPUEXC1

void
cpuexc_handler(VP p_excinf)
{
	ID	tskid;

	syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).",
							p_excinf);
	if (sns_ctx() != TRUE) {
		syslog(LOG_WARNING,
			"sns_ctx() is not TRUE in CPU exception handler.");
	}
	if (sns_dpn() != TRUE) {
		syslog(LOG_WARNING,
			"sns_dpn() is not TRUE in CPU exception handler.");
	}
	syslog(LOG_DEBUG,
		"sns_loc = %d sns_dsp = %d", sns_loc(), sns_dsp());
	syslog(LOG_DEBUG,
		"vxsns_loc = %d vxsns_ctx = %d vxsns_dsp = %d vxsns_dpn = %d",
		vxsns_loc(p_excinf), vxsns_ctx(p_excinf),
		vxsns_dsp(p_excinf), vxsns_dpn(p_excinf));

	if (!vxsns_loc(p_excinf) && !vxsns_ctx(p_excinf)) {
		syscall(iget_tid(&tskid));
		syscall(iras_tex(tskid, 0x8000));
	}
	else {
		syslog(LOG_NOTICE, "Sample program ends with exception.");
		kernel_exit();
	}
}

#endif /* CPUEXC1 */

sample1.c以外のソースコードは順次追記予定。

#参考資料(reference)
TOPPERS活用アイデア・アプリケーション開発コンテストを振り返る
https://researchmap.jp/joxkbxlck-1778110/

「応募すると何が嬉しい」TOPPERS活用アイデア・ アプリケーション開発コンテスト
https://www.slideshare.net/kaizenjapan/ss-78528931

#文書履歴(document history)
ver. 0.10 初稿 20180621

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1