NEC ELECTRONICS NEC ELECTRONICS
NEC electronics NEC electronics NEC
ホーム
アプリケーション
製品情報
先端技術
サポート
WEBショップ
ニュース&イベント
会社案内
header
GO
詳細検索機能/特性検索
サイトマップ お問い合わせ

コンパイラ全般


目次

    
FAQ-ID = 78k4-nnn
607: アセンブリ言語で定義した配列をC言語で参照できますか?
248: マイコンの各種レジスタ(PM1、P1、TMC80など)をCコンパイラにて使いたいのですが、どのように設定すればいいのですか?
343: SFRの各レジスタ内のビット指定の記述方法について教えてください。
251: PSWをCソース上で扱うことはできますか?
542: スタートアップ・ルーチンで、「通常」、「ブート領域用」、「フラッシュ領域用」とありますが、どれを使用すればよいですか?
268: if-switch-switch-if-elseの構文で制限事項はありますか?
339: プログラムの動作中に、ハードウェアリセットと同じアドレスからプログラムを再実行したいのですが、C言語で記述できますか?
264: #pragma inlineとは、どのような命令ですか?
342: "#pragma sfr"指定で使用可能になるsfrの記号は、特殊機能レジスタ一覧中の略号と同じですか?
188: 変数をアラインメントしないようにする方法は?
494: 変数の初期値が不定なプログラムのコンパイルを防止する機能はありますか?
532: 参照のみの初期値あり変数をROMに配置したいのですが、どうすればよいですか?
299: シフト演算の動作について。
346: 0割り算をしたとき、結果はどのようになりますか?
347: floatの割り算(fdiv関数)で、返すことのできるMAX値はいくつですか?
345: float÷floatの計算結果がオーバフローした場合の関数からの返り値は?
194: デフォルト最適化指定時のsetjmp関数の退避領域サイズを教えてください。
533: C言語で記述した、グローバル変数のアドレスを知るにはどうすればよいですか?
378: sprintfは、"%f" 等を使用しなければリエントラントですか?
259: 関数sprintfのパラメータにfを使用すると期待される文字列が入力されません。
344: コンパイラの拡張機能に割り込み関数がありますが、スタック切り替えの指定を使わなかった場合、コンパイラは必要なスタック・サイズを確保してくれますか?
205: #pragma vectとinterruptはどちらを使用すればよいですか?
445: 78K4マイクロコントローラのデバイスのユーザーズ・マニュアルにある割り込み機能のマクロ・サービスの予約語の使用方法がわかりません。
350: エラー・メッセージ "F112 Too much internal node on temporary fileProgram aborted." が表示されます。
315: コンパイラで、64ビット演算をしたあとにビットシフト操作をすると、"’W760 Double and long double are treated as IEEE 754 single format’" というワーニングが表示されます。
201: コンパイル後にアセンブラ・ソースを作成し、アセンブル実行後に「*.LMF」ファイルを作成したい場合、ワーニング・メッセージ "W837 Output assembler source file,not object file" を無視しても問題ありませんか?
218: ワーニング "*** WARNING W851 Data aligned in ’@@DATS section’" を表示しないようにするには、どうすればよいですか?
539: #pragma section指令を行った場合、PM+のビルドで失敗します。
377: Cソースの中に、ASM文が記述されている場合に、メッセージ "W837 Output assembler source file, not object file" が表示されます。
615: Cソース・プログラム上でソフトウエア・リセットを行うために、_@cstartを外部参照できますか?
288: Cソースで記述した日本語コードが正しく出力されません。
596: 32ビットのビットフィールドはできますか?
355: 以前、"大文字、小文字を区別しない"というコンパイラ・オプションを使用していたのですが、これは使えなくなったのですか?
611: ヘキサ・ファイルの最後に‘^Z’(0x1A)が出力されます。

