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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 8 R" z' N! s/ ]% t( U
% f$ K; y# F( W& s7 C# _( @
各位大神:
. |& E8 g! ]! J& I5 U* v% K) p  N     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)( \2 U" L' [0 ]$ D% _
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
* S+ b" ^4 q' n8 o) s, A" g0 j4 _' @' f' M( Y2 s
     ) m# ^. _# N$ a$ p$ o3 y7 P
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。+ W$ n% @! X2 V/ T* J2 T* r

& U8 m3 H3 m* O4 T* V* F# H  g并没有其他线程
6 [% c. S/ [8 `" w反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。) E2 O( }: P/ A: D. r3 u
也说不定是和堆栈有关系。。。。。。4 ]3 W+ Y/ y$ i+ |9 a' Y# X0 C
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ S/ Z% S; F: T( L2 \
/ ^% W7 `- Q6 f: ^6 W. y* I
& s+ N8 a, i2 k7 r1 N

1 \/ U+ E& @2 ~我也很绝望啊,希望大神能帮帮忙,感激不尽,!
9 c% f) a  e4 O, k' u: a3 [$ b* f# h( {' I* o& f( J2 }0 K

  _- f& U- a4 a附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];" ]/ u8 Z2 [: ]! _0 E7 F) w
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
' E/ [1 a$ |0 R3 M- |
  h" B, R! e6 [( V  ^0 Nboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
