inb()와 readb()
글쓴이: puresupe / 작성시간: 목, 2009/07/16 - 3:30오후
안녕하세요.
arm 과 같이 memory mapped I/O 방식을 쓰는 아키텍처에서는
inb와 readb가 같다고 들었습니다.
유영창씨 책과, 리눅스 디바이스 드라이버(오레일리)를 보면
inb(short), readb(short) 과 같이 short형의 어드레스를 받도록 되어있는데요
왜 short형인지 궁금합니다
만약 제가, 리눅스 커널 소스중 map_desc 부분에 아래와 같이 매핑을 해두구요.
{ 0xf0200000, 0x14000000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0 { 0xf0210000, 0x14010000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0 { 0xf0220000, 0x14020000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0 { 0xf0230000, 0x14030000, 0x00010000, DOMAIN_IO, 1, 1, 0, 0 }, //CS5 :Serial CS_A A16:L, A17:L, A18:0
volatile unsigned char* CS_A = 0xf0200000; volatile unsigned char* CS_B = 0xf0210000; volatile unsigned char* CS_A = 0xf0220000; volatile unsigned char* CS_A = 0xf0230000;
과 같이 할때
inb(CS_A), inb(CS_B), inb(CS_C), inb(CS_D)
모두 주소를 short형으로 truncate해버리면 모두 0000 번지를
읽게되서, 어드레스 디코딩이 안되지 않을까요???
Forums:
자답이
자답이 됐네요;
추척해보니까. (unsigned long)이 더라구요 :D
댓글 달기