debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
# m' A5 v$ [7 @
1 c3 V7 z8 g& r# B) W各位大神:
- X7 I+ J; o3 X3 T3 R# u     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
5 h& R5 Q2 X5 Z+ f      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:7 s: @; v" ?* R) m
9 t! e! U0 c  G! W7 `4 d
     
7 V3 }. ?/ D! m- z- K这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。4 g" N# J. d' X( Q& _
/ g8 t" l/ F1 J6 ~5 d  z& p9 [! u0 E
并没有其他线程
& D: Y1 j0 d- i" _反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。+ a6 D( x' p, h" Y. d
也说不定是和堆栈有关系。。。。。。: S" e5 l* }5 L+ u9 ~+ _' B
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....8 @0 D& N* p5 S8 e  U2 F0 |

) M/ M' T0 s% T  I
! Z! n! N. g5 ]; K4 Y1 D* n6 A$ n7 y1 q
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
& e+ A9 J! T+ k  W8 I
; K5 X' J$ `- @, h: b( x8 W) ?( y
4 i4 I1 S( S+ C2 `附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
$ ^) r* J: h" \7 {        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。6 `, I' L/ `! i! |) ~/ Z

& M9 v  M4 E5 }; H: Iboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(& m7 I4 R0 ^$ ?1 W8 C7 {
                const double data1000[1000]) {+ Z! P  s) j1 Z3 \0 I
# T( _, Q- A# j7 z
        int myfuck;/ }$ o/ p- D7 J1 K
        double yiDuanShuJu_mean;8 ]' ^8 ~& O7 u" c" `
        double yiDuanShuJu_LowMean[1000];
) F" s& `! \( K+ [+ F6 \        int ixstart;$ J3 ~0 V$ L( u% d3 V. M+ g
        double dv0[1000];& W- Y1 q" g# d. q* o  Q
        comm_AGC pAGC;
- B8 d( g# v, L* ?+ h% N( }        comm_CarrierSynchronizer pFineFreqCompensator;
& E- L& j' h$ Y- @/ k" n0 i9 A        dspcodegen_FIRDecimator pRxFilter;5 t* i! }! S+ f
        comm_SymbolSynchronizer pTimingRec;+ R( K, G: I; h. z
        comm_PreambleDetector pPrbDet;
* b2 _8 Q" v' I6 y  A! V& Y( K        FrameSynchronizer pFrameSync;
  o2 b7 d4 }" u( w        QPSKDataDecoder pDataDecod;
* _0 u+ X# @9 B- |9 Y        static double usable_left_filtfilt[81000];
$ s: f$ J' R2 G3 \+ k        static double youXiaoShuJu_QuZhiLiu[81000];" p* M& V4 ~7 c5 n6 `$ R
        double mtmp;
: Q" O" P8 p+ N: G% M. x        int ix;8 v; O6 i6 g/ L) A) F- H6 z
        boolean_T exitg2;( V, d5 u7 ~5 H) U7 M+ D
        boolean_T exitg1;
& ^; A9 X* V  ^5 Q        double YiZhenShuJu[800];7 J5 Q0 r6 l+ O3 q9 p
        double dv1[800];1 r6 M3 n2 X. y

5 N1 K! H7 O: z" [5 A
' c# T; E1 K6 J: E# p% \3 m        double b_YiZhenShuJu[800];
) l0 B+ L/ [1 W# K        double I_filtfilt[800];
- s' w* x4 P, F: Y        double Q_filtfilt[800];
' K- S+ W: i- j" Y/ z' P; @# d        creal_T b_I_filtfilt[800];: S) t/ Z) T8 N$ J0 L
        creal_T b[800];0 r2 j' @. q$ ~$ [% H0 j
        creal_T RCRxSignal[50];
1 V/ S, r) R9 w& k2 l) i' f        creal_T fineCompSignal[50];: j. Q* u1 _& ?
        double phError[50];  K, @( ?5 ~% B5 J
        creal_T timingRecSignal_data[28];
/ H' N& h( ?3 n2 p8 ?! F        int timingRecSignal_size[1];
: |, g2 J+ u7 O7 X        double prbIdx_data[28];5 J6 \2 E1 [& G8 l3 |
        int prbIdx_size[1];  J! ^% P% t) D) e% n, ?
        double dtMt_data[28];
