応用情報技術者 2018年 春期 午後 問07
児童の見守り機能付き防犯ブザーに関する次の記述を読んで、設問1〜3に答えよ。
Q社は、児童の見守り機能付き防犯ブザー(以下、防犯ブザーという)を開発している。防犯ブザーは、ストラップを引き抜くとブザーを大音量で鳴動させて周囲に危険を知らせる機能、ブザーが鳴動開始した場合及び鳴動停止した場合に、その動作(以下、ブザー動作という)をサーバに通知する機能、及び GPS で測位した緯度・経度をサーバに通知(以下、位置登録という)することを定期的に行う機能をもつ。サーバとの通信は、携帯電話回線網で行う。
保護者は、利用者IDとパスワードでサーバにログインして、ブザー動作の通知を電子メールで受信するためのメールアドレスを登録したり、防犯ブザーの位置を地図画面で確認したりすることができる。
防犯ブザーの外観とシステムの構成を図1に示す。

〔防犯ブザーの構成〕
防犯ブザーは、省電力機能を備えた MPU、日付時刻用タイマ、ブザー、挿抜式のストラップ、GPS ユニット、移動検出ユニット、通信部、充電式電池、及び充電のための USB 端子で構成される。
MPU は、通常モード及び省電力モードの二つのモードをもち、省電力モードに移行する命令を実行すると、消費電力の少ない省電力モードに移行する。省電力モードで割込みが発生すると、通常モードに復帰する。
MPU は、16 ビットタイマをもつ。このタイマはダウンカウンタで、カウンタに値を設定して動作を開始すると、カウント値が 0 になった次のカウントクロックで割込処理を発生させる。また、このタイマのカウントクロックは MPU の動作クロックを 32 分周した信号である。
なお、MPU の動作クロックは、16 MHz である。
日付時刻用タイマは、1 秒単位で日付時刻を設定することができる。日付時刻を設定して動作を開始すると、設定した日付時刻になったときに割込みを発生させる。
移動検出ユニットは、一定以上の揺れを検出するたびに、防犯ブザーが移動しているものとして割込みを発生させる。
〔防犯ブザーの仕様〕
・ストラップの引抜き(以下、抜去という)が発生するとブザーの鳴動を開始し、ストラップの差込み(以下、挿入という)が発生するとブザーの鳴動を停止する。
・防犯ブザーが通信圏外にある場合は、位置登録及びブザー動作のサーバの通知は行わない。
・防犯ブザーが通信圏内にある場合は、定期的に位置登録を行う。また、ブザー動作を行ったときは、その内容をサーバに通知する。
・通信圏内では、移動状態又は静止状態の、いずれかの状態をとる。移動状態では、位置登録の周期(以下、登録周期という)を 5 分とする。静止状態では、消費電力の低減を図るために登録周期を 30 分とする。通信圏外から通信圏内に入った直後は、状態を静止状態にする。
- 静止状態で移動を検出すると、直ちに位置登録を行い、状態を移動状態にする。
- 移動状態で、登録周期中に一度も移動を検出しなかったときは、位置登録を行った後、状態を静止状態にする。
〔防犯ブザーのソフトウェア構成〕
防犯ブザーの組込みソフトウェアには、リアルタイム OS を使用する。防犯ブザーの主な割込みハンドラの処理概要を表1に、防犯ブザーの主タスクの処理概要を表2に、それぞれ示す。


