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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 , I6 q3 i) w8 L7 E* r5 Y

  g, E5 f& N. q各位大神:
( d) p3 e; L$ V/ C6 r  b     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
. c( R( ]$ p1 K      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
% i5 M- w3 p3 }9 [. u1 x5 r' V+ [! z* E0 S
     
% A& L! x; }2 S# w2 C, A这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。7 D5 u, K4 x! s1 C4 y

6 @' Z- b9 w4 K4 ^( b并没有其他线程
2 X! ?, g3 {. @* v反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
9 I/ W" e1 E/ D0 I也说不定是和堆栈有关系。。。。。。
, Q: k% X* O& C; @  h2 G请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....& G1 ?- w+ X/ h0 C0 ?
. k' o# y3 a1 y- L% f) y0 `0 {

( b8 m5 F$ }: r7 L) E8 L# l/ P6 n: ~9 b8 \4 e& l
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
! n7 d5 _; p! W/ {
% C4 A$ k* ^; \; ]5 I. y$ ?6 Q4 s& Z- C/ a4 u# g& z: j
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];  h) L2 c0 K9 G/ a3 a0 W
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
9 v/ s, e' M+ p
) ?- r, c, }" ?1 L) F0 tboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(  q- ]& H5 f6 I. }, S  X
                const double data1000[1000]) {
; Y, I6 l! L& u" l. J' Z. [
. Z/ z# q/ j! V- v4 r0 S; K# D  R0 i        int myfuck;
/ k4 o1 o( y% t        double yiDuanShuJu_mean;; Q/ N* o# B& j- }* P1 u  q
        double yiDuanShuJu_LowMean[1000];
- V3 |2 ~, M. n4 _) ^        int ixstart;
# l# X3 Y1 Z% @& G  q7 t( a6 I        double dv0[1000];1 C3 R4 N' _5 k2 H& p+ W
        comm_AGC pAGC;* ]6 O3 N( [3 w( {6 t
        comm_CarrierSynchronizer pFineFreqCompensator;- W) O* p' J5 z) ?+ k
        dspcodegen_FIRDecimator pRxFilter;
0 d3 S/ D$ m1 d        comm_SymbolSynchronizer pTimingRec;
" \! b2 }7 n- K7 D# |- C; ^        comm_PreambleDetector pPrbDet;! w/ \, Q- D0 J$ G- E& k
        FrameSynchronizer pFrameSync;% k7 T; O0 `: i0 v9 d& a
        QPSKDataDecoder pDataDecod;
# T% M) Y6 ^5 B6 f* a        static double usable_left_filtfilt[81000];- y5 _# U1 x  X% G+ t3 F
        static double youXiaoShuJu_QuZhiLiu[81000];
5 a0 x% T, }/ y( j2 t        double mtmp;
4 [2 j1 o- U! f, A+ q: {        int ix;9 P! E$ T( q) h9 h( Y7 ^- ]
        boolean_T exitg2;
3 |  ]7 C( A% m% Y        boolean_T exitg1;
& \; }6 W6 k2 n- L9 Y  M        double YiZhenShuJu[800];
$ ?+ q* {% v  g$ C) C) h3 u' ]/ k( b        double dv1[800];
, k. w8 Z8 O% O+ A& @
" _$ e+ m' `1 }$ w, L1 O! w5 o; E4 X+ P3 G% v9 M/ w% \. A
        double b_YiZhenShuJu[800];$ j8 g* e' {2 r* `
        double I_filtfilt[800];
$ A: i" Q8 J- R5 O0 b        double Q_filtfilt[800];# q- L; O% t6 i8 p+ w6 ?, w
        creal_T b_I_filtfilt[800];
' M* [3 h7 p; M        creal_T b[800];/ Q1 u  o2 I  c1 U+ `2 D4 k8 m
        creal_T RCRxSignal[50];
% w: ?' B8 k( T" G: ^! ]+ D7 J        creal_T fineCompSignal[50];; p" S! W& M8 U- H, |2 N
        double phError[50];" S7 B4 j  J% h# G5 w2 X
        creal_T timingRecSignal_data[28];' b: f: Q3 e* W( T6 i
        int timingRecSignal_size[1];1 A5 L9 ~& f4 ~5 N" t7 g# p
        double prbIdx_data[28];7 E; u& z' ~. ?7 t" M" R  k
        int prbIdx_size[1];, F0 `$ {, p) E9 ~
        double dtMt_data[28];
% F) w( _$ e, b        int dtMt_size[1];
8 s/ ^0 L4 A& ~        creal_T symFrame[25];
' O9 R& l0 R6 f5 ~4 d        boolean_T isFrameValid;  X8 T2 s3 k& b: |; W+ f
        double unusedU0[3];; d6 K; T) T' o4 R2 n

  P! c3 [/ ]& M# f: [5 J        //调试过程中的变量- z( h% q( b9 K2 D
        int  enough_data;; A5 i% O$ |6 W
9 t& v; t* q* \( v* f5 E
        int enoughDataFlag;
5 u% {/ O: t( H0 ?        int yiDuanShuJu_mean_int;% A" l6 D# n' N! J" k
        int int_sum_dv0;
' G- y. \" I& y: ^( D! p        int oo;
* Z; o/ c0 T2 `2 p5 l2 N3 w1 p6 H        int ii;, t% y' X9 P6 U% Q: |& m! L
        myfuck=10;
# `4 n6 n. p) O# i1 S3 i        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
) j4 h* R- U; o0 N& t+ q' W        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */5 Z: u7 i9 O7 O: i$ a7 R+ D1 }6 |
/ Z3 x/ S* t* \- G4 T
        yiDuanShuJu_mean = mean(data1000);- u4 D/ p# A( {0 R
1 z8 f$ B3 S4 b2 A. J2 Y5 J
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
. a; ]- U2 s8 P+ g        UARTPutc('A');  M- S$ G, e& b: y' S: z
        UARTPutNum(yiDuanShuJu_mean_int);5 N5 m1 W& {3 @2 ^, m
        UARTPutc('\r');
% n2 B  e8 ~! E' R) |0 l        UARTPutc('\n');
) F. }$ x. E# Y2 e1 {2 {: x* J; n3 b8 G
9 f& O3 r; Q' {8 r3 F        for (ixstart = 0; ixstart < 1000; ixstart++) {2 R# y3 p# Y# t+ n' D
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
+ F1 e" e: W6 e1 W& K3 W5 c        }
7 c! A) t% A% O9 k/ G4 k* P" @; r1 R1 j  S  E" `: o
        power(yiDuanShuJu_LowMean, dv0);3 [& W0 _9 n4 y! E4 [# q7 J+ a5 L) k
: R6 ]- c6 R* ]: l$ V- O5 y
        int_sum_dv0 = (int) sum(dv0);
. H7 F6 U/ b' a  V( m
- @& w  M! n: z% m4 j# ]        UARTPutc('B');' g. I6 l/ K( x; s
        UARTPutNum(int_sum_dv0);
1 n4 N9 o4 M' |        UARTPutc('\r');
4 j' {$ k  D5 n4 G8 u        UARTPutc('\n');  n! \; n! a% [+ k) |
. m  @' @' e5 T. w6 X2 _
//        int compareFlag = int_sum_dv0 > 1.0E+8;
; v3 [- r: M+ T2 O8 N  P
+ c6 k$ k/ @! t% }  |% d1 `% ~4 z        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
" G2 }; n. H8 t                UARTPutc('C');* [+ o% {) L. h% Y% P. Z
                /*  比较信号能量 */
