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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
( [0 G0 u. [, U4 R% I/ c1 B
' b4 o  X8 x; @" a( E# l各位大神:
. s: |, l6 K3 d# ^. A. @     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)( q% U) l9 r0 O; Y) g0 o+ p  \7 t
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:. f5 u" m7 e0 e# Z9 K
6 U; g. r5 n2 g( x
     5 \, ?; m  i- N8 X1 t! N
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。" E) S& p/ g) ?  s  C# I  [/ v

7 z0 o' N* E# Y# P2 L9 w( j- E: X并没有其他线程! z' l. X! b4 Y& A
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。5 {- B9 V* x) u5 r9 `& P
也说不定是和堆栈有关系。。。。。。( v/ X$ i' @  L( u) t2 v0 S. T" c
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....' d2 L; |; u8 T0 N, e- [, A! v
8 ]5 `; @7 I" b* u( M) s

" Z, k* D/ n! U/ z& M9 S2 p2 a3 [  m$ U9 c7 i, H% k5 M
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
9 e/ }; I( c: l0 f+ r$ x; z' N2 |6 s6 S  P( L

5 g6 i5 p/ k% o/ o附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
' T( p- p, z/ l& {8 `        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
% }0 {; g5 @$ ?- ?/ f; p% b! w* k- K7 B
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(8 i+ O! x/ `" V0 L8 q
                const double data1000[1000]) {
; ?9 n6 J% W$ n7 }4 N1 @
& R  Q1 i3 [& u; ^8 A6 o3 \. R        int myfuck;
. t* L) S  O6 S! o. t/ e        double yiDuanShuJu_mean;& }' i3 G. X5 j& F8 l" e
        double yiDuanShuJu_LowMean[1000];8 H2 q( K$ w7 N8 r8 [8 {
        int ixstart;
/ C. c- |% _3 o2 ~# e        double dv0[1000];
+ H$ e( r/ @  H8 }2 U) ~        comm_AGC pAGC;
2 x7 Z$ R# N4 `0 P& V        comm_CarrierSynchronizer pFineFreqCompensator;
8 R. C5 S5 F! m2 H        dspcodegen_FIRDecimator pRxFilter;  N0 i5 D! X0 W; V- q8 Y$ Q
        comm_SymbolSynchronizer pTimingRec;: I0 W( \$ b9 u# X
        comm_PreambleDetector pPrbDet;$ A7 e: _. A0 T! b- Y" U! a' X
        FrameSynchronizer pFrameSync;
& S5 V" J1 R; \3 c: c# \* s        QPSKDataDecoder pDataDecod;
3 B( ?0 `3 _" h0 X/ ^* ?        static double usable_left_filtfilt[81000];" P1 ~" t- [3 w+ W9 G
        static double youXiaoShuJu_QuZhiLiu[81000];" {8 @; }$ |& {* w6 T  w
        double mtmp;7 x4 }4 M' r: `- P9 T; q
        int ix;
$ D2 q3 e/ q# X6 \        boolean_T exitg2;
4 J5 a( w. A% {8 `5 K' \/ W        boolean_T exitg1;
) e# t/ m! R' a, |- a+ f+ C0 M- t8 u        double YiZhenShuJu[800];" X- K4 Q* m) H9 z& q% n2 \
        double dv1[800];
! X- b. f( f# O. h3 |4 r* X. ?5 S" ?( b* X/ C
2 l; U1 x5 ~3 x7 u
        double b_YiZhenShuJu[800];/ _% w7 o* ~+ l1 `
        double I_filtfilt[800];
1 w% \& H6 O  D- O/ H1 `        double Q_filtfilt[800];% W& s3 b! {' d! q5 [
        creal_T b_I_filtfilt[800];% B5 E1 _! k# f7 E8 z  u
        creal_T b[800];
% Y$ \5 ~/ t9 u8 q2 S% [( ]        creal_T RCRxSignal[50];
: \9 B3 W" n$ d( f- w0 c7 p4 P        creal_T fineCompSignal[50];
* k2 I. R( `: H; i3 M, R: S        double phError[50];
- n: p" w. [0 f3 [) j/ a- E1 d        creal_T timingRecSignal_data[28];* h" |6 m$ J* d8 L) J) \
        int timingRecSignal_size[1];
# Z' [% y+ |7 _8 c, C        double prbIdx_data[28];1 g+ s- \6 `; D+ |$ _
        int prbIdx_size[1];
* P: }% z$ g$ k$ y' E        double dtMt_data[28];
; ~9 D& N+ Q6 X9 d4 p* U        int dtMt_size[1];5 V9 d/ O2 N5 j4 n) R) ^6 W/ g
        creal_T symFrame[25];/ y* t8 _* ~- U
        boolean_T isFrameValid;
/ y7 p7 ~3 v3 D7 }  C* c0 C        double unusedU0[3];( q/ q4 Z+ o. Z% T- V  Q$ F' a

4 R' T4 A/ J9 ?7 {) ~% E        //调试过程中的变量1 o7 d1 {% p4 H6 L) B* @  M
        int  enough_data;* \3 c. ^- B2 b+ Q' x3 V9 r
3 Y4 z, m& T( I* G3 A8 W0 ]( r
        int enoughDataFlag;! s3 {* I3 b  n+ ]6 B7 O
        int yiDuanShuJu_mean_int;
$ e+ Z7 b" i( d% L) J# r        int int_sum_dv0;
1 A- f3 b; J, c1 E6 s        int oo;
' y& g6 O* \2 V        int ii;4 v5 q* w3 @, v3 D  b6 V- b$ i
        myfuck=10;
+ u3 w# S  }% ]1 t' X        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */& E% [- x' A3 p! k
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */3 b+ k9 Q) l0 x5 F0 n+ `

& c) T# w' N% {2 B        yiDuanShuJu_mean = mean(data1000);! A# h- K# b; i; z" F

2 \: i3 [, i9 ]        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
! A7 l5 D6 I0 \( }, w# L: B        UARTPutc('A');
, ~4 M1 h) m& {        UARTPutNum(yiDuanShuJu_mean_int);7 Q: G$ g; P- U2 d' T
        UARTPutc('\r');6 z0 r6 l' x  o$ q% }
        UARTPutc('\n');
, N2 _- f: l1 Y' H$ O& B- [% A
( y. T) T: K0 ~% D! z# y  x        for (ixstart = 0; ixstart < 1000; ixstart++) {$ D% S' Y& o0 G! n2 P
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;) X7 q' [( u1 M: A% ]/ R! X
        }
/ O: ?' O# O7 O1 y  G: ?! ]
+ c4 k2 j# P6 ]        power(yiDuanShuJu_LowMean, dv0);3 Y; s; Z9 e8 q& G. f2 G) U4 }0 J8 c
% i( I4 i1 g6 G$ J3 C
        int_sum_dv0 = (int) sum(dv0);% z9 M9 p  g6 h4 l/ R: V; P

, `) g( x) j; a) P, W        UARTPutc('B');$ f3 `( O" R1 h2 s
        UARTPutNum(int_sum_dv0);
3 `" x  |! Q3 N+ _8 r+ Z        UARTPutc('\r');+ U. D! ?6 X/ T( O6 r% S
        UARTPutc('\n');: n/ b# j7 M1 R2 t
+ X9 @9 p+ V# f' m+ t" M- ]5 V5 w) u
//        int compareFlag = int_sum_dv0 > 1.0E+8;
+ X9 @( i% p' D
( u6 Q7 G8 _+ t7 a/ ~1 |8 X        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?. }$ |( F% {1 A
                UARTPutc('C');8 a& ]  P4 J% L% S6 o9 \$ N: S
                /*  比较信号能量 */
" z& X. ^& A2 l& o5 p                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */9 s7 h" \. t8 e: o& c# z
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
; m8 P9 Z- z; _2 ^; c3 f  m# i1 n- P- z9 C//                for (ixstart = 0; ixstart < 1000; ixstart++) {/ h9 @. S7 x+ O! X* Q7 \
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
) x2 I& F. Z5 S; T- P' A$ e2 s//                                        yiDuanShuJu_LowMean[ixstart];/ Y! J- \8 {" u# F5 ?8 f$ h
//                }
% z# d+ p. ^0 s( X//; u9 P. d! m8 }; h- k- J1 X
//                youxiao_k++;% Z  I* c: F8 z( g' F# Y( i
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==3 v8 i" v$ B* j: F9 M6 e# E% m
//                        /* 感觉要取21个数,即0-20, */$ t' A' d' ?4 w( y% |9 W" X1 J7 p
//                        enough_data = 10;//有效是10,无效是0
2 H$ Q$ N4 N: l: W//                }9 Y1 x# b$ R, f$ y# G
        }
* V- ]1 _: z: U
' F3 a# g' X% ~" F4 r4 k+ w+ n! [$ g) M+ q4 f7 l- \# `8 m6 R2 a$ O" r% b9 c
        enoughDataFlag = 100;9 w/ x8 I9 R, Q2 |& p/ l* u+ r
        enoughDataFlag = 1000;
# ^  A" b* K3 d* O        enoughDataFlag = 0x02;
1 G. j- x7 S" d! }4 ^        enoughDataFlag = 200;, D% G+ g% I9 ~/ x0 ]
& ]" I5 q' B' Y. Y, C
        int myfuvk1;1 A7 |: T  Y1 u# F" T, f0 L
        myfuvk1 =11;
