[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 メーリングリストの案内