78k4
-607
アセンブリ言語で定義した配列をC言語で参照できますか?
Q
アセンブリ言語で定義した配列をC言語で参照できますか?
A
参照できます。
以下にアセンブリ言語で定義した変数i,aをC言語側で参照する場合は、 次のようにextern命令を用いて行います。

(例)

[アセンブラ・ソース]
NAME ASMSUB

	PUBLIC   _i
	PUBLIC   _a

ABC 	DSEG
_i:	DS	2
_a:	DS	10
	END

[Cソース]
extern int  i;
extern char a[10];

void func(void)
{

	i = 4;
	a[0] = 10;
	a[9] = 10;

}

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-248
マイコンの各種レジスタ(PM1、P1、TMC80など)をCコンパイラにて使いたいのですが、どのように設定すればいいのですか?
Q
マイコンの各種レジスタ(PM1、P1、TMC80など)をCコンパイラにて使いたいのですが、 どのように設定すればいいのですか?

定義されていないというエラー・メッセージ

F711 Undeclared ’変数名’; function ’関数名’

が表示されます。
A
sfr領域は、78Kマイクロコントローラの各種周辺ハードウエアに対するモード・レジスタや、 制御レジスタなどの特別な機能が割り付けられたレジスタ群の領域です。

使用するには、Cソースの先頭に、Cソース中にsfr名を使用することを宣言する
#pragma sfr
を記述してください(キーワードのsfrは、大文字でも小文字でも記述できます)。

ただし、 #pragma PC(種別)を指定する場合は、それよりも後ろに#pragma sfrを記述します。
また、次のものは、#pragma sfrの前に記述することができます。
・コメント
・前処理指令のうち変数の定義/参照、 関数の定義/参照を生成しないもの

Cソース中では、デバイスが持つsfr名をそのまま記述します。
このとき、sfr名を宣言する必要はありません。
sfr名は、初期値なし(不定)の外部変数となります。

sfr名に不正な定数データを代入した場合は、コンパイル・エラーとなります。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-343
SFRの各レジスタ内のビット指定の記述方法について教えてください。
Q
SFRの各レジスタ内のビット指定の記述方法について教えてください。
例えば、TM1を開始/停止させるには、どのように記述すればよいですか?
A
TM1タイマを開始させる場合は、
  TCE1 = 1;
または
  TMC1.0 = 1;
のように記述してください。


停止させる場合は、1の代わりに0を使用してください。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-251
PSWをCソース上で扱うことはできますか?
Q
PSWをCソース上で扱うことはできますか?
また、PCC++;とすると、アドレスがインクリメントされるのですか?
A
PSWをCソース上で扱うことはできません。アセンブラで記述してください。
PCC++;とすると、PCCの内容がインクリメントされます。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-542
スタートアップ・ルーチンで、「通常」、「ブート領域用」、「フラッシュ領域用」とありますが、どれを使用すればよいですか?
Q
スタートアップ・ルーチンで、「通常」、「ブート領域用」、「フラッシュ領域用」とありますが、どれを使用すればよいですか?
A
フラッシュ領域セルフ書き換え機能を持たないデバイスの場合には、「通常」を使用してください。

ブート領域側にはブート領域用を、フラッシュ領域側にはフラッシュ領域用のスタートアップ・ルーチンを使用してください。

「ブート領域用」、「フラッシュ領域用」は、それぞれ次のように使い分けます。
  • ブート領域用
    フラッシュ領域セルフ書き換え機能を使用する場合に、書き換えが行われない領域(ブート領域)に使用してください。
    RESET後は、ブート領域のスタートアップ・ルーチン_@cstartを呼び出します。
    そのほかの割り込みベクタは、フラッシュ領域側のアドレスを定義するようになっています。
    スタートアップ・ルーチン_@cstart 内で、_boot_main関数を呼び出した後に、フラッシュ領域の先頭アドレスITBLTOPに分岐します。

  • フラッシュ領域用
    フラッシュ領域セルフ書き換え機能を使用する場合の、書き換えが行われる領域(フラッシュ領域)に使用してください。
    フラッシュ領域用のベクタのRESETに該当する部分ITBLTOPに、フラッシュ用のスタートアップ・ルーチン_@cstarteを呼び出します。
    その後に、main関数を呼び出します。