5 w& Q; _# b/ Z2 T2 U  }* r  z' a                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
8 r' Z/ o' e1 o$ x& H7 \/ m1 Y& A2 R$ U//                yiDuanShuJu_mean = 1000.0 * youxiao_k;* f  B6 O6 {; K% S# I7 @# d
//                for (ixstart = 0; ixstart < 1000; ixstart++) {  E, ?; \2 J2 {  x* @
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =3 u8 r& X, B' r( v) P# b5 B
//                                        yiDuanShuJu_LowMean[ixstart];
0 {( c. s/ b) k' e4 B7 }//                }
2 b: E' p7 T+ Y% ~$ V5 h//! s5 n! i' S$ h0 \! O
//                youxiao_k++;
/ A4 i. H. Q- d//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==/ K5 I' {' r" p& P  M: o
//                        /* 感觉要取21个数,即0-20, */
2 K' [& w* g: g3 b/ h! j* \//                        enough_data = 10;//有效是10,无效是0
6 M# A. f! v& h( Y& w//                }
* o9 a4 Z! S. c+ w( |        }5 \7 w" B9 c+ f+ h& \' e  \
+ h3 M" E0 l+ J: v6 K* _3 x
1 b+ s0 \% P* H8 b- f
        enoughDataFlag = 100;! s  W$ S3 ]6 C: c
        enoughDataFlag = 1000;1 J5 ?- ?# w5 b- Y- W3 ^
        enoughDataFlag = 0x02;5 m0 G4 ?. i* T6 e4 T
        enoughDataFlag = 200;) k9 h+ D0 |$ D, b7 J- ^0 w
9 u& X; s! F8 P' F* j0 S
        int myfuvk1;) Q$ x1 \" R! e0 c
        myfuvk1 =11;0 x& e  d/ p' k4 \" o6 s+ k& s