3 p: Z; d; A! }( `1 ^        int dtMt_size[1];+ u. |. i! i" n9 f/ v) T/ D
        creal_T symFrame[25];) ^0 J; z$ f1 B  {2 z
        boolean_T isFrameValid;# k) B6 l2 O' b) Z
        double unusedU0[3];
3 I  U7 H' b7 S& Z% P( H
0 j: `; _7 |8 T5 W% a; R        //调试过程中的变量8 T- R9 u( A; D. z  \- r
        int  enough_data;- C4 y( N6 ^0 X  J3 l

2 W. m& _# k3 @1 x* T5 u1 M        int enoughDataFlag;5 A2 m( C! K# S5 W, J
        int yiDuanShuJu_mean_int;
( m# I" N3 ?* ]' [6 h1 }* ?        int int_sum_dv0;
: i$ D' |! v8 [# C9 ^6 z6 N8 r. ^% l        int oo;
. M' i1 O  `) m        int ii;
7 F: d. F% b0 P7 U" ]# ~, K5 y        myfuck=10;. r. R4 l) \! r2 G. Y$ e  y
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
3 `& u) K4 e' w, F! g6 E& V        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */" `* h$ z' i9 \# F7 E! c) W0 I

7 D2 F$ ~5 ~* z& b8 r& E  c1 r        yiDuanShuJu_mean = mean(data1000);
8 j. h+ U! V# x+ I  F  ^1 }( p% Y( ^* o. G/ M+ s# n& o
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
: n" ]* T3 F$ c" j* N4 c0 L! J. w        UARTPutc('A');
  b, \' u4 h2 i! v6 j$ U# Z        UARTPutNum(yiDuanShuJu_mean_int);6 p2 |4 F8 x3 k2 r% p0 @, X& ~
        UARTPutc('\r');7 _) k* d; R" k& i" }2 H
        UARTPutc('\n');
: F& |) h; j! N3 q0 D4 V8 g7 t0 Z* K4 O1 }8 o
        for (ixstart = 0; ixstart < 1000; ixstart++) {& s9 P+ {3 M9 r: c9 X2 |
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;2 z4 w4 f: e0 }. z- N+ R4 _
        }
- |: m8 P$ e7 _0 j+ }+ Y3 Q  {/ A8 w
        power(yiDuanShuJu_LowMean, dv0);
  J0 x. ^( U: X/ u1 D& t; R& L1 Y$ R# B% {
        int_sum_dv0 = (int) sum(dv0);; j  S1 r4 j9 j( t
. T/ N8 g  d, Y& l+ @6 T
        UARTPutc('B');
' j% ?' u! x3 v/ P# r, L2 h        UARTPutNum(int_sum_dv0);
7 C. Y3 B; T0 h! v& m! y        UARTPutc('\r');$ Y8 |! p; @/ }1 E
        UARTPutc('\n');9 e. M4 u6 M% g, O5 w

! ?) z6 v. D  r7 |! J7 C//        int compareFlag = int_sum_dv0 > 1.0E+8;6 x. s. J7 ]5 q( s9 N2 w- j5 D

" i: @: M3 O# j6 _8 u! p        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?) `5 \$ T5 m2 S# L% W8 R! D# f. B
                UARTPutc('C');* s/ z3 W0 |' \/ V: |/ |
                /*  比较信号能量 */4 v5 l& d2 M& W6 l  P2 V4 D$ l
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
% z; }  J) H0 P8 ]//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
+ ?% y: @+ D' `, j5 X* }//                for (ixstart = 0; ixstart < 1000; ixstart++) {0 s  n9 n" X* a; {1 e/ C
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =) Z' W* g+ X% y4 h; ?! i- _8 q
//                                        yiDuanShuJu_LowMean[ixstart];* q7 z& L! J7 a: U5 J
//                }
$ ?+ U% ?4 [# k+ O. [/ z//( \# F' t6 A3 c9 @9 _2 E
//                youxiao_k++;
/ @+ `8 k% Z: n7 z//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
' v) o( E9 |  Q% h# t//                        /* 感觉要取21个数,即0-20, */9 Z6 r. E) ^1 R6 m% I5 U
//                        enough_data = 10;//有效是10,无效是0
  b* G* a* v, h) g' I$ N" p2 ^//                }0 L! k& \9 d: P! O1 n$ R
        }
' \6 }# M# V1 r4 y. m3 ?6 K1 G" d7 ]: y9 Z

/ ?4 u( a) G, K        enoughDataFlag = 100;
+ r* `7 D7 H1 _        enoughDataFlag = 1000;" _5 N7 M1 ?7 r1 q; Z3 M3 K- _; s, R
        enoughDataFlag = 0x02;
8 V2 _9 A2 m! l1 ^8 S! b        enoughDataFlag = 200;$ S, U: t) j! F7 l. ?' X
+ E/ b" N  C; k/ X
        int myfuvk1;
3 h5 S. [# [; u        myfuvk1 =11;
9 z; U- @3 i9 \) K  H9 ?
0 o; j* A- _3 D, I8 A% _" r" w1 o7 G2 ^' A: O0 ^
        enough_data = 0;5 s' ?6 f# e0 g+ @4 K
