「xmosプログラミング入門」 サンプルページ · 1.3...

20

Upload: others

Post on 12-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語
Page 2: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

「XMOS プログラミング入門」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/085251

※このサンプルページの内容は,初版 1刷発行時のものです.

Page 3: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語
Page 4: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

i

まえがき

 マイクロプロセッサが世に出てから久しく,かれこれ 40年近くになる.当時のプロセッサは,現在のパソコンに搭載されているものと比較すると桁違いに小規模であり,かつ処理スピードも比較にならないほど遅かった.しかし,どこか新鮮で光り輝いていたように思う.筆者も初めてマイコンのプログラムを作成し,おそるおそる実行キーを押した途端,LEDが見事に点滅したときの感動をいまでも思い起こすことがある. この間を振り返ると,プロセッサの高速化と高密度化とともに,組込みシステムの設計・開発方法も大きく変貌した.当初の手作業で作成した複雑で面倒なコードは,コンパイラやリアルタイム OSに任せて高級言語で記述する方式へと大きく舵を切った. 以来,組込みソフトウェア開発では,リアルタイム性を実現するための割り込みやスケジューリングといった組込み OS特有の処理が常につきまとい,組込みプログラマをおおいに悩ませることになった.最近では,さらに処理能力を高めるためにマルチコア化したプロセッサが出現し,安全なプログラムの開発を一段と難しくしている. ここで紹介する XMOSプロセッサも,32ビットのマルチコアプロセッサである.ただし,これまでのプロセッサと違い,XMOSプロセッサには割り込みやスケジューリングの概念がない.また,リアルタイムOSも必要としない.その理由は,XMOS

プロセッサのコアがイベント駆動型のマルチコアであり,複数のイベントを複数のコアで同時に処理してしまうからである.さらに,コア間の同期や情報交換は,チャネル通信により自動的に行われる.そのため,プログラマは割り込み処理やスケジューリングなどのような悩ましいプログラミングから解放され,「思ったとおり,考えたとおり」にプログラムを記述することができる.事実,筆者は XMOSプロセッサを用いて割り込み処理のない,見通しのよいプログラムを知ったとき,マイクロプロセッサが初めて世に出現したときと同じような感覚に襲われた. このような従来のプロセッサと異なる動作原理の XMOSプロセッサは,下記のような多くのメリットを生み出す. ・リアルタイムOSを必要としないので,設計開発の過程が簡素化される ・応答が速く,FPGAや ASICの領域にも利用できる ・安全なプログラム開発ができる ・柔軟性や拡張性に富む ・システム開発の期間が大幅に短縮される ・開発コストが激減する

Page 5: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

ii  まえがき

 いずれのメリットも,今後の組込みシステムのあり方を示唆するように思われる. 本書は,このようなイベント駆動型プロセッサである XMOSのプログラミングにすぐに取り組めるように構成されており,組込み技術者向けの解説書としてはもちろんのこと,次世代を担う大学・高専の実習用の教科書としても利用できる. まず,前半の Chapter 1と Chapter 2で,XMOSプロセッサの基本的な構成やプログラムの設計図に相当するデータフローダイアグラムを概説したのち,Chapter 3

で XMOSの開発環境を事例とともに紹介する.そして,Chapter 4では,XMOS特有のプログラムを厳選して平易に紹介する.言語には一般的な C言語を拡張したXC

