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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 / X7 j9 G; P9 t; Z

) m( d3 m- v, C% D% v; h8 G: _各位大神:9 l- c2 m* i# n' C/ r4 Q( q
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)4 K( n+ g% R* }
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:' }3 A! U$ M2 j2 \; \- S$ c+ N
* v6 G9 Q, E2 L: J4 k3 B
     / j  \* g* A: e; g+ E
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
! U) j, C0 M: x8 n) g" j' |
3 N* p0 J* R  d2 h6 E9 ^8 ]并没有其他线程
1 e- `* R: y8 S. x: G$ J反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。. s9 M( ~4 K7 Y5 S) k9 e6 B8 e* \
也说不定是和堆栈有关系。。。。。。
/ [8 l  f: u7 ]! k0 k# c请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....2 P" q2 L( s* `/ z5 e
+ u1 {" k: A% e# u
2 j. T4 h4 T  ?1 W( C2 A

+ {4 }. B$ `' X6 i我也很绝望啊,希望大神能帮帮忙,感激不尽,!: N& s. {; U2 q5 p9 g) x
( \! I, v* R1 U7 ~

  k& o" H  n/ [% J, |附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];' B1 V! B6 b5 A6 D8 ~
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。& {. e! v$ i! \  f* G1 l" p
, B& w: i  a) F( [  L- b
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
, c1 F1 ~' D$ k$ X/ P                const double data1000[1000]) {# Z/ \2 j% d8 a$ ?) L0 p1 [6 x
7 J, ~/ _) H9 [0 k
        int myfuck;0 Y: H' P3 i3 A; M% I
        double yiDuanShuJu_mean;
' Q2 K1 U" c' j5 O: ~3 z        double yiDuanShuJu_LowMean[1000];
) b( l! S7 ~! O% `% J( A! o: t        int ixstart;8 }: P# X! F! B( {
        double dv0[1000];
0 L9 Z+ V$ Y4 J7 `! W7 |$ ~5 j        comm_AGC pAGC;
  r% a1 K7 W1 P        comm_CarrierSynchronizer pFineFreqCompensator;8 v# G/ m: c" t% |& M  a
        dspcodegen_FIRDecimator pRxFilter;
- j0 g# _6 i4 }5 p- t1 F# A$ i        comm_SymbolSynchronizer pTimingRec;6 P6 f: c# t( M) u5 I  f. ]: _
        comm_PreambleDetector pPrbDet;
3 e2 X1 H& \6 b$ Z( o1 y5 x7 f        FrameSynchronizer pFrameSync;
6 ]' A* [6 E& |+ Y7 Z$ l/ i/ ?! |        QPSKDataDecoder pDataDecod;* j; b/ I- O1 G! p5 u% u
        static double usable_left_filtfilt[81000];
" N% K# H, J( L4 o        static double youXiaoShuJu_QuZhiLiu[81000];6 y* |  V4 J6 s
        double mtmp;
. m3 y. B' R/ j' e: J, Y$ q* e        int ix;! j: D' E+ i: ]$ z
        boolean_T exitg2;5 `: H* G+ k7 x7 V) q" u& t8 c. |
        boolean_T exitg1;
) f9 N; u7 x' K# b( Y        double YiZhenShuJu[800];
# ]& x$ l- o/ d( x5 Z# {% m        double dv1[800];1 S3 a/ u; }" w
  p9 ^+ p& @' K8 ~
