HW-Slides-03.ppt

Similar documents
<91E63389F1>

HW-Slides-01.ppt

プログラミング基礎

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

XMOS プログラミング入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

Java講座

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

プログラミング入門1

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

slide5.pptx

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

3. 標準入出力

kiso2-03.key

PowerPoint Presentation

Prog2_12th

Microsoft Word - VB.doc

PowerPoint Presentation

Microsoft Word - 実験4_FPGA実験2_2015

1. ST-LINK Utility のダウンロード Windows7 PC にインストールする場合について説明します 1.1. STMicroelectronics のサイト STMicroelectronics のサイトを開きます ここに ST-LINK と入力して検索します ( 右側の虫眼鏡を

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

プログラミング基礎

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

プログラミング基礎

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

Microsoft PowerPoint - C_Programming(3).pptx

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミング実習I

C#の基本

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

VelilogHDL 回路を「言語」で記述する

今回の内容 マイクロコンピュータにおけるプログラミング 機器の中に組み込まれる ロボット 自動車 家電 などいろいろな分野で利用 プログラムを用いて外部の装置を動作させる マイコンから の出力 発光ダイオード Light Emitting Diode 液晶ディスプレイ Liquid Crystal

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

プログラミング入門1

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

ETCB Manual

Prog1_10th

テキストファイルの入出力1

プログラミング入門1

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Program Design (プログラム設計)

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - prog06.ppt

PowerPoint プレゼンテーション

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Taro-再帰関数Ⅲ(公開版).jtd

2006年10月5日(木)実施

Prog1_12th

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Writing Windows Installer's DLL.doc

Microsoft Word - HOBO雨量専用説明書_v1.1.doc

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

Microsoft PowerPoint - prog03.ppt

プログラミング入門1

PowerPoint プレゼンテーション

プレゼンタイトルを入力してください

PowerPoint プレゼンテーション

Si 知識情報処理

HW-Slides-04.ppt

プログラムの基本構成

スクールCOBOL2002

kiso2-09.key

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Microsoft PowerPoint - prog04.ppt

計算機プログラミング

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

情報処理演習 B8クラス

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

デジタル表現論・第4回

Microsoft PowerPoint - 10.ppt [互換モード]

Nios II Flash Programmer ユーザ・ガイド

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

Maser - User Operation Manual

PowerPoint プレゼンテーション

スライド 1

ガイダンス

ポインタ変数

WinXP07 ( 版 ) Microsoft Windows XP Professional でのスパイウェア対策ソフトの導入 0. 準備 ネットワークケーブルを繋いでノート PC を起動し, ログオンする 1. スパイウェア対策ソフト (Spybot - Search & D

Microsoft PowerPoint - 第3回目.ppt [互換モード]

A 既製のプロジェクトがある場合

- VHDL 演習 ( 組み合せ論理回路 ) 回路 半加算器 (half adder,fig.-) 全加算器を構成する要素である半加算器を作成する i) リスト - のコードを理解してから, コンパイル, ダウンロードする ii) 実験基板上のスイッチ W, が, の入力,LED, が, の出力とな

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

LAeq(LX)を10分毎に24時間繰り返し測定し自動保存する

Microsoft PowerPoint - kougi2.ppt

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

ST-LINK/V2-1 への Upgrade V /10/07 ST-LINK/V2-1 USB driver のインストールおよび ST-LINK/V2-1 の Upgrade について説明します ST-LINK/V2-1 USB driver をインストールしてから ST-LIN

Microsoft PowerPoint - prog07.ppt

Transcription:

ハードウェア実験 組み込みシステム入門第 3 回 2012 年 10 月 4 日 XC の文法 / スイッチを読む

まず 最初のプロジェクト! tutorial( 入門学習 ) の Cheat Sheet を開き [Flash an LED while cycling ] をクリック! [Start working on this task] をクリックする! Tutorial 教材の P6~P7 に相当 4 LED を異なる頻度で円状に点滅させる (select の使用方法 ) となっていますが 円状 (cycling) は 周期的に と読んで下さい! 最後の LED の次に 最初の LED が点滅し 終点がない ため cycle 状とか ring 状という表現をします cycling LED ( 円状に LED を点滅させる ) ring buffer の構造 ( 終点がない = リング状 = 最後の次が最初になる ) 2