言語を用いるので,ほとんど違和感はない.本書では,評価ボードとして,シンプルな(株)北斗電子製の XMOS学習キットを使用している.前半だけでも「思ったとおり,考えたとおり」にプログラムが記述できることを体感できるであろう.なお,この XMOS学習キットに関する URL情報などは,巻末の「参考文献など」に一括記載している. 後半では,具体的な外部信号の入出力やリアルタイム性の確保を事例とともに紹介する.評価ボードは Chapter 4と同様に,(株)北斗電子製の XMOS学習キットを用いているが,ほかの評価ボードでも同様の実験が可能な事例をとりあげている.いずれの事例も目的を見失わないように,できるだけシンプルなテーマを選定している.たとえば,「Example A パルスの発生とパルスカウンタ」のように,ジャンパ線 1本のシンプルな事例に XMOSプロセッサの凄さが凝縮されている. 全事例に共通していることは,インターフェース回路をほとんど必要とせず,簡単に実験ができることである.これは,ほかの一般的なプロセッサにはない特長であり,XMOSプロセッサがイベント駆動型のプロセッサであることの証でもある. XMOSプログラミングは,従来の定番である割り込み処理,スケジューリングあるいはリアルタイム OSなどとは無縁で簡単明瞭であるといわれても,なかなか納得できないかもしれない,しかし,ぜひ XMOSプロセッサのプログラムを 1行でも 2

行でもよいから実際に実行して,イベント駆動を体感してほしい.きっと,カルチャーショックを受けるに違いない.そして,これを機会に組込み技術者は原点に帰って,組込みプロセッサのあり方をいま一度考えてほしい.筆者の胸中は,「XMOSを語らずして組込みを語るべからず」である.

 2014年 2月中原博史 

Page 6: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

iii

Contents

Chapter 1 XMOSプロセッサ 1  1.1 デバイスの構成単位 - xCORE Tile-  1

1.2 イベント駆動型マルチコア - xCORE-  3

1.3 リンクによる通信と同期 - xCONNECT-  5

1.4 割り込み処理とイベント駆動  8

1.5 開発言語  10

1.6 開発環境  12

Chapter 2 XMOSプログラミングとデータフローダイアグラム 15  2.1 データフローダイアグラム  15

2.2 CSPモデルの基本  16

2.3 プロセス表記の拡張  16

2.4 拡張プロセス表記の例  18

Chapter 3 統合開発環境のインストールとその基本操作 21  3.1 統合開発環境のインストール  21

3.2 XNファイルの準備  23

3.3 テストプログラムの作成とコンパイル  24

3.4 XMOSボードの接続  28

3.5 プログラムの実行  28

3.6 フラッシュメモリへの書き込み  31

3.7 フラッシュメモリからのブート  33

Chapter 4 XMOSプログラミングの基本 35  4.1 最初のプログラム  35

4.2 並列プログラミングの基本  37

4.3 ボタンスイッチの状態取得  41

4.4 チャネルの取扱い  43

4.5 サンプリング  52

4.6 ゲート  54

4.7 タイムアウト  56

Page 7: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

iv  Contents

4.8 ガード  59

4.9 ボタンスイッチのイベント処理  62

XMOSプロセッサの応用事例Example A パルスの発生とパルスカウンタ 73  A.1 PulseGenプロセス  74

A.2 PulseCounterプロセス  75

A.3 StartButtonプロセス  76

A.4 メインプログラムと動作原理  77

Example B UARTによるシリアル通信 79  B.1 Send_UARTプロセス  80

B.2 Read_UARTプロセス  81

Example C 模型用 RCサーボモータの駆動 85  C.1 模型用 RCサーボモータの特徴  85

C.2 プロセスの設計  86

C.3 ServoPulseGenプロセス  87

C.4 ServoPosプロセス  88

C.5 メインプログラム  89

C.6 実際の動作  90

Example D インクリメンタル型ロータリエンコーダ 91  D.1 ロータリエンコーダと XMOSプロセッサ  91

D.2 全体のプログラム構成  92

D.3 RotaryIncプロセス  93

D.4 ServoPos2プロセス  94

D.5 メインプログラム  95

Example E アブソリュート型ロータリエンコーダ 97  E.1 アブソリュート型ロータリエンコーダの特徴  97

E.2 全体のプログラム構成  98

E.3 RotaryAbsプロセス  98

Page 8: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

v

E.4 ServoPos3プロセス  99

E.5 メインプログラム  100

Example F ADコンバータと傾斜センサ 103  F.1 SPI内蔵 ADコンバータと XMOSチップの接続  103