$ b  Q( {! \9 g/ k" V" G6 t
        double b_YiZhenShuJu[800];. O7 n( L0 R2 z' c2 u
        double I_filtfilt[800];
; N5 C. o; {+ a9 v* }/ d$ F        double Q_filtfilt[800];$ I: V* T# r* X3 N6 l0 F8 @
        creal_T b_I_filtfilt[800];3 }1 p! Z. U3 ^' O+ O
        creal_T b[800];
! P0 s5 S# \2 {+ ?        creal_T RCRxSignal[50];, |; e( m0 e6 M8 j5 B, v
        creal_T fineCompSignal[50];
  |' {, y' N, y# S$ c# W        double phError[50];, U* Y6 w4 b: q' j) l, R
        creal_T timingRecSignal_data[28];
3 l# P- ^  O6 g5 t/ L1 N        int timingRecSignal_size[1];
# c: H9 w6 K- x* _- R! {; d# n        double prbIdx_data[28];
8 X6 y( \8 G/ u& h" U+ K        int prbIdx_size[1];
5 H) `3 N% I5 E9 N: g        double dtMt_data[28];
$ o5 u; W9 r* t2 Y2 M        int dtMt_size[1];
. j* m. D& m- e        creal_T symFrame[25];
; @6 g2 s- y8 H        boolean_T isFrameValid;
% R# t, N5 x6 [2 i+ j        double unusedU0[3];# J" J3 T% Z. D* C7 m
1 L  D6 n4 P2 e# U5 m
        //调试过程中的变量6 B, V9 p" \) Y9 ?6 u
        int  enough_data;
# L- S$ m; m7 N& q7 P. W9 l
5 u. v2 X4 Y' Z4 e        int enoughDataFlag;" e; l3 I' i0 F! \1 O! y
        int yiDuanShuJu_mean_int;
5 p5 v4 \, c5 y5 M* D        int int_sum_dv0;
2 o2 ~+ L! G1 I5 ?) S0 n7 O        int oo;7 @. j8 i' |. U' X9 u8 \7 N
        int ii;5 [6 Y; Q& J6 b* b" \
        myfuck=10;7 \) j5 d" {& G1 q# T! V# Q- u8 G
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */3 V. H* z  l2 y$ l
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
. D0 D" Q7 @( d/ _: L2 H
) `5 a( f( X# M. v) F+ [        yiDuanShuJu_mean = mean(data1000);
8 p" v# O: [4 T9 E: s& X# \
! Q3 x8 L4 z) Y( w        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;/ J! b& y; ?- i. H  F
        UARTPutc('A');" l& ]7 Q8 B4 r; ?6 p
        UARTPutNum(yiDuanShuJu_mean_int);
  H! Z1 F1 S8 u- O        UARTPutc('\r');
8 u# u+ E0 J3 C' @& P        UARTPutc('\n');5 D' s6 z2 K2 _" i" L
. _+ b- O* t$ N3 r& v0 w! c
        for (ixstart = 0; ixstart < 1000; ixstart++) {
7 V- \3 P' X$ ]* X/ T                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;( t/ ^, O4 D8 ?1 g# O' X2 d
        }* C7 W8 B( g2 o0 X  N: D( K' s

' }3 _3 {0 w% w2 P7 O4 Z        power(yiDuanShuJu_LowMean, dv0);" X! y  g4 E' ~% i% u

( W9 L  L) s5 W, }% ?        int_sum_dv0 = (int) sum(dv0);
6 ^; ?0 p: e" Z+ W" t
$ y" Z5 v/ A9 ?# C8 P. E2 a        UARTPutc('B');, X8 [2 ]- v, ~  a
        UARTPutNum(int_sum_dv0);1 e  ]7 ?2 ^9 D8 I, ?8 r: t
        UARTPutc('\r');
' v0 b0 x. ]" B( t! d7 x        UARTPutc('\n');
& X/ H. b. Q& [& _3 H( d! a
, O9 s8 O" T& e" a; s2 n//        int compareFlag = int_sum_dv0 > 1.0E+8;
6 ]9 t5 Z' q/ U4 j/ Y) ?" y" I. }: V
# `) G5 \. j% @5 ?        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?5 h$ ^+ u' d& E/ G3 I- \9 Z: _
                UARTPutc('C');$ ]. X+ o% s  q1 \' @7 M
                /*  比较信号能量 */" p' R. w/ ?5 h2 ^: G! @
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */4 u$ p8 l2 e2 l6 L3 M# B( b& y. h# g
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
. ?! Z( t2 S+ o+ }/ q8 z' @//                for (ixstart = 0; ixstart < 1000; ixstart++) {* ~- z. u& n3 f, X# L
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 f' L& T2 w! ]- N
//                                        yiDuanShuJu_LowMean[ixstart];
& d, x; w0 M4 ^3 m//                }4 Z3 r7 x$ P0 J, q- o, D: h
//: V6 s8 o& f0 X$ U% O. K3 @: n5 B
//                youxiao_k++;
  a5 W6 D+ }, U0 W- E$ A$ c6 b. S//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==* Q0 H/ M' a* M: H' h7 J
//                        /* 感觉要取21个数,即0-20, */
8 S8 u+ f0 \+ `. x# P; Y//                        enough_data = 10;//有效是10,无效是06 X5 T9 x# F( A3 L8 C2 j
//                }2 N8 z' n9 e; V
        }1 e9 a5 P; m8 e- x+ j$ u
2 U" q5 C1 y7 H! T
/ u* s7 a! U" ~/ d+ Y* v. F
        enoughDataFlag = 100;+ q( z  @  r  K
        enoughDataFlag = 1000;8 @) s) T% K5 r5 a3 n0 U
        enoughDataFlag = 0x02;: K3 a$ [, A: n4 S( c" N
        enoughDataFlag = 200;
% g5 L/ Y9 A3 W  `) B2 t5 ]  u8 w4 g/ u7 X" E" r* s/ S' G! P
        int myfuvk1;
. u! O* X# X( |        myfuvk1 =11;
: f) Y9 a# e9 r/ z1 x9 v
# @0 U# t& E: r% q2 s# M* \! z/ Z; @
        enough_data = 0;
