/* * デバッグ用サンプルプログラムの修正版 * * OS: T-Kernel * * Copyright (C) 2010-2017 by Personal Media Corporation */ #include /* T-Kernel ヘッダ */ #include /* tm_printf() など */ #include /* memcmp() など */ /* オブジェクト ID 番号 */ LOCAL ID tidA; /* タスク A の ID */ /* 渡された文字列の中のTHISをTHATに書き換える */ LOCAL void replace(char *s) { int i, len; char key[] = {'T', 'H', 'I', 'S'}; char rep[] = {'T', 'H', 'A', 'T'}; len = strlen(s); for (i = 0; i <= len - (int)sizeof(key); i++) { if (memcmp(s + i, key, sizeof(key)) == 0) { memcpy(s + i, rep, sizeof(rep)); } } } /* タスク A */ LOCAL void taskA(INT stacd, void *exinf) { char s1[] = "THIS"; char s2[] = "PLEASE DEBUG THIS PROGRAM."; char s3[] = ""; replace(s1); tm_printf((UB*)"\"%s\"\n", s1); replace(s2); tm_printf((UB*)"\"%s\"\n", s2); replace(s3); tm_printf((UB*)"\"%s\"\n", s3); /* 自タスクを終了・削除する */ tk_exd_tsk(); } /* 初期化処理 */ EXPORT INT usermain(void) { T_CTSK ct; /* タスク A を生成する */ ct.exinf = (void*)('t' | 's' << 8 | 'k' << 16 | 'A' << 24); /* 拡張情報 */ ct.tskatr = TA_HLNG | TA_RNG0; /* タスク属性 */ ct.task = taskA; /* タスク起動アドレス */ ct.itskpri = 1; /* タスク起動時優先度 */ ct.stksz = 1024; /* スタックサイズ */ tidA = tk_cre_tsk(&ct); /* タスク A を生成 */ if (tidA < E_OK) return tidA; /* タスク生成失敗時 */ tk_sta_tsk(tidA, 0); /* タスク A を起動 */ return E_OK; }