Japanino ArduinoISPで ATtiny13 の PORTB 定義 (33) (11/29)
PORTB = 0x0A; /* C/C++ */
または
PORTB = 0b00001010; /* C++14から0bプレフィックス可能 */
と書いている。
PORTBが単なる数値ならこんな事は出来ない。
#define P_PORTB (unsinged char *)base_addr
とかなっていないと。
でもマイクロソフトの悪習だったが、LPSTRなどと変数の型がわかるように定義するものだ。
でなければ、
EECR
EEPE
の2つのマクロがぱっと見、ポインタなのか値なのか全然わからない。慣れればいいってものじゃ。
これは<avr/io.h>に何か仕掛けがあると思って、ずっと探していた。
だが<avr/sfr_defs.h>の方だったorz
ソースはSpecial Function Register=I/Oレジスタの事で、色々定義が絡み合っている。
こちらのサイト様で確信を持った次第だ。
AVR avr/io.h インクルードファイルは一体何をしているのか??: マイコン漬け
こちらにあるように、ページ末尾にはマクロ定義を使わないで直接アドレス指定してポートアクセスしている次のページへのリンクもある。
つまり、ATtiny13なら、
__SFR_OFFSET = 0x20
なので、
#define PORTB (*(volatile uint8_t *)(0x18 + 0x20))
なのだ。
ふぅ、納得いった。
いっそこのように定義してincludeしないくらいじゃないと。