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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
+ v! e  [% U5 y6 h& r' r* p8 X+ z  i' r3 {# M0 m! t
各位大神:
, Z6 ?& T+ y1 b; k# e     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)$ Z; x. Q- v: G* Q. V
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
4 |  ~+ j9 @  D  y# k. p1 v; L) K" r0 ?- i9 h$ ~5 g
     
; F2 |, w1 g  m$ @+ S; W这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。/ S2 @  d: u) w: N5 {
2 b8 {0 r# g. C$ C+ a; ~$ ]
并没有其他线程5 [- ?+ S7 }: r* [5 j% l/ w
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。6 L8 l) p. V; o. u1 m6 ]
也说不定是和堆栈有关系。。。。。。
( W9 j# Q8 H. d; `请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
/ H; j2 z! c& j( Z) c6 }  t
; v9 A& ^# ?/ S
3 u, B1 c; G+ ]# S+ V
, X( }- x& d  Y) ~- Q7 ~4 b- B( E# V我也很绝望啊,希望大神能帮帮忙,感激不尽,!
7 R, H. E8 @2 m! |; h2 P2 e: p! _: E6 \. I" k, X9 t

5 U1 o  ^5 d% ?! X# y9 V附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
+ k6 I" V: _! y7 C: }* ?1 \        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
6 g9 {0 I2 c4 ~( A/ |( D  b- B7 B0 _; Z; E6 |0 ?9 x
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(5 w. {0 K. W5 K: g
                const double data1000[1000]) {% J( P3 T( {! ~1 E7 B# Q' M' I/ V

) ~9 @& T- T) W8 r4 \  F: L7 g        int myfuck;
; Z" i- m5 {- `9 J5 N        double yiDuanShuJu_mean;
0 P& |& }4 }7 R        double yiDuanShuJu_LowMean[1000];
* D7 y% c! A$ E        int ixstart;
% i6 _% b0 j2 t        double dv0[1000];
& o' q& k$ t/ ^/ a, h0 W/ S        comm_AGC pAGC;) [5 \  b* R. G) {& E- L# ?
        comm_CarrierSynchronizer pFineFreqCompensator;
& p& X/ B* M) Q4 {        dspcodegen_FIRDecimator pRxFilter;
) b$ s# d, W8 B, r" @        comm_SymbolSynchronizer pTimingRec;/ E: n, ~8 \* i5 B+ ]
        comm_PreambleDetector pPrbDet;9 S9 o- V( @$ Q
        FrameSynchronizer pFrameSync;" N  Z) n# j8 I; j1 P
        QPSKDataDecoder pDataDecod;
1 j9 s: a6 L" k# ]        static double usable_left_filtfilt[81000];! L9 x; ^' w; J2 ?" W
        static double youXiaoShuJu_QuZhiLiu[81000];
8 k2 C3 V7 o1 k8 {9 h        double mtmp;
. G+ \# J* ^$ k! Q0 n. O! S' `        int ix;) n" ^! A% u  A) u
        boolean_T exitg2;  m8 L) ], Y8 [; `6 Q
        boolean_T exitg1;
: v" e* m# J, {+ n0 S. W, L        double YiZhenShuJu[800];$ M6 |& h4 u6 G" H/ Q
        double dv1[800];3 t3 s) e1 Z7 {. t/ }6 N  @$ ^
' |) Z1 s  W& R9 E, b4 g

2 e  I$ H' Y- C4 B4 [2 L. f        double b_YiZhenShuJu[800];( A% N+ e5 ~/ O5 r) R
        double I_filtfilt[800];
& o2 f; f. K+ d+ S4 z2 j        double Q_filtfilt[800];# R" r$ k, {# c
        creal_T b_I_filtfilt[800];! L( w- x1 m+ Z' z# z
        creal_T b[800];; Q5 n4 W0 H9 W; j! t$ W. X1 y& T
        creal_T RCRxSignal[50];
3 i1 O7 @  N3 E' ^" ^" d        creal_T fineCompSignal[50];$ G  N: M. R. S5 |$ d( r
        double phError[50];
% ^- r* w4 O8 n( T        creal_T timingRecSignal_data[28];
; k+ |& R( s. M# V1 y0 E5 {        int timingRecSignal_size[1];: f, a9 \) J: `8 C' _4 n
        double prbIdx_data[28];
8 y8 w, @2 d( [( U' }) ]        int prbIdx_size[1];. V2 d4 i* b+ E+ s* F5 ~& W& K
        double dtMt_data[28];* I, |0 S3 C! X- G' H
        int dtMt_size[1];
% ?1 s* A( S- B9 }" P" v/ V        creal_T symFrame[25];
. Y' A: G9 ]4 h$ P8 l        boolean_T isFrameValid;1 a  A9 _9 v0 Y+ X
        double unusedU0[3];9 {$ T% J* n4 A5 m5 b& W
* h2 ^) Z4 Z0 s
        //调试过程中的变量
- G8 p: z! I# o1 ~, Y        int  enough_data;$ x/ o* M3 |% i2 Z/ R& c

3 d5 g+ I; {. \9 _        int enoughDataFlag;
3 O6 C$ r! j# `" }4 e2 b        int yiDuanShuJu_mean_int;" z/ M* j9 ]( B) H3 g5 b! T
        int int_sum_dv0;+ o! f* z/ f3 d0 u; b! }/ m
        int oo;. `3 J( ?* N0 J( }$ P5 Y
        int ii;
3 g& R, K4 u" t/ Q        myfuck=10;# Y$ m, v) o5 q( j2 `
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */7 }  [2 }7 M9 U( Q. ~
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */: Z: d* F8 E' V1 a4 j* c0 i9 \
* Z7 @% v, x" V
        yiDuanShuJu_mean = mean(data1000);, p( {( Z6 i3 R1 }$ Y  j
- U' G* t7 A% M9 U+ \# i; i$ [- q
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;7 k( R# M: J9 h2 L' H4 Y5 n  j
        UARTPutc('A');8 m3 G# `0 h' @( [/ Z, @5 d
        UARTPutNum(yiDuanShuJu_mean_int);
8 y9 L9 _5 r# s0 F7 x) [& m" L/ t        UARTPutc('\r');
6 H9 _" L+ p9 a% T        UARTPutc('\n');
+ f4 Z8 p+ x  c- e8 G, s. W+ S: \4 \
        for (ixstart = 0; ixstart < 1000; ixstart++) {; u* v9 ?2 _' x9 D' r
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
6 d) }. _$ J6 i$ X5 \        }# Y0 R6 ]2 ^) K! T3 R
3 b' h$ a% F! G$ C) r% A
        power(yiDuanShuJu_LowMean, dv0);
) `$ {9 |1 s- E6 O* m- s
* ?0 K' s) @6 }" X" h        int_sum_dv0 = (int) sum(dv0);1 m# b; E3 G( Q
( R5 w, [& p' c# A3 Q! {
        UARTPutc('B');
, u+ j5 e9 Z& W9 O        UARTPutNum(int_sum_dv0);8 G6 c& c" Y, `5 I
        UARTPutc('\r');
% q$ z! W# i- n  m$ K& G- x        UARTPutc('\n');! m& C7 t, y  m+ a; g
9 o5 t+ h! @. z- H; b
//        int compareFlag = int_sum_dv0 > 1.0E+8;0 v. b5 D; [: i2 K0 V5 m# ^

; N" H/ _! x( q        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?1 x8 w9 o) o% c& N5 v5 b' t# J
                UARTPutc('C');* i  i1 e, E" _% @, z7 q$ O
                /*  比较信号能量 */
. o; a. l9 l) ~6 Y* C                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */- d3 L. h- p  y- o
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;( _( \# d  @7 n; |( ?7 j; d  U. x
//                for (ixstart = 0; ixstart < 1000; ixstart++) {5 T+ L; `2 N4 w: X1 E
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
' k1 W: I0 W9 s# [+ `//                                        yiDuanShuJu_LowMean[ixstart];% d( n; \9 H+ a4 R! F* ~1 n" k
//                }$ F2 p: G) Z- ?! e  B; a( R: a. S
//& C+ S, x& l1 \: Z1 H3 M
//                youxiao_k++;, ~5 P' G" ?6 i2 m9 M
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==* ~# r4 n' k2 W/ }! K5 t/ p
//                        /* 感觉要取21个数,即0-20, */6 Q- \9 A) X/ _9 u- h! r8 y
//                        enough_data = 10;//有效是10,无效是01 U: p; C; P& |4 Z: W! j
//                }$ i3 b0 c. R! ?  R2 {
        }
4 ^( G% }1 z( e8 |9 Z1 |) ~: |/ `0 e8 i! n

0 ~* K. t# H% Q/ M! I0 f        enoughDataFlag = 100;
& B! b  Z' w0 ?7 L8 ]! x5 E4 V/ T        enoughDataFlag = 1000;+ S6 o8 ?' b  P5 r7 b$ {% ^# y; Q
        enoughDataFlag = 0x02;
9 b1 D8 N# g/ |9 `( `        enoughDataFlag = 200;4 O. ~7 O' W) \" l7 h7 Y! ~" \
; D1 {5 Q6 f( V) Q* ^' N
        int myfuvk1;
+ R; S8 w) s5 Q        myfuvk1 =11;
1 g2 y3 z/ W; j
; w+ E. z5 x+ p$ {: h2 W2 w% \
4 V( v" Q, |3 G: w; j        enough_data = 0;
  p' I6 |; x, `  a4 ^- c0 P# D1 Y9 u! @2 S$ S! L
//        if(enough_data>50){: {% d  I$ |3 x! M/ f. Y
//                enoughDataFlag=0x01;
1 Q+ @0 K+ D; [//        }else if(enough_data<50){
' z' V7 Z- m( ?4 W( R; F//                enoughDataFlag=0x00;//0x00还是不行9 r! J, C1 C4 _9 K! C, A
//        }' z- V6 D" j* v; q
" {1 p3 {9 t4 w! O* s

' s- d' T: N; X7 Q( X5 j% W  Q        oo=10;
+ S9 m' F2 U4 q% g" R        oo = oo  <  5;. }/ ^) B' {& D. M: B4 r% J
        if(oo){
' d( D! R, H% O& e                ii=0;, k% j) _7 E: a6 ~3 j! N9 h, R
        }
0 B; m- P: M& w+ @( i        if(oo  <  5){! D, ^3 Z! ~1 Z1 ?6 G5 x7 g3 W
                ii=0;( H. }  j" U9 P: E1 {/ G
        }  o& L0 b* [; u% `- o3 F7 @; `
        if(oo  >  5){3 u: P' \. v( h2 q
                ii=0;
9 E, p' M) j. k/ F& e: u        }+ z, E, E0 ]/ j) u2 Z
# f/ P/ P  z$ W7 t+ M) O3 b+ I
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
" s4 \7 P& o1 k0 w/ e        /*  如果数据足够才执行主程序 */
) s0 p- e! j5 q5 F        oo = oo  <  5;
; l7 E4 u! t9 y! r. e2 m% C6 F        enoughDataFlag = enoughDataFlag  <  5;8 Q3 e1 l2 V9 C; m- d
        if (enoughDataFlag  <  5) {' [# v( R2 n; b7 L) Z1 x# f' `% O
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
8 z3 M: n( y/ w/ \6 X                AGC_AGC(&pAGC);
4 r+ I$ i8 C$ X0 a) s6 q) r* w; c1 A& P- T! b3 Y, i( B
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 b4 F$ _# ^; g% o4 G+ t7 d6 V5 _/ d
                FIRDecimator_FIRDecimator(&pRxFilter);) C$ `0 [4 l. W0 `& ^

* i9 r% X. U0 N4 r* J& ?$ d6 N! F                /* Downsampling */
8 L& v* L, O' j6 {9 m3 \                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
' F2 l) J2 U0 s9 r" q7 y5 \' p8 s
* i  D1 X; z9 |8 w9 m! s( n$ i2 [, A( ?                c_PreambleDetector_PreambleDete(&pPrbDet);
9 N$ p8 y. E+ F) `. y! Y- F) N+ G# M) m( |6 t
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
; a7 x& {% _+ Y5 h' R' H                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
! c, h0 S5 x$ C  Z                /*     %帧数量=100 */
( f. a$ P& j( d1 r3 E                pFrameSync.isInitialized = 0;# g0 n* _1 V; p$ w9 y  ?

1 h, s$ d% p2 p  l$ D                /*  [EOF] */+ r# q7 X, K( a
                /* 前导码长度是13 */+ T6 A5 A! r0 _5 g  P9 i
                /*    %qpsk */
* A* f% N. S" }2 E+ `                pDataDecod.isInitialized = 0;
& G* b' Z9 r8 z3 H( L+ E" `  G9 V
                /*  end */
( F9 F8 H' I  V1 q" I* j) [. A+ K! {                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
' A8 L0 U# i6 {# Q0 p% ~- A                /* Convert 3-dB frequency */: ^  S! h# D5 v5 G1 @- a3 W2 G5 h
                /* Convert 3-dB frequency */+ I/ F& |. h2 j- Z. ?; X
                filtfilt(save_buffer, usable_left_filtfilt);
3 f9 [* M0 r5 P6 b                for (ixstart = 0; ixstart < 81000; ixstart++) {  J' K, B* z! J% ?+ l6 N6 K
                        usable_left_filtfilt[ixstart] *= 2.0;1 K3 U: b7 W  V- J; Z4 C5 _1 A
                }
: R; g2 n1 k" |# h
+ x3 z% p* Y1 x- z8 S                /* 注意乘2,处理幅度 */8 `; X6 n6 F+ d) a; g) b
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
, P6 ~; O( W/ k, H) A                /*     %% 行列转换 */' a  V2 ]" o8 S% I
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);3 {( Z$ p+ v% h3 K6 a+ s
                for (ixstart = 0; ixstart < 81000; ixstart++) {
- t- W% _: H) [0 @5 b/ R                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
4 B* Q- i# I8 h* J                                        - yiDuanShuJu_mean;! w" Z# P: W1 i
                }- ?2 M! p& Y' L! \. W# T
7 m6 s5 D1 l- s0 C
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */& `0 O, Z! S& }5 W4 e+ B: f
                ixstart = 1;
0 q# v7 d& ~0 q7 m* A% r6 c! k                mtmp = youXiaoShuJu_QuZhiLiu[0];
3 }0 z# I1 K- Z( N, ~                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
% o+ D  i: w5 J8 G  f9 t                        ix = 2;4 W3 F: L, |7 C$ Y
                        exitg2 = false;* e) U; c0 J6 P
                        while ((!exitg2) && (ix < 81001)) {
1 `! X3 H9 F, `: R3 T                                ixstart = ix;
( Y$ T: K, g6 c                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {  i2 Z' L& w8 |7 j% D2 ]- f; ~. x8 O
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
" t4 i" ^+ n8 T0 I1 X' L& q                                        exitg2 = true;; T7 O$ m7 i; {. A" C' ]
                                } else {
0 ?1 I  h. w2 d6 h8 J                                        ix++;
. k$ V# Y0 c, X7 n                                }
* S$ j, Y) }1 c$ X1 Y1 _+ {# F                        }  M( R8 _- a1 R4 e
                }
8 q7 a/ ?$ i( V5 ]2 y5 X. H( f
2 Y0 Z2 Z% R& R) y! I+ h0 c                if (ixstart < 81000) {) H, T4 R2 @7 _" s/ [6 O
                        while (ixstart + 1 < 81001) {
( S! o' `* O/ w& Q% T- Y                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
5 J9 S8 y; a2 {0 W% l                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ d" H& ?( I( |* X, @7 S& o                                }4 x5 \* {" H9 |

9 c& H8 G. t" G2 n. f, A( B                                ixstart++;
/ \; L& G  _( w. u5 t* |: |                        }
% [6 {2 v% z6 @) [8 w8 ]2 J                }( l( s' e' T0 F- d; X

7 C' P% ~4 V8 R- C" A                ixstart = 1;
3 m6 J- |  a" s% [+ _                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];/ c' ^1 `9 d* O( o  u
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {  I4 l1 U( e8 z/ J
                        ix = 2;
3 }# o- K3 j" E3 e1 X                        exitg1 = false;
4 D8 C/ j, v. k& ~                        while ((!exitg1) && (ix < 81001)) {$ T2 v% h# h$ V; `1 T
                                ixstart = ix;
- ~0 D! H5 T  R: ~0 g0 i                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, M8 L0 ~, E9 T; b8 [9 t. J  X                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];% f$ K" o1 f" L
                                        exitg1 = true;: ~  ^% t# ~5 j0 `7 _
                                } else {
( z! f8 S7 I) B; S                                        ix++;
( }# `6 h% X" X# x# U/ I                                }
8 ~- K8 M6 g$ V                        }
  I. U& n4 ]% t& q, b                }; O3 J: Q8 y' k8 Q

3 e8 u4 T3 R3 }" P* o% t                if (ixstart < 81000) {
3 Q9 {% Z& [" H" q; e                        while (ixstart + 1 < 81001) {
# t0 y8 C- F1 d( d                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
. t# |) `6 a3 E" y0 \% Z. s$ i5 Q                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];6 \0 g: ^1 z; w3 i0 E" `5 [
                                }
, I  P) Q: V# E# [; n6 l( O. f7 ^" B/ d! ~& q) U
                                ixstart++;
- K5 T5 b& ]5 t) [% I                        }8 ?8 V$ V1 l+ v4 K4 o& F
                }5 X  W6 `' `0 ?# |% g9 i! `# I# ?

  M) Z+ X! `( U" t% P                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);( g  L0 D+ p& e+ q* v3 c% u
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
/ p' }0 i# j, y                        yiDuanShuJu_mean = mtmp;0 O5 x' C  k* P9 R- @; h
                }
( l7 y3 ~& P, s  L6 G
$ t9 c! A# I5 j6 c+ {' `% q8 M- {; N                /*  找出极值 */
: W# h: D: ~( o                for (ixstart = 0; ixstart < 81000; ixstart++) {9 E' H+ ?  H7 |
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
! z8 P% e6 b4 P                }
7 U) Q% t& o0 h% G  N8 e
, h% |% V. R5 b5 B) g- _: K3 n        --------------帖子字数限制------------------1 |: J  M! p, Q3 A. W) c
}% I" M4 B2 Y3 f. M3 r

& @" R" F9 ?8 |1 Q: b8 n1 t  i
& L6 h2 k. r; y/ A1 g; J1 Y. a

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 14:00 , Processed in 0.041431 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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