! b4 z2 y, ]5 E5 Z, r. u: F5 f#define SHAER_RAM_BASE_ADDR (0x80000000) C5 x$ i- ^! L, @5 R/ {' ?
#define SHAER_RAM_SIZE (0x20000) 6 ?0 ?: H7 \% `& @+ F! y/ U7 _$ K" q- z: l
typedef struct 2 T4 Y* y. V" _( A2 p" O( B{' } y, ~5 H" A
unsigned int a; ! E6 o7 e2 U1 a1 l unsigned int b;+ g. X2 y$ G* I
unsigned int packet_cout;" o; T. ~5 U% k0 e4 y& \
}RX_MSG_PROTOCOL, *pRX_MSG_PROTOCOL; 5 `' P( A2 A; N8 A$ h, O/ a' t. Q7 X7 I5 t _5 i( w5 M' F6 i
void read_MSG_buffer(int *baseaddr);: C) U! @1 Y3 I9 U0 E
unsigned int count_copy = 0;" |( a! d3 t7 J* e6 _( h7 X
% E. E2 C% I2 O
int main()* O" Q' }& b4 j% `" V
{& Q( I" |* K* Y- ~$ }: o0 Q2 b
int fd;+ ^- ?2 E( k% U* u% T
int *mem = NULL;2 W5 M M" R9 l$ M* J& S
) J: P3 X. x& \8 f
if((fd = open("/dev/mem", O_RDWR)) <0) + `& U: @; N. h; s% ~# G { 3 G$ _) V+ q7 @5 K perror("open error"); 8 [; o# q$ ^" Z4 n return -1; * M, _; u1 C3 P) z/ ?, t R }0 e4 F4 p& ]- B R
0 D7 B `- N, t" m& z# y4 s& Z mem = mmap((void *)SHAER_RAM_BASE_ADDR, SHAER_RAM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);/ S1 F( R) p1 d- D% ^
7 G* V* K3 F- L# j0 F
while(1) 2 a* l' ~+ m# B6 \, C- v$ Z5 @ { ; t9 W3 @, ?8 z9 c4 p read_MSG_buffer(mem);/ J( C! f5 z! w8 i, t) F E
} 0 e) [- W# m, X2 y3 L
}4 B. y# T. u& z+ h& S( }
& a9 X* v2 G% dvoid read_MSG_buffer(int *baseaddr)- O" {9 U0 U. H
{, u% U z8 B1 d" g. y9 A
pRX_MSG_PROTOCOL pshreRAM = NULL;% o+ U" M) D. }7 f' i2 r. j
( ~: K- _& Q4 R, i$ v' ]3 K" Q5 i pshreRAM = (pRX_MSG_PROTOCOL)baseaddr; 2 D% v( E7 D4 p+ } A! b ) k1 z) D' J5 X/ d# X$ W if(pshreRAM->packet_cout != count_copy) 4 n3 s4 M$ x% m {% A1 y/ B' R- c
printf("a is %d\n", pshreRAM->a);# G. f5 R3 g+ A3 d2 R4 A# }
printf("b is %d\n", pshreRAM->b); 3 [9 ~9 a4 V C6 D printf("count is %d\n", pshreRAM->packet_cout);1 y7 G5 s! o% T1 s) X2 H: X
count_copy = pshreRAM->packet_cout;( X8 |$ {( X' A: m
}6 Q# t. I/ h0 _
else/ x- U0 l% R0 Z; v' y) U# {
{ c1 t, }! s3 Y! k2 B
printf("No effective message!\n"); 0 y8 D% Y2 @; I* q ~6 K }- j; t6 u: Z, v4 I
}$ c. R' q) n) Q/ @# r8 T2 i) e) f
$ v$ D( H. W' h+ z n' J% ]. Y没有出现segmentation fault这个错误,但是读出来的数据均为0。这该怎样解决啊???主要问题还是在Linux系统下,OMAPL138是否可以直接访问映射地址???该怎样实现???7 X2 S% b, d( n% a# A
# g, U# j2 u6 Y( A 1 ^$ |; H5 n0 a6 P " s; r2 m9 H' S6 I u: B/ r8 U. X/ g, p1 U+ `( E