debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 + H! [$ x4 V2 O  |/ i
" r) I& v' r  N: F4 \8 f! @
各位大神:
3 [* H* ~" r3 J; |- \) j     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
. ~1 V; s5 P0 s1 L8 ?( d      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
5 `  O) o. d. H6 e
) L/ \+ x7 ^0 X3 Q     + M" \2 d2 D3 J" d+ |6 q, o3 P) P
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。9 q( W% O; F! i5 L( c! O; P7 I
0 X8 D6 o% }! a
并没有其他线程
* V  A4 Y4 q: o) w反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
! I* \+ f# ~% I' A) O8 [  ]也说不定是和堆栈有关系。。。。。。
2 S5 H5 K! t$ K请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....9 p; k  I; r7 W! u! ~4 r
% d' F7 _* x& H" B( u
. w# Z% A5 V0 @# P

. G+ |& o0 e* a- H  U9 M我也很绝望啊,希望大神能帮帮忙,感激不尽,!
/ a$ j+ a+ b" v; B: z
3 ~% ]' S  D6 g  O! T7 N( d) |( J1 |, H
) @2 U7 }4 R* \5 K  A( n8 O5 O' w" C附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];5 t. T3 a) R  x3 N/ L. c
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
, f; G7 L( L' ^. Z
4 y& o. g+ }# l' Gboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
, K! L: q9 V- R& e7 c7 @3 l2 x                const double data1000[1000]) {$ e1 l! |2 z4 C1 I" x; W5 N

: ^9 G$ x" V& h% u& C        int myfuck;
7 q7 m) Y& ~8 v        double yiDuanShuJu_mean;
1 c0 c! r! {, e2 e, u        double yiDuanShuJu_LowMean[1000];/ c0 m8 o% P( `% C1 `, @
        int ixstart;
* D7 k* G* E) i; {        double dv0[1000];
( Y& c0 G, l+ A" b7 R/ ?( V        comm_AGC pAGC;  Y  ?; B4 d+ P+ Q& }
        comm_CarrierSynchronizer pFineFreqCompensator;7 ?, @5 C0 G4 {6 h& n2 }
        dspcodegen_FIRDecimator pRxFilter;1 W/ \9 W: A: g! e. S
        comm_SymbolSynchronizer pTimingRec;: _4 t6 J3 x: F* H; L+ n
        comm_PreambleDetector pPrbDet;9 W5 y6 U. w' d2 m" r+ X: w
        FrameSynchronizer pFrameSync;
+ g0 c$ O, H  s3 e, m        QPSKDataDecoder pDataDecod;
- x; j1 ^' `) T; E% t" f( z0 J        static double usable_left_filtfilt[81000];" j& l$ j) s+ `! l2 M6 t$ C
        static double youXiaoShuJu_QuZhiLiu[81000];1 ?. e; }7 s5 k3 y( T) |' d! r# z
        double mtmp;
, V4 O: j; P( S5 Z7 b1 }6 ?3 p        int ix;/ ^- l! t0 I( h+ s6 E+ M
        boolean_T exitg2;
6 S! @7 L' r6 c- H6 `9 Q        boolean_T exitg1;$ q0 ^1 i4 X5 D
        double YiZhenShuJu[800];, H2 x8 J2 V: ~; H! z: n) I
        double dv1[800];
