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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 % l# `0 S. a: Q

( J3 w  ?' s+ ~各位大神:# k0 K1 [: x$ {; y
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
: M( Q( f) w* m: d      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
" O( x' X2 C: t0 {: a
$ e: _0 x# |/ @* j2 i* R$ V2 R     
, k( P8 d% N0 W" Y6 @9 ^; Z这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。# M1 x- s' W% X7 d! z$ @8 |
1 `" I) ~2 P% g* x3 }% c
并没有其他线程
8 {9 x+ [& Q. z8 }* ~反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
; U. t3 ]) y0 y) W( D也说不定是和堆栈有关系。。。。。。6 V" U6 g- k( H1 y; a, q
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....1 c. q* {+ S, h9 Y/ ~7 R, [% L
1 L9 X  _* ^2 n" c& S
. S* u- \6 j" ]
1 d+ I) L( Z, [1 j2 M8 ~
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
! O6 K, j0 U; s  v# H+ \% a# R/ @" T7 T/ s2 D7 o; v( v  G" w7 {
! e+ ]0 I3 {+ \
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];/ z- z( H2 Y5 O) c7 [9 r, q
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) i5 g( r9 A6 E5 z( R

* o9 _9 [2 r5 W* P. d2 l. yboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(9 t. U' |" n) n! Z
                const double data1000[1000]) {# Z. G: X5 h! C; G: O

/ E6 n  |) \; c+ j+ E  ?        int myfuck;
+ p) i7 ~( Y; ~- p/ H4 I# G' |% m7 z        double yiDuanShuJu_mean;
5 z" V) G7 u6 }0 {- p- N% o+ E        double yiDuanShuJu_LowMean[1000];
. e3 G  T) E; Z& H4 w! k        int ixstart;
3 f5 C  q) c; {' \        double dv0[1000];
3 u' d; g  D# S4 e# N        comm_AGC pAGC;! x6 I; ?- `9 e" x) e/ I
        comm_CarrierSynchronizer pFineFreqCompensator;
. K" r8 M: l0 j7 `! B/ \8 Z        dspcodegen_FIRDecimator pRxFilter;
' ^1 e# K' O2 [4 A* S2 u  N# M2 v        comm_SymbolSynchronizer pTimingRec;
! j0 @% _: |! u$ V0 A2 c( H        comm_PreambleDetector pPrbDet;" y! c( s  W7 |  F3 v3 d$ `
        FrameSynchronizer pFrameSync;: j8 M4 b" j) H, r8 G  p. C
        QPSKDataDecoder pDataDecod;
* j9 x. b% u3 [* d$ w- b/ ^        static double usable_left_filtfilt[81000];
1 x- T+ y6 I& x% Q2 a7 c; L        static double youXiaoShuJu_QuZhiLiu[81000];, I7 H5 A$ U  b( e% Q! c( U9 ~( w
        double mtmp;  J# q- U0 o6 D9 Y
        int ix;
; E9 i6 A2 Y/ f* y" E        boolean_T exitg2;- Q% H- g: p0 l* k$ y  V
        boolean_T exitg1;' L1 }8 ]  u& R, n/ s
        double YiZhenShuJu[800];
6 E8 p0 v/ r% ~$ ~7 D+ I        double dv1[800];5 c3 Y! ?: F( f" f1 ]2 E

; ?0 j2 k6 F; L7 D  r& {: g+ ]! K, W% Z$ O. R- y3 I+ I
        double b_YiZhenShuJu[800];
1 d' ^% q* l3 J/ n  u5 x: f. U        double I_filtfilt[800];
# f( A$ l4 r7 Z        double Q_filtfilt[800];# i$ n! r' z* [& D+ \: d; B
        creal_T b_I_filtfilt[800];0 @+ a1 N: ^$ h/ d
        creal_T b[800];9 _1 p6 E( P, s$ E# c" S
        creal_T RCRxSignal[50];
: q/ g0 ]" }4 c( U* j        creal_T fineCompSignal[50];
0 o+ ]2 N8 x8 B6 a7 g' }        double phError[50];
# N6 |3 X9 ]1 T- T- j+ G        creal_T timingRecSignal_data[28];
( ^$ z9 G/ }; h/ w* d        int timingRecSignal_size[1];
- z7 @) [. ?7 q& n; }1 D  J; T        double prbIdx_data[28];5 F( n; Q& q9 V: X: S
        int prbIdx_size[1];
+ R* s, T+ H# M        double dtMt_data[28];
$ Y- E) `0 \. i0 X6 P) V% U        int dtMt_size[1];
; A$ C- v: n& r; @, x. l        creal_T symFrame[25];
) C: p! W. t: T: m/ h2 y2 e        boolean_T isFrameValid;
9 G3 E' I5 h. n' Q  k& M        double unusedU0[3];5 u" a' ~& T* N3 _/ v' [

/ W/ N5 {0 x& O8 ^; i2 M4 e" P        //调试过程中的变量
% Y+ ]1 x" U5 Z( G. I2 E8 M: v" I. B        int  enough_data;1 Z% ^8 U+ Z& x* r5 ?. P
; c, a. q" }. r5 N% h& [1 u
        int enoughDataFlag;- {1 G' X2 k9 z: R3 W! x3 I' P( ^) z2 r
        int yiDuanShuJu_mean_int;
; z9 L# Z- K9 Z$ n8 S$ s0 f        int int_sum_dv0;
$ j7 z& M; s- d6 J8 U. B        int oo;
3 l% Z, |/ f9 F$ p- _9 i; w        int ii;
9 V- g  ^9 r( r" q: o3 i6 d1 Q        myfuck=10;
( v5 p8 U4 m5 c0 Y9 K! h5 V        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */6 X6 _$ U" S& C& J
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */# Z4 J* o" {7 q# `: O
9 M) ]. ^  R- N2 z9 a! f
        yiDuanShuJu_mean = mean(data1000);) w/ a0 l& g( Y

, s! N- s) r8 O/ L+ O        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;9 A' |$ h2 F* K3 U" N
        UARTPutc('A');9 X1 @4 v/ U, ]
        UARTPutNum(yiDuanShuJu_mean_int);
9 Q8 [2 |5 v' r/ q" [- F        UARTPutc('\r');
. v* }1 L9 R$ q  t( r: b        UARTPutc('\n');
" E( ~7 B9 ~/ c* e& t- R) E  g1 G, I( K0 g9 w/ y
        for (ixstart = 0; ixstart < 1000; ixstart++) {
& D3 X- f- R  l                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
2 o9 K/ ?! _  A% L8 d6 L        }/ \8 Q, ]' ~9 I  i
  }+ U4 {# e9 U, A! V8 `/ L( C
        power(yiDuanShuJu_LowMean, dv0);& N$ G$ X2 e: b
6 T  v1 B2 w! j8 w; K
        int_sum_dv0 = (int) sum(dv0);- H5 w! {2 @; x8 ]

" j) A0 P1 S. i5 m$ W        UARTPutc('B');7 N  h( o. [" J* u7 w' R
        UARTPutNum(int_sum_dv0);9 O1 f5 J+ x1 b) l! `/ c; |
        UARTPutc('\r');$ M, k4 ?4 x% ~
        UARTPutc('\n');2 V& T$ M) u: y9 \/ u( v9 I

' l" P2 z& u$ T2 X//        int compareFlag = int_sum_dv0 > 1.0E+8;+ G  _+ j8 b# a& o5 Q! e/ e3 _

1 k5 @" X$ c! J3 S; Z7 n        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?* [, r- e9 m5 n& R/ ~0 R
                UARTPutc('C');
# a5 c# W6 I8 G                /*  比较信号能量 */
0 h* A3 X- d$ a! }                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
5 C& c5 t; @* l% Z//                yiDuanShuJu_mean = 1000.0 * youxiao_k;/ M, U& ^8 @4 ^1 p
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
" _) \: G4 x+ |  }//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
+ C! O- x) Q; E//                                        yiDuanShuJu_LowMean[ixstart];* U; m5 [: J) ]! Y
//                }
6 O; X$ y5 T0 W, k5 n) Z7 A3 h. D//
/ z: `1 v( `2 E6 `7 E5 d. a//                youxiao_k++;
" N% ?! Q9 X3 s; J) x/ q6 f* h//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==3 D5 w3 t2 d5 f& e: B
//                        /* 感觉要取21个数,即0-20, */0 D7 X, }; y# @+ Y. S2 q" \
//                        enough_data = 10;//有效是10,无效是00 A  z# M5 ~+ Y) H
//                }9 u3 k, P! a, L# W4 B" q
        }
1 _/ Z; R" c& K8 K3 F7 _$ B- L# X5 X8 f. Y0 k% ]
9 t6 @8 d: v) I1 ]7 i4 @  B* Q
        enoughDataFlag = 100;
8 `0 `" p! M9 d  f1 i8 j0 [        enoughDataFlag = 1000;& Y1 H! _- g" A* m( o, Z
        enoughDataFlag = 0x02;( g, [5 P6 t( s' M" a
        enoughDataFlag = 200;7 {3 K2 ~: b; ?# q( Q7 T# Z% Q

' t0 g4 \2 P5 f- |        int myfuvk1;
0 m9 h5 w5 O) M3 R9 T/ d$ i        myfuvk1 =11;0 U, O4 G& H9 @) G* r" Z
  Y5 R( S' [/ }7 w
2 O# |$ |& z' T2 V) }; J# s
        enough_data = 0;! o8 |4 t0 U# ]# U9 Q/ \6 E
( Q6 j# x! }( [/ D# Q9 Y
//        if(enough_data>50){
# M: A. G- W% m0 x* C% R//                enoughDataFlag=0x01;
% X' z( q" R) d, T//        }else if(enough_data<50){
/ \" y4 Y6 k6 ~; }; t//                enoughDataFlag=0x00;//0x00还是不行& p* C7 h7 w* V: I0 _8 f% X: F  v
//        }$ O0 ^" Q5 Z3 P( M

- n# m: U& x& ?! m: Y# ~8 x* }4 X7 d8 j3 L$ _: u
        oo=10;  y. q9 Y4 g& D$ A7 F
        oo = oo  <  5;
6 x' \" G3 K0 A& p- U        if(oo){
# o% h3 @( m! R9 T1 e                ii=0;- y1 M: P: ]! A8 a& P" E4 v
        }  x- A$ X2 Q6 q6 @
        if(oo  <  5){
( Y8 f8 f3 S5 A7 M) n" b                ii=0;) _. s' L  a+ ^! C1 I
        }
7 n* c7 _" ]$ \" j( t( ]+ d7 T2 Q        if(oo  >  5){5 _. P/ X! C  c' v
                ii=0;( z3 ~1 f5 `: p1 p# y6 F
        }) G2 r% F9 ]6 `
" w/ A' j  c4 |" @  |; O2 e
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */, {1 b: `, e& U
        /*  如果数据足够才执行主程序 */! R1 P7 n$ j$ l- q9 ~
        oo = oo  <  5;: w4 \# S( Y" }3 ~: t
        enoughDataFlag = enoughDataFlag  <  5;0 E) t& k( K2 l: z; `( x
        if (enoughDataFlag  <  5) {
) ^6 B) `. h; Q3 o, H4 t0 y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0  n6 C5 S2 W1 O+ A
                AGC_AGC(&pAGC);& h- j& D) M& l4 M$ \1 Y
$ ]; R9 X* n: l3 W0 v# u' L' ~/ ?
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);% {! V  i& Q$ ^4 C
                FIRDecimator_FIRDecimator(&pRxFilter);" q* v# I; S" l& N$ m% m

8 D+ B0 d' ~$ p) g; ?                /* Downsampling */* g- H4 _  X3 O5 Q' k
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);& g, S; W$ u& u: n- L  Y
9 Q# ~+ n0 n# t6 T! u) ]7 G4 ?
                c_PreambleDetector_PreambleDete(&pPrbDet);# B6 J$ g- |5 X  Q6 v* @9 P9 I& T& F

, a; n6 }( g( ]9 ?  H                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
$ `" O5 @& X- `# z+ W$ a9 e. _' I                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */4 x% |& A% g$ i5 q& C# W: k
                /*     %帧数量=100 */
" l/ q0 w# U1 ^2 _% I                pFrameSync.isInitialized = 0;
* T8 Q  W* R6 K) W, R: l" V. p: e& W& z" i8 D" \8 \' n
                /*  [EOF] */
* D& I" o9 B9 `7 a                /* 前导码长度是13 */
8 [- J2 F2 F4 g                /*    %qpsk */7 w! ~* ~% K, `7 I" M3 m0 N. [
                pDataDecod.isInitialized = 0;  Z9 g( V% z7 }7 P& r

# P7 h, L& p6 l$ `% p6 K                /*  end */" ~: H# ^2 n; x& ]
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 _9 Q/ T: E" E8 V                /* Convert 3-dB frequency */% m; L: B' a' R! {
                /* Convert 3-dB frequency */
' C+ Z* v3 C  \/ W' |7 i- B& W! E                filtfilt(save_buffer, usable_left_filtfilt);
  i2 Z" d; c. T, _& |" E* X                for (ixstart = 0; ixstart < 81000; ixstart++) {
2 A  X4 v6 s0 c. l, L7 d( a                        usable_left_filtfilt[ixstart] *= 2.0;5 g4 c4 D7 G# f$ j5 ^* y
                }
2 {4 f7 X) R' y1 y3 ~" [4 u; p0 ^$ P6 A) \
                /* 注意乘2,处理幅度 */  k6 M3 A+ e1 H' J. T" T
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
* A5 M# g1 u; h3 c' F: l                /*     %% 行列转换 */7 t! @3 Q. b& j5 u1 z9 G
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( L# j( T  W1 `, [0 [( o5 a                for (ixstart = 0; ixstart < 81000; ixstart++) {
* J% o: ^' s1 c% A. l1 S6 U3 @( g" h                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
, S; T9 f, X0 c) E                                        - yiDuanShuJu_mean;
8 }+ Y, o) ]- N$ u' J+ V/ [! X, {                }7 l  @, |0 [0 j9 j+ h6 I
1 C. k* ^# g7 x' a& E& H
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 `& X4 b2 ~1 f0 r) q& y& B
                ixstart = 1;
  S  ?) @* y; H+ U; s) Y1 d* D                mtmp = youXiaoShuJu_QuZhiLiu[0];
, K" H0 P2 m' Z+ p& b) V                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 E1 |" Z- ]8 r$ D& `
                        ix = 2;
1 x. ~( s4 O. Y                        exitg2 = false;4 s0 |0 k- [/ g1 I
                        while ((!exitg2) && (ix < 81001)) {
1 f0 M( K& |2 x, W0 q                                ixstart = ix;
5 o" f1 @; {" R8 H* T: y, [" x                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
# K8 _- U! b" R# A/ X                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
4 _3 @3 v" V: [; K4 F                                        exitg2 = true;5 _) h" i( ^# i: j
                                } else {
/ z% o  T4 s) F1 y' C& v( G                                        ix++;
9 W  }; c8 I( v$ i! x# o0 ^                                }
( e  o7 N! s8 r* t  }+ P! H                        }
5 |. |, t* M& E$ X                }
0 N3 f4 `- n: X. ?+ ?4 C7 T! \! L* D0 w! g5 ?- c' Y
                if (ixstart < 81000) {
( I- E5 r6 g$ ]9 X" w                        while (ixstart + 1 < 81001) {* r" R4 d9 v1 @
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {4 t. W" a0 B' E0 e
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
" |8 ~, B+ I* i6 f                                }/ `6 \! I2 L) N& e" P

. a; E/ f9 t1 {5 y- L- C                                ixstart++;
! [; i7 S4 @. r0 a: T                        }" d7 ^/ Y3 A3 P! r3 [6 A
                }
2 {+ P$ |5 Z0 X0 ?2 a. @) L: y& `8 f2 M
                ixstart = 1;
2 Z; k( Y  O: ], ?8 a                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
4 Q: I6 m6 D5 O* M                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {8 T* Y8 B$ w; g. H5 S# L) h
                        ix = 2;
8 R; Q; t) Y9 u/ g0 I. h  y2 y                        exitg1 = false;- v0 p9 ]. R; B. b
                        while ((!exitg1) && (ix < 81001)) {
* ~% h9 A' A& M( I                                ixstart = ix;3 U9 S7 q% M+ u, _
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {+ }' J) Q1 P% w3 e0 h0 O
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];  M* F% p9 Q8 q5 Q( @/ r9 ~
                                        exitg1 = true;; ?' K2 v5 F, d% t7 c+ C* P5 A
                                } else {
1 m$ T6 w9 L" @. q                                        ix++;! T7 N" Z/ ?( S0 e2 Y3 T3 |# v
                                }; e) K+ h" R% a0 b5 w+ E  f: t
                        }
3 v& t/ p1 M/ V* N# m' }8 L                }
! I7 f& w3 r) Y$ O4 b! y4 X0 X0 H. L( u1 A+ L
                if (ixstart < 81000) {
1 W) Y& J1 d8 @4 p* w                        while (ixstart + 1 < 81001) {
! ]. z! @, A1 Y) P, y' A                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
/ v$ y6 t4 I1 K4 x: u9 z* T5 c                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];2 D) s" h3 J! L) U6 j0 P4 n
                                }1 K  W( {( l; K7 c2 g  ]+ G: u

* `0 i, c/ e* l$ n$ ^                                ixstart++;
: S6 p+ L3 u; z6 U6 L" }                        }
: m1 {+ i& g  B4 O% m                }9 m1 O" p" `. i( c! x, }. D7 ^
2 E" b( ~4 t1 q8 v/ N
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
5 ?. V5 m7 P0 l% \" y0 o; ?                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {# Y( E! ~6 R5 w5 d
                        yiDuanShuJu_mean = mtmp;
+ {" W7 Y* u: C5 C* J, }                }" J0 v+ W! Q+ f) {3 p

8 p5 U( }- t$ q% x9 y4 [                /*  找出极值 */
' y$ @) S9 V: ~9 `, Z: b& A                for (ixstart = 0; ixstart < 81000; ixstart++) {; g' p% J' P% \7 Y( l
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
, {# g$ B4 Q- w; a                }( s/ W" ~% A/ I  |' I. l: E/ A+ N- k7 L+ [
. }# ?8 l8 Y& o" s; v2 `
        --------------帖子字数限制------------------) |+ y4 `3 X5 f( L: O* i. p  p3 m3 Z
}
$ c) d0 L3 @6 J' c, L+ B/ n
# k# A4 J: k7 i3 o6 B
- E: O+ I) N) l$ f) _3 }" Y: U: D5 F

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 04:02 , Processed in 0.049883 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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