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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 5 [# m5 d/ L( P% b

' q4 x' m% Z8 m# @% o各位大神:- g. A4 D  r9 E, C3 p  @
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
% o* l! M2 S  I* N5 O      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:& F/ W. u# y: V- T! ]5 U

( ~) F# d8 ?6 I( ~& t; E+ V2 b     " S4 N9 T+ `4 n4 ?! S* s4 @
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。. I* ~% N' g! ~$ ^7 _' Z+ P

* |' B4 \8 Z2 K并没有其他线程; A) z: y6 m( {+ Q8 q& r# o
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。& A( @  T+ f& p6 C/ J3 u
也说不定是和堆栈有关系。。。。。。
: d5 ?3 ^  R& ]8 U4 B请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..... c  ^2 G9 F. V

7 [+ `0 A% H" j1 s. f0 y
# N- i7 R4 U1 e3 m# V% ~, e
7 E: ^8 S% s8 {0 h我也很绝望啊,希望大神能帮帮忙,感激不尽,!) @: j. C$ I5 h/ G  s- b
3 u8 P' e6 S5 }

, _8 [1 b4 [' h0 R; T- f, X附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
. U: D1 I* s3 z        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。" j5 M+ T$ z7 t7 N2 F
. j" s. ^# e8 B8 |( s( P7 }/ I
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(; u- A0 J; w2 ?: _0 s0 [9 [- V, r' O
                const double data1000[1000]) {1 K' B- V( L, F" F1 g
3 k- m8 Q1 l4 t: \7 s$ o. y0 t
        int myfuck;
+ M/ [9 W; h: C: F        double yiDuanShuJu_mean;9 d6 N6 ~9 O; }7 \6 T5 Z
        double yiDuanShuJu_LowMean[1000];
) o1 \& P! ^  a1 F, ]; a3 i        int ixstart;
4 t5 Y/ k" X' E5 x1 _  U        double dv0[1000];
$ p0 L' m8 k7 X* m8 z: Q        comm_AGC pAGC;
2 j; G* v" V+ s: F& k( D* I        comm_CarrierSynchronizer pFineFreqCompensator;2 j0 j' F! r; u7 S$ A& [: t
        dspcodegen_FIRDecimator pRxFilter;* Z% F/ d" R7 U2 v& ]4 C
        comm_SymbolSynchronizer pTimingRec;4 H# ?0 t( l6 U% D/ D
        comm_PreambleDetector pPrbDet;
8 e2 h2 X$ F0 G, ^        FrameSynchronizer pFrameSync;
8 {( M* r5 L4 [$ b        QPSKDataDecoder pDataDecod;
- ^$ u+ Z2 \5 C: q        static double usable_left_filtfilt[81000];4 F1 Z: F% }4 W$ u2 ~
        static double youXiaoShuJu_QuZhiLiu[81000];
4 w  r  }1 J* W/ H2 x        double mtmp;2 M, K- y, U# V
        int ix;4 D6 p2 o9 i/ b- {$ G2 W
        boolean_T exitg2;, s. V& d  l% K. W& i. }
        boolean_T exitg1;
% A* H# C! ^  g        double YiZhenShuJu[800];2 h/ r9 g9 T, F
        double dv1[800];
. e8 V5 |9 M) @2 X3 X
1 ]: i8 ], Q( ?+ K" W0 @$ A
6 j  Q6 B' c2 d* \        double b_YiZhenShuJu[800];
$ y( H% b0 i* _' [: D& `        double I_filtfilt[800];( i; n/ D( q8 r6 @$ d; w- E7 t
        double Q_filtfilt[800];  d- l8 Q4 K2 [" a, C3 X0 `/ z: G2 }
        creal_T b_I_filtfilt[800];
+ H; B' ~; ]$ O$ W9 v        creal_T b[800];( _4 I4 c! \6 y! Y
        creal_T RCRxSignal[50];4 ?& i& R3 H; K4 J+ [$ u2 s$ ~
        creal_T fineCompSignal[50];
2 T6 v' {7 ]2 q9 e9 [        double phError[50];: s. f* t" ]4 O! ]8 U0 N
        creal_T timingRecSignal_data[28];+ s. [- s$ r: u. ]/ R8 I
        int timingRecSignal_size[1];
5 c; r+ U; g5 f- C) S# m        double prbIdx_data[28];
; m- f( d: ]% X. w0 k( d        int prbIdx_size[1];5 T/ q3 x. t7 Y- t* ^: u
        double dtMt_data[28];5 v( Y: ]6 ~2 ^# W- Y
        int dtMt_size[1];
+ V: Z) I& V7 B0 [( s  h5 C0 w8 \        creal_T symFrame[25];9 E) x, |7 P; X, ?3 Z9 Q! _) |
        boolean_T isFrameValid;
7 ?. F/ r0 o  T! ?        double unusedU0[3];
% K# ^9 a6 g2 B! x  ~/ H1 M
/ `* Z! y" F( V' r( @        //调试过程中的变量
  v2 w# d9 ~! k  Z        int  enough_data;
2 u1 \/ A2 r1 g$ w7 c
6 S: _6 v+ B* O! A  ^        int enoughDataFlag;
* f! j& d; t8 N4 H5 c% a, a; J, ]        int yiDuanShuJu_mean_int;
  X: t) \0 N8 t5 @* D& g        int int_sum_dv0;
+ O2 W- F+ c" C        int oo;
# }% M5 S  @* m; M1 `9 i1 U        int ii;8 ]& C5 P) N) F8 q( {) H7 z
        myfuck=10;1 G( F4 e  P5 r- c0 S
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
, K$ f+ E7 Z9 {! d8 `% a        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
9 Q/ J- ]/ F: O7 C( ?* ]4 ^
; w- L! X3 o/ L        yiDuanShuJu_mean = mean(data1000);! g' i+ @1 a& |7 S' a6 Z, t1 C" C
+ c9 D! R: v. G
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
- H5 d4 [% x! L& @5 s        UARTPutc('A');
8 i  I5 I8 W- x' M! K, w7 F- y        UARTPutNum(yiDuanShuJu_mean_int);
- o6 ]: Q/ P6 q  @$ l$ r        UARTPutc('\r');
; F$ z6 n$ R& `! |, M% }! J        UARTPutc('\n');( t. q) X. `) O0 m8 v  a& O; R
$ L: K7 X3 c, `0 x* D
        for (ixstart = 0; ixstart < 1000; ixstart++) {) A  `5 Z4 M1 T: x1 I( k
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
+ s. N  b: |1 [# h# J3 a        }, }2 N: e  z: r1 S( j$ b/ z9 M. C

) Q8 p' R' l) \2 E; z: h) `        power(yiDuanShuJu_LowMean, dv0);% n% C9 g# g2 [8 e9 K
2 N+ R& R& e) A( G$ B
        int_sum_dv0 = (int) sum(dv0);
& G" u# k2 ^+ X" k2 U* ~
; t3 ]2 ^2 \3 G+ u4 F        UARTPutc('B');5 H8 y  h4 V0 y
        UARTPutNum(int_sum_dv0);0 p& ^% X% y1 J0 Q8 s6 F% S. `
        UARTPutc('\r');% `8 Z6 q: T. K% m
        UARTPutc('\n');( G- y8 c2 {1 C& z& G

, U6 X5 V! C$ Q0 v& }1 }//        int compareFlag = int_sum_dv0 > 1.0E+8;& q! z2 c9 \4 U7 {

" m7 ?. [: ?, W5 L3 O# m+ o$ |        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
7 |) R% d; b* o9 W                UARTPutc('C');% D$ }4 E, E- T+ W
                /*  比较信号能量 */
) X0 q0 V, F* R8 g& |  L/ i9 S- b                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */6 e8 B/ {# d8 O1 `: J* s
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;, j& t3 A) N6 P% }' U$ B) ]
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
1 H1 R8 s3 x% J; T0 R* t6 M//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
2 @/ n8 n: W4 e. G  b7 v//                                        yiDuanShuJu_LowMean[ixstart];. L# F  M' \. H1 [: y" @# a
//                }8 z+ {: h/ _( `! X. e
//0 i9 a# r0 a# _* _% h1 W
//                youxiao_k++;
1 d( j+ Z0 g: W) r//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
. x# m/ T2 R* c& D- E//                        /* 感觉要取21个数,即0-20, */# {3 \' n+ K2 y) A. s6 ^
//                        enough_data = 10;//有效是10,无效是0% A7 L7 r% m9 q) d
//                }
! [+ g' a. K7 I5 f. l: X4 f        }
9 N% d4 J% A: V+ \3 C
) B6 ^  r6 `; X& i
4 W; K! i* m9 {        enoughDataFlag = 100;5 O0 E- z7 f2 b6 U; i
        enoughDataFlag = 1000;
/ B5 T5 L& ?/ P% [        enoughDataFlag = 0x02;
! J  [4 C  c* n& I" ^        enoughDataFlag = 200;
- q: G; t/ X" R' s: F
' Z* U) [. l6 |- G6 @        int myfuvk1;
' `  D+ N3 A$ V: n7 F/ `# M7 N; P        myfuvk1 =11;
  W  ?, G7 W# Y; H2 |
2 \! }0 K7 T$ o" N% V8 G3 u
2 t7 y# W  T' R3 n        enough_data = 0;
, n1 K% u( r# ?8 B
& D& _* d, P8 h; q0 \//        if(enough_data>50){
) r9 |$ Y6 S6 @# ^//                enoughDataFlag=0x01;- k0 B/ C' t4 Q* u/ w3 z9 a* e
//        }else if(enough_data<50){
& y9 J1 l; x+ J$ A* ^//                enoughDataFlag=0x00;//0x00还是不行+ u) ^" u( I' _
//        }; K) c0 g# E% M4 ^
5 m1 L6 b' Q3 h% B
4 }7 m* D' i( Y: H- A3 e) A; {' ^
        oo=10;
* ]# e8 I9 E  j) d" S& _2 n        oo = oo  <  5;
6 K. c4 ?  T$ A% s) o8 Z6 F: ^. P5 D        if(oo){
. j7 y/ `- y' o5 F: Q0 Z                ii=0;
8 o* g5 S9 {4 }& i. _        }2 b  Z9 W$ E) c3 T) h7 H
        if(oo  <  5){) U; i) e& x' c  ^/ M! C; P9 `
                ii=0;