3 q- B. {5 W. e/ v
% [" a: w1 J$ J; m* m, I        enough_data = 0;
; i0 c  o" m1 v  u+ @+ h3 O. U, i1 Y8 z* \
//        if(enough_data>50){1 D& c& f6 X8 ]( S
//                enoughDataFlag=0x01;7 P" `1 Q# s3 S* z, k5 q0 ^. m
//        }else if(enough_data<50){+ `0 A1 A5 c9 ]( [7 i
//                enoughDataFlag=0x00;//0x00还是不行
9 w" h! J; u. ~6 B& g- j//        }
& Y9 b( K$ P7 u( _9 t4 _+ u9 u3 t
* I4 Z" e/ L% g0 v  i
# h9 O* w% s" s4 d0 n- O        oo=10;" K; P" l1 z* g% o5 f* I& B
        oo = oo  <  5;
0 m  q6 w. n; {; ?* I        if(oo){
" \( u& n, y3 g7 S' S6 X                ii=0;
) x( W' G0 K/ g! V5 R! h        }# s) W# E, j8 Q7 b" U& I7 `
        if(oo  <  5){
! D* w9 u9 ?" v: _0 X                ii=0;
6 O% @( d5 m  p( [        }$ B9 Q. ~( O8 l. m6 X, m
        if(oo  >  5){
& @* u4 E/ A" X" \                ii=0;
- F2 o) T; k9 u3 u        }
; f6 |6 }& l, W- ]% _8 N7 G- f: _9 _: E- _9 v
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */. E9 w: C* f. |! S2 {5 I& e
        /*  如果数据足够才执行主程序 */4 d* s! `8 ~* w, P; ~; W
        oo = oo  <  5;* Y; |  p. o# S" r+ Y* t" }
        enoughDataFlag = enoughDataFlag  <  5;0 J. L4 N& ~6 U) S
        if (enoughDataFlag  <  5) {% p' {' F4 A* d, i
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0" c% ^/ y) ^7 M5 S9 L
                AGC_AGC(&pAGC);$ [8 j: [* G8 [, r0 N) D3 a) V
) \) q$ z$ p, J  @
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
7 ?1 t. A: ?2 w( I9 u                FIRDecimator_FIRDecimator(&pRxFilter);
" n6 d6 \5 S" s; {! i9 h- V" [
4 Z1 u; s$ I1 R* K- j0 H# a* E2 p                /* Downsampling */
3 o  G8 d; o. l0 t$ t                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
" w* @" Z) ?- \# n/ g1 n6 G4 f8 g6 W  a( a: S3 e1 M5 K
                c_PreambleDetector_PreambleDete(&pPrbDet);4 R  J& F8 e, z4 p
2 _- T. B& m0 F7 ]* P; g/ [+ Y( ?# O8 [
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
0 N) C9 B- l4 E' Y4 N/ O6 \                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */" F; @4 e* H( U5 }0 o/ \; j5 M" d
                /*     %帧数量=100 */4 _% ?2 o, g8 v% L6 }! U' K( _, Z
                pFrameSync.isInitialized = 0;
5 I& }& O' J5 o+ G/ w- ], x* x. x- F. |. a- W* ]& g) O
                /*  [EOF] */5 A0 e- x! g7 X$ l
                /* 前导码长度是13 */9 V! }  `# J5 d+ m# G  O
                /*    %qpsk */2 v, W7 s4 Y) y/ X0 s# w$ ?( @5 r
                pDataDecod.isInitialized = 0;) C6 n% V2 ~0 U$ V4 B, @
; O/ a4 \+ m: n7 ]% @, y
                /*  end */: x) R+ p1 O( s  M# {+ N7 Y" C
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
$ E2 k% F. o, d3 @/ d                /* Convert 3-dB frequency */
" s/ @2 ?- f( g) e0 l                /* Convert 3-dB frequency *// @8 y7 i% E) {: B" y& H. G+ f
                filtfilt(save_buffer, usable_left_filtfilt);
4 P* R; S$ D$ j9 z  s                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 T6 D# B. z% q+ y, I: b1 j                        usable_left_filtfilt[ixstart] *= 2.0;
: X7 R. {; @: _; x3 j                }
; ]4 P# @% _1 o( |1 r/ G! T( e- L- z. p/ J
                /* 注意乘2,处理幅度 */
- v/ }, d3 x( U/ L" d9 _  N5 `: S7 l                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */  n$ f$ \) L# y2 [5 J
                /*     %% 行列转换 */8 I  R6 J$ c5 o& w
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
& G/ k: g  p& x+ u' r                for (ixstart = 0; ixstart < 81000; ixstart++) {3 `* b0 D" i1 H* y
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]/ p8 \8 h9 @1 |' A9 G
                                        - yiDuanShuJu_mean;& f# _$ Y* k: ^3 l
                }
# P. F5 S* O  V* V! W2 A
' ?2 y, ~% D- }' u' @$ q$ p; ?                /*     %% 应该对数据归一化,但是这一步放在哪比较好 *// ~. d8 E  D- w' V2 s
                ixstart = 1;
! h2 |& Q# e9 q( H                mtmp = youXiaoShuJu_QuZhiLiu[0];
, W5 ^0 h" W! w, C                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {  Y+ i0 }0 y" A) \# b* L4 i1 k
                        ix = 2;9 n# J9 o& V$ m) W7 v
                        exitg2 = false;* x" H2 h& b) H5 R* i+ h
                        while ((!exitg2) && (ix < 81001)) {
! ?6 W. W! F7 m- I: u% K$ V6 B                                ixstart = ix;
! F; R, K) Z, [( y, T5 C                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ ?3 Y- o$ b" R. U9 k" ~; e  G- b
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];# q$ U4 p) c9 T# }
                                        exitg2 = true;/ F0 X. z9 \" k8 {% U
                                } else {0 y( L7 _+ M1 C6 [4 j0 }1 k
                                        ix++;4 C9 o, @. o% x( f+ e
                                }* Y$ t( u# i; f  y6 @( i
                        }8 x5 @& v, c7 F6 R
                }
1 V0 \9 v; A' R0 n9 \
" _7 _3 C0 h  ]& ~                if (ixstart < 81000) {
3 a/ `% i0 O+ o& P0 q+ [                        while (ixstart + 1 < 81001) {0 q9 l1 y; H$ k- b- Q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
4 n9 N0 c% P7 L6 C                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];1 g( E: v( w5 t0 f# W: A' X4 f
                                }
& y% ~9 ?: p  I& r9 N% M0 ]0 d4 _$ }% F* W; w+ D$ C
                                ixstart++;+ F4 `. u" M6 }" M) z& i6 y
                        }