F.2 タイミングシーケンス  104

F.3 インターフェースプログラム  104

F.4 傾斜センサのデータ取得  106

Example G XMOSチップとWindows PCを結ぶ       RS232チャネル 109  G.1 ハードウェアとシステムの全体構成  109

G.2 RS232_ChannelEndクラス  111

G.3 RS232_X32プロセス  114

G.4 RS232チャネルの利用  115

Example H リンク接続によるマルチタイルシステム 121  H.1 XTAG2拡張ボードの設定  122

H.2 学習ボードの準備  123

H.3 リンクケーブルの作成  123

H.4 XMOSボードの設定  124

H.5 システム構成と XNファイル  125

H.6 サンプルプログラム  126

H.7 外部電源による起動  128

H.8 XTAG2拡張ボードの増設  129

H.9 リンクスピードの設定  129

Appendix XMOS学習キットの構成 133  1. 基本構成  133

2. 学習ボードのレイアウト  134

参考文献など 139 

索 引 141 

Page 9: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語
Page 10: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

1

Chapter

1XMOSプロセッサ XMOSプロセッサは,「使いやすい」,「応答が早い」,「汎用性・柔軟性に富む」,「組込みに最適」,「リアルタイム性が確保される」などの多くの特長をもつ.これらの特長がどのようにして生まれるのか,その機能的な側面に注目して解説しよう.

1.1 デバイスの構成単位 ― xCORE Tile ― XMOSプロセッサは,近年開発された新しいタイプのマルチコアのマイクロコントローラである.組込み用途に特化されたプロセッサであり,従来のプロセッサと比較して多くの特長をもつが,もっとも重要な特長として以下の 5点を挙げることができる. ①リアルタイムOSを必要としないシンプルな設計開発 ②イベント駆動による速い応答 ③チャネル通信による安全なプログラム開発 ④ソフトウェアによる柔軟なインターフェース ⑤リンクによる容易な拡張 これらの特長は,XMOSプロセッサの基本的なアーキテクチャから生まれるものであり,特に,コアの構成とその動作原理,およびコア間の通信機能に依存する.そのユニークなコアは xCOREとよばれ,複数の論理コアから構成されている.そして各論理コアは,xCONNECTとよばれる通信機能により相互に接続されている.各論理コアは,1.2節で詳しく解説するように,必要なときにのみに起動するイベント駆動型であり,通信しながら同期して並列動作できる.しかも,各論理コアの起動/停止はハードウェアで瞬時に切り替えられるのできわめて高速である(これらの動作は,1.3節,1.4節で詳しく解説する). たとえば汎用的な Lシリーズの XS1-L8デバイスのコアは,図 1.1に示すように,8個の論理コア(Logical Core)から構成されている.このコアにメモリや通信機能(図中の xCONNECT)あるいは I/Oポートなどを付加した“xCORE Tile”が,XMOS

デバイスの基本的な構成単位になっている.そして,このタイルどうしはその通信機能により相互に接続することができ,必要に応じてコア数を増大したデバイスやシステムを容易に実現できるように構成されている.

Page 11: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

2  Chapter 1 XMOSプロセッサ

図 1.1 xCORE Tile

 現在,処理能力に応じて,論理コア数が,4,6,8,10,12,16の各デバイスが供給されているが,これらの異なるデバイス上の任意のコア間でも,同じタイル上の場合と同様に通信することが可能であり,非常に拡張性に富んだプロセッサとなっている. この Lシリーズのほかに,ADコンバータ部を付加した Aシリーズや,USB2.0

PHYを搭載した Uシリーズがある.図 1.2は,2タイルで構成されている 8論理コアの Aシリーズの例(XS1-A8)である.図 1.3は Uシリーズの 12論理コアの例(XS1-U12)であり,3タイルで構成されている.各シリーズとも,処理能力に応じて論理コア数を選択できるように複数のバリエーションがある.

図 1.2 XS1-A8デバイス

Page 12: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

