Harvestは小説の題名。プログラムを作るボタンのLEDを光らせるプログラムは次のようになっていた。}このプログラムは、次のようになっている。PORT_BUTTONLED;はポート変数bledを定義定義したもので、ここでは、汎用のポート識別子PORT_BUTTONLEDで初期化される。XC-5.xnファイルが、PORT_BUTTONLEDをXS1_PORT_4Eにマップする。ここで4Eは、4ビットのピンを表し、4個のボタンLEDに対応する。ポートはピンとプロセッサの間でのデータの授受に使われる。従って、プロセッサと外部要素とのインタフェースとして機能する。ポートはグローバル変数として宣言されなければならない。0;は決して実行されることがない。課題bledの値を0x1から0xFまで変えて、bledとLEDの関係を表で示しなさい。2.クロックLEDを光らせる。クロックLEDクロックLEDとして、赤と緑のLEDが対となったものが12個用意されている。これらLEDのアノード(陽極)は3個の4ビットポートに接続されている。それらポートは4A,4B,4Cと名前が付けられており、プログラムの内部では、それらは識別子PORT_CLOCKLED_O/1/2で参照される。(ボタンLEDはポートは4Eで、識別子はPORT_BUTTONLED)。緑のLEDのカソード(陰極)は、1ビットポートに接続され、これは1Eの名前が付けられている。赤も同様で、1Fと名のついたポートを持っている。PORT_CLOCKLED_SELRでプログラムにより参照される。次のプログラムはどのLEDを光らせるか考えなさい。課題すべての緑色のLEDを光らせるにはどうしたらよいか。プログラムを作成し、実行して検証しなさい。次はタイマーを用いるときの典型的な命令文である。t;でtmrと呼ばれるタイマーtmrを定義し、tmrの時刻を変数tに入力する。次にある一定の時間(FLASH_PERIOD)が経った後に、イベントが生じるようにするためには次のようにする。void;まず、tに一定時間加える。このとき、tmrの時間を入力するように完結した命令文にする必要があるが、実際には、どこにも代入する必要がないのでvoidが用いられている。次のプログラムを実行してみる。課題FLASH_PERIODの時間を徐々に減らしてみる。赤と緑のLEDの色が混ざりオレンジ色となるのを確認すること。複数の入力イベントを有し、イベントが発生したところから、その入力に対する処理を行うプログラムを作成することとする。いま、LEDは、一方で点滅し、他方で、時計方向に回転しているとする。点滅の間隔とLEDを一つ進める間隔は異なっているとし、それぞれの間隔が来たときに点滅、一つ進めるの作業を行うものとする。この種の作業のために設けられているのが、select文である。break}という形をとる。プログラムプログラムを完成させると次のようになる。問題このプログラムを詳しく説明しなさい。反時計回りにするにはどうしたらよいか?プログラムを示しなさい。説明2つの処理を並列に行うことを考える。一つはLEDを点滅させながら回転させることであり、他の一つはボタン(一つでも複数でも良い)を押すとスピーカーから音が出てくるものである。このような並列処理は次のようなプログラムで実現される。speaker);}cycleLEDのプログラムは、先に出てきたプログラムを修正したものである。pinsneq(0xf)によりなされることを利用して、ボタンが押されている間は、スピーカに断続的な信号を送る様にする。スレッド間通信スレッドの間での通信は、必ず、チャネルを用いて行われる。共有メモリや共有データを用いて通信を行うと、資源へのアクセス競合が生じ、重大な問題を引き起こす可能性がある。チャネルを用いることでこれを避けることができる。スレッドによる並列処理のプログラムを少し修正して、ボタンを押した時、スピーカーから音が出るだけでなく、LEDの色も変わる様にしたい。このとき、ボタンを押したという情報が、LEDを点滅回転させているスレッドに伝える必要がある。そこで、ボタンを押した時、チャネルを通して信号が伝わるようにする。下のプログラムでは整数の0が送られるが値はあまり意味がない。ボタンを押した時、LEDを点滅させているスレッドに、チャネルを通して信号が送られてくるので、これを受けてLEDの色を変える。mainのプログラムは、チャネルcを介して通信を行うので、次のようにプログラムを変更する。buttonListenerはボタンが押された時チャネルに信号を送り出す。break;をプログラムの中に組み入れてあげればよい。cycleLEDとbuttonListenerの関数では、チャネルの型はchanendとする。問題プログラムでは、次のようになっている。}これを、次のように変えたとする。}LEDの振舞いがどのように変わるか、実際に動作させて、調べなさい。参加グループ知識リンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!bitterharvestさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。