〔メインタスクの主な処理〕
・通信圏外にある場合に、通信タスクから通信圏内となったことを通知されると、状態を静止状態にして位置登録を行い、登録周期の計測を開始して移動検出割込みを許可する。
・移動を検出したことが通知されると、移動検出割込みを禁止する。その後、防犯ブザーの状態に従って次の処理を行う。
- 静止状態であれば、a を行い、状態を移動状態にして b を変更した後、移動を検出したことを報告するメモリ領域(以下、移動検出情報という)をクリアして、移動検出割込みを許可する。
- 移動状態であれば、移動検出情報のセットだけを行い、移動検出割込みは禁止したままとする。
- 移動状態で位置登録のタイミングであることが通知されると、①移動検出情報を確認して処理を行う。その後、移動検出情報をクリアして移動検出割込みを許可する。
- 通信圏外であることが通知されると、移動検出割込みを禁止し、登録周期の計測を停止する。
設問1:防犯ブザーの動作について、(1)、(2)に答えよ。
(1)通信圏内にある防犯ブザーが、ある日の午前8時00分に静止状態から移動状態となった。
防犯ブザーが次に静止状態になったのは午前8時20分であり、その後、同日の午前9時20分まで静止状態のままであった。
防犯ブザーが午前8時台に位置登録を行った回数は何回か。整数で求めよ。
模範解答
6
解説
解答の論理構成
-
初期状態の確認
問題文に「通信圏内にある防犯ブザーが、ある日の午前8時00分に静止状態から移動状態となった」とある。さらに静止状態の登録周期は【問題文】「登録周期を 30 分とする」、移動状態の登録周期は【問題文】「登録周期を 5 分とする」。 -
8 時 00 分での処理
静止状態で移動が検出された場合は【問題文】「直ちに位置登録を行い、状態を移動状態にする」とある。したがって
• 08:00 に 1 回目の位置登録が発生。 -
移動状態中(08:00〜08:20)の登録タイミング
移動状態では 5 分周期で位置登録を行うので、08:05・08:10・08:15 に 2〜4 回目の位置登録が発生。
08:15〜08:20 の 5 分間は移動検出がなかった(結果として静止状態へ遷移)ため、【問題文】「位置登録を行った後、状態を静止状態にする」に従い、08:20 に 5 回目の位置登録を実施してから静止状態へ移行する。 -
静止状態中(08:20〜09:20)の登録タイミング
静止状態では 30 分周期なので、次の位置登録は 08:20 から 30 分後の 08:50。これが 6 回目で、09:20 での登録は 08 時台ではない。 -
8 時台の合計
08:00・08:05・08:10・08:15・08:20・08:50 の計 6 回。
よって求める答えは 6 となる。
誤りやすいポイント
- 08:20 の位置登録を「静止状態になった直後は登録しない」と思い込み、1 回分少なく数えてしまう。実際には移行前の移動状態のルールで登録する。
- 08:50 の登録を見落とす。静止状態の「登録周期を 30 分とする」を忘れると 5 回と誤答。
- 「移動検出がある限り 5 分周期で登録」を勘違いし、08:20 にも移動検出があると想定して 08:25 の登録まで数えてしまう。
FAQ
Q: 08:20 の登録は移動状態か静止状態のどちらの周期ですか?
A: 08:15〜08:20 の 5 分間で移動検出が無かったため、移動状態の規定「位置登録を行った後、状態を静止状態にする」で実施される登録です。
A: 08:15〜08:20 の 5 分間で移動検出が無かったため、移動状態の規定「位置登録を行った後、状態を静止状態にする」で実施される登録です。
Q: 08:50 の登録は必ず行われますか?
A: はい。静止状態に遷移した 08:20 を起点に「登録周期を 30 分とする」に従い、08:50 に位置登録が行われます。
A: はい。静止状態に遷移した 08:20 を起点に「登録周期を 30 分とする」に従い、08:50 に位置登録が行われます。
Q: 08:05・08:10・08:15 の登録は移動検出がなくても行われますか?
A: 登録自体は周期で必ず行われます。その後「一度も移動を検出しなかった」場合だけ静止状態に遷移します。
A: 登録自体は周期で必ず行われます。その後「一度も移動を検出しなかった」場合だけ静止状態に遷移します。
関連キーワード: タイマ割込み, 省電力モード, ダウンカウンタ, GPS測位, 状態遷移
設問1:防犯ブザーの動作について、(1)、(2)に答えよ。
(2)通信圏内にある防犯ブザーが、5分よりも短い間隔で位置登録を行うことがある。それはどのようなときか。40字以内で述べよ。
模範解答
静止状態で位置登録を行った後、5分経過する前に移動を検出したとき
解説
解答の論理構成
-
前提条件の整理
- 「通信圏内では、移動状態又は静止状態の、いずれかの状態をとる。移動状態では、登録周期を 5 分とする。静止状態では、…登録周期を 30 分とする。」
- 「静止状態で移動を検出すると、直ちに位置登録を行い、状態を移動状態にする。」
いずれも【問題文】からの引用です。
-
“5 分よりも短い間隔”が発生するケースを探す
- 移動状態の通常登録は “5 分” なので短縮要因になりません。
- 静止状態の通常登録は “30 分” と長いので、こちらも該当しません。
- ただし静止状態には “移動を検出すると、直ちに位置登録を行い” という例外処理があります。
- この “直ちに” 実施される登録は、前回の登録から 5 分を経過していない可能性があります。
-
結論
よって、通信圏内で “静止状態” にあった機器が、前回の登録から 5 分経過する前に “移動を検出” したとき、即時登録が走り、結果的に “5 分よりも短い間隔” となります。
誤りやすいポイント
- 「移動状態で検出があった場合も即時登録される」と思い込む
→ 移動状態では「移動検出情報のセットだけ」で即時登録は行われません。 - “30 分周期” のみを短縮と考え、5 分周期は常に固定と誤解する
→ 静止状態から移動状態への遷移トリガが例外を生むことに注意。 - 「通信圏外から通信圏内に入った直後」の登録と混同する
→ このケースは “状態を静止状態にして位置登録” ですが、間隔の議論とは別です。
FAQ
Q: 静止状態から移動状態になった直後の登録後、次の登録はいつですか?
A: 状態は移動状態に変わるので、次回は “登録周期を 5 分” でタイマタスクが計測します。
A: 状態は移動状態に変わるので、次回は “登録周期を 5 分” でタイマタスクが計測します。
Q: 移動状態で移動検出が続いた場合、登録周期は変わりますか?
A: 変わりません。“移動状態” が継続する限り “登録周期を 5 分” のままです。
A: 変わりません。“移動状態” が継続する限り “登録周期を 5 分” のままです。
Q: 移動状態で一度も移動を検出しなかった場合の処理は?
A: 「位置登録を行った後、状態を静止状態にする」と仕様に明記されています。
A: 「位置登録を行った後、状態を静止状態にする」と仕様に明記されています。
関連キーワード: 割込み処理, 省電力モード, タイマ割込み, 状態遷移, 組込みソフトウェア
設問2:タイマタスクの設計に関する検討について、(1)、(2)に答えよ。
(1)登録周期の計測に16ビットタイマを用いて100ミリ秒を計測し、16ビットタイマ割込みの発生が通知された回数を数えて位置登録のタイミングを通知する方式を考えてみた。
この場合に、16ビットタイマでのカウント値に設定する値を20進数で求めよ。ここで、1MHz=Hzとし、ソフトウェアの動作時間は考慮しなくてもよいものとする。
模範解答
49,999
解説
解答の論理構成
-
タイマのクロックを確認
【問題文】には「16 ビットタイマのカウントクロックは MPU の動作クロックを 32 分周した信号である」
さらに「MPU の動作クロックは、16 MHz である」とあります。
16 MHz ÷ 32 = 500 kHz
タイマクロックの周期は
-
必要な計測時間を確認
小問説明で「100ミリ秒を計測」と指定されています。
-
必要カウント数の算出
-
設定値への変換
【問題文】には「カウンタに値を設定して動作を開始すると、カウント値が 0 になった次のカウントクロックで割込処理を発生させる」とあり、0を含めて数える必要があります。
したがって設定値は
-
結果
求める 16 ビットタイマのカウント値(20 進数との指定ですが十進表記)
→ 49,999
誤りやすいポイント
- 「16 MHz」をそのまま使い、32 分周を忘れて計算してしまう。
- 100 ms を 0.01 s と取り違え、10 倍または 1/10 の値を設定してしまう。
- 割込み発生条件「0 になった次のカウントクロック」を見落とし、50,000 をそのまま設定してしまう。
- 周期(2 µs)ではなく周波数(500 kHz)を使って逆数を取り忘れ、計算がずれる。
FAQ
Q: なぜ 50,000 ではなく 49,999 をロードする必要があるのですか?
A: 仕様で「カウント値が 0 になった次のカウントクロックで割込処理を発生」と定められています。0 を含めて 50,000 回クロックを数えるため、初期値は 1 つ小さい 49,999 にします。
A: 仕様で「カウント値が 0 になった次のカウントクロックで割込処理を発生」と定められています。0 を含めて 50,000 回クロックを数えるため、初期値は 1 つ小さい 49,999 にします。
Q: 「20進数」と書いてありますが、回答を十進数のまま提出しても良いのですか?
A: 設問例の【模範解答】が「49,999」と十進表記で示されているため、十進数で解答します。
A: 設問例の【模範解答】が「49,999」と十進表記で示されているため、十進数で解答します。
Q: 16 ビットタイマは最大で何ミリ秒まで 1 回の設定で測れますか?
A: 最大値は カウントです。 なので、約 131 ms まで 1 回で計測できます。
A: 最大値は カウントです。 なので、約 131 ms まで 1 回で計測できます。
関連キーワード: 周波数分周, ダウンカウンタ, 割込みタイミング, クロック周期, 組込み計時
設問2:タイマタスクの設計に関する検討について、(1)、(2)に答えよ。
(2)検討の結果、登録周期の計測には16ビットタイマを使用せず、日付時刻用タイマを使用することにした。
日付時刻用タイマを使用する理由を20字以内で述べよ。
模範解答
消費電力を小さくできるから
解説
解答の論理構成
- 省電力動作が最優先
問題文には「アイドルタスクは“MPUを省電力モードにする”」とあり、システム全体が電池駆動である防犯ブザーは長時間稼働のため電力節約が必須です。 - 16ビットタイマでは割込み回数が増える
・「MPU の動作クロックは、16 MHz」
・「このタイマのカウントクロックは MPU の動作クロックを 32 分周」
→ カウント周期は 、すなわち 。
5 分(300 s)を測るには カウントが必要で、「16 ビットタイマ」の最大値 では到底足りず、約 2 300 回以上の割込み・再設定が発生します。頻繁な割込みは「省電力モードで割込みが発生すると、通常モードに復帰」させるため、消費電力が大きくなります。 - 日付時刻用タイマは長周期を 1 回で設定できる
・「日付時刻用タイマは、1 秒単位で日付時刻を設定」「設定した日付時刻になったときに割込みを発生」
5 分後や 30 分後の絶対時刻を 1 回設定しておけば、その間 MPU は割込みが無く省電力モードを維持できます。 - よって理由は「消費電力を小さくできるから」となります。
誤りやすいポイント
- 16 ビットタイマでも “32 分周” を見落とし、16 MHz をそのまま割って計算してしまう。
- 「長時間を測れない=オーバーフローする」と思い込み、再設定すれば良いと誤答する(再設定回数による電力増大を見逃す)。
- 日付時刻用タイマは“時計用”なので精度優先だと誤解し、電力面の利点に気付かない。
FAQ
Q: 16 ビットタイマをプリスケーラ付きで低速化すれば良いのでは?
A: 本問題の記述では「カウントクロックは …32 分周」と固定されており、更なる分周指定ができません。したがって頻繁な割込みを避ける手段がありません。
A: 本問題の記述では「カウントクロックは …32 分周」と固定されており、更なる分周指定ができません。したがって頻繁な割込みを避ける手段がありません。
Q: 日付時刻用タイマの 1 秒分解能で 5 分を正確に測れるのか?
A: はい。要求は 5 分または 30 分周期での「位置登録」のタイミングであり、秒単位の精度で十分です。
A: はい。要求は 5 分または 30 分周期での「位置登録」のタイミングであり、秒単位の精度で十分です。
Q: 省電力モード時でも日付時刻用タイマは動作する?
A: 一般に RTC 系タイマは低消費電力で独立動作します。問題文では省電力時に動作しないとは書かれておらず、割込みで通常モードへ復帰できるため使用が可能です。
A: 一般に RTC 系タイマは低消費電力で独立動作します。問題文では省電力時に動作しないとは書かれておらず、割込みで通常モードへ復帰できるため使用が可能です。
関連キーワード: 省電力モード, 割込み, RTC, 分周, 動作クロック
設問3:〔メインタスクの主な処理〕について、(1)、(2)に答えよ。
(1)本文中のa、bに入れる適切な字句を答えよ。
模範解答
a:位置登録
b:登録周期
解説
解答の論理構成
- 静止状態で移動を検出したときメインタスクが最初に行う処理
【問題文】には
・静止状態で移動を検出すると、直ちに位置登録を行い、状態を移動状態にする。
と明記されています。したがって a には「位置登録」が入ります。 - その後に変更すべき内容
同じ箇所の続きで
・…状態を移動状態にして登録周期を 5 分とする。
登録周期そのものを変更するので b は「登録周期」となります。
以上より
a:位置登録
b:登録周期
a:位置登録
b:登録周期
誤りやすいポイント
- 「測位」と「位置登録」の混同
測位は GPS ユニットで緯度・経度を取得する行為、位置登録はその結果をサーバへ送る行為です。静止状態での移動検出後に必要なのは送信動作なので「位置登録」が正解です。 - 「登録周期の計測開始/停止」と「登録周期」自体の変更の取り違え
メインタスクがここで行うのは計測の開始ではなく、周期を 30 分→5 分へ切り替えることです。 - 「移動検出割込みを許可するタイミング」の読み違い
移動検出割込みは一旦禁止し、必要な処理後に再許可します。流れを押さえないと文脈を誤解します。
FAQ
Q: 静止状態で移動を検出した際、なぜすぐに位置登録を行うのですか?
A: 移動し始めた事実を速やかに保護者へ知らせるためです。これにより「直ちに位置登録を行い」位置情報を更新し、次回以降の周期も短縮(5 分)してリアルタイム性を高めます。
A: 移動し始めた事実を速やかに保護者へ知らせるためです。これにより「直ちに位置登録を行い」位置情報を更新し、次回以降の周期も短縮(5 分)してリアルタイム性を高めます。
Q: 「登録周期」と「登録周期の計測」はどう違うのですか?
A: 「登録周期」は 5 分や 30 分といった時間間隔そのものを指し、「登録周期の計測」は日付時刻用タイマを使ってその間隔を計測する動作を開始・停止することです。
A: 「登録周期」は 5 分や 30 分といった時間間隔そのものを指し、「登録周期の計測」は日付時刻用タイマを使ってその間隔を計測する動作を開始・停止することです。
Q: 移動状態から静止状態へ戻すのはどのタイミングですか?
A: 移動状態で「登録周期中に一度も移動を検出しなかったとき」に位置登録を行った後、静止状態に戻します。
A: 移動状態で「登録周期中に一度も移動を検出しなかったとき」に位置登録を行った後、静止状態に戻します。
関連キーワード: GPS, リアルタイムOS, 割込み, 省電力モード, ダウンカウンタ
設問3:〔メインタスクの主な処理〕について、(1)、(2)に答えよ。
(2)本文中の下線①について、移動検出情報がセットされていないときだけ、メインタスクがタイマタスクに行う要求を、表2中の字句で答えよ。
模範解答
登録周期の変更
解説
解答の論理構成
-
前提となる仕様
- 防犯ブザーは「移動状態」か「静止状態」をとり、「移動状態では、登録周期を 5 分」「静止状態では、登録周期を 30 分」としています。
引用:【問題文】「移動状態では、位置登録の周期(以下、登録周期という)を 5 分…静止状態では…登録周期を 30 分…」 - 状態遷移条件
引用:【問題文】「移動状態で、登録周期中に一度も移動を検出しなかったときは、位置登録を行った後、状態を静止状態にする。」
- 防犯ブザーは「移動状態」か「静止状態」をとり、「移動状態では、登録周期を 5 分」「静止状態では、登録周期を 30 分」としています。
-
問われている場面
- 下線①の文脈
引用:【問題文】「移動状態で位置登録のタイミングであることが通知されると、①移動検出情報を確認して処理を行う。」 - ここで「移動検出情報がセットされていない」=「登録周期中に一度も移動を検出していない」ことを意味します。
- 下線①の文脈
-
メインタスクが実施すべき処理
- 上記仕様より、移動検出が無かった場合は「状態を静止状態にする」必要があります。
- 静止状態へ遷移する場合、登録周期を 5 分→30 分へ変更しなければならないため、タイマタスクへの依頼内容は「登録周期の変更」です。
-
タイマタスクが受け付ける要求
- 引用:【表2】タイマタスクの処理概要
「登録周期の計測開始、登録周期の計測停止、及び 登録周期の変更 の要求を待ち…」 - 選択肢は3種類のうちどれか。周期を 30 分に切り替える目的に合うのは「登録周期の変更」であるため確定します。
- 引用:【表2】タイマタスクの処理概要
-
よって、メインタスクがタイマタスクに行う要求は
――― 【模範解答】「登録周期の変更」となります。
誤りやすいポイント
- 「登録周期の計測開始」と混同する
静止状態になった後も計測は続けるため、開始を再要求する必要はありません。必要なのは周期値を 30 分へ切替えることです。 - 「登録周期の計測停止」を選んでしまう
停止してしまうと次の位置登録自体が行われず仕様違反になります。 - 16 ビットタイマと日付時刻用タイマの役割を取り違える
位置登録の周期管理は日付時刻用タイマであり、その制御を担うのがタイマタスクです。
FAQ
Q: 「移動検出情報がセットされている」とは何を示しますか?
A: 登録周期中に移動検出割込みが少なくとも一度発生したことを示し、メインタスクが「移動検出情報」をセットした状態です。
A: 登録周期中に移動検出割込みが少なくとも一度発生したことを示し、メインタスクが「移動検出情報」をセットした状態です。
Q: 登録周期変更と計測停止→開始の組合せでは何が違いますか?
A: 登録周期変更はタイマを動かしたまま設定値だけ書き換えます。停止→開始は一旦タイマを止めるため、不要なタイムラグや処理増が発生します。
A: 登録周期変更はタイマを動かしたまま設定値だけ書き換えます。停止→開始は一旦タイマを止めるため、不要なタイムラグや処理増が発生します。
Q: 16 ビットタイマは本問に関係ありますか?
A: 16 ビットタイマは割込み周期が高い処理向けで、位置登録周期(分単位)の管理には使われません。本設問では日付時刻用タイマのみを考えます。
A: 16 ビットタイマは割込み周期が高い処理向けで、位置登録周期(分単位)の管理には使われません。本設問では日付時刻用タイマのみを考えます。
関連キーワード: 状態遷移, 割込み処理, 周期変更, 省電力制御, タスク間通信