1.2 イベント駆動型マルチコア ― xCORE ―  3

図 1.3 XS1-U12デバイス

 以下では,この xCOREアーキテクチャを,もっとも基本的な 1タイル構成の汎用デバイス XS1-L8を例に解説しよう.

1.2 イベント駆動型マルチコア ― xCORE ― 汎用デバイス XS1-L8では,コアのクロック周波数が 400 MHzと 500 MHzの 2

種類のデバイスが供給されている.図 1.1に示すように,コアを構成する 8個の論理コアは,すべて同じ 32ビット RISCタイプである.メモリは 1タイル当たり 64 KB

の RAMが搭載され,各論理コアに共有されている.同様に,I/Oポートも各論理コアに共有され,どの論理コアからも任意の I/Oポートにアクセスできる. 各論理コアは,最低でも論理コア数で時分割されたクロックで動作することが保証

Page 13: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

4  Chapter 1 XMOSプロセッサ

されている.したがって,通常の利用状況では,たとえばクロック周波数が 400

MHzのデバイスでは,クロック周波数が 50 MHzのプロセッサが 8個搭載されていると考えて差し支えない.もし,利用するコア数が少ない場合は,クロックを有効に分配することにより論理コアのクロックが上がる.たとえば,500 MHzのデバイスで 4個の論理コアのみを使用した場合,論理コア 1個当たり 125 MIPSの処理能力を発揮する.全体では,125 MIPS× 4= 500 MIPSになる.

I/Oポートの役目 各論理コアが I/Oポートをアクセスする場合,I/Oポートを最小時間 10 ns単位で操作できる.XMOSプロセッサの主な役目は,この I/Oポートを各論理コアで操作して,任意の動作をする ICチップを実現することである.この発想が,一般的なプロセッサと大きく異なる点である.ほかの一般的なプロセッサでは,アドレスバスとデータバスを介してメモリ間でデータをやりとりしながら数値を求めるのに対して,XMOSプロセッサは,I/Oピンの応答を求めることに特化している.事実,図 1.1

に示される xCORE Tileには,専用のアドレスバスやデータバスが存在しない.

I/Oポートイベントの入力待ち さらに,各論理コアは,I/Oポートのイベントを入力待ちできる.すなわち,I/Oポートピンのハイレベルからローレベルへの遷移,あるいはローレベルからハイレベルへの遷移が発生するまでプログラムの進行を停止できる.そして,遷移が発生したらコアが自動的に動作状態になり,プログラムを進行させることができる.このようにxCOREは,I/Oポートの変化すなわちプロセッサ外部の信号で直接駆動することができるイベント駆動型マルチコアである.これらの動作はハードウェアで実現されており,一般的なプロセッサに見られるような RTOSを利用した割り込み処理とは異なり,非常に高速である.各論理コアの処理の大きな流れは,入力ポートピンのイベントに対応した処理を論理コアで実行し,所定の出力ポートピンを 10 ns単位の精度で操作することになる.つまり,任意に応答する ICをイベント駆動型のマルチコアのプログラムで実現することになる.この点を強調して,XMOSプロセッサは,“software defined silicon”ともよばれている.このように XMOSプロセッサは,組込み用途に特化したプロセッサであり,FPGAや ASICに置き換わって利用されることが期待される.

Page 14: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

  71

 Chapter 4では,実際の外部信号を取り扱わずに,主に XMOSプロセッサを利用するための基本的なアーキテクチャやプログラミングモデルを中心に解説した.ここからは,実際に学習ボードのプロトタイプ領域に簡単な実験回路を作成し,これらの回路とのインターフェースの取り方や信号の取扱いを学ぶ.おそらく,XMOSプロセッサのシンプルな設計思想や自由度の高い実装能力を実感できることと思う.

XMOSプロセッサの応用事例

Examples

パルスの発生とパルスカウンタUARTによるシリアル通信模型用 RCサーボモータの駆動インクリメンタル型ロータリエンコーダアブソリュート型ロータリエンコーダADコンバータと傾斜センサXMOSチップとWindows PCを結ぶRS232チャネルリンク接続によるマルチタイルシステム

