適用先: MDK-Middleware version 6.3.0 以降
現象
Keil Middleware pack をversion 6.3.0 (またはそれ以降)にアップデート後にアプリケーションをビルドしようとすると、以下のエラーメッセージがコンパイル時に表示されます。
compiling FS_Config.c... C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware6.3.0\FileSystem\Include\fs_config.h(26): error: #35: #error directive: "Standard file I/O library retarget requires ::Compiler:I/O:File software component from the 'Keil.ARM_Compiler' Pack!" #error "Standard file I/O library retarget requires ::Compiler:I/O:File software component from the 'Keil.ARM_Compiler' Pack!" RTEFile_SystemFS_Config.c: 0 warnings, 1 error
解決策
Keil Middleware pack version 6.3.0 以降、System IO 関数のリターゲットを実施するには、一部のミドルウェアコンポーネント(フラッシュファイルシステム等)においてKeil Compiler pack が必要となりました。
アプリケーションコードでは、printf() や scanf() 、fget() などの入出力操作を実施するような標準入出力ライブラリ関数を頻繁に使用します。
ARM Compiler C ランタイムライブラリ内でこれらの関数は以下のような構造をとります。
High-Level Functions
(printf, scanf, etc)
↓
Low-Level Functions
(fputc, fgetc, etc)
↓
System I/O Functions
(_sys_write, _sys_read, etc)
High-Level およびLow-Level に該当するライブラリ関数はターゲットに依存しておらず、ハードウェアへのインターフェースとしてSystem I/O関数を使用します。
Keil Compiler pack を使用することで標準C ランタイムライブラリのSystem I/O 関数のリターゲットが可能となります。
Pack Installer のウィンドウから通常のソフトウェアパックをダウンロードおよびインストールするのと同じ手順でKeil::ARM_Compiler のパックをインストール可能です。
Pack Installer のウィンドウ内で、すべての新しいパックを表示させるためには緑色のCheck for Updates ボタンをクリックします。
µVision のManage Run-Time Environmentウィンドウにおいて、File, STDERR, STDIN, STDOUT およびTTYのI/O チャネルを選択可能です。
Getting Started manual: Software Component Compilerの45 および 46 ページをご参照ください。