キーボード入力を二つのタスクを走らせた状態で
片方のタスクで取得する実験をしてみました。

キー入力取得タスクの肝
while (true) {
    while ((ch = km.getCharacter()) == -1) {}
    _sys_printf("%c\n", ch);
}

これを実行するとchが不定の状態で
なぜか_sys_printfのところが実行されることがある。

「実行されることがある」とは
タスク実行中キー入力がない場合whileの条件は
ほとんどtrueになるが50回に1回くらいnot trueになる

getCharagter()の実装はまじめにキーを返すバージョンや
return -1;
オンリーだけでも上記の現象がおきる。

(1)
while ((ch = km.getCharacter()) == -1)
⇒
while ((ch = km.getCharacter()) == 120)
とやっても
この現象は起きます。