[Armadillo:00443] Re: Re[2]: Armadillo-J での RTS, DTR 制御

Masahiro Hanada email@hidden
2005年 8月 5日 (金) 16:20:20 JST


花田です。

老婆心ですが、ビットフィールドを使うにしろ使わないにしろ
レジスタを構造体ポインタで直接扱うことなどはしない方がいいと思います。

Kenji Hirano <email@hidden> wrote:

> typedef union {
> 	unsigned int DWORD;
> 	struct {
> 		u_char DATA;
> 		u_char wk;
> 		u_char DIR;
> 		u_char MODE;
> 	} BYTE;
> } st_pa;

volatile st_pa *ppa = get_gen_reg_addr(NETARM_GEN_PORTA);
d = ppa->DATA;        //read発生
m = ppa->MODE;        //read発生
ppa->MODE = m | 0x2;  //write発生

こうして書いてしまうと、
読み書きのたびに毎回、実際にハードウェアアクセスを行うので、
意図しないI/Oによって(レジスタによっては)予期せぬ事態を招きかねません。

volatile unsigned long *reg_porta = get_gen_reg_addr(NETARM_GEN_PORTA);
st_pa pa = *reg_porta; //read発生
d = pa.DATA;
m = pa.MODE;
pa.MODE = m | 0x2;
*reg_porta = pa;       //write発生

などという形で書くのがスマートだと思います。
#とっくにご承知でしたら、聞き流してください;


____________________________________________________

    花田 政弘 (はなだ まさひろ)

      (株)アットマークテクノ IT開発部
        TEL: 011-207-6550    FAX: 011-207-6570
        URL: http://www.atmark-techno.com/

    E-mail: email@hidden
____________________________________________________




armadillo メーリングリストの案内