<91E63389F1>

Similar documents
HW-Slides-03.ppt

HW-Slides-01.ppt

プログラミング基礎

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

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

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

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

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

Java講座

PowerPoint Presentation

3. 標準入出力

slide5.pptx

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

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

Microsoft Word - 実験4_FPGA実験2_2015

プログラミング基礎

プログラミング基礎

Microsoft Word - VB.doc

kiso2-03.key

PowerPoint Presentation

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

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

Microsoft PowerPoint - prog03.ppt

Prog2_12th

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

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

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

Microsoft PowerPoint - prog06.ppt

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

C#の基本

Microsoft PowerPoint - ruby_instruction.ppt

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

プログラミングA

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

プログラミング入門1

Microsoft PowerPoint - C_Programming(3).pptx

プログラミング実習I

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

Prog1_10th

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

プログラミング入門1

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

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

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

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

PowerPoint プレゼンテーション

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

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

Microsoft PowerPoint - prog04.ppt

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

ガイダンス

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

ETCB Manual

Microsoft Word - Writing Windows Installer's DLL.doc

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

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

プログラムの基本構成

Program Design (プログラム設計)

Si 知識情報処理

HW-Slides-04.ppt

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

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

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

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

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

Microsoft PowerPoint - prog07.ppt

2006年10月5日(木)実施

Prog1_12th

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - prog03.ppt

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

Maser - User Operation Manual

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

PowerPoint プレゼンテーション

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

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

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

PowerPoint プレゼンテーション

プログラミング入門1

ポインタ変数

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

PowerPoint プレゼンテーション

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

前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

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

kiso2-09.key

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

スクールCOBOL2002

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

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

計算機プログラミング

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

Microsoft PowerPoint - prog08.ppt

情報処理演習 B8クラス

プログラミングA

Transcription:

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

前回予告した今日の内容 次回は 別のサンプルプログラム ( 二つ ) を実行させて 動作させながら XC のプログラム言語の文法的な説明を行います while, select/case, if/else などの XC の文法を学びます LED への出力だけではなく ボタンの入力を学びます 並列プログラミング ( マルチスレッド ) の書き方を導入します 2

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

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

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

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

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( P20) timerafter は必ず when から呼ばれる必要がある (P133) 9

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

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

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

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 in port button, chanend c); int main() chan c; par flashleds(p_leds_3_0, c); buttonlistener(p_button_0, c); return 0; ( 続く ) 13

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; ison =!ison; time += 50000000; break; void buttonlistener(in in port button, chanend c) int led = 1; while (1) select case button when pinseq(0) :> void: c <: led; led = (led + 1) & 0xF; button when pinseq(1) :> void; break; case c :> ledval : break; 14

10 行目 11 行目 port からのデータ入力 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] をクリック 定義ファイルの定義行が表示される 15

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

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

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

XK-1(XMOS) モジュール XK-1 Board Features Single XS1-L1 device 400 MIPS Eight threads 64Kbytes RAM 8Kbytes OTP memory 128Kb SPI FLASH 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 マルチスレッド (8 threads!) え?RAM がたったのこれだけ? 19

chan と chanend 互いに独立 のスレッドは どうやって相手のことを知るか? 間にチャンネルを持っていて その中身を見る 一つのチャンネル (chan) は 二つのチャンネルエンド (chanend) を持つ 二つのチャンネルエンドを flashleds と buttonlistener とで共有している チュートリアル P9 チャンネルが同時進行の場合 出力操作は対応する入力操作の準備が整うまで待機します 同様に 入力処理は処理継続の前に対応する出力操作を待ちます 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 を点灯させます 正論理 負論理の考え方を学びます 25