542.jpg


リセット時の動作は、次のようになります。 RESET割り込みベクタ(ブート領域)
→ _@cstart(ブート領域)
→ _boot_main関数(ブート領域)
→ ITBLTOPアドレス(フラッシュ領域)
→ _@cstarte(フラッシュ領域)
→ _main関数(フラッシュ領域)

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-268
if-switch-switch-if-elseの構文で制限事項はありますか?
Q
if-switch-switch-if-elseの構文に何か制限事項はありますか?
A
if-switch-switch-if-elseの構文に特に制限はありませんが、 ブロック文のネストは、45レベルまでです。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-339
プログラムの動作中に、ハードウェアリセットと同じアドレスからプログラムを再実行したいのですが、C言語で記述できますか?
Q
プログラムの動作中に、ハードウエア・リセットと同じアドレスからプログラムを再実行したいのですが、 C言語で記述できますか?
A
コンパイラの拡張機能のASM文を使用して、 Cソース・プログラム中にアセンブラ・プログラムで記述してください。
リセットさせたい位置に、以下のようにアセンブラ・プログラムを記述することで、 リセット・ベクタに分岐させ、初期化から再実行可能となります。
  記述例1)
  ------------------------------------------------------------
          :
  #asm
        MOVW    AX, !0000H
        BR      AX
  #endasm
          :
  ------------------------------------------------------------

  記述例2)
  ------------------------------------------------------------
  #pragma asm    /* この行はソース・ファイルの先頭に記述する。*/
          :
        __asm("\tMOVW    AX, !0000H");
        __asm("\tBR      AX");
          :
  ------------------------------------------------------------

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-264
#pragma inlineとは、どのような命令ですか?
Q
「#pragma inline」は、どのような命令ですか?

また、速度を速くするために、いくつかの関数をインライン展開したい場合、 関数ごとにインライン展開できるような命令はありますか?
A
「#pragma inline」は、メモリ操作用標準ライブラリmemcpy、memsetを関数呼び出しではなく、 直接インライン展開してコードを出力する機能です。
ストリング命令を使用したコードを出力する場合は、-QNオプションを指定してください。

関数ごとにインライン展開できるような命令は、ありませんが、 memcpy、memset以外の関数をインライン展開する場合は、 以下のような関数形式マクロ等を使用して記述してください。
#define MEMCOPY(a、 b、 c) \
        { \
                struct st { unsigned char d[(c)]; }; \
                *((struct st *)(a)) = *((struct st *)(b)); \
        }

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-342
"#pragma sfr"指定で使用可能になるsfrの記号は、特殊機能レジスタ一覧中の略号と同じですか?
Q
"#pragma sfr"指定で使用可能になるsfrの記号は、特殊機能レジスタ一覧中の略号と同じですか?
A
はい、同じです。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-188
変数をアラインメントしないようにする方法は?
Q
構造体のメンバ変数を2バイト・アラインしないようにしたいのですが?
また、構造体以外の変数をアラインメントしないようにする方法はありますか?
A
構造体の場合は、-RCオプションを指定してください。

構造体以外の変数をアラインメントしないようにする方法は、現バージョンではサポートされていません。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-494
変数の初期値が不定なプログラムのコンパイルを防止する機能はありますか?
Q
変数の初期値が不定なプログラムのコンパイルを防止する機能はありますか?
A
-W2オプションを指定してコンパイルしてください。
値が代入される前に関数内の自動変数を使用すると、 以下のワーニングが出力されます。

W503 Possible use of ’変数名’ before definition

静的変数(外部変数、static変数)に対しては、明示的な値、または0で初期化 されるため、W503は出力されません。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-532
参照のみの初期値あり変数をROMに配置したいのですが、どうすればよいですか?
Q
参照のみの初期値あり変数をROMに配置したいのですが、どうすればよいですか?
A
count修飾子を指定してください。

