|
|
你好,前面提的问题:sysbios系统工程指针操作耗时长的问题 这个问题还没解决啊。
( G! \) k1 ~0 khttp://www.51dsp.net/forum.php?m ... p;tid=1198#lastpost
& E0 X4 |" s% ?! T6 k! O1 @( a: K+ y4 t1 `; n# N |
( \7 e+ g( A: E自己有尝试好几次,感觉像是sysbios下面的读内存比写内存更花费指令周期,我看了测试程序的汇编语句:9 D4 e+ V8 O: Y+ `' Y N
7 h6 B- j8 t9 b* ^: W H% U/ F5 Y
' V3 T: p! d7 `9 z0 {% B$ @/ F27 *pda = 30;$ T8 @) y! c) w/ {% m: |! j
c30025cc: 0200106E LDW.D2T2 *+B14[16],B4
$ t, R$ v' n) E; U8 W: E* {c30025d0: DA93 MVK.S2 30,B5
9 K( k& g( j: ?+ u6 Ic30025d2: 4C6E NOP 3; L5 G( F! {: a, z2 j
c30025d4: 029002F6 STW.D2T2 B5,*+B4[0]/ N$ p8 ?8 [" v" l: d2 Y" k
" i. C, Z9 g8 ~9 D! I. d7 p9 {; C8 A
这是指针赋值的汇编语句;
/ J' S6 x5 u; F6 n) C% [下面这个是变量赋值的汇编语句:
8 L$ C% g2 ?+ P4 P8 [3 b27 test = 30;
3 P2 p$ u, \( _, I1 b( e1 nc30025c4: 01800F28 MVK.S1 0x001e,A3- V+ M1 @* k% g; l( q& u
c30025c8: 0180017C STW.D2T1 A3,*+B14[1]
6 {. C0 M( \" X9 s- _5 {2 i6 ]' G8 O; }3 F
$ H" ~1 q% P) h3 \
我对比了看指针赋值比变量赋值也就是多了一个把地址读出来的操作,但是指针赋值要比变量赋值多几十倍的指令周期。完全不应该啊。
6 i% o) c- j- b5 s9 i我把测试代码再贴出来一下,在前面那个问题上已经贴过了:
+ J( S, d8 F+ I0 D! b; N7 |( |#include“c6x.h”! e, r8 ]; c+ v1 k+ T, j. r/ q0 f
int test;
2 [4 T- S1 i- u1 |3 B/ h* ^int *pda= &test;+ r9 Y/ o5 C) K% M/ `
long long t1,t2,tdelt,;
/ i/ Q0 t3 n7 X0 F7 B$ c0 ZInt main()
A6 Z3 O4 O Z0 u) D{8 l, v2 M4 Q/ T% H- x5 R T
TSCH=0;
8 j) ]7 j5 {* a2 m# C* \1 l TSCL=0;
, a' v' Y$ d1 e8 R1 \' W* r# V t1 = _itoll (TSCH, TSCL);' c$ d* F) z& {; j5 o) v
*pda = 20;# j& `6 a5 F( N/ x% P( g
t2 = _itoll (TSCH, TSCL);
% E* @" d+ G9 I$ @ tdelt = t2-t1;
( O+ J: K! d1 w/ b; L L9 a return 0;6 n% t/ p0 @; H, v( w
}1 M3 @% Q9 M) N; y! m' d; t5 ~ S
4 x' R! t$ t3 V! T6 k4 m* V
此处tdelt的值得到是307,而将*pda = 20;替换成test=20;那tdelt的值就是6.差距如此大。5 J2 R# Y$ m G+ ]% d! ^3 ~
# X' m& x- o3 y, _" U
! Y( f# K' U2 O1 ~/ N希望创龙的朋友的也可以试一下看看,只要在CCS里面新建有sysbios工程,就用上面的代码测一下就能看到现象了。& N8 G b; L! D
请帮忙分析一下原因啊。5 e& E2 ]5 V, w: |5 L ]
$ r5 b+ y, E' `! B% W' f* h# w, i: m% ^9 d! @
9 k6 R* l" |& @ s2 D5 {& m i5 w |
|