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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
( P3 Y5 m% a; D- S0 K4 v/ r
; c7 {" z& C, a5 y" m$ ^. o各位大神:
; y& a; t: L. R: T7 G. P5 p: Q     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
+ T1 \( ?( s' D4 l- Z      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:6 n4 {) _1 P" R2 E, |, q. z
2 n! ]( I) y5 T9 b
     
/ C8 n* N+ ~5 K% J# Q+ E$ x这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
3 A6 c  N/ }4 Z5 H8 M: A4 g, W7 I' l# b4 u0 U8 Y0 R! \" u
并没有其他线程+ o% {8 B% t; u8 n- |3 ^
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
- _) ^. {* _/ |4 l  g也说不定是和堆栈有关系。。。。。。. S" f0 y; D( ?/ c& I! B7 g+ q; _
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
8 u# H" C: x% h! e- E* Z- x: x" N+ h) |) g6 o( j7 r* p( }

% j: T3 n( @2 W& Y) F7 m' ?! f
& _7 b* R% U+ Y5 y& V  A: P& q% t我也很绝望啊,希望大神能帮帮忙,感激不尽,!
. R7 G8 b9 z! j% X3 H8 ~1 m' V7 I
9 u+ ~# ?" b: M/ V; u+ R, n( @
( ?, P7 W* E0 r! e0 o$ E附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
, U4 O9 p0 S/ P, }1 L( q        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
' U; B) `6 k4 O: R8 ~7 k3 |8 w) d( P1 A7 t# o$ G3 B# F8 G$ s0 E3 w
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(8 w1 q9 L2 F& d5 H; W3 T# g2 B
                const double data1000[1000]) {& [' J1 Q6 G( E$ \* y( {

, }/ u0 K! ^, a: @2 g        int myfuck;" I$ v! ]# d2 R) e. F8 v0 N
        double yiDuanShuJu_mean;, {/ g# \$ C* P$ H# o, J' H* Q8 e; j( d
        double yiDuanShuJu_LowMean[1000];
) ~9 D0 Q$ O) c' [# i        int ixstart;; W  \+ Q- w" I2 ~9 o) E! A
        double dv0[1000];& Y6 X9 C, P% ?3 P( m7 b) l
        comm_AGC pAGC;, k( l' t' k! w2 ?; k) [7 [3 W, {
        comm_CarrierSynchronizer pFineFreqCompensator;
6 M: @/ o, R0 S# c( y        dspcodegen_FIRDecimator pRxFilter;, c( P5 {4 v- e0 n+ ~8 E
        comm_SymbolSynchronizer pTimingRec;
* g: W/ q  G% A4 J  N* k        comm_PreambleDetector pPrbDet;
- G% a- B8 \2 a; r  k8 j/ l        FrameSynchronizer pFrameSync;
) |, g+ C3 g" C! _- v( Z4 @        QPSKDataDecoder pDataDecod;' p  @! ?9 H2 r! S  A
        static double usable_left_filtfilt[81000];
0 \2 `' d" P$ ]0 p% W- S        static double youXiaoShuJu_QuZhiLiu[81000];
. [. x; _4 q% [        double mtmp;0 {( I3 Z3 S  A! s8 m
        int ix;
( o0 b2 l+ V, j# Q9 @3 h        boolean_T exitg2;
/ @/ l3 m# G& ?7 h7 L! ~        boolean_T exitg1;
$ i$ Y4 I( s/ B% E" }0 ?: O1 d4 d        double YiZhenShuJu[800];" e. I1 v5 \' W7 W
        double dv1[800];, ^$ I0 }, F7 o3 N4 h0 h0 L, u- o

, b& v  ~( k$ g* e, ^- K8 a# ~! T( H- _/ e
        double b_YiZhenShuJu[800];
8 }: l0 ?: h4 Q7 Z4 S2 M( M        double I_filtfilt[800];
/ G. @+ W( s/ x- ?        double Q_filtfilt[800];
1 N$ A& W2 O' p        creal_T b_I_filtfilt[800];
0 Q: n: l( T  w9 _! A2 ^        creal_T b[800];9 r) C1 u) A$ T- @4 J0 V
        creal_T RCRxSignal[50];
: C6 T, L- t- Q9 A        creal_T fineCompSignal[50];
) ?2 b  Y7 n1 q& s        double phError[50];3 F2 z! |, Z% ~3 l
        creal_T timingRecSignal_data[28];
' T$ u# G. N5 ]        int timingRecSignal_size[1];5 G; G# F! p1 m/ _! A
        double prbIdx_data[28];
1 u. M: L% k0 w3 j- n        int prbIdx_size[1];# t4 y; c* L/ R8 B, |: }, e7 b' A
        double dtMt_data[28];
) ]9 u8 N/ S$ X! K' s. ^2 @, X        int dtMt_size[1];* p. X3 G# \) a" b) q' z
        creal_T symFrame[25];$ v0 h2 \+ T% V* o! e
        boolean_T isFrameValid;
! e6 Q5 ?, R0 x: j        double unusedU0[3];
. d0 g% J/ g. e) q. Y# A9 C
5 ^5 U+ A6 E& D0 e+ J/ M; p$ ?        //调试过程中的变量
, [. ?5 F9 X( R( w/ u2 P: f8 ~# g        int  enough_data;9 e0 F' Y4 I3 ~: W4 T3 X. O: Z6 J7 \
5 \0 T1 i8 ?6 `' G+ X. _2 M" R
        int enoughDataFlag;2 |$ l+ }; }( I4 q" e1 s( E" L  _
        int yiDuanShuJu_mean_int;
  c4 X5 U# k( a$ x' h) o% }$ s        int int_sum_dv0;: b; ~! _& X2 ?/ E0 `( C% x
        int oo;! q7 k8 x+ h  Y7 ^1 R) ]2 J
        int ii;
, N+ m' s; d6 |# Q* T; E        myfuck=10;
3 j# a) i9 v( y, u+ u; |        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */5 [- z& p" h2 R" O) \- ^
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
' g# r" B: J; ^, ]  O+ r
9 k: X% b* H4 F2 I' B* _0 H8 Q        yiDuanShuJu_mean = mean(data1000);
- F3 n# v. }' m; e8 e- V0 n2 r# C- g; T0 W! F/ h
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;  M) P0 Q- @& `+ o9 N( z0 T( u
        UARTPutc('A');
8 ]3 V7 e" Z, K% H# ]6 l        UARTPutNum(yiDuanShuJu_mean_int);
1 @/ W' L. j8 W0 b        UARTPutc('\r');
- o( d, W$ O0 Z5 ^: o# o        UARTPutc('\n');0 B: ^" w0 d" b* Q+ L7 l, w0 M: N' N

1 l8 g7 D* h. C- A6 X        for (ixstart = 0; ixstart < 1000; ixstart++) {
! E( z! C7 \9 |                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;, A% F: {  }5 b5 ?* z  L2 e9 d8 x
        }
; v8 X+ W' W- j, M  Y. a* a
2 ?, w  y9 S7 C/ }: e; [        power(yiDuanShuJu_LowMean, dv0);2 q7 x( Q/ O2 I

) B, o& z* k( b# P" i& Z        int_sum_dv0 = (int) sum(dv0);
# c, L" g. @# g4 ~$ h% e; j( e/ m0 `0 ]
        UARTPutc('B');5 p" h6 ~( e5 W) m/ I* B# ^: t9 V
        UARTPutNum(int_sum_dv0);: v6 `% s  x( L$ Y
        UARTPutc('\r');$ \; M( X, ]  d
        UARTPutc('\n');
. P) z. u) {4 |8 Q5 I
2 Z5 M) i9 R6 E7 r8 W//        int compareFlag = int_sum_dv0 > 1.0E+8;  i- {$ n- J# q" j6 R% i6 z
/ O8 i/ q9 {. i+ y1 x* K
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
+ {& h$ Q7 H0 ?7 z                UARTPutc('C');
3 @) H' x; E' k5 k                /*  比较信号能量 */- i7 w1 l6 F+ M/ O( S: m$ ^3 A
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */) x6 N6 B, A1 C, e& Q
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
: H3 ~2 o7 Z4 \//                for (ixstart = 0; ixstart < 1000; ixstart++) {% D+ v, Q  L0 P5 B
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =" E  C: Q( m. y  W
//                                        yiDuanShuJu_LowMean[ixstart];9 I) K9 x6 F! F7 v, W" L
//                }
! s: r( k0 q4 c7 P% d+ u//2 i4 w' l6 Y0 b( l
//                youxiao_k++;
, n7 P$ m0 u% A5 W1 h; c: v//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==5 g' `* O+ b0 [5 [! T% O
//                        /* 感觉要取21个数,即0-20, */% Y$ k: u- }: Y* C9 O3 q
//                        enough_data = 10;//有效是10,无效是0
1 Q4 w* H: _+ s4 d: V' `1 N//                }! f2 _2 w2 M& C
        }
; \: t, i7 e2 N, k9 v6 U/ j1 y6 _2 n. U# D5 Q# E3 U2 ]
1 }2 N  w. [: g6 W1 A; j
        enoughDataFlag = 100;& t7 M9 z4 O5 i4 \( _+ J! L
        enoughDataFlag = 1000;
- o* S: w7 Q6 y% t        enoughDataFlag = 0x02;
' m; }7 b) B( u+ k2 s. S( F' _  i( W        enoughDataFlag = 200;8 ?& }' @$ c  i' k2 N+ I2 _0 I
% l% T, D! B  |7 F0 R7 w  h, @
        int myfuvk1;0 s( b0 H" Y6 Q  S7 X$ _; v+ Y
        myfuvk1 =11;
- E! O6 [9 B- K# E6 l
; b% o4 q- b1 ^) U: V' E# ~
) `! B' P% }. ^: k6 e; L5 o        enough_data = 0;+ }6 K5 M' J' r) |: \, ]7 g2 I

% F. @1 k' x( v4 X: [) p( X2 Z, R//        if(enough_data>50){. K& n9 ~+ q4 h4 [0 |
//                enoughDataFlag=0x01;
9 ^; y( X8 H' n- A% h7 h8 A6 s//        }else if(enough_data<50){1 ^2 E# d; f9 g! X. T( i
//                enoughDataFlag=0x00;//0x00还是不行
; N8 f# e5 `# j; g6 B: B//        }. z- C& C8 A6 d* E) `
" I$ r. e9 p! i: H& p
0 l! a- I$ R' H; E$ z1 d
        oo=10;  a" J2 m1 h+ m7 l7 b% {
        oo = oo  <  5;
$ B" _3 q8 i3 x. Z& Z+ T        if(oo){
) ]6 K+ @, }1 w: O                ii=0;! g7 J0 p. J. X4 C' U
        }' Q, u$ h  {# |% d3 B6 C' i9 Z. a6 F
        if(oo  <  5){
$ T/ [; U5 W8 t  E                ii=0;
0 f4 W; X8 D) b6 s; y1 Y        }2 }  D- k* N# ]' t7 L
        if(oo  >  5){
$ c+ W- M$ p( {8 Z3 m                ii=0;' f. E9 V. X" ~2 F) J
        }- U6 V2 N' ?. i9 x/ ]
) ?& L2 S; x* i( M" p
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
( _% e0 {" C4 i# t  x5 [7 M        /*  如果数据足够才执行主程序 */  T4 e- P. G6 |2 T, M2 i
        oo = oo  <  5;. d, Y& e7 e& I6 B
        enoughDataFlag = enoughDataFlag  <  5;+ ?  c9 E8 M9 g2 m' [3 T" O
        if (enoughDataFlag  <  5) {$ d2 m) ^2 l$ Q! P( Z. e
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
4 h, ]* T# z0 t8 t1 |) Y8 `                AGC_AGC(&pAGC);$ v! U% y9 {0 v. i
3 s3 Y2 X9 M5 P5 z: b" H
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);! H# B! G; S8 E5 N# w5 Z
                FIRDecimator_FIRDecimator(&pRxFilter);. h2 a; H" M5 s1 f- z
) M# t" l8 M, S3 G( d6 i
                /* Downsampling */: a1 W9 i1 q" z+ `
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);$ f6 [; H5 v6 N# A/ u

/ x! w  w# i' K7 ^: b( h6 c* D; n                c_PreambleDetector_PreambleDete(&pPrbDet);
* v) ?5 \3 j. i: v$ ?2 h: X* f8 r! |" k
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
1 I: n5 k( l* x' X4 c; }                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */4 y9 p4 o7 j; n2 x& n6 U  S$ y
                /*     %帧数量=100 */
* J# z" n7 F# S5 a                pFrameSync.isInitialized = 0;% X( j/ I8 ^! L" }% Q
" `' d" I- w2 F& o" w5 k3 G
                /*  [EOF] */0 L0 c7 S. l  n5 N, c2 }  {
                /* 前导码长度是13 */! m* {& z5 s+ x+ y6 Z& E! m7 E
                /*    %qpsk */, B( D& R6 d/ v4 y7 D
                pDataDecod.isInitialized = 0;+ }2 \, T' S. C: C% T* D' S

0 Y8 X$ [6 f! Y3 R                /*  end */- K1 J' _0 u# R- i; [8 G+ z7 T
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */" M  J" B, I, o/ l- O5 f
                /* Convert 3-dB frequency */7 q; k& ^; u; _) b
                /* Convert 3-dB frequency */4 B' f' V$ D* x; H% Z
                filtfilt(save_buffer, usable_left_filtfilt);
2 {# s4 C+ _8 x! E! r8 g, O2 K                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 J5 z. H7 l" e, m% x  T( W                        usable_left_filtfilt[ixstart] *= 2.0;
$ @" i: v( o! O+ J3 @9 L7 N; B                }8 s2 K1 z  l/ M

" @" h8 S, m% ~5 w9 D* F8 m+ V                /* 注意乘2,处理幅度 */
" y) a) e7 `, h% Z9 V                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */' P$ H: c* M% i$ e9 C! V! h( f" {$ ]  [
                /*     %% 行列转换 */9 l, o& u. J# ^9 q1 x0 V
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);" N  {) Q/ k7 `" K1 m
                for (ixstart = 0; ixstart < 81000; ixstart++) {  m: y6 o7 ?7 H/ y8 h3 J& h, U
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]. c; ~* Z$ p7 G: C; O) R' m7 D
                                        - yiDuanShuJu_mean;
9 f) {, Z$ K9 X. I2 B& a; ]! E                }. N( C- g- P+ L9 X$ E; h

, N2 x; Z+ d( O( q- ~1 s- b3 ]% h                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */7 e; X$ c, @! C: a7 n
                ixstart = 1;3 R& r4 v; T. A( U9 U: J/ `% \7 i( y
                mtmp = youXiaoShuJu_QuZhiLiu[0];! c3 S- F+ n4 g: d
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, q$ X9 m0 \" ^. c; H
                        ix = 2;9 L7 u% W) l1 n. H6 }% S
                        exitg2 = false;7 V/ s3 F) ]* J- N
                        while ((!exitg2) && (ix < 81001)) {) w: X6 o+ W3 I: u8 N/ B/ h1 A6 \
                                ixstart = ix;
& Q3 p4 R: |* r; K; T0 @( ^" u7 e                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
+ ^! z$ ~% \$ @                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];* c( ~$ i/ a+ k' T3 t: X( v
                                        exitg2 = true;
3 u& E( F& j, r/ w; u                                } else {
. F3 F% `8 C& R3 r1 `                                        ix++;
2 a8 P8 Y7 I" U- e: L7 y                                }
- g) |- C2 o0 x6 k0 {                        }' v3 d4 P9 Z- W1 Q# D: r' T7 T$ [  W
                }
: D5 U" J8 v! b! r6 u2 K1 t$ i5 u5 V0 k& H" M6 f' K" [9 ]6 E1 e
                if (ixstart < 81000) {
0 ?# Q. h  Q( u5 i' ?                        while (ixstart + 1 < 81001) {3 M" I# @' P' ^# V* U; X
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {3 Z- j4 w; e* g: E6 o
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];5 X8 r6 N) z- y$ V, y
                                }
; x" w8 C  Z& L& T  R8 M# e0 }! _1 i: Y5 z5 F
                                ixstart++;
: r4 Z3 F* W! A) G6 `' G                        }3 e  f  _$ s. u
                }3 K: R. u' A, l) k8 ?$ K
& y0 n% U$ c- }- R- K3 _
                ixstart = 1;
9 m7 @/ Q) F3 X  F1 @                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];1 Q9 v5 U4 Q* B9 Y8 \
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
/ }! Y( R: _% ]1 ]2 a                        ix = 2;1 s& f5 b# F4 D& x, B2 O: E
                        exitg1 = false;
