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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
2 _* v, [& f% p& S
) x( A5 R0 U  ~5 t* ~' |0 A8 w各位大神:8 R0 G/ `% g; N8 {2 t# J; f
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)! Q+ N* c2 g8 r( M" e; M
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:( K/ p- \/ P$ u

; c& p8 T" J: [9 l0 U     9 E! ~% P! C, d  V$ D
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
1 {0 g7 A8 I% g/ d4 R
- n6 H1 m& h3 w+ n; k0 a/ e0 |并没有其他线程# l/ ]  p) p! }, [+ y
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
% o8 Q2 ?# s: P. G  V也说不定是和堆栈有关系。。。。。。
% O; J5 t1 G3 e1 J7 f5 l' s请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
" W2 f( Y* K, U# _# Y$ T$ A" l  z0 D" u
  e9 V, Q- f2 C! h+ K

1 F2 }; R$ i! w9 V+ Q我也很绝望啊,希望大神能帮帮忙,感激不尽,!1 x4 K% r% {& A* R8 X$ z
  N, j6 Z) G+ b+ p) E( r5 O) \" l- U

$ Y- D/ z+ A+ ?# ]& q4 o附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];, t9 a& h* I6 G" o* u) s- i
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。' z# J9 }& S( L4 I5 Y! j
0 |9 y, Q$ ?+ I' n8 W, }
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
$ n# Q( m+ y, D" F5 \                const double data1000[1000]) {6 L0 Q. l0 a( I0 `

2 A' G0 F' q: ~8 h! S        int myfuck;' G6 ]" H8 c/ X1 ]9 K4 r  |
        double yiDuanShuJu_mean;! A0 Z1 c+ N3 o# Q1 v" ]3 F, o
        double yiDuanShuJu_LowMean[1000];
& ~0 I) s( Z/ @4 h# L4 E        int ixstart;
" h8 V7 |. }" J5 Y9 Q        double dv0[1000];$ T1 v) X, ~* P, Y. @$ d) n9 y
        comm_AGC pAGC;
