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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
: l+ Z9 @$ X4 R; I# b
4 F9 m8 ], b+ k3 A8 u5 ]各位大神:
" }, J- x/ f& m. h% {9 d/ p     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
. z2 G2 N4 u, s! V" u  |4 I3 ~) C      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:, ]3 u; v1 j3 M4 x

! {( }  R/ H4 f8 ]2 s# Y2 S* t     ( E+ c! m/ Z6 b4 U
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。' N: Q3 v, ~- T* J* d
7 I1 k6 B( |1 d! {
并没有其他线程
# g3 d4 H. R+ E2 \# V* q反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。) ~- S( [+ O/ j4 N
也说不定是和堆栈有关系。。。。。。
0 Q7 f2 T0 I3 [( D3 h% P请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....6 c- b% Y. }$ u- F9 o6 Q; @5 Q3 L- Q& B

3 s4 F# K: l2 {/ r4 f6 c" z: Y4 ?

6 Q- K8 h" ~+ _4 G3 C我也很绝望啊,希望大神能帮帮忙,感激不尽,!
6 z  e( [5 e9 r8 b: Z
; v* V. Y- ]1 q0 e  h; L9 O8 @! ]& |9 o( ]4 O
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];6 F" [' @$ v2 C- x; [2 s* g, t0 L9 M
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
5 c4 B1 Y# t5 Z  ], b6 z* ]4 e8 M
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
5 J& u' I2 x! q' t. M                const double data1000[1000]) {% e% H$ d. @. ^2 h) j% `3 n0 r! ?" v6 _
8 G* e7 o1 |/ x& `5 q* r5 U
        int myfuck;
" `! v" R  G' R! }        double yiDuanShuJu_mean;
2 _/ a0 |2 h) g5 }5 E) }- P3 z" n        double yiDuanShuJu_LowMean[1000];
7 V: q. x% B& v& E9 y' @' x        int ixstart;0 U: X; s! w5 _# L
        double dv0[1000];# q4 o) e) ]8 h5 T9 z
        comm_AGC pAGC;
* N+ T# z9 |* g3 a" `/ g        comm_CarrierSynchronizer pFineFreqCompensator;; H, W7 [4 P, @- Y; s- B  j; G
        dspcodegen_FIRDecimator pRxFilter;
6 [4 F; B! v0 q# x' Y! y        comm_SymbolSynchronizer pTimingRec;+ D, J( ~- w7 x5 e! i; q5 ^
        comm_PreambleDetector pPrbDet;/ c2 P* R6 j3 F6 X
        FrameSynchronizer pFrameSync;8 U/ b  ?. S6 O+ ?& J8 H8 W
        QPSKDataDecoder pDataDecod;1 }6 J# k& e" {; ?. d% y
        static double usable_left_filtfilt[81000];3 x4 y' w) P4 x6 B
        static double youXiaoShuJu_QuZhiLiu[81000];" r* f! r( U2 _' h; [9 o7 s
        double mtmp;% Y& J2 l5 b. z+ h- ]  F) ~
        int ix;
: t2 d, E1 m4 a  ?8 W% W* X        boolean_T exitg2;
& V$ E7 z+ b% S' J1 T        boolean_T exitg1;- C" j5 J5 Q, |) f$ I" }. E
        double YiZhenShuJu[800];
& |. ?$ Q5 h7 D# x        double dv1[800];
/ d3 Q" [+ j( i  X
# R" W' Q0 o8 @: @1 X# z1 j( m+ `7 D+ k+ @1 b0 u, J
        double b_YiZhenShuJu[800];
! I, Y6 d4 Y  S9 \3 n0 g        double I_filtfilt[800];
, h$ S; o5 }  g2 u. \# D, [7 x        double Q_filtfilt[800];
% k* G. \: h$ R* @5 A        creal_T b_I_filtfilt[800];
1 L8 f3 P1 ?* k1 F        creal_T b[800];  t% w" Z. x2 g' U: r1 H
        creal_T RCRxSignal[50];
# H$ }/ S" \5 N7 J8 Q0 A        creal_T fineCompSignal[50];" N. I: M/ i4 p' s: D
        double phError[50];. I/ @/ R% O+ x& B, [
        creal_T timingRecSignal_data[28];& w+ v" [  r( R
        int timingRecSignal_size[1];, G$ Y2 o, h% D, s! ]5 ?
        double prbIdx_data[28];
