source: rtos_arduino/trunk/README.txt@ 259

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

1.7.11に対応.

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