前回の手順を思い出して下さい /* ====================================================================== ====== Name : xk1-cycle-led.xc Description : Flash and cycle LEDs at different rates */ ====================================================================== ====== #include <xs1.h> #define FLASH_PERIOD 10000000 #define CYCLE_PERIOD 50000000 前回同じ説明を 2 回繰り返しました out port led = XS1_PORT_4F; int main(void) unsigned ledon = 1; unsigned ledval = 1; timer tmrf, tmrc; unsigned timef, timec; tmrf :> timef; tmrc :> timec; 思い出して下さい 今回は Cycle LED Project です while (1) select case tmrf when timerafter(timef) :> void: ledon =!ledon; if (ledon) led <: ledval; else led <: 0; timef += FLASH_PERIOD; break; case tmrc when timerafter(timec) :> void: ledval <<= 1; if (ledval == 0x10) ledval = 1; timec += CYCLE_PERIOD; break; return 0; 自動生成されます 3

4 前回の実行手順の確認! これまでの課題と同じ手順でビルドし 実行します プロジェクト名をクリックし [ ハンマー ] でビルド 実行ファイル名をクリックし をクリック Run As で [XCore Application] を選び OK

5 xk1-cycle-led.xc timer tmrf, tmrc; // タイマー unsigned timef, timec; // 時刻の変数! 名前から機能を推定する! 上の方に #define FLASH_PERIOD 10000000 #define CYCLE_PERIOD 50000000! が定義されている! F は Flash ( 点滅する ), C は Cycle( 巡回 )! このことから 点滅を制御するロジックと 巡回を制御するロジックの 両方があることがわかる

6 変数 ledon の使い方! 28 行目! if (ledon) led <: ledval;! else led <: 0;! ledonがtrue( 真 ) なら ledにledvalを設定! 27 行目! ledon =!ledon;! ledonが真なら偽 偽なら真 ( 反転 ) を代入! この1 行で 点滅 を設定している! ということは 26 行目が 点滅 切り替えの判定部分! 26 行目! case tmrf when timerafter(timef) :> void:! tmrf が timef になったら break までを実行

7 行番号の表示方法! Menu の [Windows] から [Preferences] を開く! General->Editors->Text Editors と開いていき Show line numbers にチェックを入れる

timerafter! 説明書 Programming XC on XMOS Devices P20 から! The conditional input statement t when timerafter ( time ) :> void ;! waits until this time is reached, completing the input just afterwards.! この行があると タイマーが条件を満たすまでは実行を待つ! 複数の スレッド が同時実行できるため このスレッドが実行停止しても 必ずしも CPU は止まらない! [timer 変数 ] when timerafter( 整数値 time ) :> void ;! when timerafter( ) :> void ; で覚える! void の代わりに time に代入すると エラーになる (P20)! timerafter は必ず when から呼ばれる必要がある (P133) 8

select 文 l Select ブロック内の case の条件のうち どちらか 先に 条件を満たした方が先に実行される l この表現の場合には timerafter で 待つ ことなく 他の case の条件も判定される l select / case / break のセットで覚える select case tmrf when timerafter(timef) :> void : : break; case tmrc when timerafter(timec) :> void : : break; 9

10 変数 ledval の使い方! 32 行目 ledval <<= 1; if (ledval == 0x10) ledval = 1;! ledval を 左に 1 ビット分シフトし 値が 0x10 になったら ledval に 1 を代入する! 初期値は 18 行目で代入 (1) している! 前回の 発展課題 の内容です

11 報告課題! led が逆向きに点灯するように プログラムを改変して下さい! (C 評価の条件 )! 報告の様式として整っているもの ( 考察や感想も十分にあるもの ) については この課題のみの報告でも B 評価以上で判定します

Tutorial 最後のプロジェクト! XK-1 の Button プロジェクトを 生成します /* ============================================================================ Name : xk1-button.xc Description : Flash and cycle LEDs at different rates and respond to buttons ============================================================================ */ #include <xs1.h> out port p_leds_3_0 = XS1_PORT_4F; in port p_button_0 = XS1_PORT_1K; in port p_button_1 = XS1_PORT_1L; void flashleds(out port leds, chanend c); void buttonlistener(in port button, chanend c); int main() chan c; par flashleds(p_leds_3_0, c); buttonlistener(p_button_0, c); return 0; ( 続く ) 12

