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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ! X; r' h3 x2 m" ~) D# M7 k/ D) k
% R( v+ t- R* C. |1 e2 |& _1 w
各位大神:- C7 u2 X1 T  Y# H/ V6 S! T+ Q2 g
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
* h1 {6 |! a, r2 {  R, \2 {) p9 \4 X      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:% c! Z2 ?+ [) T' k8 Q

) ^6 g2 |! o7 e/ d; Y; T     5 D. P+ ]* R2 Y( \0 ~. p" g, o
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
3 n- d/ i1 u0 p# D" S
; V) @! F! j$ T3 B, k. |( _并没有其他线程- s( G) C; @& J% t
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
0 D% `  N. j3 e/ v也说不定是和堆栈有关系。。。。。。  B( \! n' M4 G: l% A# G
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
1 c9 E& [! f. q) C" r5 O' i4 S0 ]4 ~. z& N4 Q

& S- K* D- c2 T, l( x( z* s: c9 z% Q% i
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
) V4 Q5 B: q3 s. e! b
' s$ ^8 V" G5 o
" h8 t2 u* q+ u) Y* K0 v. A, R附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
8 y. f, v: r* Y3 n        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
5 x3 n4 x6 R- Z( s) B; d( U8 S; t  J2 W$ }0 v4 x# ^- E4 J
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
, _; X$ M9 |# y8 ~/ }3 W& u                const double data1000[1000]) {; s  L% h/ }* C( @. _( r/ B# y
) ~! i& b* q$ q
        int myfuck;
! l  {  q# D7 n# }" r& X        double yiDuanShuJu_mean;
  a; B# E: x% U        double yiDuanShuJu_LowMean[1000];. L2 ^/ |9 H! O5 _2 w
        int ixstart;
1 i& I9 B" g- s; k. U# h        double dv0[1000];
3 K, i# R. F+ h6 u5 t3 m        comm_AGC pAGC;
% |1 e  X, D/ }3 t% t! p* l        comm_CarrierSynchronizer pFineFreqCompensator;
( [' X- o6 w% j# b0 p0 ]$ P5 R+ U        dspcodegen_FIRDecimator pRxFilter;
9 J7 R2 ?) _: V5 J1 ^0 q        comm_SymbolSynchronizer pTimingRec;
7 f2 V  ~3 |5 d+ [; D  t4 W: e" l& u        comm_PreambleDetector pPrbDet;# p. j8 Q% Y. t) {7 a) Z
        FrameSynchronizer pFrameSync;
7 S8 f8 L/ A9 ?        QPSKDataDecoder pDataDecod;! N: P8 v  c9 d5 N5 p7 S: Y7 s" ^* m! S
        static double usable_left_filtfilt[81000];
$ f  U) H7 c8 E, b        static double youXiaoShuJu_QuZhiLiu[81000];2 J0 C7 i: p7 U1 K  `$ j" U) T; Q9 o
        double mtmp;9 U8 ?+ v& {1 x+ ]
        int ix;
( S% ]9 N: z% F9 F( G* ?        boolean_T exitg2;6 z  |5 @0 \% t, u' r+ r
        boolean_T exitg1;7 [5 w' H) h3 ~! U. I1 Q
        double YiZhenShuJu[800];
/ T4 P& m5 N* i* c" l        double dv1[800];
: @. j' f, ?& `' A4 p
, V, p# v, r! r8 d  Z9 o8 h6 _9 U7 m, d
        double b_YiZhenShuJu[800];+ \' |. Y4 V8 W- B# T
        double I_filtfilt[800];8 @5 A, p' K6 H2 J- K4 K3 t
        double Q_filtfilt[800];+ n6 _" N! _8 s% e* R4 K# w
        creal_T b_I_filtfilt[800];
* T" X1 k5 ?1 V& C) @        creal_T b[800];
$ w, Y7 i$ }' ^+ y2 E  o5 j        creal_T RCRxSignal[50];
2 q# a$ o: O- N- p1 o* k        creal_T fineCompSignal[50];2 ?$ |4 f  p" g0 ~; @
        double phError[50];) j) f9 U  N4 b. C' e4 _
        creal_T timingRecSignal_data[28];& Q+ Q  u( Q* X& i3 k- m
        int timingRecSignal_size[1];
) H6 e  E/ j- u3 ~! y/ X6 E        double prbIdx_data[28];
: \3 b! B/ R5 [3 ~) }0 z" f7 k        int prbIdx_size[1];
: @9 B, n8 o" T+ p2 j0 r" n        double dtMt_data[28];" e  I3 I. \3 |( y) R
        int dtMt_size[1];0 D/ y+ p! ?' Z4 x9 B: M8 J
        creal_T symFrame[25];( u  ^/ _# d& f7 N+ c
        boolean_T isFrameValid;9 Z. L4 _' j2 J
        double unusedU0[3];
4 W, \+ r6 L4 I4 J, A
% f+ @* r# K' y2 Y/ S        //调试过程中的变量7 ?3 x1 ]$ p3 ]) t2 @0 o- f, P
        int  enough_data;. h* s1 k& }1 O
