見出し画像

【手出し問題に】応用情報技術者試験R06春組み込みの解説

このNoteでは「応用情報技術者試験R6春午後1問7(組み込み)」の解説をします。


組み込み独特の問題特性が良く詰まっていました。

  • 動作コンセプトの言語化

  • タスク間のメッセージと付加情報

  • クロック、パルスの読み解き

  • 割込み処理(少しだけ)

開発経験があれば有利なのは勿論ですが、どれも手加減されていて、日頃からの観察と考察をすれば充分高得点が狙える問題でした。

応用情報技術者でも割と簡単めな難易度で、エンベデッドシステムスペシャリスト(ES)には、かなり大きいギャップがありますが、視野に入れている方には良い手出し問題の印象です。


このNoteには、私がIT以外の学生時代にAPに独学合格した経験と、大学・IT専門学校で応用情報技術者試験の対策授業を担当した経験を詰め込んで作りました。

それでは始めましょう!


※このNoteは後日有料になります。お早めにお読みください。その後はマガジンに追加されます。マガジンも値上げしますので、お早めにご購入ください。



設問1(1) | 文章の流れに沿って書く


模範解答は「ドアをロック」。正解できます。


どう書けば良いか迷うかもしれません。

周囲の文章に馴染むような言葉が空欄に入ると考えます。

「ドアをロック解除」があるのに、「ドアをロックする」記述がなかったと気づきます。




設問1(2) | クロックの利用


正答は「320」。正解してください。

苦手な方もいるかもですが、組み込みでは必ず計算問題が出ます。特にPWM制御は学んでおきましょう。


問題文を読むとき、数値・個数は丸囲みします。計算問題で情報が必要になった時、すぐに搔き集められますから。

今回使う情報は、

  • 制御ソフトウェアは入力された値を10ミリ秒間隔で読み出し(41頁の表2下)

  • 32kHzのタイマー(設問1(2))

32kHzなので、1/32k秒= 1/32ミリ秒でカウントダウンされています。

10ミリ秒間隔で、カウント値が0になるには、

$$
10ミリ秒 = x/32\\
x = 10 × 32\\
x = 320\\
$$




設問2(1) | プログラム意図の言語化


模範解答は「カップ判定中にドアが開けられたことを検出したいから」。30文字で少し自由度がありますが、今回が不正解であっても、今後は正解できるようになりましょう。


組み込み系の問題では、「タスクの優先度」や「割込み処理」が重要なテーマになります。

ソフトウェアでハードウェアを制御するので、特に安全には考慮しないといけません。例えば、ロボットがタスクの指示通りに動いているときに、緊急停止ボタンが押されたら絶対に停止して欲しいですいよね。

ドアタスクは重要です。想定外の状況でドアが開けられて、ヤケドしたら大変です。


今回の「カップ判定タスク」は「メインタスク及びドアタスク」よりも優先しない理由を考えます。

つまりは、メインタスクやドアタスクの方を優先したい理由があるんですね。

表3より

  • メインタスクは、マシンの状態管理を行う

  • ドアタスクは、開閉状態の通知、ロックと解除を行う

  • カップ判定タスクは、カメラでカップがあるか、あるなら大きさ判定を行う

以上より、模範解答の「カップ判定中にドアが開けられたことを検出したいから」に至ります。

「ドアが開けられたことを検出したいから」18文字も正解か部分点かもしれません。ちゃんと理解しているか若干弱いですが。

私は「ドアタスクの開閉検知やロック制御は、利用者の安全に関わるから」30文字ジャスト。メインには触れてませんが、まぁ良いかと。

模範解答と私の解答には、若干方向性が違います。

模範解答は、タスクの優先度がテーマなので「処理」に焦点を。私の別解では、タスクと機器の信頼性の関係に焦点を当てています。

どちらもタスク優先度の理由にはなっています。




設問2(2) | 作業者目線になる


模範解答は「コーヒーの分量」

私の別解は「カップのサイズ(大, 中, 小)」


「そっかぁ」と思った方。

自分がコーヒーマシンになったつもりで動作を1つ1つ想像してみましょう。各部品やタスクを人だと思って連携することを想像してみましょう。

情報の考え落としが少なくなります。普段はマシンが勝手にやってくれてるけど、実際に自分でやると色々考えてるんですよね。

利用者目線から、作業者目線(マシン側)・開発者目線になりましょう。


模範解答では、メインタスクが抽出タスクに「470ml入れてね」と命令します。

私の別解では、メインタスクが抽出タスクに「カップ大だよ」と命令し、抽出タスクが「大は470mlだったな」と処理します。

問題文には、表2より「カップ判定タスクからカップサイズ(大, 中, 小)が通知される」旨がありますが、カップサイズから分量に変換する手順は明記されていません。

メインタスクに対応表があるのか、抽出タスクに対応表があるのかの明記がないため、私の別解も成立します。




設問2(3) | 電子回路にパルス読み解きは必須


