FAQ's
Show All Answers
Hide All Answers
showing 1 to 4 of 4
  • ROM容量64Kバイト以下のマイコンからROM容量64Kバイト超のマイコンへ変更を考えています。
    メモリモデルがSmallからLargeに変わる際,ポインタや配列などで注意すべき点はありますでしょうか?
    • メモリモデルがSmallからLargeになることに伴い,関数へのポインタのサイズが2バイトから3バイトに変わります。
      ご注意いただきたいのは,関数へのポインタの配列です。
      Largeモデルの関数へのポインタ単体のsizeof演算結果は3となりますが,関数へのポインタの配列の場合,各要素の後ろに1バイトのパディングが挿入されます。
      このため,要素が5個の場合,配列のサイズは
      ((ポインタのサイズ3バイト)+(パディング1バイト))*(要素数5)=20バイトとなります。
      詳細は『CCU8プログラミングガイド』の「1.5.2.2 char 型以外の配列」を参照ください。

      また,配列の要素数を算出する場合に,一般的には,配列全体のサイズを配列の要素のサイズで割って算出すると思います。
      そこで,配列の要素数を算出するマクロとして,以下のようなマクロを定義する場合があります。
      #define ARR_NUM(array) (sizeof(array)/sizeof(array[0]))
      ポインタのサイズが3バイトの場合,配列全体のサイズには各要素に1バイトのパディング分が含まれているため,要素数が正しく算出されません。この場合,以下のように変更いただく必要があります。
      #define ARR_NUM(array) (sizeof(array)/(sizeof(array[0]) == 3 ? 4 : sizeof(array[0])))
    • Products: Microcontrollers (MCUs)
showing 1 to 4 of 4
of 1