( r3 o4 X* _- V( B# c
        int enoughDataFlag;% ]! a* w' m8 G/ M% t8 a3 `: ?
        int yiDuanShuJu_mean_int;
) R* S( ^: f6 ?& V+ b        int int_sum_dv0;3 m; e. _) H; v
        int oo;
' H4 ~5 r/ g0 I6 U: m: x8 c        int ii;
! f( b1 F4 E& G6 c9 p        myfuck=10;1 K6 g( U& W1 `
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */2 F- t% U/ }& S4 J# a
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
, @! E# z% p+ E
4 r9 g  W) f$ x0 \1 E! `3 W* r        yiDuanShuJu_mean = mean(data1000);
1 C+ U6 i1 o/ j( E1 P7 s
: P# K+ {& ~; W8 [+ r        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
7 n3 @$ m. S8 ^. |        UARTPutc('A');
1 {1 P; D1 O  D  _0 n6 z! ]        UARTPutNum(yiDuanShuJu_mean_int);, W& E6 u' F9 P2 R+ o
        UARTPutc('\r');% Z* O/ \: }1 p8 [
        UARTPutc('\n');
0 H1 r  d4 t  D& t% \' r0 y
* f2 [0 n& l1 I5 m5 o% L3 ]' Q. w        for (ixstart = 0; ixstart < 1000; ixstart++) {
0 V. p! P5 S; K# N* {+ c                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;3 u: b( p7 w; Y8 B; _; R8 A: D. O
        }  Y( c. |; B3 ^2 H! s! \  t$ I

1 R3 j, m; c: {: b# l7 s7 t5 T        power(yiDuanShuJu_LowMean, dv0);
2 ^: ?8 a" b1 a# w; l" d( _
0 n: y/ }6 ~# H% K- ]% G. W0 x        int_sum_dv0 = (int) sum(dv0);+ t2 N# J+ D% L  V+ N! T

+ L' K! P* P, K9 \8 k        UARTPutc('B');: \* T# O( y3 q! r' y/ a' W" o
        UARTPutNum(int_sum_dv0);  D+ X/ \- W- j) E# T
        UARTPutc('\r');+ l( y# W! m4 v& n, X
        UARTPutc('\n');
3 m6 J4 ^- ~# s
5 \7 z" ~' F, B4 Q' G//        int compareFlag = int_sum_dv0 > 1.0E+8;, y% }' ^7 X3 N9 t% p! E
2 g9 x0 {% u0 l9 N9 v
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
- |" ~; }+ N$ _/ D! F                UARTPutc('C');7 G; X$ D. L) f
                /*  比较信号能量 */
1 R: F  E0 @3 _; g  G) B8 ^                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */$ R7 e, l9 C6 J# {2 _4 `0 y
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
( H+ S8 @2 W& Z4 V8 T//                for (ixstart = 0; ixstart < 1000; ixstart++) {, W& B7 }3 C# x9 k
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
, @" u: F/ V. u% ?//                                        yiDuanShuJu_LowMean[ixstart];
* [' c# L; [7 e/ H6 x0 \5 X2 J7 ~//                }! T5 |, @/ u; j( h" M
//
, [5 L+ N9 d$ V* y: B9 G7 P: t+ a" \//                youxiao_k++;' W6 F9 n2 o* C! q- J0 [* I2 a
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
' p8 {& W' C; ~  c" K//                        /* 感觉要取21个数,即0-20, */
: L0 e9 k0 y2 X# [5 ?, Y//                        enough_data = 10;//有效是10,无效是0
9 y! Y3 T* j& L! d/ i//                }# ^. r! L9 v' N( P8 v/ _
        }
3 r; H8 ?0 T/ W4 Y
2 w5 o" n% P) k" R+ k
9 P" P- }" v" E, D1 r$ \        enoughDataFlag = 100;( C) `# B, D1 v( E# b# ?8 e. \1 U. D
        enoughDataFlag = 1000;# r9 s/ F) O: V5 H
        enoughDataFlag = 0x02;
9 S3 P; k3 N' y; D/ z8 U& J        enoughDataFlag = 200;
7 w, a: f/ t, E9 f8 w8 y. s! l7 y" d6 t+ A
        int myfuvk1;5 X+ {6 ^3 ?4 a7 v# U" G
        myfuvk1 =11;
" m3 \0 O; m* l" I0 ?' l' w! W, u
2 d$ S/ k3 J1 g4 i" Q$ r$ T0 N+ M0 F* s
        enough_data = 0;; A, [0 ?1 j% l9 r) @/ k% ^

% S% ~; W" p. ~1 d* n//        if(enough_data>50){
1 l9 C) `- i) G3 A$ L& m//                enoughDataFlag=0x01;) h8 i8 J3 y9 w1 P
//        }else if(enough_data<50){, J" v! `  Q3 r
//                enoughDataFlag=0x00;//0x00还是不行5 G, Z+ e: d. L4 R0 e& m
//        }6 @- q$ z5 ]  S; ^& {" d' y
: t7 f5 `5 i+ j: v3 k1 e% P0 k

  Z  C! N2 d) |6 y" E        oo=10;- s! N! I* w8 T- H8 s/ O7 V6 k. L, `
        oo = oo  <  5;
6 n; G0 r8 D% ?9 X. [        if(oo){( c3 C5 M! {  m. j9 Q& [4 Q. K% z
                ii=0;" r7 W3 b  P9 D" A2 j* {! @: l; h
        }2 b6 ^' D6 d' F5 a/ U* @5 B
        if(oo  <  5){
/ i9 K/ q; h* H+ [                ii=0;1 @" O  J- o9 Q8 |
        }
4 D) Q: F% V2 O" m8 l# o        if(oo  >  5){
# N* P9 i$ S* w! d4 N7 p2 z- g" T6 O                ii=0;* |- U. \4 X* y! l$ p& d
        }- X! e$ ]# d) r! \0 v

& U! p* {/ p* F+ P" m" z6 G2 }        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
. s8 y% B% w8 z# @" b        /*  如果数据足够才执行主程序 */
9 ]- B8 M* ~' q& N5 u1 N. q  c4 j        oo = oo  <  5;
1 k0 b8 K1 F9 V/ n) R' v' z0 u& f' v        enoughDataFlag = enoughDataFlag  <  5;
9 Q" K- z5 g0 u/ p        if (enoughDataFlag  <  5) {, ]( E: |# j4 _4 \$ v3 a
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0' N# B5 X$ a3 _) |2 ^3 R3 K
                AGC_AGC(&pAGC);( y3 [: P: F* {2 ^6 H3 a
1 B+ a& F4 \3 Q
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);& [6 m# ]; ~! K! D
                FIRDecimator_FIRDecimator(&pRxFilter);8 r+ R# M0 `! p5 _# d& j  @
3 J6 \1 G) F/ v
                /* Downsampling */
' R( `2 \3 c' r; Z4 v, \9 T                c_SymbolSynchronizer_SymbolSync(&pTimingRec);! {& X5 }4 e0 ], ^& o

. a% m9 F' p  Y- c! n  H0 m+ U3 t9 u                c_PreambleDetector_PreambleDete(&pPrbDet);3 A. x' P+ A/ D

: s" K! v& N& s2 n                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
3 {. a/ N% Y( A$ y3 p# k7 D                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */6 T. ?/ [- x4 s; X  A# T
                /*     %帧数量=100 */
$ m6 Q" T. t; q4 ^& v& m7 w2 ]                pFrameSync.isInitialized = 0;
! H& z- l2 u% f, E/ \
$ @1 p% a" T: Z                /*  [EOF] */5 C4 \/ l0 W1 W! B8 p
                /* 前导码长度是13 */7 g5 B' s' K; Q3 p- Q; I8 [* U# U
                /*    %qpsk */
7 v* W2 q- U0 t/ @: x$ X7 U  T                pDataDecod.isInitialized = 0;
9 l- N- V0 h( Q6 F4 M. {- u- p8 Q* r2 g, W" J* _' w
                /*  end */
" z. [- Z6 v! t                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
! ]  Y( @/ _* C$ U% }1 V, u: v                /* Convert 3-dB frequency */0 Z' S% D5 S3 G& Z9 S- y+ I
                /* Convert 3-dB frequency */- _, ]% Z0 e$ K& [& }
                filtfilt(save_buffer, usable_left_filtfilt);* Z" a: s7 {  n: d1 C
                for (ixstart = 0; ixstart < 81000; ixstart++) {, ~6 W( w* h2 U
                        usable_left_filtfilt[ixstart] *= 2.0;4 n% c# a5 W. @# H9 t7 R2 Q3 |  B! A
                }$ m  x) h  g9 G/ \1 Y: `
. @( J1 d. o$ D$ J* e
                /* 注意乘2,处理幅度 */
& M" A/ I+ _% C  @4 ~                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */3 I9 O* b8 B8 x  }
                /*     %% 行列转换 */4 e8 s/ v" B( O- B7 m, C. U
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
% a& V: K4 @5 J  b. H                for (ixstart = 0; ixstart < 81000; ixstart++) {/ a3 f7 N- l+ g1 j5 i- J
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]; |+ k- G" u. |. _" ?2 k
                                        - yiDuanShuJu_mean;
4 _% \) K% ^6 J) G# @' G  @6 f3 ?                }7 v# z+ r* c3 h2 l) @) u% C6 r
+ Z0 F9 k7 N" ?. {& h4 C8 m; k
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */! U+ v7 X% k8 t3 ~/ i+ o" z( y8 z
                ixstart = 1;
5 p' K3 }& p2 i# t; R! ]                mtmp = youXiaoShuJu_QuZhiLiu[0];
& k0 V6 Q3 A% ^5 G  \  e# M                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {/ ^! ~: ~; D5 ?" |; g
                        ix = 2;: `3 G8 E9 J$ V5 U% O4 @- Y
                        exitg2 = false;
$ L1 ?* s8 M6 f, G/ N                        while ((!exitg2) && (ix < 81001)) {  |, d5 g1 Z$ f
                                ixstart = ix;
  }9 o1 n; a. T3 H7 O- S                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
: _' @  M& m' P- |8 A1 z) \                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];' b% C0 d& ]  Z& a. d+ @. f
                                        exitg2 = true;" \6 D" ]! K# a3 {9 ?  @. l+ e
                                } else {  q. K) S. @8 F3 |
                                        ix++;# J& N- W! ~, s7 |/ B0 S
                                }9 ?$ e+ n' }# R0 K) [' V0 d' }
                        }8 V1 {8 I% @: J! G& l  m
                }6 n7 }9 U( Q  h% x3 H& `  K4 B1 o
7 W# x4 U$ s8 \7 B' }1 _0 ~
                if (ixstart < 81000) {& ~9 ?8 B1 z* J4 C
                        while (ixstart + 1 < 81001) {% F7 W/ G( @6 i* y: l' U: L
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {7 _( S, L" i  B6 |+ d
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
2 Q0 s2 ~* Z! q" ~: w                                }7 w1 s# ^) X' S) p/ n4 |
4 f2 ^' u* I0 ^: V5 @
                                ixstart++;
$ [0 T$ v0 K1 D8 G2 |# H7 D                        }
2 a* d, i. ~7 P" g                }1 [7 D1 }8 s) }  o- Q
) N! o$ e5 N& b/ G
                ixstart = 1;9 g. N3 j0 O2 l6 h( P
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];  W8 B0 ^9 F  C% s
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- f+ f0 ^% S4 U" B! b* B: B                        ix = 2;( S; R6 c; V- y8 N
                        exitg1 = false;4 D/ B4 X/ Y; {1 I
                        while ((!exitg1) && (ix < 81001)) {
! x6 u) T4 ?3 P7 [6 ^3 Y2 ?                                ixstart = ix;
) j" H3 @4 C" d# @8 v                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; U+ x7 O& b& O0 |. N                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];0 b" p6 H  u6 i- v# C
                                        exitg1 = true;2 r9 G# a- e% k6 g
                                } else {
2 h. }3 z) j& [& A5 t& n7 @6 A                                        ix++;
3 a5 s1 U1 s+ m2 G2 V1 d) Q6 @, {                                }7 _. S4 I% w, T+ H6 Y8 A/ Q5 R6 g
                        }+ {4 N# P7 k9 |# @5 w8 R0 e* u8 W
                }- o6 T( F3 b" Z( s$ x

  N$ H' H  Y" O. P0 T5 q                if (ixstart < 81000) {
3 d1 ~4 X4 |- {8 Z3 C* j9 b  x                        while (ixstart + 1 < 81001) {% s# P* M2 ]& l$ y. M
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
6 v  I9 _% n" s: c4 \3 W5 x- O                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];9 {2 V  g$ i; ~
                                }8 Q' r6 n: F+ o0 g, X

" `* D& z& i) f, v: J$ ?                                ixstart++;+ y% ]+ z/ u% o5 u- o
                        }! m2 s( `' r7 j) _7 o: @
                }
; K: ^1 x) b; e+ @4 }1 z6 n4 e& g  y; k. j$ `
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);9 Q% s8 r$ x4 Y( Q- E% y. I
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {6 @5 g2 X4 |! J, o8 f  ~8 F8 G
                        yiDuanShuJu_mean = mtmp;0 I4 A7 \$ @7 Q5 `0 b! Z
                }7 C% @2 a1 {% v9 {
+ D' a+ i2 ~4 X
                /*  找出极值 */- f) G3 R5 t7 j4 k7 d2 {. r& h
                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ f# j, M8 \0 z; }                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
9 |0 W) Z$ @9 L7 m) d                }" \. e. O# g3 m$ [/ d* n' u
2 P( W, E" h3 N. z% L! S& {( o
        --------------帖子字数限制------------------
+ C, Z5 q; s& u7 _; p6 F: t}
% a8 J* e4 v5 _% ]- u. w5 C5 o( l, c* B; g# j. X. O# G6 n

; `$ g  Q' }! w, E# O: [  g" x

本帖子中包含更多资源

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

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-2 20:52 , Processed in 0.049165 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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