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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 , {2 o- T4 E5 T2 g4 b
. k3 c) U; C0 W2 s( k1 X0 u, P- R
各位大神:
0 w8 E1 J. N- d3 g     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
: f* l6 U  V6 x! m      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
, u) W1 @! r# C7 G/ l
0 y8 V0 l+ i* G$ X     ! R, P9 Z9 ~4 N/ K: W' F: l
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
8 A. X6 ~, c' [0 ^' B1 v& a" z# y' k$ u6 u0 Y% q
并没有其他线程$ R+ J  v# g  \% s. |3 F8 I
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
- k$ Z- A; o) I: L$ `也说不定是和堆栈有关系。。。。。。
' m  w* B! E+ P. M! n) H% O请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
# O8 p1 J# k! q: P( D# |$ }* J9 y6 ^: v% C- f) E( [3 p0 ^

2 h0 ]* b. C- r8 r' j3 y# s  l8 C; ]: E& v/ {
我也很绝望啊,希望大神能帮帮忙,感激不尽,!' d1 w, M4 I" T
! t- S* G8 W3 S7 e+ ~( R- @9 X
+ O* m) l+ J7 c  \& ?$ ?& N
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];5 A. I1 K  ^0 \1 V& e6 Z
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。6 i, s  u0 o* `! b( M/ \

. ]" ]8 s0 e. g  F$ ?( ~: yboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(+ |, X; I# \( j: ~% }$ w# T4 F
                const double data1000[1000]) {
& u% Q( y+ u1 j) A* {5 ?) U: G, v9 t/ ?
        int myfuck;  d+ x( }0 _% f; m
        double yiDuanShuJu_mean;
: x; R/ @, S. {0 v; n        double yiDuanShuJu_LowMean[1000];3 A1 s' @0 m# N: @( n
        int ixstart;, |2 }) C1 K. z, h) D+ n
        double dv0[1000];
( e6 @* `* h; }# w        comm_AGC pAGC;
9 ^9 F( L: s7 n. E        comm_CarrierSynchronizer pFineFreqCompensator;
1 q6 D+ G* C) j  F" _        dspcodegen_FIRDecimator pRxFilter;6 j% f+ H% q( b  A) @3 l
        comm_SymbolSynchronizer pTimingRec;0 O$ Y7 |: Q! o
        comm_PreambleDetector pPrbDet;1 j3 y/ B& S; ?  b1 @/ x2 t- E
        FrameSynchronizer pFrameSync;
- j7 |7 x8 N- Q        QPSKDataDecoder pDataDecod;6 P& J" W" s1 l  K
        static double usable_left_filtfilt[81000];6 W' [. n7 j1 ]1 n8 H* i% O+ Y
        static double youXiaoShuJu_QuZhiLiu[81000];
7 c; u/ l% u, J# m$ d        double mtmp;
- b( j0 e0 ]+ M! b& I3 e1 n        int ix;
3 x1 T2 R5 R! d! R- ?- `$ o( e9 m  ]        boolean_T exitg2;
  L; H7 b& N% ^- I2 m        boolean_T exitg1;- [8 Z" w" g& ?, x5 i' E& x
        double YiZhenShuJu[800];' L  y8 `8 ]( N* D* u+ s
        double dv1[800];3 x, h1 F! Q7 }- Y  o
* S- w0 P+ F. s8 M1 b
3 A' V5 R2 K* L  V' O9 ], B. m
        double b_YiZhenShuJu[800];' n6 u4 N1 ]; p% M3 ?1 _' A
        double I_filtfilt[800];0 c* M$ p& u1 ~
        double Q_filtfilt[800];