A

B

C

D

E

F

G

H

Page 15: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語
Page 16: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

Example A

パルスの発生とパルスカウンタ

 ここでは,I/Oポートの利用法,プロセスのつくり方,プログラムと DFDの関係およびプログラムの動作原理などを学ぶ.この事例に,XMOSプロセッサの多くの基本的な事項が含まれている.

 プログラムは,図 A.1の DFDに示すように,パルスを発生させる PulseGenプロセス,パルス数をカウントする PulseCounterプロセス,開始ボタンスイッチの信号を検知する StartButtonプロセスから成る.これらのプロセスは XMOSプロセッサの各論理コアに配置され,ソフトウェアでありながら通常のハードウェアのようにはたらく.すなわち,PulseGenプロセスは,実際に I/Oポートピンからパルス信号を出力するので,あたかもパルス発生回路のように,また,PulseCounter

プロセスは,エッジトリガで駆動するパルスカウンタ ICのように動作する. 図 A.2のように,PulseGenプロセスの出力ポートピンは,PulseCounterプロセスの入力ポートピンとジャンパ線で実際に接続されている.また,図 A.3は,各プロセスのつながりを変えずに,XMOSチップ上に実体配線図のように書き換えた図である.この図からは,XMOSチップがあたかも FPGAであるかのように見えるが,FPGAの場合はこれらのプロセスの機能をハードウェアで実現するのに対して,XMOSチップの場合はソフトウェアで実現する点が大きく異なる.

図 A.1 PulseCounterの DFD

Page 17: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

74  Example A パルスの発生とパルスカウンタ

図 A.2 ジャンパ線による接続

図 A.3 XMOSチップ上に配置したイメージ

A.1 PulseGenプロセス リスト A.1に PulseGenプロセスのプログラムを示す.まず,リスト中の①で開始時刻を取得している.そして②では,出力ポートを“1”(High)の状態に設定し,③と④で 50単位時間待つ.1単位時間は 10 nsである.したがって,Highの状態が500 ns維持される.500 ns経過すると,⑤により“0”(Low)の状態に設定され,Lowの状態も同様に,⑥と⑦により 500 ns維持される.以下,whileループで繰り返すので,出力ポートからは 1 MHzのパルス信号が出力される.このように,ソフトウェアで 1 MHzの周波数を制御できることには驚かされる.実際にプログラムを実行する場合は,図 A.2のように,この出力ポートピンと PulseCounterプロセスの入力ポートピンを,学習ボード上でジャンパ線で接続する.

Page 18: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

A.2 PulseCounterプロセス  75

リスト A.1 PulseGenプロセス

