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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 # j0 X. H0 S# U

- n- e4 L$ ^  A& |- H  Y  V% i各位大神:
, ?* b. a& n' @. F     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
% @! T9 E. q% W$ @7 X      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:+ H' H$ i' ]0 \1 U
3 S+ p1 v) ^5 M# a( d
     
( H8 C4 L4 j- n' u这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。! `* g6 b' s8 O3 E* r
. S5 [$ C" M( f) l  \0 R
并没有其他线程
2 E4 [( T1 t. c' j9 I2 V反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
* k# M0 n5 @. U! y也说不定是和堆栈有关系。。。。。。: o  i. j$ _0 R1 ?) a  W: D
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
! \1 U: p# T7 f. U( K6 b  {  b0 b( J* w1 {# z

3 Q2 w$ [: P# y/ |4 G0 ^; I1 q: L7 o6 L0 |
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
5 P* n" k( e) _! r0 ^' y- D$ @- k
2 [* t) m) x. h  T0 r4 k+ j: v" }" C& }$ R5 W: f( S) K
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];4 X1 J& c% e) G! V9 K! X$ [) W5 C
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
8 e" K# W& l! O8 P7 c6 _- j
; d% ^' b3 W4 [8 R" a0 Pboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
; V5 ]+ I% W3 @" r5 {                const double data1000[1000]) {* P& |' v/ m# g

4 s, ?: P1 U6 v; x1 X' D8 X$ ]        int myfuck;7 M0 ]1 L7 N$ f3 v
        double yiDuanShuJu_mean;
- ^: y/ G$ X. Q& h* C& z        double yiDuanShuJu_LowMean[1000];5 v% Y; K' a1 X$ y! g' w; r
        int ixstart;
4 E6 @7 k1 l7 ]' j        double dv0[1000];/ r1 K- e' Y2 Q! M& |7 U) r: v
        comm_AGC pAGC;