+ w& ~- M, d, F  _8 \        creal_T b_I_filtfilt[800];
3 P9 @& P; M3 _( c  M        creal_T b[800];! e9 V* P# @! b
        creal_T RCRxSignal[50];
- H* H+ z* d1 l- R* Z        creal_T fineCompSignal[50];. s# W3 s# `, j9 I" r7 K
        double phError[50];2 Q4 k, o( C; R, [. K( D' M
        creal_T timingRecSignal_data[28];
; C5 u# t& l& ^3 O/ s" @7 l1 ?        int timingRecSignal_size[1];% k% I& I! e: t# P, C
        double prbIdx_data[28];
) C# e6 r# l& y4 Y; n        int prbIdx_size[1];% a! s7 p# W( b5 n6 [! M
        double dtMt_data[28];
  X  E/ u/ y3 f5 G6 h# |  V        int dtMt_size[1];
: I* b; I7 [0 F. z. S/ Q) ?# t        creal_T symFrame[25];" ]% m+ Z& a7 X
        boolean_T isFrameValid;. K4 y+ X1 L5 T. U1 W: D  `
        double unusedU0[3];
6 e& M1 l2 a. B/ ?9 f' n$ r, d& w# j) t, m7 J
        //调试过程中的变量
5 r/ l: i+ R$ |# f        int  enough_data;( ^( r% B+ R% c0 V

) P2 d: E! u! [; ^% m+ X) I) d" _        int enoughDataFlag;
5 @8 r9 c$ p( p5 q* |9 g5 t4 Q        int yiDuanShuJu_mean_int;/ ^6 d4 S+ F9 r( r3 ^
        int int_sum_dv0;1 U% K2 l) d; [/ R9 L
        int oo;2 V6 x( _4 z! |8 E5 L( d
        int ii;* x# R1 z0 m# g% z7 H- ~
        myfuck=10;1 v6 Q9 M/ o. N$ ~* v' {8 ?7 k9 k
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
  ]( j( d& {+ M3 ~        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */4 _5 w+ S1 q4 p
! A6 T1 T' ?0 R
        yiDuanShuJu_mean = mean(data1000);
0 a7 T5 }: n. [! I( z3 f4 j+ d5 x6 Z* ]! r  \0 D" t+ U( _
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;, x# G9 B# T' ^. B: @3 B. h
        UARTPutc('A');6 \3 f5 a/ S8 i7 B1 q
        UARTPutNum(yiDuanShuJu_mean_int);
: A7 o3 Y& D  V# d3 _        UARTPutc('\r');
% u) b: m3 X  G2 F1 `$ ]* R        UARTPutc('\n');9 E  d/ O: l  Z  a0 Q) `4 ]

  [0 l! g5 s/ V5 c0 x) R3 v        for (ixstart = 0; ixstart < 1000; ixstart++) {0 A) N9 {  A2 Q. Q" a
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;: ~5 D* k" P1 t  w% e* b  S7 F
        }8 p" R& e5 I; s8 D7 O( C
8 N" f" U3 ^* T3 d9 C
        power(yiDuanShuJu_LowMean, dv0);
0 c' N& w  X. M+ b# s: u. {( P: g9 b, f; N; `* H) d/ H; r! B
        int_sum_dv0 = (int) sum(dv0);
  S! r: g" B4 w; v$ S, `! N
; T1 X' N; j' I- }% P        UARTPutc('B');: U: h0 x% o" D- y0 n$ F
        UARTPutNum(int_sum_dv0);+ a$ p. d; N  h- n- y) A7 y/ v
        UARTPutc('\r');