& F* j% S9 J1 `% e) A6 L        int prbIdx_size[1];' U; ^0 S: i. }7 H$ C
        double dtMt_data[28];2 b6 x& I! f# v( j
        int dtMt_size[1];/ w5 A7 [! w1 @
        creal_T symFrame[25];
. m8 {  k! q2 B6 f        boolean_T isFrameValid;$ F& P3 ~% w: e1 |
        double unusedU0[3];
7 }1 s( j1 `/ Y, |6 l6 f. Y: L. ]# w0 [, `
        //调试过程中的变量' D' j* m0 D5 O
        int  enough_data;& d8 C% I5 [4 j0 V: J0 H( O

" g: }" g7 i1 u, a. F( Z% w# \        int enoughDataFlag;* i; }% K3 J7 g4 n- c& N: S0 x. ^
        int yiDuanShuJu_mean_int;1 }- {% L8 I5 e8 \0 j% p, W9 j
        int int_sum_dv0;
* p9 j. e- i, i1 n4 P' R        int oo;' V6 k* L  k6 f, H
        int ii;7 Z% o+ t# p  `4 b
        myfuck=10;. d6 \$ I6 U8 y- k4 k6 U' V6 H7 n
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */0 B) s* B+ t- D/ Z
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
! D( Q( S% _- U. s2 K. {
1 ]* r7 G% H' M        yiDuanShuJu_mean = mean(data1000);
# F! D) [3 H$ o) }
! H$ [, Z2 E% [1 Y, y5 j        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;8 ]" F0 V. ^/ L# P2 }
        UARTPutc('A');5 t( U4 y4 j5 F% m# \
        UARTPutNum(yiDuanShuJu_mean_int);
' h! u. X, o, v9 u6 f        UARTPutc('\r');( [$ P! K5 X% h3 G  |: R
        UARTPutc('\n');* }9 r3 f3 B5 Z4 U) h  H

7 E* ?$ K$ q3 s6 ~: H0 C5 _# N        for (ixstart = 0; ixstart < 1000; ixstart++) {
7 m3 v6 ]( [  K# s                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
% q* Z2 T6 m# x0 O1 F9 L        }9 g/ X# }5 W  ~3 e

* n* \0 }0 ?2 R, {$ s' r        power(yiDuanShuJu_LowMean, dv0);, {8 b0 |+ m% V) S" p  ]
7 G; e; V4 ^8 W. R9 s" i
        int_sum_dv0 = (int) sum(dv0);- S5 o" d4 r& L, a
& |$ S8 \& L: T5 {0 i- M
        UARTPutc('B');
# E+ ~: t! r" t* f+ E6 a        UARTPutNum(int_sum_dv0);
7 n# [4 G. V8 s4 E1 f& L, t3 s        UARTPutc('\r');4 G, s  U, J- A
        UARTPutc('\n');6 H$ {" Q3 n) }: ^( M

$ K0 \! f: q4 Z) V7 v//        int compareFlag = int_sum_dv0 > 1.0E+8;
; N1 c6 m6 h6 l" F
2 h! M; n( |% O( j$ N7 S! W        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
6 g+ E. M# r# S' `  o                UARTPutc('C');2 n' ^8 o8 y1 K& A2 I8 T2 b* v! f
                /*  比较信号能量 */
0 r! q* e9 o6 r: {6 N! ^                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */" n' O- s" I+ O$ L3 h  `2 F+ ^
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;- x  m3 H' `5 a' z0 V  F1 f
//                for (ixstart = 0; ixstart < 1000; ixstart++) {. C& w. z4 e4 c
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
+ w5 I$ _0 Z* R//                                        yiDuanShuJu_LowMean[ixstart];0 W5 b- ]/ y9 m  o4 v' m; n
//                }& U0 n5 r- W, _2 `5 T
//
- g- E; \% X8 u1 t//                youxiao_k++;
% R# f* g! T! C3 f/ z/ a# {//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
9 O! q0 r& D, I  W3 g//                        /* 感觉要取21个数,即0-20, */" T+ ~* @9 P, O: Y5 K% y6 r0 ~/ _7 K" J
//                        enough_data = 10;//有效是10,无效是0. L8 E+ J$ l8 {2 p5 _2 T% X
//                }. k0 Z# q+ K4 k
        }
8 @' X. C2 _, ~# v% y3 ^2 N
( D& V3 z' C0 Y% t) l
. ], ?- q) k' X( _" L1 W& h        enoughDataFlag = 100;! {" Y# ]$ C- f4 n5 W; i& X
        enoughDataFlag = 1000;
) ^8 D2 [& f, d9 Q5 S        enoughDataFlag = 0x02;
, f8 o4 o+ W" h+ {6 W# k        enoughDataFlag = 200;- G  r8 \* N7 Z2 K3 K9 [' @
  A* \+ I6 ?9 y% o
        int myfuvk1;" n; z! E- V+ I9 ^6 ?! J
        myfuvk1 =11;$ M& m0 V  M# }$ J7 n
, G0 d7 D0 H$ o0 P$ }# m; l
- }- g3 G5 h# H9 X2 G; t) `( u
        enough_data = 0;
& t7 O+ t) y) V6 M/ u! v. j5 Q2 q; @4 ?/ x  x  o
//        if(enough_data>50){
! ~7 {4 z: n( \//                enoughDataFlag=0x01;! M9 p& J6 v7 c' y" h
//        }else if(enough_data<50){% Y2 h) {& u. l; @" z. i, T: @- ^
//                enoughDataFlag=0x00;//0x00还是不行8 G  q% [; z+ l4 h& `
//        }
2 ~' Z7 R, I. |0 E1 @5 ]/ ?$ n; M# r1 U: a

) z3 P" f; d  U% N$ `        oo=10;- \% c) u* S& _+ N
        oo = oo  <  5;
6 Y9 t: {% U  J4 k1 S- A        if(oo){9 c; @7 W8 e, c1 m
                ii=0;9 G6 t  X& w6 a+ ~6 z. U
        }
+ y; y, d( S% H        if(oo  <  5){
: n/ C" y& e3 a9 X! Q& E, c# m5 U                ii=0;  q, s' }' O. D% }, v7 T
        }9 A/ ~- j1 Z, p% {
        if(oo  >  5){
8 g- c/ q/ _9 c                ii=0;
: f" P$ S6 i- K, A. p' W+ W        }
% s# d4 C2 j# T9 x; L5 }0 w0 Y
) S0 k5 D* r+ A8 q7 p        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
$ d7 \5 o! ]& T4 }        /*  如果数据足够才执行主程序 */1 h5 N/ m/ _8 T9 l
        oo = oo  <  5;4 a3 {1 E, L' A
        enoughDataFlag = enoughDataFlag  <  5;
5 P7 W3 k# s. S        if (enoughDataFlag  <  5) {
4 a5 y9 l" ?! ^3 R" m//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是00 S' v) m7 l& z( z: G
                AGC_AGC(&pAGC);2 I. G+ c! f4 _9 g  u. _7 l

% j- }0 G% H4 V2 q2 F( E                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
5 I$ q: W8 x" D- k+ _( U                FIRDecimator_FIRDecimator(&pRxFilter);
  [8 _( C7 G% j: w9 g. o, a1 r7 j6 G5 m) V  ^
                /* Downsampling */
5 D5 B( `* V+ U; |" h% W. u, I                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
& o! J  ^; J, w+ c2 D+ c4 d8 _: T' Z0 C( F1 g; n
                c_PreambleDetector_PreambleDete(&pPrbDet);: K# K9 f3 K" z1 C% `2 `
8 @: E7 M8 t$ `, V) v
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
' ^& G" H6 l- S8 s& ]  V/ D                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
# n: D5 ]/ N% S& g6 e9 Y                /*     %帧数量=100 */" F& i7 X/ I0 u; r% t
                pFrameSync.isInitialized = 0;
! O: @! f  q7 |6 {
% N' [$ D. {* T- C1 Z                /*  [EOF] */
8 }' G4 m( }$ i5 ]+ r7 l9 R3 Q" {% e                /* 前导码长度是13 */
. {  ?& D3 b, |- ?                /*    %qpsk */
( {$ p$ [, S0 x) S" H                pDataDecod.isInitialized = 0;9 T$ _, {% I8 V  N
! ~3 F4 h) j# C/ X  S3 f% g
                /*  end */# o! P6 @( x. P9 u7 ~8 \/ u
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
& Z% k, t* Y! T                /* Convert 3-dB frequency */& R3 `- w2 K9 I2 \' [& R/ j
                /* Convert 3-dB frequency */, F  L* c0 |& b! e0 w+ ?$ s5 E
                filtfilt(save_buffer, usable_left_filtfilt);' t6 P3 \& B! P, X1 `
                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 J4 P7 P8 L/ {8 h7 P* Q                        usable_left_filtfilt[ixstart] *= 2.0;' W% J1 Z+ y  @5 r; m- O! W. c+ P
                }
+ L1 f5 z2 o9 m2 V- z9 |7 Z3 E- o" o3 W3 b4 ^( A3 \# E9 D
                /* 注意乘2,处理幅度 */. c* d* x) q3 E2 B/ T
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
( L% M% A' B3 g. @                /*     %% 行列转换 *// g4 T8 \" f4 F% k8 U3 m+ Z9 l# f
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);9 k+ O0 W! ?. q8 e1 K4 L. q
                for (ixstart = 0; ixstart < 81000; ixstart++) {% @0 D3 K; |$ J& [, l" a$ z) R- w
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]! E- u. j: b( s* B  i: ?" I
                                        - yiDuanShuJu_mean;5 S, X# n$ f% u( k
                }
4 d. l! c. b, L! e# u& W0 W$ L4 ], O1 L  k
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 q0 d3 W3 K* s( Q% N; m& V
                ixstart = 1;
+ v4 j( N9 _2 y                mtmp = youXiaoShuJu_QuZhiLiu[0];% m" q* c" T) ^; i
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {+ M+ a- q( S4 s( R$ W
                        ix = 2;
& S7 u$ ]6 o7 K* o) }                        exitg2 = false;
3 o4 h& C) H6 _* q$ G6 H; q                        while ((!exitg2) && (ix < 81001)) {" {6 c, S3 e8 n. z
                                ixstart = ix;# |; s( p" W' ?. X% K5 Z: d' x
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
# k! W' W" f8 H                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];* R: ~6 _4 e6 |8 B% L0 z5 }
                                        exitg2 = true;
6 @( W, J# R( S' d3 W                                } else {
- m6 h  r7 `( ^% O  U/ r+ ~                                        ix++;
( x) Z7 ^- Z0 T; m                                }1 E: X: m3 C: w8 g* q7 d. I
                        }; T; i  Z7 M5 p. E# e' [
                }% l, B( A7 d/ r4 r5 m
' k6 v! E7 n7 k- @3 f4 t
                if (ixstart < 81000) {) o3 Y% c) t) O2 A& j- \0 i
                        while (ixstart + 1 < 81001) {5 M& S. O, o1 x6 f& G  ~
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {# ~9 j: e/ m5 a3 r/ M& c% k1 t
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];0 x7 g- [* J! \$ R  a0 y8 ^: @) v
                                }
$ U* d3 m3 Y" C' \
$ ?$ p% |2 h- j3 A2 V                                ixstart++;
5 q* _) ]4 {& n& @/ U                        }. n9 c# z4 Y* r" {5 a
                }& Y% A  f$ j# `/ j
: J& T: X1 `' p( z0 K" f) J
                ixstart = 1;0 w/ O. X( L6 X
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];2 E6 B! K. i( }  g8 L. u
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
* n5 X. v, j6 A; P1 y6 H+ h                        ix = 2;
9 V! G2 M/ n, H4 K8 q0 t                        exitg1 = false;
2 D/ s$ H9 }# q                        while ((!exitg1) && (ix < 81001)) {# q! S# {& z- O3 q1 X% R, p" _
                                ixstart = ix;- h$ U  Z; ~9 X9 o4 R, _% p
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 ^) P9 Q$ l. T3 h, B8 w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];* q. q4 V! q8 G; P- w
                                        exitg1 = true;9 `  K1 J1 r. u4 W$ A. m
                                } else {
, V* X' F( y/ b+ J# D, X' A4 Y                                        ix++;3 n5 D3 v3 n' h) F1 m' O
                                }
' i! K; v$ ^* S% f  n                        }
5 Z( x4 W8 |$ O. Z" y                }  x9 K5 M* Y% G% V6 U

  g2 N0 m- G; [, @2 [: `                if (ixstart < 81000) {
* \5 I* D' N; O+ \  ^                        while (ixstart + 1 < 81001) {
, b  \# Q0 Z8 F# k                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
  E/ }1 @' e' k: x% M                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];2 Y4 Q" H7 |' i  w6 l. |( z
                                }
+ Q6 V/ T/ L7 ?$ T
% l- o  q  E5 G& S                                ixstart++;
& ]; `1 M" _- A  d9 V2 j: P% ?& k& F                        }% t/ F* v( l  R; O8 V% E1 B2 N. }
                }" _# [8 k8 {8 h

+ s* I. b9 q/ {1 W: r5 a                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
3 z  ], f7 d  _+ K                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {5 g: q6 y8 j% V, Z2 D* h/ C/ [! y4 M
                        yiDuanShuJu_mean = mtmp;
' h: ~% D/ \6 d1 n$ L                }4 G) s& h6 P8 [# p6 c

0 C' @5 w2 A% d% B                /*  找出极值 */3 X* z: Z( l5 Z! d3 N& ~& a) ~
                for (ixstart = 0; ixstart < 81000; ixstart++) {# D1 g" D3 e! q+ c7 O, B, r2 t7 k7 k
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
4 X# L, [3 J- E4 a3 N8 r                }
, |1 J8 ?, [0 G3 Q9 j- l/ w. g' a5 J8 _/ H
        --------------帖子字数限制------------------
3 v* L. v8 n. l2 s, w}" R+ X4 ]4 n/ O( X; j
/ z& W4 F8 }0 K7 @  w3 c

2 W  i/ D, J1 K

本帖子中包含更多资源

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

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 08:58 , Processed in 0.043726 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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