Section outline

    • Arduino 本体のメモリ容量は小さいです。後で記します。このためにポインタの理解が必要なことがあります。ポインタの動作を少しだけ理解しましょう。下の図のようにプログラムを貼り付けます。

      が

      (コード)

      void setup() {
        Serial.begin(9600);      //9600bpsでシリアルポートを開く
      }

      void loop() {
        int A = 1, B = 0;            //[1] int型変数A,Bを宣言してそれぞれ1,0を格納
        int *P1, *P2;                 //[2] ポインタ変数の宣言の仕方その1(参考)
        int* P[] = {NULL, NULL};     //[3] ポインタ変数の宣言の仕方その2(以下使用)
        P[0] = &A;              //[4] int型変数Aの前に"&"を付けるとAのアドレスを返しポインタ変数P[0]に格納
        Serial.println((int)P[0]);  //[5] ポインタ変数P[0]に格納されたアドレスをシリアル出力可能なint型にして出力
        P[1] = P[0];                  //[6] ポインタ変数P[0]のアドレスをポインタ変数P[1]にコピー可能
        Serial.println(A);            //[7] int型変数Aをシリアル出力
        *P[1] = 2;                   //[8] P[1]の住所の中身を2に設定
        Serial.println(A);            //[9] int型変数Aをシリアル出力
        B = *P[1] + 1;               //[10] 変数BにP[1]の住所の中身に1を足した数を格納
        Serial.println(B);            //[11] int型変数Bをシリアル出力
        delay(3000);                 //[12] 3秒待つ
      }
       
      出力に関しては、次のように解釈できます。
      かい

      (参考)

      Arduino UNO R3のメモリ容量は、プログラム保存用のFlashメモリが32KB(うち0.5KBはブートローダー使用)、実行時データ保持用のSRAM(メインメモリ)が2KB、電源OFFでもデータが消えないEEPROMが1KBです。

      ポイント:なぜこれを使うの?

       ポインタを理解すると以下のような高度なことができるようになります。

      1. 関数の外にある値を書き換える: 別の関数に「住所」だけを教えて、中身を更新してもらう。

      2. メモリの節約: 大きなデータをコピーするのではなく、住所だけをやり取りして処理する。

      3. 配列の操作: 配列の先頭住所を使って、効率的にデータを読み書きする。

      ず

      メモリの種類と容量
      • Flashメモリ(プログラムメモリ): 32KB (32,768バイト)
        • スケッチ(プログラム)を保存する領域で、書き換え可能ですが、書き換え回数に制限があります。
      • SRAM(静的RAM・メインメモリ): 2KB (2,048バイト)
        • プログラム実行中に変数などを一時的に保存する領域です。電源を切ると消えます。
      • EEPROM(不揮発性メモリ): 1KB (1,024バイト)
        • 電源を切ってもデータが消えない領域で、設定値などを永続的に保存するのに使います。