' j0 R6 j; p0 a) @& O0 g' C" @
//        if(enough_data>50){
8 P2 n" v; L  ]# m//                enoughDataFlag=0x01;+ x+ t+ o# W: e
//        }else if(enough_data<50){
) l' `+ e. ?7 b$ ^- H  d* N//                enoughDataFlag=0x00;//0x00还是不行2 t. u0 _$ G: i4 t  y& H* d
//        }
: A. y& z: u* H9 J  M1 K* I6 o( [6 x$ x, x( ^

3 n& L% e/ W/ T        oo=10;
: u: t5 H; [8 [# q( i8 z        oo = oo  <  5;
  R2 M- Z# m/ L' }        if(oo){
8 b8 n" i+ R4 \4 k                ii=0;
1 _' E  w8 ^8 _+ l        }
, S% ?# C# k$ |/ n# D( Y% \        if(oo  <  5){
5 h: Q: m4 D. ~) W8 }8 \& c                ii=0;
' i9 r' o# i& r5 E! \( v' \4 C        }
# p. p) Y3 X  k. W$ N        if(oo  >  5){
  E: |7 t- v1 t5 T* l                ii=0;
# M+ z! f+ x& c+ W$ O        }
! y0 \$ m% h& z7 k
! |. m1 B7 w/ X  i$ ~6 p6 n% b7 T        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */) V. d" [- y6 a
        /*  如果数据足够才执行主程序 */) P" x* [- l  @: O2 |3 ~
        oo = oo  <  5;5 f. w/ V8 |1 q* w& C
        enoughDataFlag = enoughDataFlag  <  5;
7 r, B) t. |# G        if (enoughDataFlag  <  5) {, ]  s; [: f. O/ d8 {1 \6 L
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
5 `8 Z* c4 a# q8 A1 f. v                AGC_AGC(&pAGC);# p9 R$ j9 I! Q. A( v# U* g

$ d9 y6 L+ P. H! g7 Q+ ~                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 D$ s; q) J; u  n% D
                FIRDecimator_FIRDecimator(&pRxFilter);
8 o  ~% t$ M+ ]& g2 V
8 I; h. V* G' J% g4 D                /* Downsampling */: H7 R2 O, _& a
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
9 g$ ?: H# Y2 H0 d
( t1 L, J3 f( N) H$ t0 U- I* _                c_PreambleDetector_PreambleDete(&pPrbDet);& i/ G0 J9 @* X; \! s5 v
2 T, x7 H' d3 r* R$ ?6 I8 \- E' y) m
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) P( u& D. Z6 A  {7 k( I3 y, \# e                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
2 |5 O7 D6 [, J; {/ }) |" u. u" G& [                /*     %帧数量=100 */2 }  y5 c/ t  I6 T% @
                pFrameSync.isInitialized = 0;
1 `* L* k$ }1 C( Y# p. S; B) j; R
8 Y3 P% T- l( _+ D( d' m                /*  [EOF] */
* n6 }0 B) n, ~1 V, A                /* 前导码长度是13 */
; d3 T8 J6 h' A( l: K# Y                /*    %qpsk */: j  Y+ k; w1 y% S- [1 c
                pDataDecod.isInitialized = 0;# g' t* i  C) ^* a+ K, q) }
# }  E% k( h3 [* `% k* |
                /*  end */+ g0 ]1 _' M1 F( ]' c8 e$ w
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */, J4 |+ b5 g& \- i
                /* Convert 3-dB frequency */