(例)
	const int a=0x12;  /* ROMに配置 */
	int b=0x12;        /* ROM/RAMに配置 */
変数aは、ROMに配置されます。 変数bの場合には、初期値がROMに配置されて、変数自体はRAMに配置されます。
(ROM/RAM両方の領域が必要になります。)
スタートアップ・ルーチンのROM化処理で、ROMの初期値をRAMの変数にコピーします。
ROM化により、ROMとRAMの両方に領域が必要になります。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-299
シフト演算の動作について。
Q
Cソースで、シフト演算を行いたいのですが期待した結果が得られません。
何か、良い方法はありますか?
    int i;
    int test[16];

    for(i=0;i <= 15;i++)
        test[i] = 0x0001 << i;

   得られた結果:        期待する結果:
   test[0] = 0x0001   test[0]  = 0x0001
   test[1] = 0x0002   test[1]  = 0x0002
   test[2] = 0x0004   test[2]  = 0x0004  
   test[3] = 0x0008   test[3]  = 0x0008   
   test[4] = 0x0010   test[4]  = 0x0010
   test[5] = 0x0020   test[5]  = 0x0020  
   test[6] = 0x0040   test[6]  = 0x0040 
   test[7] = 0xFF80   test[7]  = 0x0080
   test[8] = 0x0000   test[8]  = 0x0100
   ・                 test[9]  = 0x0200
   ・                 test[10] = 0x0400
   ・                 test[11] = 0x0800
   ・                 test[12] = 0x1000
   ・                 test[13] = 0x2000
   ・                 test[14] = 0x4000
   test[15] = 0x0000  test[15] = 0x8000
A
定数0x0001をunsigned intでキャストしてください。
test[i] = (unsigned int)0x0001 << i;
          ^^^^^^^^^^^^^^
デフォルト(-QCオプション指定時)では、charサイズで演算を行っているので、 シフト数が7の時は、演算結果が0x80、int拡張すると0xFF80になります。

シフト数が8以上の時は、常に0になります。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-346
0割り算をしたとき、結果はどのようになりますか?
Q
0割り算をしたとき、結果はどのようになりますか?
A
被除数により結果が異なります。
許された入力引数以外も含めた組み合わせと演算結果は、以下のとおりです。

除数
被除数
非数 無限大 0 ノーマル数
非数 非数 非数 非数 非数
無限大 非数 非数 無限大 無限大
0 非数 0 非数 0
ノーマル数 非数 0 無限大 x/y

演算の結果、オーバフローが発生した場合、+:無限大/-:無限大を返します。


演算の結果、アンダーフローがが発生した場合、非正規化数を返します。


除数が0の場合、被除数と除数が無限大の場合、 または演算結果でオーバフローやアンダーフローが発生した場合、matherr関数を呼び出します。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-347
floatの割り算(fdiv関数)で、返すことのできるMAX値はいくつですか?
Q
floatの割り算(fdiv関数)で、返すことのできるMAX値はいくつですか?
+10の38乗ですか?
A
はい、その桁数となります。

ユーザーズ・マニュアル 言語編の章「C言語の基本構成」の表「基本型一覧」 に記載されているfloat型の値の範囲が、返り値の範囲となります。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-345
float÷floatの計算結果がオーバフローした場合の関数からの返り値は?
Q
float÷floatの計算結果がオーバフローした場合の関数からの返り値はMAX値ですか?
それともエラー・コードですか?
A
関数からの返り値は、正または負の無限大です。
これとは別に、matherr関数が呼び出されて、errnoにERANGE(=2)が設定されます。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-194
デフォルト最適化指定時のsetjmp関数の退避領域サイズを教えてください。
Q
CC78K4のデフォルト最適化指定時の、setjmp関数の退避領域サイズを教えてください。
A
CC78K4のデフォルト最適化指定時の、setjmp関数の退避領域サイズは14バイトです。