" u0 A9 H2 z3 P  j& \- @        UARTPutc('\n');
/ W1 k+ }1 o4 a
9 s3 \, N, H" x+ q0 Z//        int compareFlag = int_sum_dv0 > 1.0E+8;
( Y, t9 M6 L0 @! R
  l' `, q; n1 s/ w  \6 i4 ]        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?0 g/ V: `* p/ E$ [2 s
                UARTPutc('C');& c, o8 s: {' C& i
                /*  比较信号能量 */
* C: Y- m! J. y8 `; W# U; s" w+ k& A4 h                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
& t. T5 C1 B% X' ?//                yiDuanShuJu_mean = 1000.0 * youxiao_k;: i1 o+ j* x6 J( z0 |
//                for (ixstart = 0; ixstart < 1000; ixstart++) {) ?6 P& V7 k0 G- s$ w
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
7 A' J. T% V  p& A( q; ]: ?' f. Y//                                        yiDuanShuJu_LowMean[ixstart];% l8 {/ T# i4 \
//                }# c, _& B$ r; S$ Y) ]2 M% h
//8 ~, v- Q0 u- ^/ S. n4 [' i2 Q
//                youxiao_k++;
5 J* q+ f; S. C4 @# ?//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==8 B; W" }, G  I: W* v
//                        /* 感觉要取21个数,即0-20, */" ^0 N% H7 D4 N( {$ e
//                        enough_data = 10;//有效是10,无效是05 p: J. }7 g, @( Q5 @# l: O
//                }
$ q2 ^; ^5 ?7 b( ?( _        }, d% z8 v& R5 m# G9 h" m

- q( ^6 J( s  U$ W9 J9 Y! R% J
6 ~+ z6 |, h) U+ N2 u7 s7 H        enoughDataFlag = 100;' `6 P8 ~% F# z" A
        enoughDataFlag = 1000;
+ m3 F3 s, h& R6 ?' s        enoughDataFlag = 0x02;
0 s; `7 W% S* W. o        enoughDataFlag = 200;
# N" [6 i5 y, U2 T& ~% [8 @9 G' f) ?8 E5 I( z: o7 ~# u- m
        int myfuvk1;7 S6 r0 O3 i( `3 j* c
        myfuvk1 =11;3 j5 p/ A% |  l/ H6 F4 W8 |

& J& v; I2 O9 p; B% W+ W
. c6 m2 J- w* ^, k5 J& W        enough_data = 0;2 q. k2 H4 \9 l7 e. n
( O$ b) ~. A% u8 T7 \% F/ d
//        if(enough_data>50){
3 @; s' g' a% J, }# n- `, m, I//                enoughDataFlag=0x01;+ ?9 v  j% k% m- l) M) ?3 j; r
//        }else if(enough_data<50){" l" }1 \+ x5 s- _8 Z8 I
//                enoughDataFlag=0x00;//0x00还是不行
) P5 P5 e; K6 n9 _$ F4 q4 d- K//        }
# n3 H$ t2 ?" `. j8 t" W& a' p; a/ [% O2 K) Q( Z
% g0 u5 F$ C+ y9 [; X
        oo=10;
2 a/ {8 J) @2 V* O4 z        oo = oo  <  5;
! @4 o1 L+ h0 J/ w' }        if(oo){* @9 L$ j2 S) N
                ii=0;- L1 M: ~4 Y, r6 W( Y2 \! k( c' G
        }
3 P) y0 `4 K0 K5 z0 }        if(oo  <  5){4 b) O0 R$ R/ W( m, y
                ii=0;, S3 s& w$ b; K  O( ?% t
        }
6 w- Y9 i, a: ]7 g1 u+ ]        if(oo  >  5){$ K5 Z/ ]; W- b. c# q2 D
                ii=0;
" x# S  |3 [5 i7 C, _. x! L7 I        }/ k1 S% d5 J6 u2 |: P/ k+ K7 x3 B
5 E3 k% @1 d  O' W  E2 g
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */0 a, H7 E  q% b- @) z- G
        /*  如果数据足够才执行主程序 */$ P% n& Y8 t  J7 K3 H: P7 W
        oo = oo  <  5;
6 q* U  M9 ?9 g8 R2 h5 C1 Z2 C        enoughDataFlag = enoughDataFlag  <  5;8 C9 r% b3 Q4 n  g- n
        if (enoughDataFlag  <  5) {
) W( U) g" _. r- M: d) K//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0' m3 Z  p& C4 Y% f% c% ^
                AGC_AGC(&pAGC);  s2 t* H8 `$ r
0 J% a0 `" M. T$ q; X
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
5 y8 I! n- ?' n8 q6 S3 U                FIRDecimator_FIRDecimator(&pRxFilter);
4 h6 \6 D- v- ?1 ]2 F8 `+ {, ?5 a- f8 {4 M' G$ R" `8 s3 @
                /* Downsampling */6 l; @7 Q2 ~* O
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);1 P, h4 s0 q; o% K1 Y0 m  c

5 F) f" g, @* r6 ]  q, @4 h5 T( T                c_PreambleDetector_PreambleDete(&pPrbDet);
7 _1 {8 K2 |% K7 x7 T
9 Q" @2 s) g$ S3 t  |4 f$ L                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */& M! y7 |0 f  c) i
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
6 M5 K! a( [" q( s% |  V4 ^+ H                /*     %帧数量=100 */1 F# C2 @, a$ k7 U# f+ t1 R! |8 G/ q
                pFrameSync.isInitialized = 0;; s9 I3 N3 |. b8 N
  a* v4 K; v' o/ X2 N
                /*  [EOF] */
1 a1 B* T* ?. @" n                /* 前导码长度是13 */
, C# E" _% f* {0 W) p' r                /*    %qpsk */" C4 B3 `" [/ _2 ^) P  h/ w! C( \
                pDataDecod.isInitialized = 0;# R4 y1 G0 P0 k  d, \# o

, H% j& e1 U; D                /*  end */
8 P  S& C4 p) X5 q: ?                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */; x! ]! c$ A7 S8 p
                /* Convert 3-dB frequency */* C# x& M+ F, F* k4 g6 N# Z
                /* Convert 3-dB frequency */0 P; n9 _) _9 d
                filtfilt(save_buffer, usable_left_filtfilt);2 y- v) [* i! ~2 b: E
                for (ixstart = 0; ixstart < 81000; ixstart++) {
* ]: i3 n( u" A0 ^8 U1 K                        usable_left_filtfilt[ixstart] *= 2.0;2 P  O7 V% E" E4 n' S' `
                }
4 R: _1 n6 w2 ~; P$ ]
9 H) p) e0 C' q) l# Q: ?4 A! \, z                /* 注意乘2,处理幅度 */4 s" m& @8 c2 l! {2 |5 h+ ~
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */& c) z. k4 L% s
                /*     %% 行列转换 */
/ [, X8 L7 W% h+ c                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);* S7 B! |) u# k' S3 g/ Y* [
                for (ixstart = 0; ixstart < 81000; ixstart++) {  d' E: I$ [/ @8 q
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]* j% j% M5 d6 n$ N4 F  Y
                                        - yiDuanShuJu_mean;7 ]$ w* \' W0 _# \9 R' I5 h5 ^
                }2 [0 K* `7 w+ ^- i9 f0 J

: U; V" O- {: r( I9 y                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
; m: e" X( O- `, d                ixstart = 1;, `) T+ j4 U- @% |& U) m
                mtmp = youXiaoShuJu_QuZhiLiu[0];
8 I% d1 w5 I  w+ i0 P                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
" Q+ m$ J3 i6 [( g: ^- t- r/ d0 a& i                        ix = 2;0 {; _' s$ \# _6 I, f+ A- H4 ?/ q
                        exitg2 = false;
: p* Y  t! ?( `: y) D, l6 a                        while ((!exitg2) && (ix < 81001)) {
2 N7 j0 t+ f. K                                ixstart = ix;
! R& L/ K$ Y6 d* I                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {/ e+ t( G- o% k  N( i
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
' @6 U  B, w6 M                                        exitg2 = true;
3 S3 u' y- g: E+ R( e$ ~                                } else {& C8 [' d. r3 }) P
                                        ix++;
/ j# v7 A6 p' z& f) r" z                                }+ h8 A) ^2 q- w/ t9 Y
                        }0 Z$ T' F3 }0 t
                }7 b' k/ m4 j* y: p( P
: M' u5 j7 B0 r' h% ]7 K. j: i
                if (ixstart < 81000) {  F. u" f$ |# ^& i
                        while (ixstart + 1 < 81001) {. t; X& E. G8 i2 v
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {+ u) k5 H- ^7 B7 }& G
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
: A% g3 |3 P$ ]/ A1 X( m                                }
; [4 e6 h2 S( |& B6 _* D4 n  B
  T6 g. x' _9 k% K8 E                                ixstart++;; i8 d% f& i0 J
                        }9 R& `8 s* N; X) M7 c# c% }
                }
' r6 {8 M& H: }9 c( R: g! |; c& x: g* ~; T+ P: Z  ?
                ixstart = 1;& L' m* n$ D2 ?/ O7 P" }
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
# u! r  d" e$ j! d                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. u# u, D) i: `) C) C* G5 a
                        ix = 2;1 T- C5 {+ y0 k% ^- }; h/ j% h
                        exitg1 = false;
6 \: T( }, x! Z( _9 n                        while ((!exitg1) && (ix < 81001)) {4 L1 S+ e& s/ T2 y) y) Y0 m
                                ixstart = ix;
0 B: ?' }* F  L# F0 p0 B+ }1 {9 e                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
* J, H' v9 x& Q( \4 M                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];4 j' [; a; r1 y! [4 q# G
                                        exitg1 = true;
6 h7 T2 G$ s  G; [1 d% S                                } else {
# N2 ^! t0 I/ g, U                                        ix++;
. f, E; }' j/ t                                }4 C2 u0 A- P3 z1 s5 F9 w
                        }% y1 n  N/ Q, b' b' N. g) X
                }1 @- L( ^0 S% B! Y% V2 M5 M+ i9 z
3 G7 d  I$ F6 A9 Q7 U0 F
                if (ixstart < 81000) {
4 T+ f! j* g, ^2 M2 s. p                        while (ixstart + 1 < 81001) {& [1 [$ w- T1 U4 U( k& r
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
. _: X% p3 M; L$ ^                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];5 P+ R  z! ]% Y8 E* p
                                }9 D1 K# `. m. w
) M, j* `$ a# }( F, h9 K7 [1 _2 \
                                ixstart++;
" ^; R/ |$ J$ ]; O- k                        }0 B1 i" U5 \5 V. Q- V! A) u
                }' i" S9 M5 \( D3 ]* A
* G! `1 ]1 p- C) B- q6 u. O* y! G
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);7 Z3 r6 s" G& k! x$ r  c8 g- d
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {3 I; g8 I  w+ C/ @# G' e2 }( m
                        yiDuanShuJu_mean = mtmp;
) `. \2 R6 {5 Q( G# R5 I; w2 f                }+ [; |- |2 w1 t2 [
0 J  L' Y. [) |. A0 [( S* X/ ^( R
                /*  找出极值 */+ p8 v2 J$ V& s# O( y! a# P
                for (ixstart = 0; ixstart < 81000; ixstart++) {$ B) T. ?9 l4 @! q% J
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
+ `% e8 u9 Y& t                }8 t& Z$ @7 i  y7 f2 p
0 |! \* Q5 y8 Q
        --------------帖子字数限制------------------& l( Y% ^( O+ I! B: B
}
% c4 C1 p* I# v6 F& j
; N( L9 X/ |* F& y* E2 S0 Z8 A& R4 `$ v0 P

本帖子中包含更多资源

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

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-8 03:43 , Processed in 0.053474 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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