! R, J) x" d) a0 {! T4 Z5 G9 m buf.a = pshreRAM->a; / i5 F4 v* P' g buf.b = pshreRAM->b; & B- Q5 Q8 `' ^5 k9 I' S buf.packet_cout = pshreRAM->packet_cout; : B4 r) X9 D& B; ]8 E $ ]2 b. Y- \/ {" | if(buf.packet_cout != count_copy)9 y; S; J8 C- o' M, g
{- l4 v- G2 Y- Z0 p5 n0 p
printf("a is %d\n", buf.a); 2 C9 O% c# m: u0 H8 p6 l7 S) T printf("b is %d\n", buf.b);/ z: U/ T3 ^' E! I
printf("count is %d\n", buf.packet_cout);* X3 y* o# [$ f% o6 H/ k, y) l
count_copy = buf.packet_cout; # T* n) s! l# N" p U3 y9 c2 i& e4 S5 _ }% {- _: m& p- k
else # T3 a2 L5 z' t3 q4 Y8 P { 6 O2 @- ]3 Y9 [$ ~+ ^ printf("No effective message!");; u/ ^- T' o, F h+ L7 e
} 4 X/ z2 x+ q5 K} ) B, d- H( m2 T; A* U/ ~# U / b# m3 u. w$ R1 t) W3 P + r' e! n' S/ g- F$ e3 e( ^但是出现segmentation fault的问题,这是什么原因啊???我在DSP端烧写了一段小程序,向共享区0x80000000位置写入数据,用CCS 测试发现写入成功。 7 M& |+ c( {9 F使用下面代码,对内存使用了mmap函数后: # c! L; U# f( e5 o) R1 A! @#include <stdio.h>( \% W4 E4 c- B/ V/ ~, c- p% O
#include <unistd.h> q, b9 c$ H% d+ C* L
#include <sys/mman.h> $ R' q, [' s, b#include <sys/types.h> / c/ T# a1 h/ p x. x; j" ^9 w#include <fcntl.h>0 x: c/ A. o1 ^9 v
$ Y/ B! b' {1 z! X/ p7 u7 s
#define SHAER_RAM_BASE_ADDR (0x80000000) 7 Y; i- h7 X: ~7 m#define SHAER_RAM_SIZE (0x20000) # w6 w9 a- D% O# l& x 1 o7 U$ R- f% xtypedef struct : L3 U; a6 [! F r$ X% c2 Q{# x) F0 L# X+ m' w6 S# e* N
unsigned int a; , j6 ^3 y) j9 m9 a5 G. n, E% }6 O unsigned int b;0 I' J) [; ?7 h9 Y0 h2 E8 m
unsigned int packet_cout; 2 o Y" n( \9 b7 `2 v$ \& H}RX_MSG_PROTOCOL, *pRX_MSG_PROTOCOL; ( B; e3 n1 p% Q# q2 l& K! H & l- `- S& v/ [+ r) P" d5 ` nvoid read_MSG_buffer(int *baseaddr); 1 \& ]4 B) J- L+ Eunsigned int count_copy = 0;0 j$ }% D& A1 E8 P
5 o, z! l% h* Q8 d0 Gint main(): P. g( _4 \$ N3 ]$ T/ P
{ 1 U0 R2 r. F( G. s" P& ^ int fd;& J2 ?# N$ j! R. f, H
int *mem = NULL;9 K. Q+ U1 Z" |) R6 y, M
& d4 |3 p% k) B8 z if((fd = open("/dev/mem", O_RDWR)) <0)$ H5 q. u6 \+ Z
{, e M* H4 n5 m; ?& S
perror("open error");" N7 j4 Y N6 ~1 O
return -1;. G& m7 R4 s* W' N: d/ i
} / J: g6 B# G% z: Z1 M5 h , u1 T/ I! K# O! t3 n. P' t4 I$ B0 z mem = mmap((void *)SHAER_RAM_BASE_ADDR, SHAER_RAM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);& Q7 s2 `6 K$ M1 Y9 h' v+ ^
/ ~. q0 _+ h+ X
while(1)5 j4 B) C- j2 H; ~+ Z
{& E. g% R+ K7 B8 Z! ?) f/ X4 E
read_MSG_buffer(mem);' a+ R U U9 F/ g
} ) h J* X8 `# Y+ p# A8 Z) L' V! C}6 i0 O( J; E1 G
# m" z4 `7 k' E, W
void read_MSG_buffer(int *baseaddr) - L; _( P9 N b2 u{ 7 k3 `" q, ]9 _/ t$ A+ t/ E3 ] pRX_MSG_PROTOCOL pshreRAM = NULL; 6 p0 r+ z- N0 t! b* G* {2 h- w0 p7 }: u& `, P4 `
pshreRAM = (pRX_MSG_PROTOCOL)baseaddr; 8 z% O7 Z; S$ A% H4 r/ B$ f, S 9 @! k% I5 M" p7 U if(pshreRAM->packet_cout != count_copy) & d% E; e, m. N x {# W2 {9 y7 P" e0 y) M/ T
printf("a is %d\n", pshreRAM->a);$ Q6 R! X# x5 G
printf("b is %d\n", pshreRAM->b);) x! D# ]& z# u% K
printf("count is %d\n", pshreRAM->packet_cout); 1 v8 W5 e8 S) Z count_copy = pshreRAM->packet_cout;. ]+ D; |, v* j. W0 P
} & I7 v+ P# A# j5 T8 j, w else / J: ?, ~+ k9 J* b r2 g { ' q* p. l8 r& d, h5 N% w/ L printf("No effective message!\n"); 3 H- f& m/ R/ k# I, m } ( i% ]0 v7 C" Z5 M5 ^* X1 h}1 R2 \. g% O; T) m/ Z. }$ [