0 j1 N0 s4 P4 }! O; k( I$ w5 G  p                const double data1000[1000]) {8 d0 y" z" Z# e( F
; H5 E# r: i+ }
        int myfuck;2 ?3 K+ j' a9 j
        double yiDuanShuJu_mean;
. K* W" x2 t5 I        double yiDuanShuJu_LowMean[1000];. q1 l8 l+ d, m- y" U
        int ixstart;' a9 t3 g) j5 n' m3 A2 W
        double dv0[1000];
2 J4 P8 a4 K2 {0 Q5 s- M* V  i+ H        comm_AGC pAGC;& n4 C" s4 i/ ?9 o' R' O3 f, ]( ]
        comm_CarrierSynchronizer pFineFreqCompensator;. l8 V! q' B+ n' l# U) r2 |! p6 q3 k: i
        dspcodegen_FIRDecimator pRxFilter;( t9 \& }0 u0 k1 [, T6 O) A! e1 J
        comm_SymbolSynchronizer pTimingRec;; ~( ~' s1 H# q- z1 W+ ~
        comm_PreambleDetector pPrbDet;$ O4 B5 v2 A9 ?: {& ]
        FrameSynchronizer pFrameSync;: t# Z. C" h5 \* ~! W; K
        QPSKDataDecoder pDataDecod;
4 Z- y2 O) C' g: K2 T( a1 t9 ^9 z        static double usable_left_filtfilt[81000];
( E" Y* e; {! v  @8 X        static double youXiaoShuJu_QuZhiLiu[81000];
7 e$ \! M6 }' u% I8 n        double mtmp;
4 P  E6 {& h# w$ j8 R        int ix;
7 j3 Y/ d  z7 ?- N        boolean_T exitg2;" A# h2 ?" t5 d$ q
        boolean_T exitg1;
* v2 ]  X' a3 ]6 O        double YiZhenShuJu[800];+ d1 t/ E6 c6 S
        double dv1[800];% N7 N5 k; z( ^! l1 B: d
4 \* D- M0 v7 J/ }  z9 v; X( t
* X/ ?: a- T7 X/ j$ j; b
        double b_YiZhenShuJu[800];, W  Q* j! b9 P5 |5 y
        double I_filtfilt[800];
' h2 _& g8 z9 D' V        double Q_filtfilt[800];
7 K# |$ j# |0 K        creal_T b_I_filtfilt[800];: }  |! ^8 c! H# j" E6 J
        creal_T b[800];
! `9 f. K3 k1 X5 Y+ G% o        creal_T RCRxSignal[50];
5 f* h$ Q) G, v0 c9 T        creal_T fineCompSignal[50];
3 R; j: o& o5 k8 u% S3 r+ n. C        double phError[50];- C- `! z. R! L0 F! {4 W
        creal_T timingRecSignal_data[28];
* Q7 S* z. w- k" T/ Y! H        int timingRecSignal_size[1];
4 }! n5 A1 N" ^$ b- @        double prbIdx_data[28];. s" \! W3 z+ n2 a# L
        int prbIdx_size[1];
3 i2 H! f" v! W7 q5 ~/ @& ]; U        double dtMt_data[28];" T% F/ d- K0 q4 H# m0 d6 e; Y& @7 e
        int dtMt_size[1];
, T# _: r5 {. Z5 k* ^: b9 F        creal_T symFrame[25];; f" q) V* j2 i* o
        boolean_T isFrameValid;- @" e. J  D1 ]/ j( L8 B
        double unusedU0[3];
& H- U4 J$ A: V1 r- ]3 J( C' _& S6 i, [7 u+ `4 M
        //调试过程中的变量
( `. W' ]& O4 _1 B  P        int  enough_data;
: }* \: n0 w% g* P2 F5 v
% g8 K9 G  q- n3 d. E        int enoughDataFlag;
2 E& K8 O  n- e0 o9 |& u; L        int yiDuanShuJu_mean_int;) W! B: \1 d' ?0 V! I
        int int_sum_dv0;
4 K" f/ [& B& J+ i8 i$ @- Z5 @& y        int oo;$ [! w$ F( ]+ V6 f
        int ii;% r4 x' E! P( y
        myfuck=10;2 e( h8 [8 D  T% a4 G- a8 ?4 k, z
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */4 V" w3 L' v, l: J# T3 [
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
# |& ]& Y! ?/ q" N  h9 C6 F8 O( S% ?
        yiDuanShuJu_mean = mean(data1000);
+ k# [6 S( y* f7 A/ g
! x! I) b9 Z: O+ o1 ~8 K" M        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
! n" _) z! Q4 w: v. ?        UARTPutc('A');
! g/ l8 ^* ^1 F  k. I        UARTPutNum(yiDuanShuJu_mean_int);$ k% b+ L% \, d- p9 V2 Z) A
        UARTPutc('\r');
; P1 i! Q- a% S        UARTPutc('\n');
& r& t9 ~, G* O+ k' [
0 s, K/ Q3 n! s2 d/ J7 [$ K! f& n        for (ixstart = 0; ixstart < 1000; ixstart++) {+ X& }' v1 ?: g- k! _
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;6 B/ ~  B0 m6 i7 x: g
        }3 Z5 D; C6 Y6 l" u  m- }3 s  t1 ]
- l" q6 A9 B+ ]( P' S
        power(yiDuanShuJu_LowMean, dv0);
' M, [  e4 u) s+ `7 S. B7 Z. v
        int_sum_dv0 = (int) sum(dv0);
  D  \9 `# @# H2 j9 f' P1 x1 e8 S4 w! r- v, y  l
        UARTPutc('B');, d1 m9 V& k, \6 c0 ?9 g0 ~
        UARTPutNum(int_sum_dv0);
8 Z: Z5 I! w) W% N* a2 Q1 M. ^        UARTPutc('\r');
  d  k/ t4 Q; V- S% s        UARTPutc('\n');4 n3 G* z5 u1 ^2 C+ O- f' p+ }( ?

9 ^7 M0 r, U- L% Y9 r//        int compareFlag = int_sum_dv0 > 1.0E+8;
  v4 ?2 Z# J' v  ]  J
! L; x8 |$ K$ u, w        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
4 r, ~( j3 X% f  l                UARTPutc('C');
, |6 ]; ~1 f3 m( z5 G; x) z# `                /*  比较信号能量 */
- e: Y' R+ x2 n                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
7 C$ w1 G; }% b4 }- O//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
; K, a& ?. M  c//                for (ixstart = 0; ixstart < 1000; ixstart++) {2 S0 A5 A/ ]1 d- r! q' b
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
) `% R0 ^" N& X7 e5 M) ^//                                        yiDuanShuJu_LowMean[ixstart];( x* ^! a. T/ S) t. V
//                }
) [! N  Z! B2 h0 M/ z) ^//
3 j6 z( I9 }4 ?) d) A3 o5 ~/ ^//                youxiao_k++;1 D! g: X- m; |
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==" [9 W; F, f9 \7 ?+ |" q3 |
//                        /* 感觉要取21个数,即0-20, */
! P/ v. Y$ z; V$ i; X# e6 P. V//                        enough_data = 10;//有效是10,无效是0& }8 j8 s* u+ ?6 A
//                }
" }7 b( Y8 R3 Z        }" Z+ @. l: r* G

6 E) \7 Q1 i9 A, ]* e  z: w+ z/ k/ }' i0 V
        enoughDataFlag = 100;
; u0 i4 q$ y5 I* N        enoughDataFlag = 1000;" @  v) s1 h3 A. R5 A
        enoughDataFlag = 0x02;5 `+ G+ e2 }; `# e8 S
        enoughDataFlag = 200;
$ j. c) M& N. _& `
5 `2 c' w" U5 a6 o* ]        int myfuvk1;
  N$ ]# Q2 O" k# M8 |3 j! y        myfuvk1 =11;
$ h0 o' [# u  f+ [) o+ A# L  o" R( i5 K, e& L. \9 D8 t

6 [3 O  {6 R# ~$ s0 f        enough_data = 0;
3 k! ^, u& d7 Q1 |8 u# U# T9 T' o" q1 }5 o- o1 k# w6 p8 ]* g) j
//        if(enough_data>50){
$ F  R4 H, U, s" I1 @//                enoughDataFlag=0x01;
% U  j! X* o0 t/ b  J" w4 d5 h* i//        }else if(enough_data<50){/ N1 r& p' J4 `" Y0 N0 }+ T
//                enoughDataFlag=0x00;//0x00还是不行
0 }$ u+ `* j! S6 F1 @5 ]//        }& S9 g/ @/ O/ f' ^: c

8 I! z$ g) u& L& e  K) v( c1 U- Z
: D7 n8 P6 w2 ~2 g0 Q        oo=10;* o+ N; X. m9 A* M
        oo = oo  <  5;0 n# H+ f, t4 K& b/ ]
        if(oo){
& m+ a# q' |2 l3 z                ii=0;
' i3 A3 I8 k8 |  B        }% e8 u7 N1 _* Y
        if(oo  <  5){. \  A+ z) s- X! U
                ii=0;& H; n9 E& H, A
        }9 ?, S5 I+ `2 S9 m
        if(oo  >  5){! u6 v2 i) Y1 r0 m  L* W
                ii=0;