-78K4-

この情報はお役にたちましたか?
back to top  

78k4
-533
C言語で記述した、グローバル変数のアドレスを知るにはどうすればよいですか?
Q
C言語で記述した、グローバル変数のアドレスを知るにはどうすればよいですか?
また、一覧のようなものは出力できますか?
A
リンカのオプションで、-KPオプションを指定してください。
リンク・マップ情報にグローバル・シンボルのリストが出力されます。
その中に、シンボルの持つ値(変数のアドレス)があります。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-378
sprintfは、"%f" 等を使用しなければリエントラントですか?
Q
ユーザーズ・マニュアル 言語編の章「ライブラリ関数」の「リエントラント性」の中で、 sprintfは、浮動少数点未対応のものはリエントラントと記載されていますが "%f" 等を使用しなければリエントラントということですか?
A
"%f"とは関係なしに浮動少数点のライブラリを使用した場合には、 リエントラントではありません。

浮動少数点のライブラリを使わない場合は、リエントラントです。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-259
関数sprintfのパラメータにfを使用すると期待される文字列が入力されません。
Q
78Kコンパイラにおいてsprintf文を使用して文字列を操作しています。

パラメータにfを使用すると 期待される文字列が入力されません。
引数を整数としてパラメータをdとした場合は正常に動作します。

パラメータfに対する制限等はありますか?
A
浮動小数点対応のライブラリをリンクしているか確認してください。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-344
コンパイラの拡張機能に割り込み関数がありますが、スタック切り替えの指定を使わなかった場合、コンパイラは必要なスタック・サイズを確保してくれますか?
Q
コンパイラの拡張機能に割り込み関数がありますが、 スタック切り替えの指定を使わなかった場合、 コンパイラは必要なスタック・サイズを確保してくれますか?
A
別途確保はせず、デフォルトのスタックを使用します。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-205
#pragma vectとinterruptはどちらを使用すればよいですか?
Q
#pragma vectとinterruptはどちらを使用すればよいですか?

また、#pragma interruptを記述すれば、ベクタ・テーブルは生成されますか?
A
どちらを使用してもよいです。

ベクタ・テーブルは、生成されます。出力アセンブラ・ソースで確認することができます。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-445
78K4マイクロコントローラのデバイスのユーザーズ・マニュアルにある割り込み機能のマクロ・サービスの予約語の使用方法がわかりません。
Q
78K4マイクロコントローラのデバイスのユーザーズ・マニュアルにある 割り込み機能のマクロ・サービスの予約語の使用方法がわかりません。
A
CC78K4では、マクロ・サービスの予約語は、使用できません。

プログラムの処理で間に合わないような場合にマクロ・サービスを使用することになりますが、 C言語ではこのような時間的に問題がある場合には不向きです。

アセンブラではマクロ・サービス・コントロール・ワードが使用可能です。

-78K4-

この情報はお役にたちましたか?
back to top  

78k4
-350
エラー・メッセージ "F112 Too much internal node on temporary fileProgram aborted." が表示されます。
Q
エラー・メッセージ

F112 Too much internal node on temporary fileProgram aborted.

が表示されます。
A
オプションの指定で、“-sa”、または“-a”を指定すると、 アセンブル・ソース・モジュール・ファイルへの出力の処理限界が考えられます。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-315
コンパイラで、64ビット演算をしたあとにビットシフト操作をすると、"’W760 Double and long double are treated as IEEE 754 single format’" というワーニングが表示されます。
Q
コンパイラで、64ビット演算をしたあとにビットシフト操作をすると、

W760 Double and long double are treated as IEEE 754 single format

というワーニングが表示されます(コンパイラのオプションで、-w2を指定しています)。

ワーニングを表示しないようにするには、どうすればよいですか?
A
64ビット演算が、double/long double 型を使用した演算を指している場合、 CC78Kxでは double/long double を指定できますが、64ビット精度の演算はサポートしておらず、 double/long double とも floatと同じく 32ビット精度演算として処理されます。