: C# ^8 K$ C2 O: `, ^, ]: r0 L
6 L% o( Y% h! @. B  E& f4 B1 Z  H! y- E# j1 H2 ^
        enough_data = 0;* W6 S% D- ^, [5 e
+ r1 x) E' l4 B; S' G
//        if(enough_data>50){8 v1 @" l# s. Y* ^9 a! ]; |/ S0 m
//                enoughDataFlag=0x01;
( m4 G. K3 [! O//        }else if(enough_data<50){0 S1 Y9 j: i) _+ }6 q
//                enoughDataFlag=0x00;//0x00还是不行1 a/ U7 Q# {/ t/ |7 w8 d% y
//        }
1 g! w1 F/ c( @3 q, |* `" Q
  R- g/ \8 v0 W8 f8 u) g8 }; ]; s3 E# ^& }5 E# a
        oo=10;
# T0 R3 l. w9 F1 Q! I        oo = oo  <  5;0 {% E$ a/ P2 |6 }/ D6 p
        if(oo){
3 Z2 N5 m! d7 P0 m5 Z: o                ii=0;
; B8 E5 T' y1 F        }4 t  i0 t8 S! I+ X0 |8 \  G/ l: M3 m
        if(oo  <  5){+ K" E" h" B( s+ X( U
                ii=0;1 w% l7 i7 ?/ S5 d3 x" N+ r
        }2 ^7 e" C8 O$ @7 a9 f/ Y0 B0 R4 D+ T
        if(oo  >  5){
& Q, ~1 z; w5 t  [: \                ii=0;
' E* q9 t5 d- M" G1 ]5 o        }
. n1 f% @  D2 `4 W/ U; k% R+ V% m2 T9 v; Y% d
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
/ t& y, B# l5 x. E" j- b        /*  如果数据足够才执行主程序 */
& N$ G; _1 a6 c" W' q/ P        oo = oo  <  5;+ W* f6 f- l8 T; V* u7 c3 W
        enoughDataFlag = enoughDataFlag  <  5;
$ M8 ^+ r& |  @2 k* l5 d" P0 S        if (enoughDataFlag  <  5) {+ C2 s- |! K( i
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
! A; a( A7 P2 X4 @9 y                AGC_AGC(&pAGC);: o, V/ r( E; v5 I9 ?

# Y3 v) S* V- n# m0 N# }4 G                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
$ _! c* q% u- G5 I" K                FIRDecimator_FIRDecimator(&pRxFilter);& P; y" M2 O/ T) a5 |4 U

1 z; P4 [9 C6 h# Y1 y6 @" |                /* Downsampling */, M) Q9 s$ A! z8 U' p$ ]
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);' S3 z, a8 z( N0 T1 \' \
. j1 m( S+ V5 ^0 g; c, Y
                c_PreambleDetector_PreambleDete(&pPrbDet);) d1 B/ S- {$ M" b- u4 B5 g

9 v% U' M8 y3 K                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
; \2 R* c" ^* ]                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */1 m. U6 N7 }* s
                /*     %帧数量=100 */8 F  T8 H' @& E' {! T! {2 g+ R  L. L
                pFrameSync.isInitialized = 0;
) o4 C5 t! D8 m' e
1 L  R, t% {3 o' ]. O9 a                /*  [EOF] */
" Z' V" r: ?; u- r                /* 前导码长度是13 */. j; T/ V* a$ U6 o/ X7 r* C
                /*    %qpsk */
- j( ?' z) u# m$ Q                pDataDecod.isInitialized = 0;
, _7 e' }# O# z: G. e' v* L" r5 S/ G, x7 T' P
                /*  end */
4 y7 i) M) _7 L8 t& c4 W  W4 {                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */- c* G& _9 Y+ g* y7 r1 X! s
                /* Convert 3-dB frequency */
( W4 W& `6 e) L3 c8 }7 h; `                /* Convert 3-dB frequency */
1 z; o( A5 L* Q. Q6 P+ ~6 R  _! C! U- z                filtfilt(save_buffer, usable_left_filtfilt);
; D" i7 b0 e! B" T                for (ixstart = 0; ixstart < 81000; ixstart++) {  ]+ b* H! `' m7 v5 P; l
                        usable_left_filtfilt[ixstart] *= 2.0;
1 y  E: _" ^) B                }$ S7 [& s  O' ?2 [% T
1 }6 L9 ~3 h! t, A2 T  P
                /* 注意乘2,处理幅度 */8 k1 Q6 y& r/ j
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */8 c4 S2 a' {( k8 R5 H7 F" u: ~! j8 c8 b
                /*     %% 行列转换 */
% I4 t3 U( r; S  p. ~, n                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
# m8 G% I5 P& T" _" \/ ^; f                for (ixstart = 0; ixstart < 81000; ixstart++) {2 a0 g  f0 X! d
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]* b& W) d2 A6 N; `1 A  j
                                        - yiDuanShuJu_mean;, Y; U' U9 r9 ]# a2 v$ B  V
                }3 ^" H! Q0 ^7 z! b/ C
% p4 ^! S" m: t$ S3 I5 k+ S/ Z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */, g5 X9 k3 ?( [' y/ `! u' V
                ixstart = 1;
' T7 _2 |9 Z/ R3 o4 @3 Z2 R! w                mtmp = youXiaoShuJu_QuZhiLiu[0];" J5 @$ N4 p" {9 j) n, j
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {1 {3 U' h. D( R- r
                        ix = 2;# _  n" Q( w( U; e
                        exitg2 = false;
3 g' h* j/ R: F0 x8 f0 O. \2 [/ d                        while ((!exitg2) && (ix < 81001)) {
3 Y9 ^! h' i! Z5 X                                ixstart = ix;9 _5 b7 s: u2 h3 u. c
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {; s8 t3 X) j, {- B
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
) C& d4 o+ t% r2 A* }' k                                        exitg2 = true;1 Z0 W% B1 B. M+ [
                                } else {: l" Q4 g5 Q' \, K
                                        ix++;* D# B9 x2 V" d9 I
                                }/ Y5 K9 `  [/ H; ~+ I; b+ ~) {
                        }
8 f. Z9 W  b9 v. ?7 N! k$ ~                }% {% N  p1 i  f9 d! n. Q, n
5 u& s* I) n0 p9 Y1 ~) B
                if (ixstart < 81000) {
1 o* t4 j/ Q/ S, z: n                        while (ixstart + 1 < 81001) {
2 w6 O  s4 o3 H1 d# |" c" H5 b                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( I& _# ]) z; L/ M1 e3 ?                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];' b* J7 o0 e+ H" X" p
                                }
( T( h& C7 c0 o( x) v* Q2 u  f/ A$ [! \
                                ixstart++;0 D2 F2 O+ h7 \+ E1 a
                        }
$ D+ V9 a$ ]7 E+ {                }
  \  e6 d* s5 K( ?
' R6 R  z3 x1 z0 K( P1 D7 r' w* u                ixstart = 1;1 C' D- K6 C7 j4 _  s, N" P3 \3 Z
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
1 x$ D/ J8 H" E' W3 o                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
4 {, u4 R# r1 c& |                        ix = 2;; O$ r6 z8 F6 c
                        exitg1 = false;7 u& }7 o; D& n5 _5 T
                        while ((!exitg1) && (ix < 81001)) {- K5 U! |% Y1 F: P) V7 h
                                ixstart = ix;
& M* U+ `6 r- ^1 v. t: [4 G                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {. @' F" }7 l8 K6 P7 P' j6 E
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
% t* |7 e8 x' P" K& z- T                                        exitg1 = true;5 Y! {1 |' L3 e: q
                                } else {" E$ _8 e* [9 P# Q* C. H8 Y" S( R
                                        ix++;
! r6 z9 `. u" A+ l                                }$ q1 t: y1 I$ m3 T3 O
                        }. Y) S9 R% Z0 t
                }& y4 h1 M% L" x0 R) y+ {& d
- ]& ^/ E7 Q( p+ ]
                if (ixstart < 81000) {- p, Q; A3 q) t- u4 t% o. P
                        while (ixstart + 1 < 81001) {
$ s7 ?) {7 N/ R2 B  ]0 B3 \                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {7 K7 O) j- k4 g& ]& Y6 f$ o; X
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
: n; U* Q6 m  l& I# H; K7 h                                }9 G  D9 G; I6 G$ w" U

6 r( m6 c( G- c( j                                ixstart++;
, Y' t' c- H% P2 r5 g                        }0 y/ q# I0 h! ~$ ?6 \, [
                }; H) i0 C  U$ {1 R! E7 D- Q
& Z" ^& B$ y* Y8 B1 g; B
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
8 D* u9 f/ J8 E1 T- X, r9 R                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
0 A: f! j" W+ S                        yiDuanShuJu_mean = mtmp;
. i) l4 ]  z1 Y$ W! O5 r: B                }
$ ]* u2 s' C- C. t# M9 ~, Z
. U$ j. f  p1 ?1 {1 e9 g* S% d                /*  找出极值 */
: N% H8 l4 _5 T/ r, k9 l- Z                for (ixstart = 0; ixstart < 81000; ixstart++) {
& c+ y2 q8 i/ Q: u6 \: H                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;! b) d' C$ A2 E, _8 a- G, Y
                }
5 |3 s1 \4 {# F
* K3 }; S) z) M( V! x( B        --------------帖子字数限制------------------: E# ^+ n$ |) A+ M# S
}
1 D. C% L/ t7 v( C" V; R4 `( G: y7 b: }! b# n+ P$ i

7 R' ?; |6 S' H- r: Q

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 19:53 , Processed in 0.044136 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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