7 B! g( w. k6 t8 w# P7 O9 u
0 \( L" \: K. C% |% l
$ P7 J4 o* t- F1 v5 ]/ V) c) q3 [        double b_YiZhenShuJu[800];
& }- S8 m: s. c        double I_filtfilt[800];
( U. A7 Q, V5 l6 G        double Q_filtfilt[800];
2 Y! b( \& _: ]5 y, o- a+ _! E+ y* B        creal_T b_I_filtfilt[800];
. k9 p4 ^" @6 ]/ q# {" T  L+ N        creal_T b[800];. t# P2 |8 f  t7 B5 O, }
        creal_T RCRxSignal[50];
2 f5 v" @+ W7 j" B  {        creal_T fineCompSignal[50];3 w7 g* t2 S' [" A0 T, |) R
        double phError[50];
- f" S/ F* x* Z0 j0 d( L5 y! k8 L9 ~        creal_T timingRecSignal_data[28];
/ \3 U+ A) ?6 w: U0 l        int timingRecSignal_size[1];
1 |/ p9 C# D: h0 h! c( i$ o7 J% E        double prbIdx_data[28];( V; k8 D4 r- E- K
        int prbIdx_size[1];
7 d* E/ y7 x0 [/ q0 |& {3 t        double dtMt_data[28];$ i6 A% {( j" u6 w
        int dtMt_size[1];% _& f4 r, E6 ]- |4 f/ e
        creal_T symFrame[25];
1 z) P9 j, J- z        boolean_T isFrameValid;8 Y* |* H0 g- G0 ~* I
        double unusedU0[3];; e& [% J  ?* x5 l

4 m, |( E6 S6 s; `  n- ?! d        //调试过程中的变量
5 _. h5 m) E9 ]  u& [: f4 Q        int  enough_data;. S  M7 F9 ]0 D" d0 p  R. t5 q
6 T" b: b8 R6 ?9 M2 E
        int enoughDataFlag;* i7 k8 T+ S# A- l! j- j7 [
        int yiDuanShuJu_mean_int;3 v$ M+ n# d: D# h! b9 D
        int int_sum_dv0;
; k# o$ g) h) D! A  J9 \! M' W; F        int oo;! ]1 J7 |( S& E3 z2 c# B& P
        int ii;
6 T/ v' K' b, [: L/ I' ~        myfuck=10;* ^) X( \2 `" _3 S
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
9 K' w: m' J4 S+ }' F3 Q" f; v& U        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
0 s8 E6 X$ h) u# X3 N- x4 P4 s1 C, k, V8 B- W
        yiDuanShuJu_mean = mean(data1000);
! q/ ~- }9 ^: b# |$ ^) l
: k7 l; e5 R* {4 h- b5 P. X9 i* D        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
+ _8 e! ^8 x/ J" r        UARTPutc('A');
, j% N: ?  u% ?9 Z        UARTPutNum(yiDuanShuJu_mean_int);0 u" ?2 K5 K/ `4 n) J9 I
        UARTPutc('\r');" ~7 c# z! ~- @  v$ c% F7 B$ w
        UARTPutc('\n');
& W; O0 Y: ?. S( K3 Y1 }/ V3 P
. V$ L6 E/ v+ ?; q! Z+ b8 x+ p1 @7 O        for (ixstart = 0; ixstart < 1000; ixstart++) {
# {) O7 `3 m  M* t: ?/ Q; M  ?+ }                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
$ h1 V+ Z  o2 m7 H4 ]- m& w        }
4 D+ Q) r5 {/ d! J7 G3 o- W2 o! e
        power(yiDuanShuJu_LowMean, dv0);7 K/ P, y- J" E$ B5 b
- U" M2 h, ?0 M
        int_sum_dv0 = (int) sum(dv0);) M( u' L' K$ F7 ~

  ~5 M& O( l0 S7 \# x# n        UARTPutc('B');
. J! F- \& G! N1 W- }7 N/ D        UARTPutNum(int_sum_dv0);
8 e5 |& Y, q5 o5 ~( k+ _5 I5 m4 n        UARTPutc('\r');
0 q4 r/ r( a& M6 _/ y" h        UARTPutc('\n');
- z2 u1 g7 C$ }# }& Q! C6 ~* u
! ]. ?5 J8 L' W; ?//        int compareFlag = int_sum_dv0 > 1.0E+8;
/ U2 q, h1 g( ?- P- L: t" \4 z8 P( G
! U* r6 R& s# d; B& T        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?1 k4 s: c7 P! R; T
                UARTPutc('C');! x# ?; M0 W3 @' c6 P0 }
                /*  比较信号能量 */7 G& y: Y# a6 G  R7 x
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */7 _; j$ x/ `6 U  R  C- U( y9 ~% A1 v
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
4 u2 R8 g! x/ e- s1 F//                for (ixstart = 0; ixstart < 1000; ixstart++) {
+ n2 n% c% E! Y0 v6 }//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =0 H( K. y! S7 i8 m# b) L! V
//                                        yiDuanShuJu_LowMean[ixstart];0 R: s2 l1 m3 V' Y  e
//                }
) a6 o" p0 X* n6 ]! P) v8 ?' C//, ^4 z  f, h. p5 P0 j
//                youxiao_k++;
! h) Q5 s1 K# U" e% S1 O* H//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==& U3 a; b7 W8 q! h
//                        /* 感觉要取21个数,即0-20, */0 e6 \4 _5 q+ J7 f) O
//                        enough_data = 10;//有效是10,无效是0
% M1 u) A+ o& ?  j9 z( M; }- z//                }6 n8 \' K0 h* f* A+ a. Y( x
        }
9 u0 i2 ^7 I8 c' W2 A  Z
. p3 T3 a! L/ u5 w0 K- x/ f$ B
0 u0 G5 S5 a0 v* r9 y9 |        enoughDataFlag = 100;
5 F2 q2 b1 f3 g- b        enoughDataFlag = 1000;
) I4 a. N/ Z2 ?; n7 x( F( q8 D& u; {        enoughDataFlag = 0x02;* W* H; A, C+ Z& D6 g" N" h
        enoughDataFlag = 200;+ c9 K0 y- _0 _9 v9 }

; ~# L2 q) z# ~3 B& j0 m3 {6 {6 I8 B        int myfuvk1;
  o" a6 {6 \3 W" O        myfuvk1 =11;
9 e9 U% Q& J8 }  Y. P- a* Z* r2 o" }" d% v* u( s$ W, s
0 Q. E9 C9 b8 H5 `8 D
        enough_data = 0;. M4 b# J8 ~$ `1 P
3 w9 {7 C* v) {. |" L
//        if(enough_data>50){
" c  A* b2 T+ y1 D4 K//                enoughDataFlag=0x01;4 j$ s8 F7 `" Q( L, n; w( n/ D
//        }else if(enough_data<50){: p3 B1 u; Z/ r2 K, ^0 H) k( n4 O
//                enoughDataFlag=0x00;//0x00还是不行5 \/ Y- ~5 Q# y( ?) x2 v' q
//        }( A* u6 Y. _9 m) Z
1 O2 @+ k* G3 [" g1 s) w2 L* ~+ P
8 J+ D6 t% C! b' F" s) A6 i
        oo=10;% z4 }! D  v$ [# c% @. q
        oo = oo  <  5;  ]8 y! O" P0 `! z2 H0 K3 _
        if(oo){
* o. C- o6 l3 R6 H                ii=0;/ j8 u9 N. Y# L
        }7 r: p8 F$ L5 w
        if(oo  <  5){
0 a& g5 o! H5 O9 G. H                ii=0;
9 E: J( `( M5 B4 m. x5 L& d5 |        }
1 Q  [2 b4 i8 `: @        if(oo  >  5){( y% A8 f5 i: s0 l+ N. n
                ii=0;
& c2 i1 y# ]1 ]1 H1 u        }
0 n& t, v* D9 I" y, w! k2 [% |- a2 \1 p9 o3 C( ^  V" ]
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) J0 ^5 N( [+ ]) x% u0 p        /*  如果数据足够才执行主程序 */$ V0 c- r5 I( [; m; P
        oo = oo  <  5;5 d: D: R+ Y7 \, s, C8 ]6 U
        enoughDataFlag = enoughDataFlag  <  5;
( i8 g5 B) M3 i9 {  C        if (enoughDataFlag  <  5) {
  {- e9 w% `9 d: ^( u3 o//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
) q, k. g, ]+ e                AGC_AGC(&pAGC);
! \; V# u1 X; |9 x# z9 s& k, C2 S- V$ r6 K, r( c
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
( s2 J0 E$ {6 X5 M# }  ]# G                FIRDecimator_FIRDecimator(&pRxFilter);* @$ B; E# j$ }) ~" n4 w" `
- o+ f. ?- l$ ?( p2 B
                /* Downsampling */8 J5 N. }1 A( z
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
( \/ e3 W0 C. b2 V2 h) L' o6 ~# H1 D- [" L
                c_PreambleDetector_PreambleDete(&pPrbDet);* X" ~# C4 R+ ~7 }

6 @( H$ ~0 E/ u) w: x! s, ]: B                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
7 j8 k1 ~4 R; \" @- |$ I& @                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
, `6 K- \. r' J8 k* H; L/ q                /*     %帧数量=100 */
! G6 j- Y( d3 [# A                pFrameSync.isInitialized = 0;
4 K# Q$ t+ u5 M9 R9 U% }4 U8 O3 K/ s& t" T. U
                /*  [EOF] */
  P  a  u. }, O4 N/ G& L6 a: H. X, P                /* 前导码长度是13 */: D2 K1 z! @/ q  f
                /*    %qpsk */
/ {5 X! w; D0 I3 s6 p                pDataDecod.isInitialized = 0;! v3 ~' `5 S7 L0 o: i2 U

+ {4 |9 I+ ^# V$ {, T; z% K                /*  end */
) [3 ~6 ~+ ^/ w' j9 E9 X  H$ f                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */- {! }' ^: e; \" f% S3 i9 ~6 M
                /* Convert 3-dB frequency */
3 Y# h9 j* g1 v! W                /* Convert 3-dB frequency */5 C8 l  @& G3 E7 E* ~/ V! C
                filtfilt(save_buffer, usable_left_filtfilt);
" T: _$ j, ^- p  f# K2 n: S$ O                for (ixstart = 0; ixstart < 81000; ixstart++) {8 k5 G8 ?5 K8 u( Y1 z. _+ s2 c" v
                        usable_left_filtfilt[ixstart] *= 2.0;9 R1 c2 J1 T* D
                }, L, U' ?: j3 J/ g7 `* {( b) V/ @
& R9 I* k3 `  S) p
                /* 注意乘2,处理幅度 */# \5 T) |+ V8 ^/ g; o* r
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */5 j. h3 _- M: n. l" Y( S
                /*     %% 行列转换 */' h) j  g) o, c) Q, A$ f
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
% g4 F% a4 H; r, H! v                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 V8 \  L; ]) @5 M, H                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]4 a. G% C9 k8 j+ S2 @
                                        - yiDuanShuJu_mean;
* U$ H5 ]6 X! T                }4 Y" v% u, `2 |% G3 C; H1 m
  V/ Y+ W" D. I# I6 k
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */4 _. ]9 F1 M4 V: ~) F
                ixstart = 1;" d6 U8 w& D: O+ T* |+ a
                mtmp = youXiaoShuJu_QuZhiLiu[0];
: q: g. L0 C. u3 a                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 H  k% [' o+ l3 J& `1 p4 ?
                        ix = 2;
. V; n! K$ o0 R! \0 {$ h                        exitg2 = false;
/ B. X) u- o. [: q/ i                        while ((!exitg2) && (ix < 81001)) {4 A  i$ i: O- ^# r5 k% G/ N4 F
                                ixstart = ix;
. u$ [4 R" `, J4 ~) `5 H+ q+ i                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
1 g$ f0 T3 W3 U+ w                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
' l- N7 N& Y% I3 k8 ?                                        exitg2 = true;
8 ^& v7 b+ ?( p/ h) {( U2 p                                } else {
# k2 j- k. R& O                                        ix++;9 W. W5 j2 Z% }1 ~8 y6 D4 l
                                }4 b2 V! ]8 `/ }2 ]/ q& i' w
                        }! E0 a4 N& \# e( U
                }
' f7 p$ A% N/ c% s7 ]
& G4 S1 y2 w1 S) a3 _                if (ixstart < 81000) {
; s6 V7 W) X' I9 I+ X/ b( g- L                        while (ixstart + 1 < 81001) {9 t& m% j( A3 U+ D" h) O5 o! a
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
  e) t  o$ {1 M) A: c                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
% Q4 \. w. e3 [9 T, Y0 l6 g                                }) g6 h$ N3 _- a. J4 F8 |* h$ \
- n2 `# o5 u$ {1 m( i  _6 Y: z
                                ixstart++;2 A; V( f6 t9 g) L0 M
                        }
3 k0 U; P$ A9 }; c1 [  \+ o                }
4 k9 R  Z" Z8 f' h' g- @/ @1 \# \7 Q) C* X, ~$ u: I
                ixstart = 1;. I6 ?$ o+ _7 U
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];" P& \/ q: M& f. K6 l* P
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
7 x+ E" w& S5 ?8 n, O2 H3 G                        ix = 2;
, J. [! C# {! V* v) K* E! S                        exitg1 = false;
  `* h, F- D6 _1 }& [2 L6 j* r" R                        while ((!exitg1) && (ix < 81001)) {3 V$ P. w* E* d$ h4 |
                                ixstart = ix;/ O4 `% K2 u- r* k
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {1 R! @0 p6 Q) M+ D
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];( n) E4 G6 Y) R1 N
                                        exitg1 = true;
& d' m: D4 \  d                                } else {
/ @0 c5 @& y5 ^                                        ix++;- r- r7 `! _* Z- Y/ k, e: c! b
                                }$ ?3 m% O9 P2 K1 T: V
                        }
- ~! |/ B; v  f: i                }- ~0 l3 c8 @. X* _- j  P4 E) H

" {& L  Z* f0 Z* i                if (ixstart < 81000) {
4 W* d9 \6 W+ n/ v4 S  O                        while (ixstart + 1 < 81001) {0 p& y1 E; o6 p6 X
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {5 v% ^- \5 Y+ D& @0 N0 m- h
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
7 @0 ?4 N4 N: ~4 a                                }
& ~% S7 v; O: N$ f3 [( x8 H( q+ F3 k: Q, j# v' X
                                ixstart++;
) ~$ E  _( Q) y& A6 O- I                        }
7 B6 X3 X' h. O' G2 G& K/ E) _                }! d, W7 m/ h1 C+ H' D1 A- R
: k* i, n, I- J
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
& p: P5 u9 [0 [3 }, @                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {1 x/ X- F& U6 z) }  F! R$ H  m! q
                        yiDuanShuJu_mean = mtmp;( T' b8 M8 I, F  a8 d6 y0 y2 j
                }  h* v- D/ e" P9 `$ n/ W2 H

; j. x$ Z+ I! P                /*  找出极值 */4 p7 ^0 C8 c! ]$ T3 A5 C0 W
                for (ixstart = 0; ixstart < 81000; ixstart++) {1 v$ s& [2 |& P4 N" J  L. U
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;5 `, n. N- E* _% O
                }
, [6 @1 u- O' B/ @! v+ B; r+ S' {$ |! ~! D: y5 G! V9 t7 s: L: d
        --------------帖子字数限制------------------
, ~2 a  F- q  J+ J}6 \) }/ ]( g" ]5 Z6 t& U
' u9 ]8 K8 V) h' [0 e9 l
, Q" `. t; |  ~

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 14:17 , Processed in 0.044834 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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