そのため、ワーニングが表示されます。

"W760 Double and long double are treated as IEEE 754 single format" は、 double/long dobule はIEEE 754 single format (32ビット精度の float) で扱うという意味になります。

64ビット精度の演算はサポートしていないので、 ワーニングを表示しないようにすることはできません。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-201
コンパイル後にアセンブラ・ソースを作成し、アセンブル実行後に「*.LMF」ファイルを作成したい場合、ワーニング・メッセージ "W837 Output assembler source file,not object file" を無視しても問題ありませんか?
Q
#pragma section @@DATA ??DATA2


ソース・ファイルからインクルードしているヘッダ・ファイルの中で、上の宣言を行うと、 コンパイル時に


W837 Output assembler source file, not object file


というワーニング・メッセージが表示されるのですが、 コンパイル後にアセンブラ・ソースを作成し、 アセンブル実行後に「*.LMF」ファイルを作成したい場合には、 このワーニング・メッセージを無視しても問題ありませんか?

A
無視しても問題ありません。

W837は、-Oオプション指定時であっても、オブジェクト・ファイル(*.REL)を出力せずに、 アセンブラ・ソース(*.ASM)を出力することを示すワーニング・メッセ−ジです。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-218
ワーニング "*** WARNING W851 Data aligned in ’@@DATS section’" を表示しないようにするには、どうすればよいですか?
Q
次のようなワーニングが表示されます。

*** WARNING W851 Data aligned in ’@@DATS section’

ワーニングを表示しないようにするには、どうすればよいですか?

データ・アラインしないように、変数の定義順序を見直す場合、 順序配置のコツがあれば教えてください。
A
W851は、データ・アラインしたことを通知する-W2オプション指定時にのみ出力されるワーニングのため、無視して構いません。

-W2指定時にW851を表示しないようにするには、データ・アラインしないように、 変数の定義順序を見直してください。

2バイト・アラインの場合、
__sreg char a;
__sreg int b;
と定義すると、変数aとbの間に1バイトの隙間ができます。

・BYTE(char、unsigned char)型変数、およびその配列
・1バイト・サイズの構造体、共用体

は、1バイト・アラインで配置されます。

これ以外の変数は、すべて2バイト・アラインで配置されます。
2バイト・アラインとは、配置される先頭アドレスが偶数番地であることを意味します。

変数宣言の見直し後、-W2を指定してコンパイルし、W851が出ていなければ、 データ・アラインによる1バイトの隙間ができていないことになります。

出力アセンブラ・ソースでも確認できます。

以下に簡単な例を挙げます。
"W851"のところで1バイトの隙間ができます。
__sreg char  a;
__sreg short b;  <- W851
__sreg char  a;
__sreg long  b;  <- W851
__sreg char  a;
__sreg char  b[3];

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-539
#pragma section指令を行った場合、PM+のビルドで失敗します。
Q
変数のセクションを変更するために、以下のようなソースを記述しているのですが、 Cコンパイラでオブジェクトが生成されません。
そのため、PM+のビルドで失敗するのですが、どうすればよいのですか?
#pragma section @@DATA DATA1
int b;
#pragma section @@DATA @@DATA
A
C本文記述後に、#pragma section指令を行った場合、 オブジェクト・モジュール・ファイルは作成されず、 アセンブラ・ソース・ファイルが作成されます。
そのため、ビルドで失敗します。
コンパイラオプションの設定で、アセンブラ・ソース・ファイル出力する-SA、 または-Aオプションを指定してください。
PM+では、コンパイラの後にアセンブラを起動するようになり、オブジェクトが生成されます。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-377
Cソースの中に、ASM文が記述されている場合に、メッセージ "W837 Output assembler source file, not object file" が表示されます。
Q
Cソースの中に、ASM文が記述されている場合に、メッセージ

W837 Output assembler source file, not object file