xk1-button.xc ( 続き ) void flashleds(out port leds, chanend c) timer t; unsigned int time; int ledval = 1; int ison = 1; t :> time; leds <: ledval; while (1) select case t when timerafter(time) :> void: if (ison) leds <: ledval; else leds <: 0; void buttonlistener(in port button, chanend c) int led = 1; while (1) select case button when pinseq(0) :> void: ison =!ison; time += 50000000; break; c <: led; led = (led + 1) & 0xF; case c :> ledval : break; button when pinseq(1) :> void; break; 13

14 port からのデータ入力! 10 行目 11 行目 in port p_button_0 = XS1_PORT_1K; in port p_button_1 = XS1_PORT_1L;! 入力用のポートとして in port でボタンを定義! XS1_PORT_1K の値を調べる! XS1_PORT_1K をハイライトして 右クリックする! [Open Declaration] をクリック! 定義ファイルの定義行が表示される

port のアドレスと名前! port には ハードウェア上の アドレス がある ( 番地 )! ここに XC の言語上で 名前 をつけて アクセスする! XS1_PORT_1K は port で 0x10900 番地! この番地が ボタン だというのは 回路図 ( 右の図よりももっと詳細な図 ) による! in で宣言されているので 入力ポート として使われる 15

Event Listener! Java の場合には Event を受け付ける関数! ButtonListenerや MouseListener! MouseMoutionListner, WindowListener! などが APIで定義されて提供されている! Window(X-Window や Windows など ) のプログラミングの必須項目! 但し XC では buttonlistener は ごく普通のユーザ定義関数!! 特別扱いできない! 16

par 構文による並列化! チュートリアルガイド P8 を参照 chan c; par flashleds(p_leds_3_0, c); buttonlistener(p_button_0, c);! par は parallel[ 並列 ] の par! flashleds と buttonlistener とは 両方が別々のスレッドとして 独立に ( 同時並行で ) 実行される! XK-1 は 8 スレッドまで対応可能! チャンネルを用いて スレッド間で交信する! 交信用のチャンネルを chan c; で宣言し! 独立して走るそれぞれの関数に渡す 17

18 XK-1(XMOS) モジュール! XK-1 Board Features! Single XS1-L1 device! 400 MIPS! Eight threads マルチスレッド (8 threads!)! 64Kbytes RAM! 8Kbytes OTP memory! 128Kb SPI FLASH え?RAM がたったのこれだけ?! Four user-configurable LEDs and two pushbutton switches! Two 20-way XSYS connectors for XTAG-2 debug adapter and additional XK-1s! Two 16-way IDC headers for connecting additional components! 24 I/O user expansion

chan と chanend! 互いに独立 のスレッドは どうやって相手のことを知るか?! 間にチャンネルを持っていて その中身を見る! 一つのチャンネル (chan) は 二つのチャンネルエンド (chanend) を持つ! 二つのチャンネルエンドを flashleds と buttonlistener とで共有している! チュートリアル P9! チャンネルが同時進行の場合 出力操作は対応する入力操作の準備が整うまで待機します 19

20 チャンネルを使っての交信! buttonlistener 内 :73 行目 c <: led;! 変数 [ led ] の値をチャンネルに書き込み! flashleds 内 :56 行目 case c :> ledval : break;! チャンネルから受け取った値を [ ledval ] に代入! こうやって 複数のスレッド間でデータを受け渡ししている

21 flashleds 内の処理 select case t when timerafter(time) :> void: : break; case c :> ledval : break;! 二つの条件 ( のどちらか ) で処理を実行する! (1) timer t が time になった時 [ 点滅の間隔 ]! (2) チャンネル C からデータを受け取った時

22 buttonlistener 内の処理 case button when pinseq(0) :> void: c <: led; led = (led + 1) & 0xF; button when pinseq(1) :> void; break;! pinseq() は port in is equal to! ポート button が 0 に等しくなるまで待つ! pinseq と pinsneq は 必ず when と組んで呼ばれる! ボタンが押されたら led の値を変更し ボタンが離されるまで待つ この処理を繰り返す

23 発展課題! 現在のプログラムは ボタンを一つしか処理していません! もう一つのボタンが押されたときには LED パターンが表示する数値が カウントダウンする (1 ずつ減る ) ようにプログラムして下さい! 0 の次は 0xF になるようにして下さい! (A 評価の条件とします )

24 次回の予告! 次回は (tutorial を卒業して ) XK-1 を IC トレーナキットに接続します! XK-1 上の LED ではなく IC トレーナキット上の LED を点灯させます! 正論理 負論理の考え方を学びます