7 X; r2 B; n& _! z5 v                }' ?/ P2 u  a. ^2 _) t$ ]
0 l5 r, x2 q0 b6 p; q7 y
                ixstart = 1;
( @, d8 C/ Z5 J4 \$ S                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];# H- _1 [7 }+ b/ A0 \$ d! S. j4 ]) a
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {3 ]; P  \6 n+ O2 f% l* B
                        ix = 2;
* J+ q  [  H) p+ v                        exitg1 = false;
, Y: j6 b* _7 Y- X6 v( X2 P                        while ((!exitg1) && (ix < 81001)) {
1 H8 y; @0 p/ ^7 k  ]                                ixstart = ix;
! c% ~; e6 ?6 ?6 @0 P" c" @                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {! Y8 [3 |3 u# S, {1 d% p
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];7 U) |: d% u: i0 ?
                                        exitg1 = true;7 h! l& j- j  f9 u3 |0 _! j
                                } else {
' y$ `+ `8 S; w$ I( s                                        ix++;; h- E$ s: K8 }; H+ }( }
                                }
) K5 q2 h4 Y# g9 i$ f                        }( A5 m6 A. O3 V; T; V7 o+ m. @
                }
. \) {) N1 R: {* j$ E: ~; b, v' V* `3 [
                if (ixstart < 81000) {5 W7 E2 J$ d5 |/ C; G  t
                        while (ixstart + 1 < 81001) {
3 Q9 x+ V, B& ~4 z. s: S0 R3 E                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
* e7 c6 L7 [; G- ?9 T7 g                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
% _0 m0 x/ t+ W                                }
; }- O: ^+ N4 Y( K  q2 z% @+ b$ Y- N
                                ixstart++;! n! ^! g9 B% `* Q  ^( T5 }1 g3 e
                        }" q$ |4 q  g; H3 [( f  X
                }' U( l4 ], ?& ]
9 k5 M7 J, j) Z" L1 J5 f  e" k# v
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
5 J. Z( g2 w' ]' B8 P# e$ s                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
5 o  ~& T) t0 \/ n& R                        yiDuanShuJu_mean = mtmp;
, L6 _/ {' r& Z+ I* R9 M, X6 ?) j$ p6 d                }
$ G1 {0 j* s. [; ]& A5 I  ^6 G' U5 ^; f) t$ O
                /*  找出极值 */
8 h0 b. ?% }7 p/ R6 s                for (ixstart = 0; ixstart < 81000; ixstart++) {+ n9 z5 y7 \! ^  q
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;9 U! o& M2 ^4 X) |/ Y7 ?2 n
                }
1 n, Y: H: j5 A8 `" r2 k) A/ q7 L2 s7 m6 {
        --------------帖子字数限制------------------1 v4 N1 }. z( S" l
}5 A9 T5 b' e4 q) M  p- k

1 N% p8 N% L5 B5 e
3 k, ~7 y$ ~+ @& m' V  R

本帖子中包含更多资源

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

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-6 04:54 , Processed in 0.043158 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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