が表示され、オブジェクト・ファイルが作成されずにリンク時にエラーになります。

そのため、Cソースから一度アセンブラのソース・ファイルを作成後に再度ビルドをしています。

一度でリンクする方法はありますか?
A
Cソースの中にASM文が記述されている場合は、コンパイラは、 ワーニング・メッセージW837を出力し、アセンブラ・ソースを作成して処理を終了します。

ワーニング・メッセージW837は、 オブジェクト・モジュール・ファイル作成指定オプション-O が指定されていてもオブジェクト・ファイル(*.REL)を出力せずに、 アセンブラ・ソース(*.ASM)を出力することを通知するメッセージです。

次の手順でオプションを指定することで一度でリンクできるようになります。
  1. プロジェクト・マネージャで「オプション」メニュー→「コンパイラオプションの設定」 を選択し、コンパイラオプションの設定ダイアログをオープンします。

  2. "デバッグと出力"を選択します。

  3. "アセンブラ・ソース・モジュール・ファイルの出力"をチェックします。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-615
Cソース・プログラム上でソフトウエア・リセットを行うために、_@cstartを外部参照できますか?
Q
Cソース・プログラム上でソフトウエア・リセットを行うために、 _@cstartを外部参照することはできますか?
A
以下のようにasm文を記述することで参照可能となります。

------func.c-------

void func(void)
{

#asm
    EXTRN   _@cstart
    br      !_@cstart
#endasm

}

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-288
Cソースで記述した日本語コードが正しく出力されません。
Q
Cソースで記述した日本語コードが正しく出力されません。
A
CC78Kxでは、Cソース中に漢字を記述できるのはコメント中のみです。

なお、コメントで使用される漢字コードをオプションまたは、環境変数により選択できます。
オプションの指定がない場合、環境変数LANG78Kに設定されたものが有効になります。

デフォルトは、次のようになります。
  • MS-DOSベースの場合 -> SJIS
  • PC-DOSベースの場合 -> NONE
  • EWSベースの場合 -> EUC
環境変数 LANG78KにEUCと設定された場合は、コメント中の漢字種別をEUCコード、 SJISと設定された場合は、シフトJISコード、NONEと設定された場合は、 コメント中に漢字コードがないと解釈します。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-596
32ビットのビットフィールドはできますか?
Q
32ビットのビットフィールドはできますか?
A
できません。

ANSIではビットフィールドは、int型になります。

CC78Kxは、拡張してchar型も可能です。

-78K0- -78K0S- -78K4- -78K0R-

この情報はお役にたちましたか?
back to top  

78k4
-355
以前、"大文字、小文字を区別しない"というコンパイラ・オプションを使用していたのですが、これは使えなくなったのですか?
Q
以前、"大文字、小文字を区別しない"というコンパイラ・オプションを使用していたのですが、 これは使えなくなったのですか?
A
大文字/小文字は、区別するという仕様に変更しました。

大文字/小文字を区別してプログラミングすることが定着していることから、 以下のバージョン以降の製品から、この機能は削除されました。
CC78K0S V1.10
CC78K0 V3.10
CC78K4 V2.20

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  

78k4
-611
ヘキサ・ファイルの最後に‘^Z’(0x1A)が出力されます。
Q
ヘキサ・ファイルの最後に‘^Z’(0x1A)が出力されます。

どのような意味ですか?
A
MS-DOSでは、制御文字‘^Z’(0x1A)を 追加してファイルの終了記号としているため、 オブジェクト・コンバータでは、ヘキサ・ファイル (インテル標準HEX形式、インテル拡張HEX形式)の最後に‘^Z’(0x1A)を 出力して、ファイルの終わりを示しています。

ヘキサ・ファイルの最後に‘^Z’(0x1A)があっても、問題はありません。

-78K0- -78K0S- -78K4-

この情報はお役にたちましたか?
back to top  





















 ご利用にあたって  個人情報保護について  RSS       © 1995-2008  NEC Electronics Corporation