bit、sfr、push/pop 組込み関数の使い方

テクニカル・ノート 40085

アーキテクチャ:

8051

コンポーネント:

compiler

更新日:

2018/08/13 1:27

はじめに

本テクニカルノートでは、KeilのツールからIAR Embedded Workbench for 8051に移行する際に発生する問題について説明します。

この例は、IAR Embedded Workbench for 8051バージョンV7.x(またはそれ以降)を使用して書かれています。

この例では、ビット変数とsfr変数の使い方と、Keil固有の関数である_push_()と_pop_()を置き換える方法が示されています。

よくある質問は...

...Keilのsbit構文の置き換え方についてのものですが、それに対する回答は、「IARのヘッダファイルを使用するだけ」です。このヘッダファイルで、char型とビットフィールドの両方を含む匿名のSFR共有体を使用します。

例1

#include <stdbool.h>
__no_init bool __bit mybit;

#define BIT __no_init bool __bit
BIT mybit2;

void main(void)
{
mybit = 1;
mybit2 = 1;
}

例2

__sfr __no_init volatile unsigned int test_int @0x92;
__sfr __no_init volatile unsigned char test_char @0x94;

#define SFR __sfr __no_init volatile
SFR unsigned int test_int2 @0x96;
SFR unsigned char test_char2 @0x98;

void main(void)
{
test_int = 0x1122;
test_char = 0x33;
test_int2 = 0x4455;
test_char2 = 0x66;
}

例3

#define _push_(X) { char __tmp; __tmp=X;
#define _pop_(X) X=__tmp;}

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。