% t' V, g# r, ~$ `9 [% h9 m& O
: @! J1 Z$ F7 C( d# ?4 F+ C//        if(enough_data>50){
1 ^) G8 q, c1 A& N//                enoughDataFlag=0x01;
" Z- p' }; B. P' J, D% ]4 [//        }else if(enough_data<50){
( n: K+ k2 S) l" n, ]* O//                enoughDataFlag=0x00;//0x00还是不行6 q. |6 A& J, }
//        }$ c! K/ v: i" C" P- h
' `& C9 P. c* p  k7 N( L

3 p6 h2 ^* |; h* w        oo=10;
9 l  d4 i8 z" d        oo = oo  <  5;
# j: s" v% G6 Z* Y: i! m$ ~        if(oo){' ~: h$ f9 o0 Y6 e$ ^" x% {
                ii=0;
7 ~8 U! C8 O) @8 F* B. F        }. b9 `: B. s! W
        if(oo  <  5){% w. l! u" Q- q  r4 a
                ii=0;
! I+ M. W; H+ A        }. V5 t* C! o9 W. ^4 h% v
        if(oo  >  5){, q( m4 q% x, J" q* Y
                ii=0;$ r1 A8 u! D  `3 i
        }
4 k! b! u2 T& w0 z  s; o! Q2 g+ G$ M
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
: e4 r3 a6 _$ m4 o2 c) j1 U# t        /*  如果数据足够才执行主程序 */
8 _, Q$ V: i, x/ |        oo = oo  <  5;4 K* O7 S, Q, v
        enoughDataFlag = enoughDataFlag  <  5;
4 \/ |$ f8 S( o" b5 F) z# l( E        if (enoughDataFlag  <  5) {
+ l* s  w1 J0 M$ e# m  N//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
: G' g# R& c5 P9 N/ S                AGC_AGC(&pAGC);  Q8 [3 T8 M% e( Q. J# w3 \9 u
/ X. ~3 \: k  |* ?
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
4 @- h$ k, n% u9 v0 T- Y                FIRDecimator_FIRDecimator(&pRxFilter);
% H: }- y' {- e* j' I; w& z$ k& c/ {1 i; w" K* R
                /* Downsampling */
9 i0 e  @: b5 r# `  n# Z2 O. A                c_SymbolSynchronizer_SymbolSync(&pTimingRec);2 x$ L& L( `" z4 D

9 V, K  i3 f( }+ j/ x% y  b  E                c_PreambleDetector_PreambleDete(&pPrbDet);  y4 Q5 H+ g' t7 U  f& [
% `6 m- I+ A& h) x
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */7 e$ R1 e& F: B1 C) L
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
4 {. E6 e1 W' |0 X1 Y9 F5 U                /*     %帧数量=100 */+ a+ m3 `: Z7 o6 x' g! e* Y
                pFrameSync.isInitialized = 0;
! W$ G( x* [9 c9 ~* D! Q+ M8 Y  C0 M1 V0 m
                /*  [EOF] */7 R9 _! F  V3 f# ^2 G0 \7 a! A3 S
                /* 前导码长度是13 */- N) [/ w) \+ F7 o6 c
                /*    %qpsk */
) X# R, u& P* d, }6 b$ ?) z6 o                pDataDecod.isInitialized = 0;; X# r- T. ~- E6 O8 @; c7 M
7 S# A6 [2 a: P; h& |5 M0 @5 K  n% {
                /*  end */% i4 ^4 O$ a4 y$ u
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
) V7 L. `0 B5 Z1 R0 }0 D1 k& d' k                /* Convert 3-dB frequency */( h8 W. L# o; D! T" K' D
                /* Convert 3-dB frequency */
) r# ]  j1 E$ E' Q  w                filtfilt(save_buffer, usable_left_filtfilt);+ _, e# _, L  {6 M. u2 [$ @' f
                for (ixstart = 0; ixstart < 81000; ixstart++) {0 w3 z) l* h: [! |6 ?
                        usable_left_filtfilt[ixstart] *= 2.0;4 S7 X2 w% I- W' ~5 W& B0 y+ ~- y, V
                }8 o% y% n7 q: J/ Q
( D" J- p$ q- O2 u2 D- {
                /* 注意乘2,处理幅度 */+ k$ }1 M/ }+ ]
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */( [- H  [( {) k& }) q' r
                /*     %% 行列转换 */
9 l& Y8 I4 u$ h; J  i$ v2 @% C                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);! y/ W7 q+ h+ L1 a$ X
                for (ixstart = 0; ixstart < 81000; ixstart++) {8 O+ u0 t3 c, |/ g( R  [- m
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
) \8 {4 Y1 u7 k& @                                        - yiDuanShuJu_mean;
' P8 E2 I2 \, e6 g+ Z                }
$ Y9 H7 Q3 m8 A  Z1 f
- Q% b; I# n% F0 x1 j# E) i                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */: x  D, `2 n9 A, Z3 a& T0 y
                ixstart = 1;" b  e; H  a8 c- R2 B
                mtmp = youXiaoShuJu_QuZhiLiu[0];  \! }# Y. g8 ?- ]' w1 t
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {3 R6 Q4 W  W, f9 P8 x0 b
                        ix = 2;: C/ r9 B3 }' r! m3 j2 u7 I( ^
                        exitg2 = false;: d5 L' J8 h1 n% r1 r7 L% R* _5 H
                        while ((!exitg2) && (ix < 81001)) {
" E! u7 {0 K' e5 M& i/ P                                ixstart = ix;
/ O0 r7 K3 q6 D, q3 T  U: a                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {1 h6 H( Y' V0 N1 x& ~
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
$ a4 i  g/ j. X# j1 U                                        exitg2 = true;: `1 ~+ y" O; K2 T! \
                                } else {
$ ]0 o6 g! @/ f  ~                                        ix++;0 _8 b2 s8 M' J/ I6 H9 X
                                }
8 t, q, I( c7 x7 ~+ _8 {                        }# y5 [9 ?6 x; S8 J4 r
                }9 x; F3 f+ }' I: S0 b

