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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
7 X9 q' O! [) v/ d; P' a8 F5 }# g+ F; f+ }+ S
各位大神:
# m+ R. \8 F8 B7 k     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
! S8 {/ X# M- O4 h1 D: d      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
8 z, n3 L  t  l5 T: @+ D+ t# O6 B3 T$ i9 f9 A
     , s3 Z4 O! m3 `1 R8 x3 G2 ^
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。# ?0 k, }  n5 \. {" g

4 Z: F# \! {$ b并没有其他线程
2 P. Z6 {! g4 D7 g6 x5 c反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
% T* r% j! L9 c# [9 E& g, y  W也说不定是和堆栈有关系。。。。。。8 T, d! l# s5 y4 J  R. n. i
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
0 R5 r5 `! R8 h8 a% K
* c- L4 I: T& q9 l) A+ |  C! K* q: H+ [0 v+ Y, H' a
" o9 s+ D1 D" N  A/ |
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
0 i+ O6 b9 S) ~. V
) X4 W3 k9 r  X' G  U
/ b; E# {7 o8 R' d" s附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];" H8 D; @7 Q: ]- Y1 J: v
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
. L  ^5 l% W: X2 u# g  K& Y3 F2 t6 K5 Y- ^: g; {5 g
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
6 M$ q% o* Q# G9 e" V- H; E                const double data1000[1000]) {
7 E2 w$ ?# P1 N' V. c* }* q7 R/ x& b: S) z" ], a  V
        int myfuck;
9 N; m8 }  J- O; q) p& y* H# P- D        double yiDuanShuJu_mean;0 Q- e. j7 D& B+ Q( x
        double yiDuanShuJu_LowMean[1000];' h" n$ w/ x, A& v- G) [* q
        int ixstart;
