source: rtos_arduino/trunk/README.txt@ 255

Last change on this file since 255 was 255, checked in by ertl-honda, 8 years ago

変更点の追加忘れ

File size: 12.5 KB
Line 
1=====================================================================
2 TOPPERS RTE/RTOS compatible with Arduino libraries : R2CA
3 Last Modified:2016 Aug 09 10:55:17
4=====================================================================
5
6○ToDo
7・SPI/I2Cのå…
8±æœ‰ã®ãŸã‚ã®ã‚»ãƒžãƒ•ã‚©ã®è¿½åŠ 
9
10○概要
11
12TOPPERS RTE/RTOS compatible with Arduino libraries(R2CA)は,TOPPERS上で
13Arduino ライブラリを使用するための環境である.
14
15多くのコードをArduino IDE付属の物をベースとしているため,ライセンスは
16GPLである.各コードのライセンスはコード毎のライセンスに従う.
17
18○サポート
19
20サポートしているプロセッサは,Arduino M0/M0 Pro である.
21
22○動作確認済みのバージョン
23
24動作確認済みのバージョンは次の通りである.
25
26・Arduino IDE 1.7.9
27・TOPPERS/ASPカーネル 1.9.2
28・ Atmel Studio 7.0 (build 594)
29
30○クイックスタート(デバッガなし/GDBによるデバッグ)
31
32Windows環境でのデバッガなしの実行方法について説明する.
33
34●インストール
35
36Arduino IDE のインストール
37 ・http://www.arduino.org/ からダウンロードしてインストール.
38 ・インストーラに従ってインストールを実施する.
39
40Arduino IDE のインストールパスの設定
41 ・C:\Program Files (x86)\Arduino にインストールした場合は必
42要ない
43 ・インストールしたフォルダを以下のファイルに設定する
44 ・example/do_path.bat
45 SET ARDUINO_DIR=C:\Program Files (x86)\Arduino
46 ・asp_1.9.1/target/arduino_m0_gcc/
47 ARDUINO_BASE_DIR_WIN = C:\Program Files (x86)\Arduino
48
49●ビルド
50 ・フォルダ ./example/basic を開く
51 ・./do_make.bat を実行
52
53●実行
54 ・ボードのPROGRAMポートとPCのUSBを接続する.
55 ・Arduino IDEを起動する
56 ・ツール -> ポート -> COMx(Arduino M0 Pro (Programmmming Port)) を選択.
57 ・ツール -> シリアルモニタ を選択してシリアルモニタを実行する.
58 ・シリアルモニタの右下の速度を115200bpsに変更
59 ・フォルダ ./example/basic を開く
60 ・./do_run.bat を実行
61
62●デバッグ
63 ・フォルダ ./example/basic を開く
64 ・./do_debug.bat を実行
65
66●クリーン
67 ・フォルダ ./example/basic を開く
68 ・./do_clean.bat を実行
69
70
71○クイックスタート(AtmelStudio使用)
72
73Windows環境でAtmelStudioを使用した実行方法について説明する.
74
75●インストール
76
77Atmel Studio のインストール
78 ・ http://www.atmel.com/ja/jp/tools/ATMELSTUDIO.aspx からダウンロードしてインストール.
79 ・インストーラに従ってインストールを実施する.
80
81●プロジェクトを開く
82
83各サンプルのフォルダ以下にある,
84
85\example\basic\asp.atsln
86
87をタブルクリックするとAtmel Studioが起動する.
88
89●ビルド
90
91メニュー -> Build -> Build Solution を実行
92
93●実行
94
95メニュー -> Debug -> Start Debugging and Brake を実行
96
97メモリに書き込まれるため,実行を開始する.
98ファイルメニューからrca_app.cpp を選択してブレークポイントを置くことが
99可能.
100
101
102○動作モデル
103
104Arduinoライブラリを実行するためのタスクとして,メインタスクとタスク1,
105タスク2,...(RCAタスク)を用意している.メインタスクは必
106ず生成され,RCA
107タスクは,幾つ生成するかはマクロで定義可能である.現状最大数は5個である.
108
109それぞれのタスク名は次の通りである.
110
111 メインタスク : RCA_MAINTASK
112 タスク1 : RCA_TASK1
113 タスク2 : RCA_TASK2
114 タスク3 : RCA_TASK3
115 タスク4 : RCA_TASK4
116 タスク5 : RCA_TASK5
117
118
119各タスクは,次の関数を実行する.これらの関数の本体を記述する.
120
121 メインタスク : setup/loop
122 タスク1 : task1_setup/task2_loop
123 タスク2 : task2_setup/task2_loop
124 タスク3 : task3_setup/task3_loop
125 タスク4 : task4_setup/task4_loop
126 タスク5 : task5_setup/task5_loop
127
128各setup/loopの振る舞いはArduinoと同等である.
129
130○スケジューリング
131
132基本的には優å…
133ˆåº¦ãƒ™ãƒ¼ã‚¹ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã‚る.
134
135各タスクのsetup実行時(起動時)とloop実行時の優å…
136ˆåº¦ã‚’それぞれマクロで指
137定可能である.
138
139優å…
140ˆåº¦ã®è¨­å®šæ–¹æ³•ã«ã‹ã‹ã‚ã‚‰ãšï¼Œsetup()がまず実行される.setup()がリター
141ンするまでは,taskx_setup()は実行されない.setup()内
142で待
143ち状æ…
144‹ã«å…
145¥ã£ãŸ
146としては,taskx_setup()は実行されない.setup()終了後,taskx_setup() は
147優å…
148ˆåº¦é †ã§å®Ÿè¡Œã•ã‚Œã‚‹ï¼Žtaskx_setup()もリターンするまで,他の
149taskx_setup()は実行されない.
150
151オプションでラウンドロビンスケジューリングを選択可能である.ラウンドロ
152ビンの周期とラウンドロビンの対象とする優å…
153ˆåº¦ã‚’マクロで指定可能である.
154
155○ライブラリ
156
157次のライブラリは動作確認済みである
158
159コアライブラリ
160
161コアライブラリは常にコンパイル&リンクされる.
162
163 ・PWM
164 ・digitalå…
165¥å‡ºåŠ›
166 ・delay
167 ・analogå…
168¥å‡ºåŠ›
169 ・attachInterrupt()
170 noInterrupt() : Primaskを使用しているため問題ない
171 ・USB Uart
172 ・Tone
173
174その他のライブラリ
175
176次のライブラリは使用する場合はMakefileで各マクロをtrueに定義すること.
177
178 ・SPI : USE_ARDUINO_SPI
179 ・SD : USE_ARDUINO_SD
180 ・TFT : USE_ARDUINO_TFT
181 ・RTC : USE_ARDUINO_RTC
182 ・I2C : USE_ARDUINO_WIRE
183 ・ETHERNET2 : USE_ETHERNET2
184 ・NAXESMOTION : USE_NAXESMOTION
185 ・NCESCAN : USE_NCESCAN
186
187Wire(I2C)の排他制御
188
189複数のタスクからWrireを使用する場合は,使用の前後で,以下のマクロを呼
190び出して排他制御を行うこと.
191
192WIRE_ENTER_CRITICAL;
193WIRE_LEAVE_CRITICAL;
194
195
196○ファイル
197./lib
198 ・RCA関連のライブラリ
199./example
200 ・R2CAのサンプル
201./arduino_lib
202 ・Arduino IDE付属のライブラリ(パッチ済み)
203 ・ディレクトリ構成はオリジナルと同等だが以下のフォルダは必
204要ないので削除している.
205 ./hardware/arduino/avr
206 ./hardware/arduino/sam
207 ./hardware/arduino/samd/bootloaders
208 ./hardware/arduino/samd/libraries/GSM
209 ./tools/avr
210 ./tools/gcc-arm-none-eabi-4.8.3-2014q1
211 ./tools/OpenOCD-0.9.0-arduino
212 ./tools/CMSIS/CMSIS_RTX
213 ./tools/CMSIS/CMSIS/Driver
214 ./tools/CMSIS/CMSIS/DSP_Lib
215 ./tools/CMSIS/CMSIS/Lib
216 ./tools/CMSIS/CMSIS/RTOS
217 ./tools/CMSIS/CMSIS/SVD
218 ./tools/CMSIS/CMSIS/UserCodeTemplates
219 ./tools/CMSIS/Device/ARM
220 ./tools/CMSIS/Device/ATMEL/samd21 以外
221./libraries
222 以下のフォルダは必
223要無いと判断し削除している
224 ./Ethernet
225 ./Scheduler
226 ./SpacebrewYun
227 ./Ciao
228 ./WiFi
229 以下のファイルを追加している
230 ./ESP8266 _Arduino_AT
231 下記でå…
232¬é–‹ã•ã‚Œã¦ã„るコードをベースにM0に対応
233 https://github.com/itead/ITEADLIB_Arduino_WeeESP8266
234 ./NcesCan
235 Seeedの2015/11/08版をベースにAPIを変更
236 https://github.com/Seeed-Studio/CAN_BUS_Shield
237 ./Milkcocoa_Arduino_SDK
238 ESP8266を使用してMilkcocoaに接続するためのライブラリ.
239 https://github.com/milk-cocoa/Milkcocoa_Arduino_SDK
240 ./thingspeak-arduino
241 ESP8266を使用してThingspeakに接続するためのライブラリ.
242 https://github.com/mathworks/thingspeak-arduino
243 ./ArduinoJson
244 BuleMixに接続するためのJsonライブラリ.
245 https://github.com/bblanchon/ArduinoJson
246 third-partyのフォルダを削除
247 ./pubsubclient-2.6
248 BuleMixに接続するためのJsonライブラリ.
249 https://github.com/knolleary/pubsubclient/releases/tag/v2.6
250
251./asp_1.9.2
252 ・ASPカーネルのソースコード
253
254○サンプルプログラム
255./Basic
256 ・Arduinoの基本的なプログラムの詰め合わせ.
257 ・ソースのå…
258ˆé ­ã®ifdefで実行するプログラムを選択する.
259./CompositeExample
260 ・各種機能を組み合わせたサンプル
261./Milkcocoa_basic
262 ・Milkcocoaに接続する基本的なサンプル.
263./MultiTtask
264 ・マルチタスクのサンプル.
265./NAxesMotion
266 ・9軸モーションシールドのサンプル.
267./NCESCan
268 ・NCES CAN シールドのサンプル.
269./Profiling
270 ・プロファイリングのサンプル
271./RRscheduling
272 ・ラウンドロビンスケジューリングのサンプル.
273./ThingsSpeak_basic
274 ・ThingsSpeakに接続する基本的なサンプル.
275./WifiEcho
276 ・Wifiのサンプル.
277
278○コンフィギュレーション項
279目
280
281●rca_app.h
282
283以下の項
284目を rca_app.h に設定可能である.
285
286メインタスク以外のRCAタスク数の指定 : 現状5個までサポート
287 RCA_NUM_TASK : 0~5
288
289優å…
290ˆåº¦ : 定義しないと初期値を使用
291 RCA_MAINTASK_SETUP_PRI
292 RCA_MAINTASK_LOOP_PRI
293
294 RCA_TASK1_SETUP_PRI
295 RCA_TASK1_LOOP_PRI
296 ...
297
298スタック : 定義しないと初期値を使用
299 RCA_MAINTASK_STACK_SIZE
300
301 RCA_TASK1_STACK_SIZE
302 ...
303
304スケジューリング :
305 RCA_RR_SCEDULE :
306 ビット指定した優å…
307ˆåº¦(0は無視)をラウンドロビンスケジューリングする
308 RCA_RR_SCEDULE_CYCLE : ラウンドロビンスケジューリングの周期
309
310●Makefile
311
312以下の項
313目を指定可能である.
314
315ARDUINO_SERIAL
316シリアル(Serial)の扱いを設定以下のいずれかに定義
317NOUSE_SERIAL : Serialは使用しない.syslog/logtaskを使用した出力が可能.
318USE_SERIAL : Serialを使用する.logtaskは使用しない.syslogは低レベル
319 出力となる.
320
321○Arduinoライブラリへのパッチ : 対象 IDE 1.7.10
322
323●バグ
324./hardware/arduino/samd/variants/arduino_zero/variant.h : 68行目 定義ミス
325#define portOutputRegister(port) ( &(port->OUT.reg) )
326#define portInputRegister(port) ( &(port->IN.reg) )
327
328./hardware/arduino/samd/cores/arduino/USB/samd21_host.c : ハンドラ名の重複
329
33062行目 定義の追加
331 static void UHD_ISR(void);
332
33374行目 ハンドラ名の変更
334 USB_SetHandler(&UHD_ISR);
335
336177行目 ハンドラ名の変更
337 static void UHD_ISR(void)
338
339./hardware/arduino/samd/cores/arduino/Tone.cpp : 210/227行目 レジスタクリア
340 TCx->COUNT8.CTRLA.reg &= ~0x700;
341 TCCx->CTRLA.reg &= ~0x700;
342
343libraries\TFT\src\utility\いくつかのファイル
344ARDUINO_ARCH_SAM -> ARDUINO_ARCH_SAD
345glcdfont.c:1:#ifndef ARDUINO_ARCH_SAMD
346Adafruit_ST7735.cpp:334:#if defined(ARDUINO_ARCH_SAMD)
347Adafruit_ST7735.h:138: #if defined(ARDUINO_ARCH_SAMD)
348
349libraries\NAxesMotion\NAxisMotion.h : 139行目
350M0の時はアドレスを変更する.さらにシールドのADRESSのジャンパを外す
351
352#if defined(ARDUINO_ARCH_SAMD)
353 void initSensor(unsigned int address = 0x29);
354#else /* !defined(ARDUINO_ARCH_SAMD) */
355 void initSensor(unsigned int address = 0x28);
356#endif /* defined(ARDUINO_ARCH_SAMD) */
357
358
359
360●TOPPERS対応
361/hardware/tools/CMSIS/CMSIS/Include/core_cm0plus.h : 646行目
362割込み禁止・許可をAPIを呼び出すように変更
363
364__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
365{
366// NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
367 extern void rca_ena_int(uint32_t intno);
368 rca_ena_int(IRQn);
369}
370
371
372/** \brief Disable External Interrupt
373
374 The function disables a device-specific interrupt in the NVIC interrupt controller.
375
376 \param [in] IRQn External interrupt number. Value cannot be negative.
377 */
378__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
379{
380// NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
381 extern void rca_dis_int(uint32_t intno);
382 rca_dis_int(IRQn);
383}
384
385/arduino_lib/libraries/SD/src/utility/Sd2Card.cpp
386SPI使用時にセマフォを使用するよう変更.
387
388/arduino_lib/hardware/arduino/samd/cores/arduino/delay.c : 58行目
389指定時間以上待
390つ様にdelay()関数内
391でms経過まで待
392つ様に変更.(オリジナル
393は-1).
394
395 } while ( _ulTickCount - start <= (ms) ) ;
396
397●機能追加
398
399Serial3の追加
400SERCOM2を使用
401ピン
402 5 : RX
403 4 : TX
404http://ehbtj.com/electronics/arduino-m0-hacks
405
406●ライブラリ対応
407
408\arduino_lib\hardware\arduino\samd\cores\arduino\RingBuffer.h
409
410ESP8266の通信用にリングバッファサイズを大きくする.
411
412#define SERIAL_BUFFER_SIZE 1024
413
414
415○本パッケージの名称
416
417Aruduinoのガイドライン(https://www.arduino.cc/en/Main/FAQ)では,
418
419Arduino Xxxxxx : NG
420Xxxxxx for Arduino : OK
421
422とあり,Arduinoとの関係が分かる書き方なら問題ないとのこと.
423
424TOPPERS RTE/RTOS Compatible with Arduino libraries : R2CA
425
426以上.
Note: See TracBrowser for help on using the repository browser.