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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 : }& J2 P. `; s  K4 g
' _. K. K( b- \7 V
各位大神:4 U; M9 i7 A9 ]% S: @, x, t
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
6 o" B, j8 e6 I1 }: J7 Q& t      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
2 ]& r. P8 K# r0 W
/ k! m# ~! i0 R# Z     3 Z; c0 i, r4 u% B4 u3 m6 V
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。2 [/ s/ T1 r3 s0 |& j) ]1 s  }

$ z! o5 S! }2 \并没有其他线程/ x3 m+ ]! W1 `, c
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
6 s  j! V3 ?# i# z$ K也说不定是和堆栈有关系。。。。。。
0 V: [$ A$ o% {& z请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....% H8 E* {! o/ X; i( I
/ g1 C; g. W% \; x" G
/ J$ ?6 J2 ~) O/ f8 z

& n6 ?: {' Q% S4 @! [9 u我也很绝望啊,希望大神能帮帮忙,感激不尽,!$ _+ H, }( ?+ V  a2 f. j' K, ~  k
4 o* O7 t$ M, V( d! y# z- O
- t* ^& d& f; x& d, c
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
( G- ^: N5 G! v        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。0 V/ {- \* b! {) L; B1 p1 D9 O

' t, ?* q& ~0 J2 U# x$ Uboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(1 G9 B  |# Y2 J! W- [' u: ?: {
                const double data1000[1000]) {
$ D: ^$ u' d5 m  f$ S& f6 R( K+ Y2 ?  T. p3 |6 R, `
        int myfuck;5 a6 d  E, ?7 S' U
        double yiDuanShuJu_mean;6 `# x! {& A( c) F+ E
        double yiDuanShuJu_LowMean[1000];: h# E) v. D5 ], h, N; \6 s5 f
        int ixstart;+ I: ?) t0 P+ m
        double dv0[1000];
$ c) K' @* p& S5 [  |        comm_AGC pAGC;9 _% l' ?5 c! t( ~* j( D2 ?
        comm_CarrierSynchronizer pFineFreqCompensator;" X- S$ Z5 V+ v# e" r. t
        dspcodegen_FIRDecimator pRxFilter;$ G0 x# J. b3 a9 K9 H9 @
        comm_SymbolSynchronizer pTimingRec;
% ^$ |+ J6 X! y/ F        comm_PreambleDetector pPrbDet;
' Q; w/ h) i$ L* e7 m; e1 V) X        FrameSynchronizer pFrameSync;, n, N! J$ ?9 [% d1 r  T
        QPSKDataDecoder pDataDecod;, t9 e: M# @+ g6 h2 P
        static double usable_left_filtfilt[81000];4 o7 p' d2 ^0 K2 D# L4 L2 V2 c0 S
        static double youXiaoShuJu_QuZhiLiu[81000];
& |; [6 `$ E  s3 ^        double mtmp;
. |( O4 |7 v1 L! g& [        int ix;. b2 r  I2 q( n  A* ^$ Y
        boolean_T exitg2;/ k# c6 k- G, ?9 g# q+ F& T' d
        boolean_T exitg1;. i" \3 ?* b, T
        double YiZhenShuJu[800];) b$ z: B( C* o. q- S4 z/ `- K
        double dv1[800];
* J7 m" t% ?$ v$ C7 r9 d9 w8 i
# _1 y9 _4 z/ F4 ~. _6 z+ t* X4 W% J# p7 i. m+ w6 N
        double b_YiZhenShuJu[800];" r4 Z( p2 l# h8 M8 L: Y7 T
        double I_filtfilt[800];
2 C% w4 P; t8 f* u# e! a        double Q_filtfilt[800];1 Y4 R) w. D6 K# [6 w
        creal_T b_I_filtfilt[800];
& Y+ m: O9 V9 [7 W3 \        creal_T b[800];. @. x6 i. V$ p" T' W+ ^6 Q
        creal_T RCRxSignal[50];
& H5 Y2 d% w5 ?4 H' X        creal_T fineCompSignal[50];  L$ u5 K. ]' A& \' O
        double phError[50];
' j9 X' n& r* }7 n8 C" h+ B6 G6 W1 H        creal_T timingRecSignal_data[28];
1 P& m' _5 U+ i9 C" f) @; G0 T; ?        int timingRecSignal_size[1];
& C. k, [8 Q4 h& C! K! q- K- g        double prbIdx_data[28];  h1 h3 X6 n# [3 X2 z, O8 L4 ]
        int prbIdx_size[1];
# M& I! x* k  N$ L+ J$ Z        double dtMt_data[28];3 ]# X+ Z6 M$ R$ d: B6 W3 W' v
        int dtMt_size[1];
& c. |0 H) U. j- ]7 z0 |        creal_T symFrame[25];, O$ |; h6 t# r2 J8 \
        boolean_T isFrameValid;+ j9 I* i! y% A" s  B
        double unusedU0[3];5 L& u  ?5 K8 i, O" j

4 t0 z9 H# w6 b: D' N' T7 I* E        //调试过程中的变量
* S3 H) O  l% d1 A+ a& p        int  enough_data;
( y9 W6 S, l2 p* g0 _" a5 X- H1 y0 j2 V# U3 R# Z9 T1 a$ `0 C" e) O# w
        int enoughDataFlag;
) {4 j6 U8 \% r6 U: x) O& q0 l+ [  }" S        int yiDuanShuJu_mean_int;
! |6 |' I- h/ w& j* y2 \% C  O8 q        int int_sum_dv0;2 g( c- W1 a5 \" A2 s: O
        int oo;
! }- z; Q3 j& p1 F9 c& x        int ii;9 [+ \- l3 d& h& b
        myfuck=10;/ r7 Y3 ^- G! c* R
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */+ {4 j& N0 j7 c
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
6 t1 y# v7 T1 u) d, {2 A7 l2 r! g3 p4 G; M4 @
        yiDuanShuJu_mean = mean(data1000);0 r3 P" k  U* x) z9 [
7 [8 z; v7 S: B+ r
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;8 N, z  C' }8 x( l# B! h
        UARTPutc('A');
7 ]1 ]' H9 y6 J- s4 S$ {8 o, O        UARTPutNum(yiDuanShuJu_mean_int);* K* _1 ]% x  M+ ^8 S9 j
        UARTPutc('\r');1 E; r2 Q2 L" f8 R
        UARTPutc('\n');
/ D! d6 n. B  ?( N* k0 E" Y( c) _- X6 o
        for (ixstart = 0; ixstart < 1000; ixstart++) {
1 L. g. A/ M) r                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
* ]2 w3 k# d2 \" V- @+ K. H. h        }' b! l* _' x, Y8 T# ]3 |
# m( V4 l$ n3 F+ X9 s: l  Z+ M
        power(yiDuanShuJu_LowMean, dv0);, O6 R) X/ h7 `- o0 A
6 S* ?3 `0 j% Z* R- M0 K
        int_sum_dv0 = (int) sum(dv0);
( v; E2 \' i) x4 R0 O. i1 q: v
$ F( z4 ^5 L  E* B3 g0 g( Q+ p        UARTPutc('B');+ ^) H* r* o' o6 h: t0 Z# Y+ G
        UARTPutNum(int_sum_dv0);
- f  C6 ?! {/ S: P        UARTPutc('\r');
# R& {- N, S! O: {, k5 m3 P1 l        UARTPutc('\n');
1 A  p; Z$ s& x- s1 z$ Y$ v1 _9 Q' W% f) ]+ g, e- [
//        int compareFlag = int_sum_dv0 > 1.0E+8;
" G0 ]9 S/ w8 g7 o1 c% k, Q( r
4 @+ I/ l7 x# x- ~5 ~% Z        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
6 W- D8 D3 T9 H9 e% M                UARTPutc('C');
1 U, n3 a4 r- R/ S5 h' w2 [                /*  比较信号能量 */
0 P9 H$ q- X/ X  w                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
+ @, L/ c4 F+ d0 G# ~- |: `//                yiDuanShuJu_mean = 1000.0 * youxiao_k;2 H8 }$ X/ Z* V
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
! R" v2 _5 I/ n* o; U, X% A//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =# B+ Y2 q) ^9 w7 q- U8 Y
//                                        yiDuanShuJu_LowMean[ixstart];: @; r6 D  C" O% I$ ~' o
//                }
) z" B1 ^. z" @& r( P  Z# i//
3 i1 S' ^) z6 Z- S' c//                youxiao_k++;" g+ N0 t: C2 O0 }
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
/ t( o+ R/ J8 U$ f, z; S4 [0 {# n0 L//                        /* 感觉要取21个数,即0-20, */2 l  m( [- _8 p% Z0 W2 x
//                        enough_data = 10;//有效是10,无效是0
5 A* \) y8 K! x  ^& F6 b" j4 l//                }7 H: I3 v) i& v' V* u6 o/ }
        }
  y3 G* x7 N6 Q; K' V- _% w7 F7 r/ A! g, k

3 W' ?( }- A1 z, y$ a        enoughDataFlag = 100;
% ^: }# B& G& \9 ]/ C/ X5 v+ Y        enoughDataFlag = 1000;
) S- G$ R, S' m( R% r) ]        enoughDataFlag = 0x02;
; V1 w, v/ {; i; ~" c& S  g        enoughDataFlag = 200;
; S9 l% \3 p" p% e, o, F9 Q  j5 s- @" R! W. p
        int myfuvk1;
( C! G5 p* ^. _$ c0 s, ]9 n% G        myfuvk1 =11;
! ^% b$ X) x5 m
0 o( m9 ^$ r) h& b# i1 B3 t4 u$ R4 R$ y2 I
        enough_data = 0;- t- T- g: r: k" Z7 H2 X2 c

& W2 \8 P3 W" w( {9 P* |//        if(enough_data>50){
0 @) y8 ^( p5 l//                enoughDataFlag=0x01;6 P; S7 X& Q* T9 r8 {& q0 x
//        }else if(enough_data<50){
3 u* }7 ^% v+ n) q//                enoughDataFlag=0x00;//0x00还是不行- @8 W0 V, y# r
//        }
& e4 x" X; V' w0 t1 w# y- P( t1 w8 U2 S8 Q0 u: e" K
6 c4 }; r! S" O
        oo=10;
+ N& |; {# Z) X        oo = oo  <  5;
, ^4 a. ^* s0 b9 H1 ~9 N+ B" l        if(oo){
5 ~1 C) V! S3 w! d3 P' J                ii=0;
5 E5 q/ Y+ Z  ~6 r# m+ |7 o  P        }- [& m$ h8 H% b2 r" y8 K
        if(oo  <  5){
: c% P0 w" R9 H                ii=0;
9 f# k+ `9 x5 i. B$ T        }
" P( z% I  F  t6 |- d2 x# L; p        if(oo  >  5){
5 M' I/ F$ F( n7 x2 A                ii=0;' Y0 d4 V  C: I9 R; ~7 |8 T
        }
* n3 J5 z0 E5 B0 M( W9 |& S+ {
6 A7 {# R. R3 x+ W* p' s7 }7 r5 _        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */! U) s9 S* j/ I' y2 k3 q
        /*  如果数据足够才执行主程序 */
+ e) _( p; b) k+ v0 K        oo = oo  <  5;
; F3 x  S9 {4 |$ O        enoughDataFlag = enoughDataFlag  <  5;1 D$ F; j. A% O& q! A6 M6 h# ~" T
        if (enoughDataFlag  <  5) {# O* W" e+ g: x; G
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是06 ~" _* ?8 t; L, w4 @0 g5 d* w
                AGC_AGC(&pAGC);
: k* y5 ~+ N$ j/ M
# A% R. Y# `& \                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);, o* G* D* X' T. x1 ~
                FIRDecimator_FIRDecimator(&pRxFilter);
5 B* L7 n1 ]# ?
! B4 R7 k! D! Z4 X& |. e9 c                /* Downsampling */
7 h+ ~) [! D" C7 n- N& S8 [                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
0 x  c: ]" d* [/ n8 \0 L) ^' }# O: T) ^4 ]! z
                c_PreambleDetector_PreambleDete(&pPrbDet);
- i( k4 }5 R# u# z3 s
2 }6 `5 N3 ?0 l* K# F) s: _                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
6 Q8 o: m  S* D7 ^' W                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
& K) |, S) C0 h                /*     %帧数量=100 */+ Y: D4 I& {; Z
                pFrameSync.isInitialized = 0;* y" X3 S; s9 T9 o7 Q3 t
# M0 O3 W) k! `3 O
                /*  [EOF] */3 N" w" N1 H2 Z5 G
                /* 前导码长度是13 */
9 ?2 O! X, n& x                /*    %qpsk */1 w1 _6 B. K9 Y" I, X2 Z
                pDataDecod.isInitialized = 0;8 k% P1 |! `; e2 n
" U5 w- B% X4 @
                /*  end */
! Q* J  N* u* p' ]3 J0 n9 C                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */- E+ b* X8 o% K
                /* Convert 3-dB frequency */( Y- c- W6 u; L' l: h/ O. A
                /* Convert 3-dB frequency */
: l9 t$ C3 s6 e7 y, c' N                filtfilt(save_buffer, usable_left_filtfilt);# T6 h& `) M) j$ t& ?5 X- C
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# N: o$ h  L7 E- z3 E; Q, |" }                        usable_left_filtfilt[ixstart] *= 2.0;" c: |; o2 m4 O
                }# \7 y+ u; E0 X6 A: L
" h+ y8 j3 R0 C' }
                /* 注意乘2,处理幅度 */" p3 B1 Y1 U6 O/ K3 _: {) H
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
( M+ Q9 c/ @/ j0 k  f5 w# i& I                /*     %% 行列转换 */
9 ^% l( h+ d% i9 Z* d                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
3 {1 a3 _0 j5 @6 g                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 ]' G! h# C8 P& L7 ~" Z' m7 [                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]( r5 E6 K( A0 A$ [- n6 o
                                        - yiDuanShuJu_mean;3 o$ W+ s# n1 J% E5 c
                }3 K9 K2 v+ ?, g8 j3 P

! B! {' b$ @# V+ ^% Z8 u! e! t                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */% l) x0 {0 t+ B! G- T# H, L  N( _
                ixstart = 1;
4 G- l! D. Z2 Q+ z8 Q9 U                mtmp = youXiaoShuJu_QuZhiLiu[0];
' X6 C$ X# g! N: H                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {7 }* E$ h! o7 F4 {  j1 @$ Z1 u
                        ix = 2;. N' N) T, {6 V- b
                        exitg2 = false;
1 ^, ~8 `; I8 y6 k  c! y* G                        while ((!exitg2) && (ix < 81001)) {
% C3 W0 p6 M5 s, v+ Y4 s0 f                                ixstart = ix;) T% W' d/ t) s  k$ C" J
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {- n% r; Q  y+ ^6 \+ ~, u9 j1 @
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];/ G9 m0 ~- A2 L  X9 R1 O
                                        exitg2 = true;
) [! y$ X7 W# r1 ]4 n                                } else {
. _' x4 k. F% o& W9 h                                        ix++;' i, e+ t3 \  Q  o
                                }0 A0 z7 y& A6 v% X9 Y) J
                        }
1 i4 ?9 ^; Q! Q8 G                }5 z+ N* a0 r* `
, n1 v* j9 L! d
                if (ixstart < 81000) {. K' ]3 P( x/ X3 o" s$ K+ j
                        while (ixstart + 1 < 81001) {$ p# k* s- p! g, N. O" f2 f, F! M
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
/ r/ [, [% }9 G* X# Y  d' Y8 C                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];! R2 G: ~7 c( I% r, i+ O- Q+ V$ K
                                }
! L( B8 X1 O4 ?, F  @& J9 Z9 Q6 c6 y4 v% `1 r
                                ixstart++;' U! |3 j; [' X8 A( \
                        }$ w$ Q3 \: P7 a  U
                }
1 R! U, \$ Z5 ]4 L+ e
' d; P# V. s$ b! T1 U9 W                ixstart = 1;
# H& F6 t- ], {. s7 T$ s                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
7 I7 o5 L# S( r7 \3 g                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; C: N6 k8 J  F) C- R
                        ix = 2;0 i/ R6 o% e4 O+ m- r: O
                        exitg1 = false;
: N# n- Q. x  z6 |                        while ((!exitg1) && (ix < 81001)) {" C1 p4 x* u$ d3 C1 e$ u/ k
                                ixstart = ix;: F9 S( }- h# [! v
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& R& F. M% N# t( S/ M                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];7 \: k, G( B+ j
                                        exitg1 = true;) g$ H4 U/ I' _) c% e) f
                                } else {. E. F2 J& }0 E
                                        ix++;2 p! T  @* t; |, Z* g( |: _: |
                                }
' x& J" P, T! g0 _( s9 e4 V                        }/ G% r* f- Y! e3 b! b: _3 I
                }1 t9 M& |& h9 Y, \0 h
2 r9 {& L" n: j6 |* ]! T
                if (ixstart < 81000) {
) v% v4 @: N5 `                        while (ixstart + 1 < 81001) {8 V# a9 [" N( @7 _' R3 G$ Y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {5 C0 J1 K/ T$ v3 n; b
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];: R2 V& Z! p$ l$ {* D5 N
                                }
1 C* ~0 Q) _4 ~. k7 g4 J+ C/ Y/ @. w% j6 V, s3 Z' I" J
                                ixstart++;% @4 T. r" k+ R% f( v
                        }% C; |6 i3 }2 X5 o! ?
                }, L  d2 X' x7 q% d

" P" V: u' \) v  g                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
" H& {) t3 x; ~: o                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {1 u# @! d2 ~% y8 i% X" v+ y
                        yiDuanShuJu_mean = mtmp;/ `% F' Z3 R9 v
                }1 H9 v" M, x0 u2 m

, a5 n, h2 T& p: B1 v# ]! u                /*  找出极值 */  D' B2 I$ R2 ?2 Q$ y2 Q' H6 B
                for (ixstart = 0; ixstart < 81000; ixstart++) {2 H" @0 `; C- x( F
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;0 M1 }% F* H* y; p
                }
0 v( i/ L9 a0 W2 m0 ^- ?4 q9 X0 q: p6 Z
        --------------帖子字数限制------------------
% z) M% H; m- f, J" @# X+ ^; o. i}: }2 n6 n. \, D9 Z( ^3 `% c3 M7 z

! n% _& Q# a1 I, B7 d3 s; Q8 N: b, y. J, Y* t4 @3 |  w  D# o

本帖子中包含更多资源

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

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-16 04:28 , Processed in 0.046369 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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