9 Q6 R7 u) \/ n; i8 _5 ^        double dv0[1000];% @. v# |  @& E. Y/ W* W
        comm_AGC pAGC;( {$ M$ G* t. f4 q( i8 i9 M" n6 c
        comm_CarrierSynchronizer pFineFreqCompensator;& z+ m2 ?/ i1 Q" |& Y  }' u" T) o
        dspcodegen_FIRDecimator pRxFilter;9 C9 F0 v3 N* V! O0 O" o
        comm_SymbolSynchronizer pTimingRec;, L2 o/ I7 u' h- B: w' B
        comm_PreambleDetector pPrbDet;, q' z. W9 R0 B9 L
        FrameSynchronizer pFrameSync;
( k+ C7 {" M6 j" g- W( X        QPSKDataDecoder pDataDecod;
" p( ~0 D4 T: c& W        static double usable_left_filtfilt[81000];5 e9 X6 |8 w! I: E
        static double youXiaoShuJu_QuZhiLiu[81000];
; v# C, X: R; l+ H0 [8 y        double mtmp;1 D* Y  @6 F9 I/ i4 g" L( @) l  l
        int ix;
) L4 ^4 O. O! s, t+ `        boolean_T exitg2;
7 n2 v* y; S+ C- o        boolean_T exitg1;5 C1 i0 w" M3 D! m- h& v" I1 Y
        double YiZhenShuJu[800];
( L: ?! Q9 J4 L& |/ s5 G/ S. M. s7 ?# _        double dv1[800];- D0 J: r9 M  b  L) w' Q0 o4 _

2 g& c) m4 V: v3 y* m/ d  k( k; W; `: Q. w8 l# @
        double b_YiZhenShuJu[800];9 Y' ~: h, o4 ?7 j. p
        double I_filtfilt[800];
# `0 E, @) S! ]3 E; @- g& [% N        double Q_filtfilt[800];, k# ~" L6 o0 y
        creal_T b_I_filtfilt[800];, v% S5 p( ]) d+ h+ r2 t+ S$ P
        creal_T b[800];
% a) w( J: G+ X) ?        creal_T RCRxSignal[50];1 v2 v$ z( f7 u) Q- H+ g
        creal_T fineCompSignal[50];. m; A: L- c9 h6 U4 a5 D. k
        double phError[50];# `6 I9 {2 [; O4 ]* L( \( _
        creal_T timingRecSignal_data[28];# [0 l- a  m+ D9 n- ^# A4 l3 v0 ^
        int timingRecSignal_size[1];; V; i: z- q: [  L6 K
        double prbIdx_data[28];
5 w% {  x8 L8 K' ?6 c        int prbIdx_size[1];
' E# x" ]! A# d! `7 u        double dtMt_data[28];, F( X! A- x) P2 h3 i
        int dtMt_size[1];
# |& p( Q% L( D+ ^: n        creal_T symFrame[25];8 `* [! b1 t: k6 `0 J  ]
        boolean_T isFrameValid;
7 z& Q/ ?) P! D7 l- z6 m7 ]8 A. f2 |        double unusedU0[3];8 {+ T8 t& A  M5 m
4 Z* e5 e8 L! U1 e3 e# ]
        //调试过程中的变量
4 e* |7 K; h5 E        int  enough_data;- @) O9 V5 F+ m; f

6 W2 E4 n# \/ P& u2 U        int enoughDataFlag;
1 q# \' V* k- o/ Z1 u        int yiDuanShuJu_mean_int;0 k% B  g' W$ E- c
        int int_sum_dv0;
$ |/ Z* H* t: D        int oo;
/ D8 B7 [1 Z7 f$ N1 n" C        int ii;
; d8 I+ g+ d' F. J) b        myfuck=10;
9 `8 D7 P+ C0 Y4 {% r% h; Q" r! V        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */6 L) p# V- |" u7 ^. T
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
' \; O& J; D2 t1 @3 G* ?; O5 V+ r& y* ?3 Z
        yiDuanShuJu_mean = mean(data1000);* o# H. y* A2 f( d1 B8 j" u
8 B: z- o$ M- f2 ]/ T
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
$ y0 o3 l& ~( L        UARTPutc('A');
7 ^* ~, i9 \/ |  t$ {7 {% n  w        UARTPutNum(yiDuanShuJu_mean_int);' @: g5 U8 Z# D$ m
        UARTPutc('\r');
3 A- N4 P- v" B6 C; ]5 |        UARTPutc('\n');7 ?" e, ?3 |$ Z0 b( L1 F4 V
8 i8 G( c* L. K9 G
        for (ixstart = 0; ixstart < 1000; ixstart++) {
2 ~" i) C  w( W: C. E, U                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
' f& y2 \) M3 b# e, K        }. B9 w5 B, g/ L- n2 e

3 {. f6 q5 K: q/ o        power(yiDuanShuJu_LowMean, dv0);
0 o2 R7 U/ o9 ]* K2 d) Z! Z! }# l/ R9 E% \. H. H  O- I7 P
        int_sum_dv0 = (int) sum(dv0);
8 q9 \+ C8 s/ c* V" v1 Y# m2 t( W; O% L, Z
        UARTPutc('B');/ y* x. ^! y1 j* ~6 M. E" Y
        UARTPutNum(int_sum_dv0);
% p* ~$ a7 T2 q# x( u/ X8 B        UARTPutc('\r');
: H  u8 e: u' J: {8 g6 n        UARTPutc('\n');  h3 A' D: N2 m
$ S7 L* U& Y6 f( M
//        int compareFlag = int_sum_dv0 > 1.0E+8;, Z; G  _% m2 q: H
  g8 X5 j& b' I4 G" U4 \" p% C' [
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
$ r8 C' ~' d; P% N6 d                UARTPutc('C');( I- g  q! Q) Z
                /*  比较信号能量 */* ^2 i0 z) }6 ~& w, d( |* K" k
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */9 I$ |& E: o& x1 L
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;+ W* G+ {* c. N1 J! U1 x0 T5 w
//                for (ixstart = 0; ixstart < 1000; ixstart++) {, z9 u$ Y% X" C/ b9 @6 h. z
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
; ?$ g8 P  w/ N5 g  `6 Z8 u//                                        yiDuanShuJu_LowMean[ixstart];! |" q# \3 V  x" O7 m
//                }
) t; S8 ~$ B$ R1 r//) C2 g9 G0 S- g" S4 C: P8 A
//                youxiao_k++;
" c  t- E+ j# z//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
7 z5 \  r% S$ W* o# H) v//                        /* 感觉要取21个数,即0-20, */
. z3 [4 W+ Q( s. \- w+ I6 `2 o//                        enough_data = 10;//有效是10,无效是09 J+ O' H3 h, a
//                }3 [9 N% a* l4 Z' _  _% R3 ^/ [
        }8 F; D8 {+ k- r1 {. s

3 A; v, p; c7 M1 Z0 Y3 F. v8 i7 Z. C7 t
        enoughDataFlag = 100;
+ }  Z  I, ^  g: ?8 A  J. `        enoughDataFlag = 1000;
, F' [7 b" ?4 x        enoughDataFlag = 0x02;
; u5 R" u. ~6 A, L  p        enoughDataFlag = 200;- B- X- l) N" J1 V# S  S; x
+ T3 N' x% k4 i8 u1 Z9 ?
        int myfuvk1;: r7 B+ `7 G8 A. g' O) j
        myfuvk1 =11;
/ p4 W4 n4 [' x& N' G
. S7 F! O5 L! y8 d( f/ |
- W5 M- z/ s5 ^1 I        enough_data = 0;( Y6 v2 g% _; k' [. H' C, i
5 g" q, q! K" X4 |
//        if(enough_data>50){
' M1 F& |5 ^8 q5 V: o//                enoughDataFlag=0x01;9 M, R. v" g- M" W  H
//        }else if(enough_data<50){
0 {; n1 p( Q( i9 g//                enoughDataFlag=0x00;//0x00还是不行. ~+ q* G7 \! D: K  s
//        }* X2 j" H' l% {* ?$ T

- P: i0 G0 n; T  b4 n
+ L8 X# J) S3 r* M4 m3 A        oo=10;* o4 ?: k: e# w% \2 P$ `5 b
        oo = oo  <  5;
) p; c4 p/ S! ~        if(oo){- s! x0 t; `/ r* r# [
                ii=0;6 L& w( e/ e& O6 j! a! z
        }
# |' |# W: w. x8 _0 N- v$ Z) Z) E        if(oo  <  5){8 s) s* d  @( m9 ]6 D- I
                ii=0;
) B7 G& y: U" N% s        }
+ O3 \$ H8 F4 a, C6 C; y" m3 a8 V' Q        if(oo  >  5){
- X  O, d% e* f0 v6 w                ii=0;
* s" |+ Z9 @( B" Y* h3 r        }, ^: x7 Y- T: y5 Z6 z7 e& t1 b! _9 F
; |, d! Q5 ]) e5 q0 `1 ^
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
8 \1 \- ~3 ]6 D" A: w- S        /*  如果数据足够才执行主程序 */
% d$ f9 j9 j7 H3 x4 ~1 S, Y        oo = oo  <  5;
3 A, s+ ?$ u6 u        enoughDataFlag = enoughDataFlag  <  5;* X1 ]( w" o6 j# L$ l0 h
        if (enoughDataFlag  <  5) {3 c8 p9 K) ]8 H+ h0 }
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0; v' o6 a% Q* N# M
                AGC_AGC(&pAGC);9 E, q% K! X/ E3 d

: s+ M( P5 H4 ~5 B                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
+ V4 ~( C; U$ f% V0 e                FIRDecimator_FIRDecimator(&pRxFilter);
1 L3 b+ ~' T0 I9 v7 Y8 |
2 G) J4 K, @) y+ z# D9 z) Q                /* Downsampling */
& W! J" K6 m5 s! E& P. b                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
) N2 M9 N+ B8 @9 W  I$ }+ F; {5 s7 F$ f- v, a. g
                c_PreambleDetector_PreambleDete(&pPrbDet);
7 H" A  ^2 s" F& ~! s9 Z/ L( y2 B/ B  C, [; B
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */- V( o& d9 E3 v- l% W# U7 c
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
* M% h  ?+ D( r6 ]/ o                /*     %帧数量=100 */
4 }2 @. U* x# }6 K; P/ ]                pFrameSync.isInitialized = 0;
: u# _/ G1 Q% \$ ^+ @/ ~, d# F. _  x
                /*  [EOF] */2 R& S0 B$ {  j2 w3 F" l' L! e
                /* 前导码长度是13 *// |; c8 E; p3 {
                /*    %qpsk */
& K- l1 N3 K: _. i                pDataDecod.isInitialized = 0;
2 X% v/ E% c2 K2 k8 {1 z7 U* e- X. I  J/ x$ k: y* I
                /*  end */
4 }" a! o; t7 c5 a8 |0 \! ~                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
5 k0 }& k1 r& p$ T( M9 {' w; ]! J                /* Convert 3-dB frequency */) {, _6 a9 R& X/ R
                /* Convert 3-dB frequency */0 X: o9 Q- L( V! X9 s" J. H6 @
                filtfilt(save_buffer, usable_left_filtfilt);$ r) k: _( Z& I; b
                for (ixstart = 0; ixstart < 81000; ixstart++) {
' c4 c1 I% S  x; [  I, o8 U  p                        usable_left_filtfilt[ixstart] *= 2.0;& ?4 Q% e# n! k3 t
                }
$ B+ N' P5 E- U" Z* F; g3 T7 j& i- D6 j6 L0 L: Z3 J6 i% i
                /* 注意乘2,处理幅度 */
9 d: @: i( z5 u: y, g                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
, J/ U- O. O5 }/ X' E# z                /*     %% 行列转换 */$ H$ @. r' o( r& y* _% @
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);0 r3 _- m( V: @8 _1 E3 u0 a
                for (ixstart = 0; ixstart < 81000; ixstart++) {9 N/ L, A2 i2 n" I) m
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
% ?" k5 N9 C2 n3 c" `  i; r% _: l$ o1 D                                        - yiDuanShuJu_mean;' w5 M! m  Q, i0 b
                }6 c) m' _' Y+ W0 p

3 ^! X5 |6 }/ ]7 U7 S- k. O2 z                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */" D6 A& S0 @+ k, Z
                ixstart = 1;
+ E* Y% l  q! v6 E9 ^                mtmp = youXiaoShuJu_QuZhiLiu[0];- a6 T- R+ f# W) l' \( @3 S
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, K7 @) A7 @+ V, r. Q* v
                        ix = 2;  I4 I% q! x% }1 e# h, {  b# c- Y
                        exitg2 = false;
& b  G, ^9 Q! J3 Z2 m                        while ((!exitg2) && (ix < 81001)) {
" H* {4 @2 V! w% n. b0 d( C                                ixstart = ix;! Y) \. A# F7 m( E: D0 r  j6 I
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {5 b) e6 p! m/ L  m, s) ?$ \
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
& Y9 D) H. F: W0 R1 V& |                                        exitg2 = true;2 e. t" P) M+ a' B5 T, x7 f
                                } else {
( ?3 M8 H  ^9 P* ?                                        ix++;- Q( a, o& N8 `; u
                                }# m/ }) J" l% n1 n; f6 x# x
                        }
7 I1 O6 Y8 @3 ?. F' {8 Y                }3 F6 t9 S/ k' M1 x6 L5 [

6 @5 @5 N' I+ G1 }( m& C6 @8 ^9 g                if (ixstart < 81000) {1 |" \& G  X( E/ A1 w
                        while (ixstart + 1 < 81001) {
: I1 G4 |# @4 U/ g0 m/ v1 `                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
  {" a3 [$ F8 S# H2 b: n& g                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];, f5 d! p, G8 Q% \/ |
                                }
9 |8 ?4 K. @5 b" s  A1 J) d( V! U2 l, H7 {5 F$ \3 Z0 o
                                ixstart++;2 X/ q9 V8 D( J: K8 z0 K/ x
                        }
& E; G! x# B9 d6 t9 n. i+ {                }! I8 d6 U3 t; h# H# @7 A8 e# s: c
; x5 J+ Z) b* U, E7 Y9 t; I+ b% h2 i
                ixstart = 1;3 D% u) Q5 n7 q$ I4 L& T0 T& p
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];: _) i" A( V4 D$ ]4 g
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
" j7 b3 e0 `9 z$ h' |9 p& P& O+ g( e; c                        ix = 2;$ z0 U7 y! [) I7 \1 R5 s3 n
                        exitg1 = false;
0 b; A  n/ {- d5 D3 Z; S1 ]/ M5 o                        while ((!exitg1) && (ix < 81001)) {6 N0 Y% }8 @" V4 f" ~, T: `$ G
                                ixstart = ix;$ D& o7 O: S2 J1 [6 h
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
/ p- H9 g' Q* j  |) d                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];4 l: ^1 E. g0 }) Q1 d
                                        exitg1 = true;3 P: L% v; k* d5 _8 W
                                } else {
- _0 b0 G* b  X                                        ix++;
9 G; i% h  O$ j! ~; h3 @                                }
3 I) |" r: c: ?( V* M                        }
" V7 k7 {; R8 {) p: Y$ \& I! J                }
' Z5 z8 H' h9 f6 _+ n
+ [  y: Z# X( P) G/ x$ A7 P                if (ixstart < 81000) {( e1 K1 j. |; O+ S( V4 Q+ j
                        while (ixstart + 1 < 81001) {
4 Q) J' S4 y: }+ h4 ~                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
4 X, `  S" c% a                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];. y# y+ }7 W  e
                                }6 s# O8 O( v  ]) O2 p
$ g: [7 x9 y2 W# g+ A
                                ixstart++;, I# ]) [4 m* g; l4 r
                        }. B4 t' m' h6 z& V( V1 p; ~
                }
: p  I3 \8 S# A6 K+ i1 u8 O& ]* [5 q" R" [9 N
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);$ W0 B" ?/ C" I# C9 q
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {1 t, p! z; r( e0 d1 w" E
                        yiDuanShuJu_mean = mtmp;! _8 f. @  ~2 Z# j
                }+ y1 U; s! Y" k: z8 J* H; E

  G. U1 k; i! [+ [' p                /*  找出极值 */
# L! v/ V& l6 v! |" W+ L7 ?                for (ixstart = 0; ixstart < 81000; ixstart++) {0 [* k# k! W, {
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
" z' T* h! X0 Q- e                }2 ~1 @2 d: k# g9 E+ d% g

  s+ Q2 l: l8 o$ ~6 L3 q0 o        --------------帖子字数限制------------------
+ N$ S- h: W* e7 x' N9 O}
2 [* g% K: H& e  m) M0 {! N$ q/ c! j6 g! [
1 F- J& z! P: O6 x4 _

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-1 14:57 , Processed in 0.042723 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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