, A, O4 n9 O$ [' g1 N                /* Convert 3-dB frequency */; u  J4 b2 P' Y" I
                filtfilt(save_buffer, usable_left_filtfilt);. i" U8 i6 A# ?! ~; a, [3 c# T5 ?
                for (ixstart = 0; ixstart < 81000; ixstart++) {
' @7 I# n3 P* D- r" U5 |) a                        usable_left_filtfilt[ixstart] *= 2.0;
1 f+ P: x5 z6 s6 E* v7 r0 F                }
7 B0 ~* r. P7 x$ @/ B
$ d  W; {: q/ `- d( {                /* 注意乘2,处理幅度 */
7 t5 J$ l$ R8 G+ y0 U2 ~7 {                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
' K' R9 T" \3 H& N, U                /*     %% 行列转换 */
  L$ R7 h4 q- p                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( p* Z. z- c0 e0 }3 S                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ t. C2 v/ q" \                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]3 s* R  Z/ f2 A& Z+ K8 R+ T
                                        - yiDuanShuJu_mean;
  }, o$ H+ k& g1 F                }- X( @- S! Y5 h! d5 J

3 d& W3 l8 e7 }/ R; K7 D                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */* r& B: G+ k8 _; T# z7 I
                ixstart = 1;0 \% \4 h! N, c+ N: z
                mtmp = youXiaoShuJu_QuZhiLiu[0];
8 A" ]% e0 Q. J. u                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {$ O- ~, R: s; n$ z7 s! ?7 A
                        ix = 2;7 Y0 V, l7 ]3 X6 {5 _( L2 P
                        exitg2 = false;1 L/ E0 F: \) l2 u8 f' I
                        while ((!exitg2) && (ix < 81001)) {' B# o+ \' M, I  e# F6 }
                                ixstart = ix;$ L- V; r2 p: ~. L- J4 r& X
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ S7 F! a1 ], i- X" t- }# K
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];/ {5 q* h. i6 t: D- h& s; O
                                        exitg2 = true;
0 g; d7 f- w) ?$ c8 }4 M( x                                } else {
  X* X2 w/ w# v) U6 I/ j                                        ix++;
6 O9 j' a$ B9 B/ e                                }
) P$ x  d3 G' h" @& D: }+ N                        }
) ]- S0 k8 E7 m- ]3 X' m                }
/ c1 A) Q' U8 S7 \2 U+ s1 i# e0 g: F) P, a* Z' u0 w' ?
                if (ixstart < 81000) {& X, e1 E( C  R$ y9 I
                        while (ixstart + 1 < 81001) {' O# W5 x& c1 \5 P4 e) {4 c
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
. i/ V6 _6 s' T5 k" `9 v2 ^4 y                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];0 v% W- y5 ~3 o6 M3 C: X
                                }  [5 M8 H! g# N

3 p5 _( j  M6 ], k                                ixstart++;
) _' u9 l$ i, c" r$ D+ y7 R9 f                        }% D- V% U) m7 w' q) l
                }
$ n% ]( A1 C' G! b" o4 q' C% \5 L: p# l" w' d* _; ?2 x0 q
                ixstart = 1;
% T! L) G/ q' o& t+ C                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];/ ]6 i% X+ g+ T  N
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- Q% z2 U2 K' \8 [/ ^5 Z. {
                        ix = 2;
! h! q2 M" y4 }2 h# U9 f                        exitg1 = false;* U1 ], F/ v4 `. n' }+ m9 r9 T
                        while ((!exitg1) && (ix < 81001)) {1 ^3 ?; c& G" R& G
                                ixstart = ix;4 i6 U/ r* {1 N3 j2 m+ Q# D7 c
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ n6 f1 [8 K8 h7 ~
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
: |9 N0 w+ A* b0 f                                        exitg1 = true;
: J3 Q- F* A+ g) ?% c2 I- e                                } else {0 ^! |1 D5 k, _2 |: m0 _  n
                                        ix++;- l6 \( P, I( ?8 f# x. V9 r: |' {
                                }- @' M3 m& C- N: v4 F
                        }! Y+ s1 u  r) A: \
                }
) `) u- o2 l* E& j" ~; H! V: u( s
                if (ixstart < 81000) {
5 l: O" d9 N; O; K& k, H% I9 m, ^% \                        while (ixstart + 1 < 81001) {: P. ^. k  q4 ]5 L
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {. v1 F8 S6 ^1 i( }% R
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];: s5 v; w- z. K; ]
                                }
$ Y* M8 v! D7 _, Z6 w: k% F/ j) j$ A2 i* T( v5 u
                                ixstart++;
3 E' n# b/ G; o/ x3 b2 I# D                        }5 e) V( K8 D; a2 w8 h, W1 t0 G
                }
  p- i9 a' H2 ]) d
9 O- Z1 ^7 [! T, e                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);) [& Q2 y" ^8 x5 a( J, w! A
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
# f4 `5 f1 R! Z# b                        yiDuanShuJu_mean = mtmp;
; @& y0 Z; K3 r3 r0 v6 e+ z                }$ @/ _+ I) _$ @0 E+ l3 y
% O  b5 i  v& b
                /*  找出极值 */
  B" I5 k9 x+ R. Z                for (ixstart = 0; ixstart < 81000; ixstart++) {8 X2 o5 f% q7 \. q! c: J$ ^* Y
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
! M" @5 {/ Z6 Y' a+ Z                }
: _8 F) ]' H% t  M7 Z
! M' e0 ]7 i2 b0 O5 ~        --------------帖子字数限制------------------
' P* J& x3 u/ E1 V3 d# M; |% a}
# N% m) s) V0 d! h8 e3 ^7 [9 I+ t) Z  |' c( i
& H# T% k' x* G

本帖子中包含更多资源

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

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-31 01:01 , Processed in 0.049373 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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