Q. R2024a以降でCコードを生成したところ、PE-ViewXでコンパイル時に、"マクロまたは関数が未定義です"というエラーが発生します。どのように対応すればよいですか?
A. R2024a以降のSimulinkでは、デフォルトでC99規格に準拠したCコードが生成されます。しかし、PE-ViewXが使用しているコンパイラ(TI C6000 Ver7.4.x)はC89/C90規格にのみ対応しているため、C99由来の関数(例:fmax(), fmin()など)が含まれると、「関数が未定義です」といったコンパイルエラーが発生することがあります。
MATLAB/SimulinkのバージョンとC言語規格の対応状況は、以下の通りです:
R2024a以降ではC99がデフォルトとなるため、PE-ViewX環境では明示的にC89/C90を選択する必要があります。
【対応方法】
方法①:Cコード生成時の言語規格を C89/C90 に変更する
Simulinkで以下の手順により、Cコードの言語規格を「C89/C90 (ANSI)」に変更してください:
Simulink -> [モデル化]タブ -> [モデル設定]をクリック -> [コード生成] 欄を選択
-> [言語標準] 欄の “C99(ISO)” を “C89/C90 (ANSI)” に変更
この設定により、PE-ViewXでのコンパイルエラーが回避されます。
方法②:C99規格のまま使用する場合の注意点
C99でCコード生成を行った場合、fmax()などC99専用関数が出力されます。PE-ViewXでこれらの関数は未定義のため、コンパイルエラーが発生します。
やむを得ずC99でコードを生成する場合は、生成されたCコードを手動で修正し、C89準拠の記述に置き換える必要があります(例:fmax() → if文による大小比較)。
【Toolbox関連の補足】
Toolbox Ver.2.01では、R2024a以降でC89/C90規格に変更した際の不具合が修正されています。
PE-ViewX / PEOSは Ver.4.01以上 にバージョンアップしてください。