- ?( c; B! e& j" }% i        comm_CarrierSynchronizer pFineFreqCompensator;
3 x' \; [1 q+ [0 C+ i* }        dspcodegen_FIRDecimator pRxFilter;, K+ ?. K) e* i  e) L: l; z$ l4 q) p
        comm_SymbolSynchronizer pTimingRec;
+ W/ A9 B6 |. H8 H/ X        comm_PreambleDetector pPrbDet;( z% G" G3 U' K- ^$ _- I: Z
        FrameSynchronizer pFrameSync;
% X2 x, |$ |) Z4 [3 H8 K& `5 F6 D        QPSKDataDecoder pDataDecod;
* {1 M  M  Z0 `7 q, V  E        static double usable_left_filtfilt[81000];
' D& C2 w5 }$ s5 l- E) I: h9 v        static double youXiaoShuJu_QuZhiLiu[81000];- B6 ?; M9 g- B' L
        double mtmp;% }+ Z* B$ [3 [5 I$ n5 L% ]1 e! J0 `
        int ix;4 ]& p6 R, z# ?1 ~
        boolean_T exitg2;, O9 I, _- R5 H$ s0 G: F$ \3 g
        boolean_T exitg1;
5 u1 C' ?' b5 k# M* s        double YiZhenShuJu[800];, T/ A$ ]+ B% Q$ C+ N3 h, t
        double dv1[800];
+ u2 @5 g7 b' ~3 ~1 o
( R( g( Q1 @  H0 R
2 _' ?% \( b7 i' v0 L        double b_YiZhenShuJu[800];+ t: Q4 }& ^: z- p; W* K* b. N% w
        double I_filtfilt[800];
  Q/ s, R( E  Z" l' @; K        double Q_filtfilt[800];- w5 }/ i8 T' ?6 V# h% @5 u
        creal_T b_I_filtfilt[800];
" U2 w/ f. v3 ~8 {' B  ^1 K8 f: k        creal_T b[800];
3 g3 E. ^# B" e" B0 l. [2 F        creal_T RCRxSignal[50];/ O+ ?& \/ c$ x) ?% f
        creal_T fineCompSignal[50];- F8 B4 j* s, {6 M6 S/ @- R$ {
        double phError[50];
  L2 q6 V+ _+ _) Q7 M" Y        creal_T timingRecSignal_data[28];: X/ V( z8 C3 {+ y9 l. j
        int timingRecSignal_size[1];8 _8 l* [3 ]4 T0 S( u1 A
        double prbIdx_data[28];( P4 @' g6 Q9 e, w. o5 |. \
        int prbIdx_size[1];3 @8 p/ k! h% n- `0 [* x+ g
        double dtMt_data[28];
6 O- t# r' ~4 ?* G" [# f. ?        int dtMt_size[1];
/ y" F8 z- n5 w# _) ?        creal_T symFrame[25];* Y' }3 Y# x6 @) M* ^
        boolean_T isFrameValid;  C  }. r1 Y4 ^# g, G/ }- a! ^( ]
        double unusedU0[3];
- Z8 b( P* q3 Z# m; I, Z: i* }
, N( }  @( \1 L  D- o        //调试过程中的变量
( b" a8 O& R2 s/ T4 f        int  enough_data;
# e$ r+ [" P2 }  ?0 s! g' Y/ B3 o: V7 Y' U8 |4 H5 w3 ~7 J" ?
        int enoughDataFlag;
; e6 n  l8 d6 |/ A" k        int yiDuanShuJu_mean_int;
4 `" C" F5 p" ~- k0 e" B8 b        int int_sum_dv0;
/ U7 F" s/ H' K& X        int oo;# i5 p1 s* j8 v# V  g7 ~) B
        int ii;
" r) R' V& A5 A3 y; ]( [        myfuck=10;7 z+ H/ d3 U2 h
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
, b1 U( r$ |0 d4 {" c        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
  Q+ A) q( m# s3 E+ \1 ~- M# @" x+ J$ k
        yiDuanShuJu_mean = mean(data1000);
$ l* q: ?: n$ o4 |! @* p" _, R* K* R( V" Q5 ?
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
  p$ f4 Q& R& J- j: G        UARTPutc('A');" @  ]$ r7 o6 c6 ?: k2 ?/ T" ]
        UARTPutNum(yiDuanShuJu_mean_int);
& Z3 \2 C5 g4 F9 C4 F& X0 E        UARTPutc('\r');
0 m: b% f% r5 r# o) ~        UARTPutc('\n');
4 r# y2 v; e( `$ R! R9 K
1 N7 V& g3 F. p0 I& |; e+ @        for (ixstart = 0; ixstart < 1000; ixstart++) {
' s, d7 x- j1 G8 I; b                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
  Q! ]) U2 a% p, O# a0 Q$ l/ H# T$ J+ C        }
6 e- f/ g8 w1 \+ x/ m6 f( t8 k, d' v& K" |
        power(yiDuanShuJu_LowMean, dv0);/ G. @5 r. |, e. r0 i/ A

& a- ~+ L7 ]# h3 w; |" h- P        int_sum_dv0 = (int) sum(dv0);
/ e) ?5 J- V: o$ x+ d, S# }" C# X
0 t+ j* w9 Z& z0 Z/ t1 F% |# T* |        UARTPutc('B');
% i5 P  Z, J! U1 P$ @        UARTPutNum(int_sum_dv0);. p1 S+ s7 s$ ~6 R" ^' f
        UARTPutc('\r');
" u9 J+ Z  u, Z* U0 R        UARTPutc('\n');
8 n3 m  s' H' s9 G9 k) x% Z( _0 y+ S* V$ k+ u$ T
//        int compareFlag = int_sum_dv0 > 1.0E+8;
/ d  _; Y# \( O  A9 x: q4 C0 p* j9 I
. v9 O+ v+ v5 Y% x4 y0 G5 a" }        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
% o- K' U; M8 n( m8 f+ i                UARTPutc('C');; I& l' W# d+ M, R
                /*  比较信号能量 */
# H7 z( _- g( c* `- I                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
8 c; k" l1 i; X; Y: H. @8 B# Q% m//                yiDuanShuJu_mean = 1000.0 * youxiao_k;, t+ K) i( b- J* r& Z6 _
//                for (ixstart = 0; ixstart < 1000; ixstart++) {4 o# V$ K+ a2 _6 b/ w; B
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =( A8 d- o# j3 Y3 A  Q
//                                        yiDuanShuJu_LowMean[ixstart];
9 b" o$ r. v4 Y( K0 T//                }; d" A5 X$ {$ h
//
  w3 X5 S5 y+ c4 f//                youxiao_k++;, L: S6 {, l% V& m# m
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==2 I8 F4 y; a0 W$ H6 b
//                        /* 感觉要取21个数,即0-20, */
1 j% Q5 q- C, D3 V6 D; Q//                        enough_data = 10;//有效是10,无效是01 H' _7 O2 m  D2 s) g7 R: `  V! x: @' ]
//                }" |4 c: C( W! ?+ o
        }& X: g7 {0 P/ g  [" c8 P
' p$ {0 F7 [: _/ h
2 c$ [8 U: f0 J
        enoughDataFlag = 100;2 d' i" {' `8 Y1 V
        enoughDataFlag = 1000;( `) |# v6 c5 r$ J2 ~# M) I
        enoughDataFlag = 0x02;
+ I% @: O  v& I$ h8 m! d- X7 ^        enoughDataFlag = 200;  V$ H% v9 F( j/ x6 y" F

3 W- V, a+ G7 U0 c4 a4 p        int myfuvk1;
) i. z( ~: ~( @# Q5 z. i* w; }* S        myfuvk1 =11;
. k' L( Q" F/ d: v0 b& v) j' z; ]( J, x* G  b2 d' B$ B* y

! ]# @& i$ X. C0 u) b' ~        enough_data = 0;$ P% g7 ?' i# P
4 @/ N2 `9 d- P, f7 P- Z  c
//        if(enough_data>50){3 w2 ?" y7 \8 `2 o" J
//                enoughDataFlag=0x01;' [( m0 }2 E6 Y1 G5 c
//        }else if(enough_data<50){
+ o0 U9 H1 B' Q7 b//                enoughDataFlag=0x00;//0x00还是不行
) D7 d) m' l  I$ _//        }9 }. n( |# U) C; p6 r

) ~3 T6 L* J3 \; }* I6 o. g
1 t) ]: ~/ @) G  ^        oo=10;5 x% K" b$ j0 p3 _/ X& C
        oo = oo  <  5;
