debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5912|回复: 1
打印 上一主题 下一主题

[未解决] debug时程序运行的莫名其妙

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 * [. y& v1 Z8 ~5 n, y; i

7 E0 F2 s! p) V/ ~) f* R! N各位大神:1 f) E7 n" _* `3 j3 p0 Y. w- x
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
$ U/ j; u6 R" F* Y" v0 Q      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:. G9 ?1 T! z4 f5 |' |5 S; n

8 }5 H& c) C) u/ d0 L) `     
+ ?' O3 g  z1 K这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。( ~7 R6 |6 [9 q& {9 k6 P! n
8 n" r: k( ~- w4 d  r: O
并没有其他线程
: B" R& b4 v! e* s  Y9 E) y反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% X" i- e6 H2 ]+ \5 a
也说不定是和堆栈有关系。。。。。。9 {( {- H/ [/ k1 {- R. X( u+ l: k
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数...., o+ Q( z0 w1 O  E0 d5 f! U% b( _
& \9 u, K* n# n: f( U

$ c" I( Y$ {8 |: L: Z* x
) E* u" @) g' V9 P我也很绝望啊,希望大神能帮帮忙,感激不尽,!0 [2 H' B4 J0 N( J0 i! k

) N3 ?# g  T& ^8 Z/ z
* z+ O$ p( j8 ~附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
& n) i, Y4 A; j, ~/ `$ k1 B        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。7 _2 a( \' l/ w- a

' F+ O; J* g8 fboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
1 p# G$ m$ H2 M, T  @                const double data1000[1000]) {0 Q; t8 B; I5 r4 t* N
1 b! `# i" i" b8 L  o* T0 g
        int myfuck;
( X$ x# _) r& Y        double yiDuanShuJu_mean;
; G! U! ^- \! ~8 ?- j$ k0 m        double yiDuanShuJu_LowMean[1000];
$ X2 i* @7 T* {6 C  T        int ixstart;( Q) u( _5 t, T, s2 a/ n, C
        double dv0[1000];. K6 `& Z" r/ f5 z" |6 D
        comm_AGC pAGC;
- O  V- [  v/ N7 {# Y9 w4 g        comm_CarrierSynchronizer pFineFreqCompensator;
' |6 T& |6 I$ s* F$ [! V) f        dspcodegen_FIRDecimator pRxFilter;
% ?" I3 Q! ?  K( D& S/ l        comm_SymbolSynchronizer pTimingRec;
% b4 p6 [5 Z- Y" Y( W5 l; h$ `        comm_PreambleDetector pPrbDet;" M# v1 ]0 H0 [" p' {8 e
        FrameSynchronizer pFrameSync;  V" N" d3 |5 e" n( u) ]
        QPSKDataDecoder pDataDecod;
1 V& z$ f1 H9 }0 e6 [        static double usable_left_filtfilt[81000];, [* W6 M6 w7 ~8 v
        static double youXiaoShuJu_QuZhiLiu[81000];
9 t5 J( L6 y( A  x5 {- u+ G        double mtmp;1 N/ f! q" b( b7 K
        int ix;
9 `: @" C% |& T0 h        boolean_T exitg2;
0 U# ~* d; f, M# v1 e: N7 b* b% O        boolean_T exitg1;
  T: ^  k6 V# n6 L        double YiZhenShuJu[800];
7 x( ^& c* j7 P. q        double dv1[800];  x" J$ G* c  U& J

! m$ n9 d$ F0 e3 ~/ Q. U9 c0 W* e4 J6 e- c  q, E
        double b_YiZhenShuJu[800];
- X; ~2 g; r+ s. S  }. _        double I_filtfilt[800];0 n, h2 h2 f  a7 ^! h0 A0 l
        double Q_filtfilt[800];: n8 `0 ~8 `+ G" z
        creal_T b_I_filtfilt[800];! O' {8 |+ _1 `. i
        creal_T b[800];
9 W* p2 l: @8 q6 G  M% R- w        creal_T RCRxSignal[50];
7 O. o+ A1 q8 n        creal_T fineCompSignal[50];% k7 I9 U( t; \6 s; y  r
        double phError[50];
( o" ~. I  `, r& u        creal_T timingRecSignal_data[28];9 ]  g+ T3 q9 E) u
        int timingRecSignal_size[1];
8 b: d, l) h1 d( C" v+ K/ Z        double prbIdx_data[28];+ C6 b9 P0 f: {4 D( H( c& |) X* J
        int prbIdx_size[1];
3 A9 {& l) b2 [3 B; c# @7 f9 w        double dtMt_data[28];
5 I! r* v* c: T/ e2 T6 Z        int dtMt_size[1];
  x1 s. H1 i8 ?% @        creal_T symFrame[25];
8 ?5 H  p& r) a& M# ?; K' H. Y        boolean_T isFrameValid;
* [1 x" C5 F6 O$ \1 L9 v8 l. t( B1 z9 F        double unusedU0[3];( S) ?6 Q/ t$ O$ L

, a" f% K: }- j& G" y$ U' B        //调试过程中的变量" u6 b& M$ E0 T
        int  enough_data;
; L! W# p: B$ o7 G, h  g  [: Y
  I* Q% B' K) |  g' w' X/ k5 f        int enoughDataFlag;
4 e6 N$ O  s3 O* c        int yiDuanShuJu_mean_int;
0 L5 q5 n/ Q# _+ L4 @( \1 Z9 L        int int_sum_dv0;3 \' P7 \9 ^! A1 p# p' b6 C
        int oo;
, d+ v8 n7 r# U' K        int ii;
$ G" s& t, C/ K5 j& [' ^        myfuck=10;
: ?5 a* G1 v8 }# z* w" o1 j        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */7 _; H& o) b. c4 T' v7 ~5 R  ~  H) }* J
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
6 }7 ^9 d+ L1 v
0 R5 L/ [1 E0 R7 g7 P" G        yiDuanShuJu_mean = mean(data1000);. L! `7 }( |1 ]0 F/ d. S8 i. X( x

; ^. c7 \/ G7 n% f        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;& c7 o0 M( F4 t" N9 Z& z  q
        UARTPutc('A');
; E5 g7 ?( H: X; }; f        UARTPutNum(yiDuanShuJu_mean_int);5 d2 p0 d0 P5 R) c0 r0 T
        UARTPutc('\r');
. A+ \! I1 E" F' A        UARTPutc('\n');( H- y7 ]5 w& ]  y- z
" o/ W2 M. B- f5 l4 l) S
        for (ixstart = 0; ixstart < 1000; ixstart++) {1 t, G; L$ _! z/ A* |' X/ V
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;: Y6 K- Q0 e  R
        }3 k- }& N( i: j- [
9 G! `7 L% k% `
        power(yiDuanShuJu_LowMean, dv0);2 R. ~: s  ^: {' p
9 U# t7 ]0 ~$ e1 q* I
        int_sum_dv0 = (int) sum(dv0);
" z) L8 @: }. h, n3 X9 _( T
/ ^6 [( M# {( ]' v+ g        UARTPutc('B');/ O- o, c+ z9 M3 R' B
        UARTPutNum(int_sum_dv0);/ \& r. x5 p& `% |7 _
        UARTPutc('\r');# B. O% W( q+ D5 C. j
        UARTPutc('\n');
. m9 {( E  l) F
6 h+ X  ?% l! q1 f. m# s//        int compareFlag = int_sum_dv0 > 1.0E+8;( v* I( F$ @; X( g; s+ K
' n% \4 F. w* G! y: k! \  L
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?  b  A; K( J2 P7 l, l6 V5 r( T! b
                UARTPutc('C');
, @) S& i' Y. C* K                /*  比较信号能量 */
. h$ l( z) h9 X8 I1 y                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
4 u( K9 G- e7 |" U1 O; |//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
, t" g6 Y& Z( B//                for (ixstart = 0; ixstart < 1000; ixstart++) {
5 M8 n. ], X. I) |1 R& Q5 Q9 C! \- S//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =: R8 _& a# `  C0 T
//                                        yiDuanShuJu_LowMean[ixstart];2 P# h* K* d- J
//                }
7 ~7 F8 V0 b! U. B- l$ a//
' s" i; ^! Q. N& y6 O- b% g//                youxiao_k++;2 e) Z: x0 h( Q( Q8 u
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==3 ^, }5 N( J# ?
//                        /* 感觉要取21个数,即0-20, */
7 D( m4 g2 w+ P- O- W5 ]) P/ n& l% y//                        enough_data = 10;//有效是10,无效是0$ ?) L4 G+ `; M. E/ ^
//                }
1 u9 z" x3 C2 y" b4 K8 e0 E) C8 i9 R% \        }5 }5 l1 E( }  L7 z0 z  `7 X

# f& T0 q& |& t* t4 t6 c% p# w. e+ |$ D7 N$ l% t* y: e
        enoughDataFlag = 100;3 B* d; K( k; N$ C9 A# M
        enoughDataFlag = 1000;3 l5 W) A- W& [. R4 M3 ]( h1 g
        enoughDataFlag = 0x02;8 w0 R+ \" b6 H! L( A, L; a! u
        enoughDataFlag = 200;: E" M# s! w) T: L0 Z* v

2 P2 F2 W9 t; x4 J" V2 k        int myfuvk1;' T$ L  T! C! N8 C0 _
        myfuvk1 =11;
0 I" H* Z, \% _6 G3 |8 ^7 [* N' K- f7 ?5 Q2 l
% _' g0 b( K* x/ T3 n( \
        enough_data = 0;
3 e2 ~9 a; q1 d" C4 K; u# g
8 E2 \5 f1 s. \- c) b- R/ ~//        if(enough_data>50){
$ T# D1 G. k$ d- S' B3 I5 }//                enoughDataFlag=0x01;% G1 C8 L2 ?7 M+ T4 j  i2 k
//        }else if(enough_data<50){3 X8 t8 y  T7 u( Y5 l- b; U
//                enoughDataFlag=0x00;//0x00还是不行6 U8 B2 s) p1 B4 m' b
//        }
! x. K, m+ c5 G' l& i5 O: ]: m$ Y: |
9 y# I+ n+ E% G2 _2 W5 n( j
        oo=10;
  ]" x! `  c. T) F        oo = oo  <  5;
. J1 f! p& d# P3 p* L. ]( d, w" t        if(oo){
. B( @6 T. X2 e/ P7 q, D# S                ii=0;
9 n# j2 o' x, y        }
- D  @: D* b- E, `# x( n! X        if(oo  <  5){
) ~& f( m# L% `8 f7 I/ X+ y& Q                ii=0;( c! z7 D; K& F; m8 d2 [6 S
        }6 X* Z5 [$ T% y4 _% K* a
        if(oo  >  5){' V: H% [- t: d
                ii=0;2 h" o. l# o4 y; P$ N
        }
+ B! x4 C4 v. c1 H6 R
+ z6 {, b! m) [- l8 o, Z0 |+ x. l# }        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */( b( a3 u$ {/ O
        /*  如果数据足够才执行主程序 *// l& X* }9 M4 Y+ l* f) [( F
        oo = oo  <  5;8 e1 r* B' W9 w
        enoughDataFlag = enoughDataFlag  <  5;
6 x) v# H/ n- t2 r& n        if (enoughDataFlag  <  5) {
" O0 d- G4 h! T9 I& }//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
! Y* a; _2 l- v' z! u+ u5 D                AGC_AGC(&pAGC);
1 I0 ~8 g. c' B9 E7 e( c# X1 Y2 q
. {- u5 j" L  v- M& A/ `3 c* Z                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 I3 W( c- V( ~" L
                FIRDecimator_FIRDecimator(&pRxFilter);" J$ Q3 D8 c- @1 e! A

* _9 L7 C% i, o3 o' E                /* Downsampling */
0 h3 G" F; E7 h                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 t( S& U! y6 E

& K, O8 ^! _5 n( b1 o! M2 i6 j; \                c_PreambleDetector_PreambleDete(&pPrbDet);
6 F* h8 T% U+ b: L* J( _4 S* f  v' @  H! A( Q0 b
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
8 K  J. J% j" e& P; D" W                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */3 s0 p9 b* Y5 I7 c! `
                /*     %帧数量=100 */
8 S3 g- g+ K+ v$ o) u/ c: ~                pFrameSync.isInitialized = 0;
  L1 E7 D; F+ i
) m6 n1 _4 Q7 Q* |5 k5 j' ?                /*  [EOF] */
& \# p% t: R, G                /* 前导码长度是13 */* [/ I7 p  O; d: g: r3 T$ P1 e
                /*    %qpsk */, N' k$ ^9 \  M3 l3 |
                pDataDecod.isInitialized = 0;# u( c3 A4 t( g  R2 K

, ~  T- \3 _( Z                /*  end */6 W" B, \1 P6 Y/ [2 A
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
0 x& l- p) q. n' f5 v! i                /* Convert 3-dB frequency */
% T8 a, i* a# X5 B                /* Convert 3-dB frequency */
' U& K! v6 |: R5 s( F                filtfilt(save_buffer, usable_left_filtfilt);
, |" _" v/ Z& Z* M                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ Q5 z' W( F' y- a3 o3 G                        usable_left_filtfilt[ixstart] *= 2.0;
! L4 r! b0 T: F- s/ U) f* r                }
3 W! R1 n- U! W- A$ n4 k2 \- s2 x% O& T2 E0 z. X1 H$ E6 B
                /* 注意乘2,处理幅度 */
! v- g& N' }8 n* w9 @1 G                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */3 J# Q6 F2 i: j$ n' L2 K
                /*     %% 行列转换 */9 X7 ~" i  W0 X% y4 i3 j. a7 q
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);0 Y7 \  D0 d. M. \
                for (ixstart = 0; ixstart < 81000; ixstart++) {
* w' U1 r- Z; h                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
0 S1 _) ?3 s" `* @* Y* D( c6 v                                        - yiDuanShuJu_mean;
4 y. {6 K! o, ^. ~                }3 {3 t4 a* g: h2 q

9 o- n2 C( }+ T2 l" R6 `                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
) |" _8 c2 {/ D3 U                ixstart = 1;# N% l3 @' R+ P/ x
                mtmp = youXiaoShuJu_QuZhiLiu[0];0 q9 F. H/ Z8 ?7 B
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
, k! B! Y6 Y' ~$ b' M; i, u/ c# u  s' |                        ix = 2;
6 V; {# [7 `( h' d* P                        exitg2 = false;
7 Q. v/ q7 C7 \& G/ r3 f                        while ((!exitg2) && (ix < 81001)) {, m9 [& ~; j. D: C0 }: r7 W
                                ixstart = ix;
; z1 p3 |, h' o7 m) n: i                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 h) w4 j' ~. B$ x% M
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];$ F  u$ u; L. a6 x7 ]5 n- x
                                        exitg2 = true;
. ~% y% D! C+ P/ Z5 ^- e( V                                } else {
. {: `. h1 d2 c+ m                                        ix++;9 e/ T- P0 n2 u
                                }9 O7 V! x7 ^$ f+ z- K, E, y6 j
                        }
0 I( e, Z) l/ e* m( k                }" @# Y7 r  A/ q' ?# z( D
+ e6 _3 d+ ~5 _9 X% X+ b( ?$ k7 a
                if (ixstart < 81000) {) B4 W9 ^1 r% c7 W
                        while (ixstart + 1 < 81001) {' q( N8 d* z1 G8 [  R
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {/ B" V: T. Q. F6 n& h
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
! |! o: C1 o0 W; l; o) \                                }
, @+ A+ s  K' o8 G6 e2 `3 p* B" ~2 f' D! E
                                ixstart++;7 p2 p. w; p! w. h& @* o7 A2 T
                        }9 y  y! L) p3 b+ O7 o4 O
                }/ O$ [: p0 b6 K7 `* g0 L" k
1 E9 D& [7 o1 Y: F
                ixstart = 1;3 y! `: z# i. J% i
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
! N8 b3 w5 A# c2 L) e. u                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {* S! [2 h) N3 H
                        ix = 2;7 c$ k: x/ L! X% b& W6 e2 U- m
                        exitg1 = false;% @1 T/ M9 n. |
                        while ((!exitg1) && (ix < 81001)) {
7 p- m  Y  U' q$ ~5 ^5 `                                ixstart = ix;2 P; F2 X6 X; {8 t6 @# n' D7 x+ c
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 J* `% T" R5 B# n& F
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];: r5 M8 p; ?6 E! n; b  I: o3 U
                                        exitg1 = true;
  K. @9 K2 {$ F6 s                                } else {
' o: n% [* V1 c( ]: ?4 i4 x                                        ix++;5 _; b5 U( C( {
                                }
* B1 I, T- B+ ~# f8 ]0 S                        }, G) m9 ~, P1 H7 M* U) l& w
                }
+ `; x: q: j: q% M
. Z4 o2 A/ v- \2 r  z                if (ixstart < 81000) {
! G: e- d: i' r1 ^' ]- E3 x3 I                        while (ixstart + 1 < 81001) {
) Y: H% N; L& x7 S/ [                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
  i& c; z4 T4 D; S                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
) H$ j; A2 d) @; S$ M; I" G: _1 R; L                                }- l2 r+ E: I# W

6 j3 V1 b7 Z; L4 `7 E" ?                                ixstart++;" u" t# @2 w, V
                        }
4 ^( k2 b( n: h* K  G* m+ C/ i- s                }1 u- v3 |. n1 c  H! x% C' Q
1 t: J7 o: P0 M6 M' x
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);' w# M  ]0 k6 s% S1 s
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
- C% _- v. T: B0 D; k                        yiDuanShuJu_mean = mtmp;
# D  ]! ]5 I" I5 q! B/ a. s* L                }+ c; u" r2 B, d: }. T; S
5 h, q6 Z6 k8 v" Y8 ~$ w
                /*  找出极值 */2 y! x3 p1 `" u- z
                for (ixstart = 0; ixstart < 81000; ixstart++) {; e7 p* i, r3 X
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;  a4 j" u3 e2 q( J
                }  X) [; D' u9 h. T

* |$ I! ?6 W. \. h# z  m        --------------帖子字数限制------------------' c3 I, V8 w! R2 G2 g. h
}
, B/ }. p; o; N& [( b
; P9 M+ A- g. P/ @. I  n: u! z1 I9 K$ G% p5 I

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2017-6-8 16:37:30 | 只看该作者
会不会有其它并行的线程修改到了它
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-5 03:58 , Processed in 0.046930 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表