最終更新日 2020年3月25日
dannyelectronicsという会社がSTM32F1ボードでデジタルポートをアクセスする際の実行速度を比較するレポートを公開されています。興味深い内容です。
https://dannyelectronics.wordpress.com/2016/04/30/the-price-of-stm32-arduino/
Arduinoライクに digitalWrite() でアクセスするのと レジスタに直接アクセスするのでは 19.3倍差があるという物です。テストコードを掲載しておきます。50回実行して比較していますが、Loop文を使用していません。Loop文を用いても変わらないと思うのですが。
//test for arduino port execution speed //test routines - only one can be defined at a given time to test individual routines //#define ARDUINO_0 //use arduino port routines #define ARDUINO_1 //direct port access. use |/& operators //#define ARDUINO_2 //direct port access. use ^ operator //#define ARDUINO_3 //direct port access. use BSRR/BRR registers //#define DisableInterrupts //disable interrupts //hardware configuration #define LED PC13 //led output pin void setup() { // put your setup code here, to run once: pinMode(LED, OUTPUT); #if defined(DisableInterrupts) noInterrupts(); //disable interrupts #endif } void loop() { // put your main code here, to run repeatedly: //flip pins here - hard-wired iterations x 50 #if defined(ARDUINO_0) digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); digitalWrite(LED, HIGH); digitalWrite(LED, LOW); #elif defined(ARDUINO_1) GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 GPIOC->regs->ODR |= (1<<13); GPIOC->regs->ODR &=~(1<<13); //approach 1 #elif defined(ARDUINO_2) GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 GPIOC->regs->ODR ^= (1<<13); GPIOC->regs->ODR ^= (1<<13); //approach 2 #elif defined(ARDUINO_3) GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 GPIOC->regs->BSRR = (1<<13); GPIOC->regs->BRR = (1<<13); //approach 3 #else #warning "no approach defined!!!!" #endif }実際に実行してみましたが、このままでは数値表示しないのでレタッチする必要があります。ForLoop文に変更します。また、STM32MINIShield基板のLED1を出力pinに変更します。50回ではシリアル書き込み時間が問題になりますので1000回に変更しました。
/* * 20200325 T.Wanibe デジタルPinアクセス方法の処理時間を比較検証します。 * Arduinoでも判っていたことですが digitalWrite()の記述はわかりやすいのですが * オーバヘッドが大きく問題がありました。レジスタによるアクセスで16倍ほど速くなると云う * 経験をしていましたがBluePillではもっと顕著だという事が判ります。 * 結果ですが * ARDUINO_0 の場合 1375usec * ARDUINO_1 の場合 295usec * ARDUINO_2 の場合 295usec * ARDUINO_3 の場合 127usec * でした。10倍強早くなります。重要な情報です。 * 最大131072バイトのフラッシュメモリのうち、スケッチが14860バイト(11%)を使っています。 * 最大20480バイトのRAMのうち、グローバル変数が3128バイト(15%)を使っていて、ローカル変数で17352バイト使うことができます。 */ //test for arduino port execution speed //test routines - only one can be defined at a given time to test individual routines //#define ARDUINO_0 //use arduino port routines //#define ARDUINO_1 //direct port access. use |/& operators //#define ARDUINO_2 //direct port access. use ^ operator #define ARDUINO_3 //direct port access. use BSRR/BRR registers //#define DisableInterrupts //disable interrupts //hardware configuration #define LED PB8 //led output pin void setup() { Serial.begin(115200); //シリアル通信を開ます。 delay(1000); // put your setup code here, to run once: pinMode(LED, OUTPUT); #if defined(DisableInterrupts) noInterrupts(); //disable interrupts #endif } void loop() { // put your main code here, to run repeatedly: //flip pins here - hard-wired iterations x 50 int start = micros(); for(int i = 0; i < 1000; i++){ #if defined(ARDUINO_0) digitalWrite(LED, HIGH); digitalWrite(LED, LOW); #elif defined(ARDUINO_1) GPIOB->regs->ODR |= (1<<8); GPIOB->regs->ODR &=~(1<<8); //approach 1 #elif defined(ARDUINO_2) GPIOB->regs->ODR ^= (1<<8); GPIOB->regs->ODR ^= (1<<8); //approach 2 #elif defined(ARDUINO_3) GPIOB->regs->BSRR = (1<<8); GPIOB->regs->BRR = (1<<8); //approach 3 #else #warning "no approach defined!!!!" #endif } Serial.print(micros() - start);Serial.println(F("[usec]")); }結果は10倍強です。興味深い結果でした。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。