2 o) R- f9 |1 E2 n& [        comm_CarrierSynchronizer pFineFreqCompensator;. {  Z. F- z# u* N
        dspcodegen_FIRDecimator pRxFilter;  _2 e3 P" C8 S' l$ X
        comm_SymbolSynchronizer pTimingRec;
* N3 I7 o7 }5 v1 z1 `5 p        comm_PreambleDetector pPrbDet;
3 d+ h0 y! [' x  m3 E! {4 e7 ^6 I$ s        FrameSynchronizer pFrameSync;
# D! h) v; W# U1 b' P9 \        QPSKDataDecoder pDataDecod;, }3 r- V, k; e  }5 l9 l; f
        static double usable_left_filtfilt[81000];5 j+ r; V3 M  b% _2 l
        static double youXiaoShuJu_QuZhiLiu[81000];
. S& V" R+ {1 Q6 v3 I# R        double mtmp;
" I) K, F; @0 [5 }+ H; l4 ]1 i: @        int ix;
  i6 G4 B/ m# M. z& x        boolean_T exitg2;
; D9 p9 ^. G! A8 _1 H$ c. T$ U        boolean_T exitg1;9 j, e6 j( @. {/ M6 j; s7 q+ ?7 |
        double YiZhenShuJu[800];% \, B) E0 [8 f7 k7 V  y4 |
        double dv1[800];* J; Y% j  |! B5 A

, o' y( S) U9 _1 |# z8 j
/ E+ R. c% M+ c" e3 K  r9 n& v# `        double b_YiZhenShuJu[800];
6 {/ e# G+ ?0 c/ \        double I_filtfilt[800];
  `/ ?7 N5 A1 O: F4 S1 \3 ~3 ~        double Q_filtfilt[800];$ s/ j+ I; i0 v" \- w% y
        creal_T b_I_filtfilt[800];
; q# l+ U1 R* a7 o6 J; _        creal_T b[800];( k/ v* ]1 u: F- B: J1 U$ f, R
        creal_T RCRxSignal[50];
6 T3 W) @/ `' t        creal_T fineCompSignal[50];5 \5 y" T& e, x1 i: n% a
        double phError[50];
( ?5 j3 N8 i- w- }& t        creal_T timingRecSignal_data[28];
0 D+ z% I( [& H  H& x4 `        int timingRecSignal_size[1];2 ~3 O) h- b+ ]3 f4 r- u# F$ f  k
        double prbIdx_data[28];
: ?: W" ?% ~% V" {1 v        int prbIdx_size[1];; c, g, ]! d4 q: o/ a! t
        double dtMt_data[28];1 q/ M5 \6 ^( c+ Y+ G
        int dtMt_size[1];5 j& u' \$ [; c+ f. a
        creal_T symFrame[25];8 S: k) T$ _1 F$ o& \* s
        boolean_T isFrameValid;' s+ r: E3 Z9 Z' I
        double unusedU0[3];# k2 s. m$ K' m9 Q' g& N

# t, ]3 T- U" H4 P5 l+ I        //调试过程中的变量/ @+ u7 ]1 a; S5 t  Z6 r
        int  enough_data;& t2 N* K, v3 g* |$ t/ Z3 k
1 t# Y1 Z) ~) R3 r
        int enoughDataFlag;1 c1 ^9 C2 j9 A, I+ {. D' e2 I+ L$ `$ |
        int yiDuanShuJu_mean_int;
* t# I% t+ y: t  P7 k3 u$ \        int int_sum_dv0;! K# n4 K( c* _! o# m8 g8 `' y
        int oo;
; n- A9 \* l7 P1 C4 ~        int ii;- o, \. ^- |( q) r9 m: D0 t7 Y, K
        myfuck=10;
3 O  D/ y0 t( E7 T/ D2 A9 {        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
9 M3 E1 Z2 P; P5 Q( o        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */* C; d# b2 I+ D- Y

1 T) ~2 Y  E9 C        yiDuanShuJu_mean = mean(data1000);
6 u" F3 n6 ]' o9 P  Q& r% M$ S$ p: m; V
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
% ?/ t# q9 ]4 J        UARTPutc('A');
$ b& e/ B" E: h# D8 G, `2 t        UARTPutNum(yiDuanShuJu_mean_int);+ Y0 B! v& N5 H4 p9 B9 T
        UARTPutc('\r');
$ c7 M2 y# Q7 g  X1 j8 ?        UARTPutc('\n');9 L$ @& e, H. _( l" s
. v1 ]0 @% _2 p3 z) p6 g% r: a9 F
        for (ixstart = 0; ixstart < 1000; ixstart++) {' c7 T9 O1 w! e2 }
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;  ~$ ^! j$ @- J
        }6 ^) i. ]9 X0 V1 B/ H5 k8 J% d
! s3 H8 u  ~/ M$ r" l4 o
        power(yiDuanShuJu_LowMean, dv0);, c+ C' h0 ^8 L8 A9 x+ }
. q* L) ~; ^8 m7 E, j( e9 l
        int_sum_dv0 = (int) sum(dv0);1 u- q2 N8 Q! t. ^$ b

- r0 I9 F3 e- q* k% y9 {, C/ R        UARTPutc('B');
& A8 g/ N( F* I        UARTPutNum(int_sum_dv0);6 H  m$ u7 n5 j8 Z" v
        UARTPutc('\r');
& T& ^% F5 X- C9 n        UARTPutc('\n');
2 L& d* t' t* j; ~( }4 J2 f, t& t' L& R6 \* |5 S+ [2 ~, j7 j: X
//        int compareFlag = int_sum_dv0 > 1.0E+8;
$ X5 G: |, A$ E9 a2 @
5 T0 |; @0 e1 H0 |' \9 b        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?+ _9 J/ p+ N6 e( k0 W& ]1 Z4 R
                UARTPutc('C');
3 E' y) r$ }' p5 o, ~                /*  比较信号能量 */
0 S3 b' S2 X) [* _6 J" Z) V                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */9 ?& I0 f; m+ V" A4 @, k0 _; y
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;3 n* \) D  L# h$ o
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
1 x  Q, @* \, |5 ^1 z//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =+ `3 E$ i. @5 T( F# T+ p( h0 p
//                                        yiDuanShuJu_LowMean[ixstart];8 u" G4 L. S0 j& h  p' B. m) Y
//                }3 S, a* X# Z8 [2 z
//
) c+ }; X6 R6 t7 P% I; f//                youxiao_k++;7 O5 C& _# ^5 _0 _
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==2 e5 i3 {4 O0 c' _6 S  ?
//                        /* 感觉要取21个数,即0-20, */
1 q. O6 s0 Z9 E# [9 p1 \//                        enough_data = 10;//有效是10,无效是0# {* q: Z) u/ l/ h7 `
//                }
9 H. e4 Q" l+ ^8 u        }
4 E& J6 @+ c% m- u# Y: L' z3 m- V% W

6 w  X/ x$ G! v/ d' K" j& @        enoughDataFlag = 100;
$ B% O  Z5 i# o$ H        enoughDataFlag = 1000;% H# P9 z, L1 q
        enoughDataFlag = 0x02;! ]- q# r  z* i) [% }" o
        enoughDataFlag = 200;
# ~4 s0 H0 z$ K7 [# n
: [, O8 N$ o& v2 s# _, l7 c        int myfuvk1;  e0 k% o2 h/ z& `
        myfuvk1 =11;, v% h. G+ i, }. b, n' y- l, B2 R

+ h( E. Y, L* h  ]4 f+ K4 U; S4 U; ?8 j: G( |! Z* B/ g% J! ~, w- b
        enough_data = 0;4 Y2 H, c+ |6 I

+ Q) o, [# e. u2 J7 w# u  W$ ]//        if(enough_data>50){( H) W) c3 L* R
//                enoughDataFlag=0x01;2 e4 ]- J. e8 y1 ~+ N8 M3 u8 A0 F
//        }else if(enough_data<50){' |, {6 @& [: P4 h8 [& R; s, G; e
//                enoughDataFlag=0x00;//0x00还是不行
/ H, U# G% [0 u0 ]* ~! ?& N- b//        }# Z( n* G, _( u0 x2 i. ~% U

: p$ v; @0 _! Y' w2 D- ^" v) f9 M4 D+ U4 w5 x. [: j; u
        oo=10;! P- D" s/ V9 z; o3 H+ u; s8 L
        oo = oo  <  5;, [% u$ H4 M3 @1 C: P+ k, y
        if(oo){
" W; M/ G) f$ v+ F2 w                ii=0;
3 G7 n  _% U$ s7 Q2 D% v        }
0 p8 a1 X: L. O2 a  ^) ^        if(oo  <  5){
; w$ z" X0 [' V" f                ii=0;' ~  L5 C1 X' n* [2 x! O! X2 W
        }
) ]4 C3 `0 F% l& h1 _. M, O- k        if(oo  >  5){: b$ R6 m0 X& y+ @" }
                ii=0;1 n2 o% P* u' o; w" @: J: ~
        }6 \7 V$ I9 B4 ~' r  u+ J* ]

' R7 |+ l) r* {        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
4 s$ l! ~7 Q" m$ l' s- [( N        /*  如果数据足够才执行主程序 */3 X% ?& Z- H& p% [, g0 d7 a. R
        oo = oo  <  5;2 r. `2 x  N2 x
        enoughDataFlag = enoughDataFlag  <  5;
1 r" U  ~- \: q- `: g- W6 f( k% q        if (enoughDataFlag  <  5) {
# i. U, c5 w! k1 O5 i; v: P2 h//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是00 K- S- f# v% v! Q
                AGC_AGC(&pAGC);( b! V& d! `$ m8 L! V% K

6 I" _5 j& T( c8 s9 F                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
5 X$ g+ J# ?( J0 H6 z3 V" q                FIRDecimator_FIRDecimator(&pRxFilter);/ A5 ]  s5 A; c8 t$ y: ]

: U8 l' g- I/ M8 I% }# V& T+ ~                /* Downsampling */
, x' X; k' {- q; P4 s5 p                c_SymbolSynchronizer_SymbolSync(&pTimingRec);+ W1 H# w, `! `- A* S$ y

0 g" o& w) E# \" {% u! B* @! Q                c_PreambleDetector_PreambleDete(&pPrbDet);# w" ^5 |9 J1 t3 I

0 z$ Z8 e2 a; _% J9 n0 b                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
0 F7 @! W: w2 m' L9 D. M                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
0 f* D1 X( m+ L                /*     %帧数量=100 */' f# z7 _+ |& h  L: o; p
                pFrameSync.isInitialized = 0;
$ t! ]0 g0 R5 j9 s1 q, N  f* O& u! H7 M! J# A5 P- Z
                /*  [EOF] */2 E% o* b7 s" k% J0 i
                /* 前导码长度是13 */
  K6 ~4 x: l: Q/ z& v% J                /*    %qpsk */9 j  I: }+ Y2 S; }0 j" E, j  R7 G
                pDataDecod.isInitialized = 0;( a) i* e$ d8 L1 ]
& s0 Z( m1 `7 m8 J
                /*  end */$ e5 u6 H! \  w: B7 l
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */6 ~# g) e6 t$ `# K  O4 u  V
                /* Convert 3-dB frequency */
8 q- s' [- @, \% G  l3 r                /* Convert 3-dB frequency */
3 W1 j' C2 T0 _" q+ J# q5 G7 f* t                filtfilt(save_buffer, usable_left_filtfilt);
/ S- e3 n7 g/ w- X# a# j                for (ixstart = 0; ixstart < 81000; ixstart++) {- l1 z, @& S8 O% S
                        usable_left_filtfilt[ixstart] *= 2.0;( t) Z7 i+ Z1 _6 j( u. i
                }9 ^5 g$ m+ G, S# W" I5 S9 `8 R

+ c/ @' }9 |  y2 j                /* 注意乘2,处理幅度 */) c- m/ O/ T) Z
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
: O2 [' S" J( a# D                /*     %% 行列转换 */4 p! s% Z0 H# p) z9 e! Z+ N) O
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
8 K# a3 a! ~2 F7 e( w' N7 W! m. d8 ?                for (ixstart = 0; ixstart < 81000; ixstart++) {+ ~2 N0 p/ x6 T) d
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
  Q6 d+ L2 S8 \2 k2 ~                                        - yiDuanShuJu_mean;* V* v# e1 R8 a7 `: T! g* m2 A
                }
9 W9 f- z1 l* S" h# t8 A/ _, z$ Z4 w8 c) ?/ ?
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */: S* w9 }6 k1 `
                ixstart = 1;0 q# w( {) H! N! \6 m, W) |
                mtmp = youXiaoShuJu_QuZhiLiu[0];
1 _6 Y+ x' S2 C% j" `                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 d9 O& B; i% C) p, D
                        ix = 2;" g& s1 c+ v1 O
                        exitg2 = false;
! w* H0 ~6 S# E' N  g0 v                        while ((!exitg2) && (ix < 81001)) {" t4 n) X5 d+ C8 B" i
                                ixstart = ix;; i# T% j! p0 F) a1 ~& o
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {4 ^9 `( T2 ?2 Y: \6 i4 Y
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
5 o! H9 @  S) I3 ]6 u8 {& N                                        exitg2 = true;
7 H3 J& y4 N8 f5 o/ s# s0 D+ K                                } else {2 u4 O+ J5 n7 a9 n' A( @
                                        ix++;
( l& u+ z) v! @# Q) X# s                                }6 I8 L8 P, R4 h( J9 \- [! E
                        }
$ \/ ?! R; B- |1 ~                }' f- Z9 ~8 A/ P% R( W  a( |+ h% b8 u
0 k9 n5 A& n3 n# y. O9 @- D
                if (ixstart < 81000) {
) _% [0 \1 u8 j+ W                        while (ixstart + 1 < 81001) {
1 p. |% Y" v* Q' l                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
3 U# y# Y6 c) [8 W                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
8 ^4 ?( p3 |. i& d' i, r  z1 e                                }
5 g6 v8 W" d) f* F3 F. {+ f
, [+ `: F8 E3 s' ?                                ixstart++;' Z. l5 D; k+ e& }( e2 l/ ]
                        }$ S; m5 M1 V( ?' \
                }& Z% ^0 L& |5 ^  v
' G) v# u' s, A( j& k
                ixstart = 1;
+ n8 y$ c& C! N9 I                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
; \1 k  i3 r: G( `: v6 s1 `                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, }# C) B  o* a+ r5 H3 ]# q9 I
                        ix = 2;1 j8 O) q( W( b0 _
                        exitg1 = false;
9 G4 J5 c$ W' V' j9 W. U( g                        while ((!exitg1) && (ix < 81001)) {: O2 x6 |0 N- e2 I! f2 g# R# _
                                ixstart = ix;9 g% i( N3 [7 h' ~
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 H- ?- j8 [  Y7 y% K$ c" b7 _2 @) K' ~
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
& l. N2 p/ n9 m! R# D3 K                                        exitg1 = true;  R6 e! z+ [7 R
                                } else {! \, p4 `& x5 z2 m+ C. X  ]8 P+ O: h
                                        ix++;! @9 W& m/ z# o% C
                                }
$ H$ s! H' a7 ^+ \% k                        }1 O% l3 n: _$ o. D* D% {+ ?
                }
1 b' k: Z1 b0 M6 O3 p) X% L5 {1 y; h  M3 q
                if (ixstart < 81000) {
9 U8 u7 g2 N0 e* J9 D# E! V* G                        while (ixstart + 1 < 81001) {! D1 B6 M/ F5 P1 U$ P5 t& r/ w5 \. B
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {2 h4 ~" A" Q  s; s
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
/ x* U2 Y4 Z' ^. f& x; N                                }
) @3 P+ q: R+ J0 ]8 d5 N8 U, K0 W5 R
9 M9 e$ t1 D% T2 k4 g, b% a/ k' H                                ixstart++;/ a4 z4 z* Y3 c5 ~5 j2 k8 [2 s
                        }% ?* y& v6 S4 j4 ~: `3 Q
                }! m0 |: G# e6 u: ~

$ o( k9 g' l9 e9 k- a! R                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);# d/ P  _" j- x" L# J  |
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {1 I2 X, A0 t, g6 J4 ~7 ?7 d
                        yiDuanShuJu_mean = mtmp;& A* I% D" k% \& |7 b& N
                }
. D9 b5 i& o! F8 x8 m* {5 s2 Y
. x9 i% _* M$ I0 r$ L& Z                /*  找出极值 */& j4 n+ d9 [: R$ j. u9 T/ d% z1 s$ P1 O
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 {% X4 b0 B/ f) F8 J$ Q( ?. f                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
8 d4 k) ^/ |/ [$ G                }
( u( j: j: |; s: w. y9 D$ j
; {3 p# ?& J) @- O        --------------帖子字数限制------------------
+ Q3 G# L2 F/ |! a6 ?}& U/ D9 R4 ~+ M0 Y5 _( m

! t# [3 Z( e) b4 F+ l5 u7 J# j  s+ Z( M: T: q

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 09:13 , Processed in 0.071982 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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