; M; |/ F2 L  l( P. d        }
( f' O- o( P' a        if(oo  >  5){
) O8 c1 h" K% o2 O                ii=0;8 t* D, C  x" K9 ^+ A  n* U7 \
        }% Q5 P( C  d: {2 d3 Z8 w
9 F( ~# L2 Z& z
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
" R3 {$ Y; U: d% j' l        /*  如果数据足够才执行主程序 */
* v' d5 ]5 r; p! Z9 R        oo = oo  <  5;
, |5 b; f5 X) e" j        enoughDataFlag = enoughDataFlag  <  5;3 a) c' k& B* p: D+ ^+ i3 F# r5 S& Q
        if (enoughDataFlag  <  5) {. B: ~/ Y/ j2 k/ q1 Q  X
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
  l, u2 K/ y: b$ V% W( w3 L! @& w+ K                AGC_AGC(&pAGC);
- s  e9 I  m+ [8 d6 ^- G( u- {" t) }3 [
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);1 Z) W% c& y  a- h
                FIRDecimator_FIRDecimator(&pRxFilter);
% C( @: D  d; |! c5 G  ^5 b1 q! O# N- f7 [: a  z& w0 U2 v
                /* Downsampling */7 i, ~' w! E' h7 C: Y# B6 C" a5 y
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
0 W1 U, n3 Y7 S; S8 ]: ?7 q; J  @( D4 C! M4 J
                c_PreambleDetector_PreambleDete(&pPrbDet);( _/ h! i" G$ \; G5 p, c5 C
# o' O7 k3 F7 l: B3 K# y
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */2 K$ I" G- X5 ?" J9 _+ w% l
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */* N6 E9 g) E  k) F
                /*     %帧数量=100 */$ f* H8 s% ^* v' u& o4 `
                pFrameSync.isInitialized = 0;% ~% F, T# X; I' f5 C; P
5 ]% S! w; n( G6 M8 m8 ]
                /*  [EOF] */
( [3 S3 N2 q6 v9 K2 G: J! O, ]. k                /* 前导码长度是13 */
( m$ j3 R2 Q- q' R% O5 N8 w                /*    %qpsk */0 `8 D0 p& d$ L
                pDataDecod.isInitialized = 0;  U$ P6 {6 e4 d, l) v7 m

* j# c0 a/ J3 V7 L7 J: v' q& F                /*  end */
9 s# R% C# g/ h  ~# {- y1 J: a1 [                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */# t7 c! a) m; n
                /* Convert 3-dB frequency */
. g+ g# V8 F  n) d+ [/ F                /* Convert 3-dB frequency */0 z, J5 g) D  C
                filtfilt(save_buffer, usable_left_filtfilt);/ r' `2 y1 y, _; }/ s+ d6 R
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 |, [. G5 [! x- A+ H) Y5 I                        usable_left_filtfilt[ixstart] *= 2.0;
0 W, X. E1 g( Q% |# z1 Q# o                }) G4 }0 b& K- J8 Q

$ n3 Y) }4 p; Y/ G                /* 注意乘2,处理幅度 */' T* L% t. \  K
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
" P+ l8 [; m. z2 z2 \1 a                /*     %% 行列转换 */
: t* n# T  D0 T7 H8 z# o* `" h2 y+ {3 H                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
7 F( G! Q4 G; S& N! Z- G                for (ixstart = 0; ixstart < 81000; ixstart++) {
: s1 b( N+ @% c( D& x$ N  S# j! T: J                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]; `# M9 f+ K, m$ N! E
                                        - yiDuanShuJu_mean;, [1 R2 i9 D  l) E3 O
                }
4 M' U2 _- z& J8 G, Z. S" g3 p  w- R0 `* ^4 H
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
7 ^' h$ B9 @9 b9 @( C) a                ixstart = 1;
2 j9 [8 e; |% b. K                mtmp = youXiaoShuJu_QuZhiLiu[0];
1 t/ o7 F/ C1 o                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. a" S5 y/ [# i# ^
                        ix = 2;7 \& f, j* w. a; c
                        exitg2 = false;
# d/ m! ]+ A5 I+ `! X4 w. W; G                        while ((!exitg2) && (ix < 81001)) {
, ~7 ^3 [# ^8 h$ u0 e                                ixstart = ix;+ @4 b1 U' W0 e9 k
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
5 Y) O) A& U* [3 h1 A                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];1 ?' x$ V* F9 |* h/ _4 i) i% k
                                        exitg2 = true;
/ e: |) \6 n( L* P( o/ @                                } else {
# e5 n  l! L6 b# Y+ }                                        ix++;" \& \# U1 J# Y0 G% F, O2 m: `
                                }: y. L% a+ Z- y4 x  ^4 L, Q
                        }! a- m* j# u& r# I1 |  }2 `2 R0 K" {
                }; J0 x+ \3 Q2 Q1 |

; Q" n$ f" Q! k                if (ixstart < 81000) {9 f4 n6 j0 w, w  p: g
                        while (ixstart + 1 < 81001) {
' ]& @$ C$ P- m                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
' n" x: P& R# [# L- D! @3 ^: L6 }                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
; }- t. P: J5 e                                }
  W5 _- [. G& [5 o, x" }2 _* }. h; c
                                ixstart++;+ ^6 P" E; i' L8 G
                        }) D5 p+ Q$ J' D) f- ?
                }
' ?: D/ M% t( e. U' ~6 c5 V' i' w/ c$ E; l$ o, @, m( p' `2 B
                ixstart = 1;
: a+ R; y. A8 c                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
2 E! i7 C/ K! `6 _$ H( i* z                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {8 S& z+ E: a9 k6 z" V* q( n
                        ix = 2;
' \/ i- [  a) F# |& Q                        exitg1 = false;
0 r5 ^2 w$ I1 |5 @* f                        while ((!exitg1) && (ix < 81001)) {% v4 t+ R/ \+ @9 t! R
                                ixstart = ix;
  u, [) I8 p& U. H/ s- {                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
  D$ z5 M$ @$ |" y9 A/ x                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];, g8 ^) `/ X# N+ c, }) @+ [2 n
                                        exitg1 = true;8 |0 _7 P1 `2 M# ^  D2 R
                                } else {2 n5 \3 J5 J( i
                                        ix++;3 [+ `) i; |" c% z2 i( u
                                }/ i" G) f, z0 ]0 ~# o% P  |' |  O
                        }: T5 @: e9 {5 |0 H
                }
* j. d, g! A  Z; [/ k0 I9 w. x7 _* |- t" v
                if (ixstart < 81000) {( O: X5 i: e8 `8 I! f, h# A  n% X
                        while (ixstart + 1 < 81001) {
" Z% J2 H8 c4 e7 N* i" v                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
* i$ `7 ~) L% o6 r5 w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
$ _2 k, e1 J6 h& J7 w! u                                }7 r6 I  d0 o0 u$ s. ^
' Q# \8 C9 A0 ?" k: Y& g# X0 g
                                ixstart++;! f- E2 {( O: H4 {3 [9 x
                        }  ?. s4 ]# a) @2 @. L
                }' m( d. H6 X4 x* U/ w% B0 p$ A' v7 l
3 u1 A! L* v$ @5 N5 W3 B
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
1 R2 y% F8 |4 @. o7 K% Q1 u1 y- ?( E" P. B                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {9 G% [% }2 d$ u7 y( J
                        yiDuanShuJu_mean = mtmp;
& w0 o- Y2 d/ v  T                }$ j5 p" Z8 M& T

2 y" _2 W& J7 I                /*  找出极值 */* C' A# g# {% g) w9 z! t. `8 e
                for (ixstart = 0; ixstart < 81000; ixstart++) {( W# K, h2 x+ Q' D3 G! o
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;2 k- u7 J+ l8 ]/ X. q1 ]
                }
. m: N2 j% l: L- e% z
$ I, o$ k6 L- `+ K% A2 ]4 k* \        --------------帖子字数限制------------------* G, O1 c: K$ z! v/ j  m
}
1 z: H) o* `8 L( ]5 H! i# ^& D. `1 d: ?/ W$ n0 K  m& U. J
$ m" @% G) f0 {4 T+ \* a# o6 f2 S

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 05:25 , Processed in 0.041421 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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