; g: m+ f4 z, T        }0 y6 d  h" @/ z0 K" r- {
; [( j8 H' l5 Z3 O0 N
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */. y# }. a' {% w* |& ?: P, s
        /*  如果数据足够才执行主程序 */
- z( V2 V  h' y1 h        oo = oo  <  5;
5 V) d1 T+ s! w, c& R        enoughDataFlag = enoughDataFlag  <  5;
9 S4 N, J( P3 l2 ~# @& q' W0 s- g        if (enoughDataFlag  <  5) {$ c# R4 H4 m+ t9 |( R4 r  D
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
8 y$ g! V- {( ]5 N                AGC_AGC(&pAGC);
6 T9 f, S) r; `' N6 m& B9 d+ k
% ~/ |  A6 q; i# G" }                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
9 C1 |: y- a/ h5 L2 d                FIRDecimator_FIRDecimator(&pRxFilter);4 ~5 g5 @' u% K5 @: X. E

% l2 |7 h! m# W9 {/ w& D                /* Downsampling */  J) D( X- g; C) ?. M" u) k
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 e& e# Z$ r# y3 s

7 _, b6 e- `/ S) R1 K                c_PreambleDetector_PreambleDete(&pPrbDet);& i9 @1 w$ {# m! W/ E) _
* n& b5 z  s* V* \3 A
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) C8 w3 i8 \* ]7 m                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */" b- O, U* R" e3 a! b, v, Y. b
                /*     %帧数量=100 */
& [1 }6 {% l# y7 S3 ?                pFrameSync.isInitialized = 0;6 R6 h/ r2 ^  L7 C( I

1 o. j! k+ `1 B) v5 I& \$ L4 U                /*  [EOF] */
5 f" H6 Q& r" h                /* 前导码长度是13 */
8 T; J' Y; Y: L* a                /*    %qpsk */+ f7 V6 a4 V) D" z! U
                pDataDecod.isInitialized = 0;
; ^. s* W4 G- e3 k# S; E+ @4 R) O8 F' k& s
                /*  end */
  Q+ h" c7 s8 Q6 @& G8 k                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 V6 X3 X: S7 ?. k, g8 V0 `                /* Convert 3-dB frequency */( o  {0 \9 _5 M/ V# M
                /* Convert 3-dB frequency */8 m9 c2 [( |/ h/ z& G5 B1 g! _! ?2 E% D$ u
                filtfilt(save_buffer, usable_left_filtfilt);  y7 F; q0 g7 `7 c3 s9 j
                for (ixstart = 0; ixstart < 81000; ixstart++) {3 B! i$ V7 g7 }6 l% o, l
                        usable_left_filtfilt[ixstart] *= 2.0;6 m- W% ?! z" Y: ?8 ~
                }) I( x) T7 Y) K7 e$ ]

4 W) G6 P3 G8 @/ |# j( X5 d% B                /* 注意乘2,处理幅度 */0 q+ G0 [5 k+ k7 x# v3 S
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 ?4 R' m8 G$ t4 Q                /*     %% 行列转换 */& D* l2 s& |; ^2 N+ I
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);! s. z. u9 U' q% f, H. O
                for (ixstart = 0; ixstart < 81000; ixstart++) {
) M4 X& E- T! X( t' ~  L                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]9 K7 c# a( ~' G! i2 F3 R! s* O2 J
                                        - yiDuanShuJu_mean;
. u# _# V( K' x" J/ f' ?                }* n) U( {+ s& b7 S
3 f2 ~+ w4 @  U, Y8 V, v3 Z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */5 p# |/ p$ c7 J6 R" v) I4 N* A
                ixstart = 1;4 W3 {- i( x, R+ H
                mtmp = youXiaoShuJu_QuZhiLiu[0];0 K" N+ {* {" f( t
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( S: ], i. _0 w                        ix = 2;/ V+ K+ c) ?) x1 {& u* e0 C
                        exitg2 = false;
' J/ t0 h% I; Z- S. A, v. t                        while ((!exitg2) && (ix < 81001)) {! s, ~% J! |$ D& @7 Z/ x+ z
                                ixstart = ix;$ n* F* Y5 W- Z( ~8 Q* H9 X
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {! Z7 t( b& X$ ~' {- ~
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];  v& A' P, r' e8 o* w
                                        exitg2 = true;
, V; F; j2 x8 d4 {& d/ a; y/ r                                } else {
" n, H6 W. I" U+ M7 Q                                        ix++;
& g5 E9 h: Q- m9 g' I                                }; m, @' N% F3 {& j7 F
                        }
0 l1 X$ \* [1 r& y( l( ^& Y                }
' O% {4 V2 I" E0 b) i
3 P" @' X0 {+ }6 _                if (ixstart < 81000) {; w" |& O- M9 e
                        while (ixstart + 1 < 81001) {- M# o" W- R; l7 m! A$ ^
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {. t0 r, n. H# d" |
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];* ?% l6 N6 a6 p8 {
                                }
. ^& {% X& I. t: R5 r: J* k$ \( p2 O6 K% J! K& B
                                ixstart++;
. K0 v* S) V& {) T( h                        }* L9 j! z( B1 i: i$ J. y& V- h9 a9 j
                }
6 @5 O8 w3 M' ?+ a2 a* l) M  }
. i) p' B7 [! O9 z                ixstart = 1;  ]  d$ Q) A* B' o, v
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];1 J0 ?; x7 Z' J: g
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {' ]/ u7 e& `- q8 E: a; `
                        ix = 2;
/ ?) R( F8 m; R                        exitg1 = false;6 C* H0 d0 H- N: [% E; {
                        while ((!exitg1) && (ix < 81001)) {
& X, e# @5 z5 j" O/ C7 y( l* I/ r7 D6 k                                ixstart = ix;. A; X9 `0 u7 `' _
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& G  g$ j; b1 k                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];3 I; ?" y3 E7 y- W. B0 f4 {5 Y
                                        exitg1 = true;
6 y" I* S' X/ u7 b                                } else {
" d; J: ~( l8 T6 }& n. @2 T, x                                        ix++;
1 B( s; X4 P( s" e9 I, {                                }9 g5 }$ Q- [0 M  s0 A
                        }
( M8 X8 k3 H* O5 H! X0 i                }
2 C" ~4 A+ r8 D# X" B2 I- p% O4 |& Q: N$ ~% J6 H
                if (ixstart < 81000) {& H( k' I4 C* v" d  E8 K
                        while (ixstart + 1 < 81001) {
9 L3 P6 h0 s7 O$ q& l2 Y                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {) v3 f* O: s5 ~/ ]2 y5 N/ O
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];$ W: @6 I! o  m9 d' W: \
                                }
; Y7 Q, ]4 `& f0 a3 Y: V" p% }; o3 c% @% R% S
                                ixstart++;2 f, \. }# ^4 B+ K1 y' n" Y
                        }: l0 r' T! k2 z3 t+ B/ S/ `# q
                }
! r! ~/ f6 S4 g0 }
: D% Q5 S$ ~0 E                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
% c# k. p, r0 c6 ]% K3 j2 f                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
% C& a6 v1 o/ X                        yiDuanShuJu_mean = mtmp;
, P! Z4 [" \: n* ], f                }
( U9 j: U) {  N; I( B+ ]: J) @  T5 C  Q. O: w! }
                /*  找出极值 */
' I: Q/ m  Z( S( K, B                for (ixstart = 0; ixstart < 81000; ixstart++) {
( R; J( E0 F' t: [7 X2 Y) _+ J9 ]9 o                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
( O/ s; w3 {  L! `  o  N  X; C                }
! [5 I0 r7 w2 \5 f  q1 i
* E3 q1 A& z# r& o) w; ^" I6 o4 @        --------------帖子字数限制------------------7 j6 |  `+ ^9 x# E0 h2 z8 s" B: G
}
- R: h4 H& y$ h9 X: X: h: Y, \$ g: f# P
1 E$ N- H7 u6 Z1 g* u& h; X

本帖子中包含更多资源

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

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-7 15:28 , Processed in 0.053821 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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