2022年12月25日日曜日

MPLAB X XC8 itoa()が未定義エラーとなる


長らく使っていた Mac Book Proの動作が重くなり
MAPLAB Xの立ち上げにも時間がかかるようになってきた。

そこで、新しく設置した M1 Macminiに MAPLAB X を移すことにした
Microchipのダウンロードサイトから最新のMAPLAB をダウンロード

基本的な設定をして試しにコンパイルしてみると
エラーもなく動いたので良しとした

各装置の Ver. は次のとおり

Mac Book Pro    MAPLAB X IDE  v5.05
                            XC8 V2.36

M1 Macmini     MAPLAB X IDE  v6.00
                          XC8 V2.40


エラーが出た状況

新規プロジェクトで、LCD-1602に表示するコードを書いて、
コンパイルすると、何故か itoa()が未定義だと
エラーが」出る

最初は、include stdio.h が抜けているのかと思って
プログラムを見直したが、ちゃんと入っている

これは、なんなのか?

試しに、Mac Book Pro のMAPLAB のXC8でコンパイルすると OK だった

どうやら、MAPLAB をアップデートして最新にしたのがいけないらしい。

ネットで調べてみた

「xc8  itoa関数 未定義」 で調べたところ

MAPLAB X を最新にした場合は、
コンパイラ XC8の設定を変更する必要があるとわかった

以下が説明箇所
※ 整数値を文字列に変換するためitoa()関数を使ったところ、コンパイル時に未定義エラーが出た。その原因を調べてみると、XC8v2のC99ではstdlib.hにitoa()の記述がなく、使用できない。代わりにsprintf()関数(stdio.hの記述が必要)を使うこと。
※ C99ではC90から大幅に仕様が変わっているため、古いコードやライブラリを使うとエラーが出てビルド出来ないことがある。XC8v2では以下の手順を行えばC90でビルトできる。 
  プロジェクトのproperty
   →XC8 Global Option
   →C StandardをC90に変更(デフォルトはC99)


XC8のOptionを C99 => C90  に変更

この解説どおおりにXC8のOptionを C90 に変更して

再コンパイルしたところ、無事コンパイルが完了した。

やれやれ、やっと元のように使えるようになった

 XC8 V2.36のGlobal Optionの設定は C90 となっていた

0 件のコメント:

コメントを投稿

手作り電磁石の力をゼムクリップで計ってみた

手作りした電磁石があるので どのくらいの錘を吊り下げられるか 計ってみることにした 調べると、 バネ計りを使う方法などが紹介されているが 家にはないので、身近なもので試す。 大きなおもりの下にゼムクリップを ぶら下げていき、クリップが落ちた前が 限界とすると...