void PulseGen(out port outP){ timer tmr; unsigned time; tmr :> time; // ① 開始時刻の取得 while(1){ outP <: 0xf; // ② 出力ポートを“1”の状態に設定 time += 50; // ③ 50 × 10 ns = 500 ns tmr when timerafter(time) :> void; // ④ outP <: 0x0; // ⑤ time += 50; // ⑥ 50 × 10 ns = 500 ns tmr when timerafter(time) :> void; // ⑦ }}

A.2 PulseCounterプロセス リスト A.2は,PulseCounterプロセスのプログラムである.PulseCounterプロセスは,最初に①で StartButtonプロセスから開始の合図を待つ.ボタンスイッチが押されて開始の合図が到着すると,②により現在時刻を取得した後,③のwhileループで入力ポートピンの状態変化を検知する.入力ポートピンの状態(電圧)が変化した場合は④により検知され,old_Pの値は⑤のように新しい状態に更新される.したがって,⑥のカウント値は,Highから Lowの状態変化と,LowからHighへの状態変化の両方がカウントされるので,周波数の倍の値になる.指定された計測時間に達した場合は,⑦が選択されるので変数 goingが 0に設定され,whileループが終了する.そして,⑧で計測したパルス数(周波数)を StartButton

プロセスにチャネル経由で返している.XC言語のチャネルは,この例のように双方向(半二重)に通信ができるので,プログラムが簡潔になる.

リスト A.2 PulseCounterプロセス

void PulseCounter(chanend St, unsigned MTime_ms, in port inP){ timer tmr; int stcmd; unsigned going, mt, now; unsigned old_P, new_P, count; count=0; mt=MTime_ms*100000; old_P=0xf; going=1; while(1){ St :> stcmd; // ① プロセスから開始の合図を待つ count=0; going=1; tmr :> now; // ② 現在時刻の取得 while(going){ // ③ select{ case inP when pinsneq(old_P) :> new_P: // ④

Page 19: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

76  Example A パルスの発生とパルスカウンタ

old_P=new_P; // ⑤ count=count+1;

// ⑥ 立ち上がりと立ち下がりをカウント break; case tmr when timerafter(now+mt) :> void: // ⑦ going = 0; break; } } St <: count/2; // ⑧ 周波数に換算 }}

A.3 StartButtonプロセス 次に,開始信号を発信する StartButtonプロセスのプログラムをリスト A.3に示す.まず最初に,①のように開始ボタンスイッチのクリックを促すメッセージをコンソールに表示させ,次の②でボタンスイッチがクリックされるのを待つ.クリックイベントが発生するまで,プログラムの進行はここでブロックされる.なお,②のWaitForClick()などのボタンスイッチのイベント処理は,「4.9 ボタンスイッチのイベント処理」で詳しく解説している.ボタンスイッチがクリックされた場合,③および④に示すように LEDを点灯させ,開始の合図をチャネルを介して Pulse-Counterプロセスへ送信している.開始の合図を受信した PulseCounterプロセスは,パルス数を 1秒間カウントし,その値を同じチャネルに返しているので,⑤のように結果の値が送られてくるまでここで待ち受ける.チャネルから受信した値は,⑥のようにコンソールに表示される.

リスト A.3 StartButtonプロセス

void StartButton(chanend St, out port LED, in port Button_A){ int CountData=0; int cmd=0; while(1){ printstrln("Please click SW1 to start !!"); // ① WaitForClick(Button_A, 200); // ② flash(LED, 0xf); // ③ St <: cmd; // ④ 測定開始の合図 St :> CountData; // ⑤ 結果の取得 printstrln("Finish"); printstr("Count Data = "); printintln(CountData); // ⑥ printstrln(""); }}

Page 20: 「XMOSプログラミング入門」 サンプルページ · 1.3 リンクによる通信と同期 -xCONNECT - 5 1.4 割り込み処理とイベント駆動 8 1.5 開発言語

 XMOSプログラミング入門 © 中原博史 2014 

 2014年 4月 10日 第 1版第 1刷発行 【本書の無断転載を禁ず】 

 著  者 中原博史 発 行 者 森北博巳 発 行 所 森北出版株式会社      東京都千代田区富士見 1-4-11(〒 102-0071)      電話 03-3265-8341/FAX 03-3264-8709

      http://www.morikita.co.jp/

      日本書籍出版協会・自然科学書協会 会員          <(社)出版者著作権管理機構 委託出版物>

落丁・乱丁本はお取替えいたします.

Printed in Japan/ISBN978-4-627-85251-8

    著 者 略 歴 中原 博史(なかはら・ひろし)  1974年 北海道大学工学部精密工学科 卒業  1976年 北海道大学大学院工学研究科情報工学専攻修士課程 修了  1976年 松下電器産業(株)(現 パナソニック(株)) 入社  1986年 北海道職業訓練短期大学校(現 北海道職業能力開発大学校)勤務  2013年 北海道職業能力開発大学校電子情報技術科        現在に至る

  編集担当 藤原祐介(森北出版)  編集責任 富井 晃(森北出版)  組  版 dignet  印  刷 エーヴィスシステムズ  製  本 協栄製本