source: rtos_arduino/trunk/README.txt

Last change on this file was 260, checked in by ertl-honda, 7 years ago

マクロ名を更新.
実行モデルを変更.

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