4 F* h( _% g# q4 v1 ]        if(oo){" a( k, Q- x4 \  U0 j8 @; u+ O3 z
                ii=0;
; B' k) f2 K# Z! H0 F        }; a6 A8 v( \. O; V7 ]
        if(oo  <  5){7 t. |4 L5 O4 v& {* ^
                ii=0;% D  k6 W0 I+ B3 M( f/ i2 N
        }
# S- c9 E6 ]5 g8 G( H6 ]  w' [        if(oo  >  5){! u! E2 W. q* E  U( M
                ii=0;
- a& c8 C0 B. c( d5 `4 Z. J3 J: q. w8 Y        }
% Q5 h! W8 l  w/ v9 u
3 b# h9 N4 l) ]" w* F  r        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */6 a1 ~% Q# j+ X
        /*  如果数据足够才执行主程序 */6 r: Q  D8 c( B0 Z# x3 d5 E4 y
        oo = oo  <  5;
4 W- D2 b$ n8 h- |  {        enoughDataFlag = enoughDataFlag  <  5;1 x/ ]) N6 S$ f1 h& ~5 @+ ^% p0 v
        if (enoughDataFlag  <  5) {
' @. Y! t* g6 e2 Z//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0! Y/ C8 X* d" x# b3 O' E. |  a
                AGC_AGC(&pAGC);
) o* ]1 w" Q+ p! n) }2 Z' p& n& t1 x6 {0 b' G6 X% T& Z/ |# w* a
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);& w; u) u: [3 ^4 g4 x$ k: ?
                FIRDecimator_FIRDecimator(&pRxFilter);4 M/ E1 m; Q( W- h* _6 L0 l

) T, V4 V2 Y: y$ J                /* Downsampling */
- m/ x% {- e* Z: [9 T7 E' ~                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
& q& v' U* o6 E) X- \
6 J' {$ R. i* W4 [6 x                c_PreambleDetector_PreambleDete(&pPrbDet);
% d2 x% s2 k' a4 w  Z
0 i: J3 y+ Z8 p                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
( A6 u2 E2 s) _- b3 |" o" T' B                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */: p* z; T5 E# R3 S' M. _6 y9 {
                /*     %帧数量=100 */
% Z( M  N' M* Y9 g1 b                pFrameSync.isInitialized = 0;
/ s+ j6 b2 v! N$ i& s2 u& Z
. L' w) \. I: l  j  m; Z3 Z! }                /*  [EOF] */
2 J- u) C2 o1 B2 L9 R* d1 _                /* 前导码长度是13 */% Q# b8 {$ |. b( P
                /*    %qpsk */
& v$ N/ _  R6 O) a- ^2 K7 M% L                pDataDecod.isInitialized = 0;: i+ ^& L# n! n

. X" Q  j' v  I                /*  end */
4 o4 L4 f! e, r: w  u                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
  Y$ |! w- B' A                /* Convert 3-dB frequency */; G; B7 x1 h: V7 H& H3 a+ u
                /* Convert 3-dB frequency *// i9 `2 y, `/ v6 F. l. F% X3 Y3 M
                filtfilt(save_buffer, usable_left_filtfilt);
0 k8 U  Y  o1 y0 H# s& x# G                for (ixstart = 0; ixstart < 81000; ixstart++) {+ p- B! w8 c! {# R
                        usable_left_filtfilt[ixstart] *= 2.0;7 h! X8 U2 E# c7 \1 q9 \. {! I
                }
) D( g6 L& z' h2 N- h4 Q
# @" @$ T* x; e1 @; K, m  r  \                /* 注意乘2,处理幅度 */' O* B/ \; M' E8 O: a9 J, G
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */: o4 j( e# u! ?1 S0 _( `! t" i2 N
                /*     %% 行列转换 *// y( [1 z- N1 t+ ]! M
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);- C: g( c; q) d5 r9 ]
                for (ixstart = 0; ixstart < 81000; ixstart++) {& F! l. x; v; \; U5 a7 H
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
" c2 K( \5 |: c7 _! f2 K# l9 z1 w0 v                                        - yiDuanShuJu_mean;  Q5 q& k9 Y. ^; N9 C" B8 i1 E
                }: E8 k# L, Q2 q% z# G/ H4 j6 D
8 b( j3 v* [# C9 p* @( [# A
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
5 W/ o, d6 r& e                ixstart = 1;
7 L% M( z* K: R7 u/ g) ?* Y, X4 P! v! L                mtmp = youXiaoShuJu_QuZhiLiu[0];/ C- @* E6 C# v7 @: G
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- t3 ?1 z5 y, @2 k8 H                        ix = 2;
& ]3 S, S7 n  V1 }0 o                        exitg2 = false;0 D$ b# [2 c0 P3 i# z& u1 O
                        while ((!exitg2) && (ix < 81001)) {
( ^2 s/ P: }; c- M* e8 _8 U& g$ {                                ixstart = ix;
, V+ s' H' k2 B: D! q: {  e. P/ w                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ o4 w0 {1 v9 i- j
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
$ s" \. s- X* E, r  c8 G  W                                        exitg2 = true;' B/ h5 g+ N- j$ C+ `( ]
                                } else {  ]  I  ?! v1 v( m
                                        ix++;& h, D. {4 Q3 K" L/ d0 v. p
                                }" c1 l1 I8 e" @& C
                        }/ d/ ^3 L  v. I, z- ~7 D$ L
                }
( m  q! R) C. B" v& x- N
4 K& j' x" ~- r3 \                if (ixstart < 81000) {
/ \& d. V7 L! n+ H! D# q6 D$ X  l                        while (ixstart + 1 < 81001) {/ n, f: R6 z0 N" a+ h7 \( o% z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
! L. Z, K2 W5 O! V( o. @                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];0 r& f- i, h+ k- j: }, I6 Q  W" D; Q4 C
                                }
1 C5 @# B( T" u+ n2 v) y5 a! {0 a
- A. l" {$ P; W6 t! \" q/ Z                                ixstart++;
! A2 \9 E  R1 n# T2 v                        }
( x" F: u7 ~8 x# @- L                }9 l+ }7 S1 s& y& K  L! T

% Y" q. G0 c5 t                ixstart = 1;7 j& \9 ^: c9 ~' m! A, j; w, L
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];9 X: W6 t; @9 j8 L3 y5 ^9 f5 r6 N
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {5 P& C' N. v& }$ B
                        ix = 2;
; h) b8 g6 H  v                        exitg1 = false;
& [; G. W7 l; a# j# _                        while ((!exitg1) && (ix < 81001)) {
8 Z/ R( ]( \/ n; r% g! J" ?% u  Z                                ixstart = ix;
. f) l" b' M  c; r, p                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
7 ^# J2 @5 c1 x- W, J- E  m                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
. U: p; q8 h1 y+ j0 A+ v7 P                                        exitg1 = true;6 m3 u$ @# ?, t3 }; u, G2 Z# P
                                } else {& R+ k! m; l8 L, s: j4 L( C
                                        ix++;
0 m) o! S5 g& H0 P                                }. ?; J/ v' z9 K& p6 D! C
                        }
$ f7 M% ^7 O9 N1 N$ d  a( j* Z                }
1 R# a1 S5 P. _5 q9 f5 f) Q& r9 W
                if (ixstart < 81000) {
! \" @9 s( `; Y6 s3 I0 i6 g                        while (ixstart + 1 < 81001) {
1 R* N. G' S7 p  ]- Q% h# j                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
# v: u. N" q& G0 ?1 _! j0 Y                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
; E- _9 F; f1 L/ S. G  t                                }2 s( F% i& {2 M: ?( B8 w: m

0 ~! P4 y$ r! O" d4 W                                ixstart++;
) ?; t/ t; I* D* R3 Y7 ]                        }
0 B5 c+ H, X- b4 r+ M% [                }( V7 m  I: ?2 l5 P' b2 o$ I# U1 b
, b' [; s1 j7 v% R
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
$ v6 g* T' i- \7 h3 N3 N                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
  r0 k) W4 _* c                        yiDuanShuJu_mean = mtmp;( q8 a; W; `5 p- J
                }( [6 \) X  x& X
* Z' Q  n. T9 |) ?& f. P, h8 g
                /*  找出极值 */" F* z3 S7 k+ ^, L6 I  g7 c
                for (ixstart = 0; ixstart < 81000; ixstart++) {
) _& m+ S* C3 L                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;  G7 ]' m# s' P
                }" h8 }3 n# ~1 u# S3 \, k
3 Z- a" m1 F, c/ M5 p& }
        --------------帖子字数限制------------------
6 o, J$ I: K0 ]' t% D# R}
, D$ O0 g( Z! @$ ?* S: F4 p) ~
$ u2 Y  ?# F+ h3 `9 `) m$ F0 e  p2 z4 Z% C2 C$ y" t& C3 c

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 16:50 , Processed in 0.043960 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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