1 A2 \+ ?( X$ h( P  z6 i                if (ixstart < 81000) {$ Z2 B& ?& V# b
                        while (ixstart + 1 < 81001) {8 e) N" C% H# U: B9 ]
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
0 o7 g* V" o  y' W% V* Z                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];, @% N3 H6 A% ^* |# P
                                }
- ~1 e# b6 s" T5 t( m$ Z9 e5 p  j. V2 _3 b3 v
                                ixstart++;  ^0 N+ f( \. G0 G
                        }
! `. c/ G- k+ m4 Q) f; U$ Q                }
. j$ ?% n2 n7 t! i. ^. i4 u1 f# q. u) y7 b4 @  X( u2 G! U
                ixstart = 1;
5 @9 `' f  H' B% M                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];0 K+ E& N2 H. c  \0 l! B* N* x
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {6 u4 t2 J+ m: m( O* O
                        ix = 2;* D# U! T' [0 |' |& g9 C
                        exitg1 = false;
; ]0 J; M) l. q" t3 f. Z. O- s                        while ((!exitg1) && (ix < 81001)) {) Q- o* b" W* N' e' `% h
                                ixstart = ix;( U* i- E( s2 i  w+ J) R, ?
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ R; y% B0 q  M, U- p& q- W                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
# Y5 D+ B6 W& V2 ?8 a8 _                                        exitg1 = true;
2 X2 X/ @* I; U+ m8 s7 W                                } else {' u3 D, R1 o' W) v( @7 E
                                        ix++;
. _" p- }' v5 g                                }
2 `9 s- D6 J! [. z9 L% f                        }
' H6 u1 o; X. g                }; f0 A7 ]. c6 E! W) ^

1 \. R% x+ Y$ e0 }% i                if (ixstart < 81000) {
' b' N% T+ s! o                        while (ixstart + 1 < 81001) {0 c8 _+ F. `# G9 J% `) @* w, v
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
% K, C8 ?5 {% d9 d2 @/ M                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];& U6 A+ _: r+ Q' W) f
                                }/ |1 q5 U2 B/ n8 y+ o1 h& W4 V5 l
0 }: _! ?- l2 L- f
                                ixstart++;" J( g" x9 T# E
                        }
1 z3 x+ R. P% H' |/ E9 N                }1 t, ~2 n8 s& t9 r% Z& U1 R1 m
: ]! W: n$ A, {! ~& \4 l: c
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);4 E% w" m9 N) c& G! k) |
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {  c' ?/ e  {9 P. Q! {
                        yiDuanShuJu_mean = mtmp;8 {/ Z& R+ ^. S& N  u& ]9 l$ B
                }
; g4 ^* \0 W5 s- Z" s
/ k5 I# g& F, `2 E" a2 _! c                /*  找出极值 */
1 \( X3 L1 u* s9 ]; O% {+ K                for (ixstart = 0; ixstart < 81000; ixstart++) {
2 Q3 j9 Z0 u3 ~                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
2 r+ q0 ?% c: _5 `. `9 N4 t                }
! c( [2 w, _! Y6 i. o, I- x+ u$ d& n
        --------------帖子字数限制------------------
$ f4 u! Z1 P5 k% B! K, C0 u2 R! U}
5 F' J" E- }& Q+ z, S: x1 M- ?  o9 w! T; Q- i% y
$ t. H- p+ c( h% `3 n1 U

本帖子中包含更多资源

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

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 12:33 , Processed in 0.063301 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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