RL78のローカル変数のメモリアドレスについて

こんにちは。SUZUKIです。

 

RL78/G14用のプログラムをCS+で開発中に良く分からない現象に遭遇しました。

プログラムは

void test(char a){

char b = 0;

b = a+10;

}

という簡単なものです。

この時に変数a,bをウォッチするとアドレスがそれぞれ[L:REG][H:REG]となっており、変数bの値は0のままでした。

動作する条件としては下記3つありました。

1.変数bの宣言をグローバルで行った場合

2.別の変数(使用しない)を関数内で宣言した場合

3.変数bの型をint型にした場合

これらの時は変数a,b共にアドレスが割り当てられ正常に動作しました。

これはどのような事が起きているのでしょうか。

宜しくお願い致します。

Parents
  • わわいです
    変数というのは、基本的にメモリに割り当てられます。が、
    AUTO変数で、その関数の処理内容からレジスタが空けることができる場合、レジスタに割り当てられ(ることもあり)ます
    そこらへんはお使いのツールチェインのマニュアルに書いてありますんで読んでみてください。

    一般的にメモリよりレジスタのほうがアクセスは早く、アクセスの自由度も高いため、よく使う変数はレジスタを使うほうが処理速度は早くできます
    #AUTO変数をレジスタに割当てる指定(register)もあったりしますねー

Reply
  • わわいです
    変数というのは、基本的にメモリに割り当てられます。が、
    AUTO変数で、その関数の処理内容からレジスタが空けることができる場合、レジスタに割り当てられ(ることもあり)ます
    そこらへんはお使いのツールチェインのマニュアルに書いてありますんで読んでみてください。

    一般的にメモリよりレジスタのほうがアクセスは早く、アクセスの自由度も高いため、よく使う変数はレジスタを使うほうが処理速度は早くできます
    #AUTO変数をレジスタに割当てる指定(register)もあったりしますねー

Children
No Data