正答は以下。迷うかもですが、正解してください。

  • ドア開:タ

  • ドア閉:カ


情報は、表2下の文章。

  • 「センサーからは、ドアが閉じているときは0, それ以外は1が出力される」旨

  • 「10ミリ秒間隔で読み出し、4回連続で同じ値が読みだされたらドアの開閉状態を確定する」

よって、

  • ドア開:1が4回連続:ス, セ, ソ, タ

  • ドア閉:0が4回連続:ウ, エ, オ, カ

を根拠に判定されます。




設問3(1) | タスク表から命令/通知を読み解くのは基本


正答は、”確認”と"抽出完了"。必ず正解してください。


表2のメインタスクとドアタスクを見て、通知を探します。

メインタスクの項目にはまったく情報がありません。

ドアタスクには「メインタスクから"ロック"又は"ロック解除"を受けると~」とあります。

41頁【コーヒーマシンの動作概要】や図4を参考にして考えます。

  • 41頁より「利用者が確認ボタンにタッチすると、空欄a(ドアをロック)」

  • 41頁より「コーヒーの抽出が終わると、ドアをロック解除し~」

では、メインタスクに来る通知(表3)で考えます。

  • ドアロック:確認ボタンにタッチ:表3より、タッチパネルタスクから「確認」通知を受けた時

  • ロック解除:抽出が終わる:表3より、抽出タスクから「抽出完了」通知を受けた時

以上より「確認」「抽出完了」。




設問3(2) | 組み込みに割込み処理はツキモノ


正答は、判定結果。消去法でないと、難しいかも。

私は読んでいて「わざわざ書いているなぁ」とヒントには気づいたのですが、正解できませんでした。


表3のカップ判定。

  • カップ判定中にメインタスクから"中止"を受けると、~略~"中止完了"をメインタスクに通知する

  • カップ判定中以外で"中止"を受けたときは無視する


なかなか難しいですが。表3よりメインタスクが受ける通知は"判定結果""中止完了", "抽出完了", "確認", "ドア開", "ドア閉"なので、この中から選ぶしかありません。

中止待ち状態からドア開状態に遷移する条件に適してるかを1つずつ考えてみます。

  • "中止完了":図4の通り正しい

  • "抽出完了":抽出はドアロックして行われるので、"ドア開"が来ず中止待ち状態にそもそもならない。

  • "確認":"確認"が来るには"画面表示"命令を出して確認待ち状態になった時だけ。不適切。

  • "ドア開":中止待ち状態に遷移する時にすでに受けている。不適切

  • ”ドア閉":ドア「開」状態に遷移するので不適切すぎる

よって"判定結果"しかないな、と結論するしかありません。

図4の判定結果が「"判定結果"(カップなし)」など「()」が付記されていますが、"空欄b"なので付記は不要。

そもそもカップのあらゆる状態があり得ます。


最後にどんな状態になったら"中止完了""判定結果"で、中止待ち状態から遷移するのか考えてみます。

41頁より、メインタスクが"中止"命令を出す時は「カップ判定中に利用者がドアを開けた場合」。メインタスクはカップ判定タスクに"中止"を命令し、中止待ち状態に遷移します。

ここから2つの場合を考えます。

"中止完了"を受ける場合について。

カップ判定タスクは、判定に300~500ミリ秒かかります。判定を始めてから判定結果を出すまでは"中止"命令を受けたら中止して"中止完了"をメインタスクに通知します。

次は"判定結果"を受ける場合について。

一方で偶然にもメインタスクが"中止"命令を出して中止待ち状態になった瞬間に、判定タスクが判定を終えた場合は「判定中」ではないので"中止"命令を無視して、"判定結果"をメインタスクに通知します。

正直なんかスッキリしないですが、走らせている処理に割込みを掛けているので、妙にハマってしまう場合がある、という感じでしょうか。




まとめ | 日頃から観察と考察をしておく


お疲れ様でした!


日頃からファミレスのドリンクバーやコンビニのコーヒーマシンを使っていると、また解きやすいですね。

組み込みシステム(マイコン)を開発者側から触るのは、機会がないとなかなかできません。

しかし日常生活をよく観察して、利用者側から「中身どうなっているのかな?」と考えると、得点力を育てられます。

例えば駅の券売機・自動改札(キップもICカードも)、自動販売機(夜の点灯も)、最近なら感染症予防の対応計測と消毒機などです。ラジコンやドローンも勿論OK。


組み込みは現実世界の機械をプログラムで制御するのがとても面白いです。日頃使っている機器が「こんな風に動いているんだな」「少しでも作ってみたいな」と楽しい気分になります。

クロックやPWM制御、複数のタスクや部位の連携など、独特のテーマがあります。面白いかな/楽しいかなと思えたら、ぜひ勉強を続けていって欲しいです。


宜しければ、他のNoteもどうぞ!

>APR05秋(組み込み)の解説Note

p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ


この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