Internet Explorerをお使いのお客様へ:
ロームウェブサイトはIE11を推奨ブラウザとしていません。ロームウェブサイトを快適にご使用いただくにはブラウザを更新してください。
ニュース
採用情報
お問い合わせ
サイト内検索
ローム製品
クロスリファレンス
ネット商社在庫
Global - English
Americas - English
Europe - English
Europe - Deutsch
ASEAN/India - English
简体中文
繁體中文
한국어
日本語
会員登録/ログイン
製品情報
技術サポート
アプリケーション
購入・サポート
企業情報・投資家情報
サステナビリティ
会員登録/ログイン
製品情報
技術サポート
アプリケーション
購入・サポート
企業情報・投資家情報
サステナビリティ
Home
FAQ Search
ROM容量64Kバイト以下のマイコンからROM容量64Kバイト超のマイコンへ変更を考えています。メモリモデルがSmallからLargeに変わる際,ポインタや配列などで注意すべき点はありますでしょうか?
View ALL FAQ
お問い合わせ
FAQ's
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)
Please Wait...