. t0 ?* U2 j9 p- _- k" v# o                        while ((!exitg1) && (ix < 81001)) {
5 E: X: }4 X2 H' M( Z; t                                ixstart = ix;+ h% Q% S! ^7 ^3 {5 s; h
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
! B& E% M4 Z: S; Y6 d                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];/ l2 F6 N# R5 r# E9 N% `9 S# t
                                        exitg1 = true;  b% Y" I& S" }8 z6 C( U
                                } else {* Z3 u! o3 ^" C. x0 {( S6 U" V
                                        ix++;
6 j, D9 X# v8 i* d: {; ~                                }
' g& m& R  u7 I/ P6 a' i5 G; d  J0 Q3 Z                        }+ m, o, r1 I  Q  Z# g; [- b
                }
0 N5 d, G8 Z6 `' f8 r' d3 b1 L! d! t
& n4 r: E4 A4 e$ v; P                if (ixstart < 81000) {
4 B' s7 P- n, ^% E2 Y% S                        while (ixstart + 1 < 81001) {1 \7 N9 b2 G- P8 i, w
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
  W6 h, D/ n& _4 t7 i                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
/ S* C2 ]$ S& I3 {                                }* B+ F/ k  N$ Q

6 z4 l8 R9 F- E8 d                                ixstart++;
0 f. ]. I! {5 a  t! s                        }
7 @8 Q$ F# j" l/ N5 _$ w                }
& {9 R8 w, M4 i8 g! p  ^3 _8 u4 W" l3 C$ U* B% S( y5 y
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
; r2 N& M* Q+ S3 n& n& o& F" C                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
) K3 k: C4 x" c                        yiDuanShuJu_mean = mtmp;$ R6 C: B( s$ R' N  o: P
                }" ~) ?, y  i" L4 n1 ?  c6 S

7 O" J3 F8 E  }5 s$ r6 `! m                /*  找出极值 */
4 w- C% ~+ Y2 R  z  ?0 f  d  |                for (ixstart = 0; ixstart < 81000; ixstart++) {+ z  @: Y& Z2 o. p4 p( J
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
8 R- e3 x0 G0 Y* D2 f; g                }
0 N& W. H! F+ O! X6 L4 C6 }- E& ]3 R- ~' k
        --------------帖子字数限制------------------
2 h! {0 ^$ e( {! e}7 H8 s- |. _1 z. }4 m2 X1 F
. O5 G  g+ r5 w  n

" h0 F  @% \' A' S$ b

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 05:52 , Processed in 0.043169 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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