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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 4 J7 x4 Z7 n8 B) _) I

8 E/ J7 y+ x# q. J; L" a+ W各位大神:. R! U8 b8 F1 L$ U" S) K# @
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
; Y1 E* p* h) E, o( r2 p      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:$ ?" J9 O) v: y, V& D. p( ~9 C
! k: T; ^. R7 i& T
     ' v- P: P1 ?# [* a. W
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
1 y& J* d  h- O6 ?5 Y+ r% O8 q+ n, m+ A' u3 W
并没有其他线程
$ [) g8 A# w7 a8 O, X反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
2 D4 f- |# m" M- u+ L' l也说不定是和堆栈有关系。。。。。。
: E/ V. b- R, \$ W# W+ p请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
$ ]1 o* f; V+ N8 \. a. s
, a* E. i8 h0 q, B$ o  J
+ Z- b* i4 j( D1 m8 d' X7 ?2 z. R8 U# l. }
我也很绝望啊,希望大神能帮帮忙,感激不尽,!% E+ A6 {1 z) O- m

% C5 T% w7 I7 b( k0 V  J; @& e& g
( T8 [8 }4 d& a; m附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];2 C! i* |/ d6 K* e
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。  }" ^" t7 U! o- @) i/ |
9 g2 s- o* t: |( R4 ?& F
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(" H- f( [4 q4 ?
                const double data1000[1000]) {+ K& q0 o+ f6 }! J- n

' Y* W( _3 v/ V" v" R. }8 w        int myfuck;+ F& J9 N: a) O& h+ }( N" u
        double yiDuanShuJu_mean;& {' D7 i; q6 m( f8 y( @& E
        double yiDuanShuJu_LowMean[1000];
+ w4 v7 {% R$ Q. l        int ixstart;
  q0 |) o$ W$ w6 M: C        double dv0[1000];1 |0 s) Z7 _) n) H  w
        comm_AGC pAGC;6 S. y4 V& L% D
        comm_CarrierSynchronizer pFineFreqCompensator;6 Y- w  ~- G/ ^% z7 Y
        dspcodegen_FIRDecimator pRxFilter;
: N0 ^. j  I" m( q" J1 R; q. _4 b        comm_SymbolSynchronizer pTimingRec;. g7 t. r! }! k' a; j
        comm_PreambleDetector pPrbDet;
6 Z  Z, z- k3 J: v# w2 g. h/ M        FrameSynchronizer pFrameSync;
3 h; [6 _/ ?5 Z; R2 Y        QPSKDataDecoder pDataDecod;' W7 A+ ]) \! N
        static double usable_left_filtfilt[81000];* \/ C1 e$ \9 r8 p3 q; a
        static double youXiaoShuJu_QuZhiLiu[81000];
: u  U, v0 p, l2 D. L, p! U        double mtmp;! Y! E1 F7 Y) `3 I2 S6 @
        int ix;/ K2 L9 Z2 v* E, j& S
        boolean_T exitg2;& p% R3 W: b5 k3 D' m
        boolean_T exitg1;
, D8 T' [; X% \        double YiZhenShuJu[800];5 U& ?; x" s) E/ g& `% g
        double dv1[800];
2 U9 A. X) S; I( s
- m( L0 J  T! \5 W6 W8 k' T" [: [! p; ^2 Z
        double b_YiZhenShuJu[800];
& O" ^, A* ?+ k$ w2 r8 V        double I_filtfilt[800];( T" q/ V* C/ l
        double Q_filtfilt[800];
& K* U, d- Z  t# n& G/ r        creal_T b_I_filtfilt[800];
; t: E& b5 w$ I        creal_T b[800];( P7 ]" p1 }  V( J% k
        creal_T RCRxSignal[50];
$ `8 P3 l# f1 G+ s# C. i! I8 ]7 f        creal_T fineCompSignal[50];
  Q" d6 G9 U$ N0 n4 g4 o        double phError[50];0 X, C3 b' o9 G8 i2 c8 k2 r# F
        creal_T timingRecSignal_data[28];
4 n3 Z4 N0 w% R        int timingRecSignal_size[1];
# |( K9 K6 Z0 c/ o        double prbIdx_data[28];" L1 t9 Q7 u% ~6 l3 B( z+ e
        int prbIdx_size[1];
' [; u% ?+ B% {        double dtMt_data[28];1 f% ]5 d5 V% I: n
        int dtMt_size[1];
( C4 P1 {% Y/ G        creal_T symFrame[25];: Y" [/ l) z: [
        boolean_T isFrameValid;
" T+ ~; C0 {, c" o( a5 A) Q8 ], A; o        double unusedU0[3];- u: `9 h/ H. B9 m6 H
( V# q. n1 D/ y8 }0 m$ B
        //调试过程中的变量7 V" E0 `- k% s5 G. a. k' \/ ?* g
        int  enough_data;
# k1 H; c" z: l$ I9 F# T
$ v/ K' c$ P4 {/ I0 i        int enoughDataFlag;
) U. O0 x' |7 a3 q        int yiDuanShuJu_mean_int;7 m( F5 M  K3 \% T: x" `1 ~& F( u
        int int_sum_dv0;2 o3 D- A$ o( F( U" s0 A
        int oo;' A9 P" z( _7 {6 _. [! x9 `) ^
        int ii;2 a" p: T  m& i9 I+ q& X/ o* S- x
        myfuck=10;: K' u* q& E# q* T8 q
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
5 m1 `( }- A3 f; o0 L        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
$ S, z2 L! m5 L" c' q& g
: ~% |) ]( {4 C! g3 m/ M! T        yiDuanShuJu_mean = mean(data1000);
7 S: ?. b4 w; U% f: p- W( i* C" P% `0 j5 F6 j
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;8 }2 u- j6 R( w% O/ ^* F$ B+ y6 P
        UARTPutc('A');1 b, z. s, V  f
        UARTPutNum(yiDuanShuJu_mean_int);" q6 B6 `$ X& a% b" `6 m  L0 {  C* J
        UARTPutc('\r');4 L  u  i; v+ J8 d, ?
        UARTPutc('\n');
0 X- t' u( Y3 j1 Z* V- |$ d7 c5 {5 c! {4 a0 c7 A, a1 L9 T
        for (ixstart = 0; ixstart < 1000; ixstart++) {% ^- P. ~: {7 [2 z
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;# M2 q, `6 ]* m3 e
        }
* V) y8 K4 C4 l' E) [2 ^5 j; ~! J- H5 R' [7 z, n
        power(yiDuanShuJu_LowMean, dv0);
8 x4 b- Z& ]6 U. S" X; g/ V9 ]: {5 U6 |" N/ r; x4 r
        int_sum_dv0 = (int) sum(dv0);
3 g* i1 G. D. L& m$ z  X0 J& E6 o+ N  L; p& F. v4 n
        UARTPutc('B');
9 D2 n/ b- j! Y! k, X2 E        UARTPutNum(int_sum_dv0);
; M; b7 M* r# q        UARTPutc('\r');
0 i, |( J. T% L$ a        UARTPutc('\n');+ w$ T2 r/ [5 ]; J& T

, j% `( z2 ~; R9 }* `//        int compareFlag = int_sum_dv0 > 1.0E+8;
8 H" P0 ~& e  Z  M8 A% H" s) q8 O! S6 m- X2 l0 q( t
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
1 g, d! Z" t9 k# s, u3 z                UARTPutc('C');( W) z4 R" c% O+ {* F5 Z, \
                /*  比较信号能量 */
7 ?+ [0 c% t4 W2 k# ~% p                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */7 S. ?3 d& K/ @+ G! K& P7 A- s
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
6 R6 J( l/ P% h2 @//                for (ixstart = 0; ixstart < 1000; ixstart++) {9 y9 a. P% U( z& Z/ G- \
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =& W0 w' P) ]; A$ s" M7 x( D
//                                        yiDuanShuJu_LowMean[ixstart];4 K- s& U7 \1 x# |9 E* x
//                }
8 k0 Z% I/ l( N//1 g/ S( o% {3 W- j% n) W4 [' G
//                youxiao_k++;) L$ B9 s! o" R7 |5 T+ l
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==& r* b) K; ?* n2 M- O1 R$ V
//                        /* 感觉要取21个数,即0-20, */. |1 @5 Y/ v5 I3 V3 ?
//                        enough_data = 10;//有效是10,无效是07 v6 N! m# s& K1 T9 U2 @9 x- B' i
//                }
( X/ S( h4 _+ l9 ]2 @4 K3 J        }) A* \, M/ x; n6 Z- ]6 z0 T
& [; B5 A( u# b

& d' v" V9 d+ Y        enoughDataFlag = 100;2 c4 a* {$ S- P
        enoughDataFlag = 1000;/ V( c: K3 I# f& }2 x
        enoughDataFlag = 0x02;' n0 d+ F6 `6 ]# v/ r
        enoughDataFlag = 200;9 o- w) A! L4 P

3 _, X5 {/ }# H' A        int myfuvk1;: y# |/ f- a& f0 N) j
        myfuvk1 =11;
. D2 y6 [! s/ s) E, E  u, }
) y1 G8 U. ?: U. F1 D; S6 _5 U% M. I, L
        enough_data = 0;
* r9 R$ y5 W4 h" P9 n& d
& x# j1 n% ^  Z7 R% q//        if(enough_data>50){
9 w- k2 {3 O0 }//                enoughDataFlag=0x01;# X/ l2 _9 Y2 M/ g/ N5 ~
//        }else if(enough_data<50){, Q: a1 ?( Y9 a+ `, ?! N
//                enoughDataFlag=0x00;//0x00还是不行
8 s. f- r3 Q4 f# X6 P' h& c6 a; ~0 b, K3 k+ X//        }; h* J, X4 ]1 M  n/ {# l  w
: _# L3 l, P# C9 s) o9 B
" Y* B4 L$ ~# V% D, g2 f, y
        oo=10;
! r( w6 Z' n6 l$ q+ C        oo = oo  <  5;# P2 j* ]# D1 h! }) \
        if(oo){# R" T# }* \% j% [8 o& b8 s
                ii=0;; v. J/ @& K! s% g: h
        }! ]& j& l3 M8 \7 M" Q- ], F
        if(oo  <  5){% |* h3 \# l4 `  L8 b' d' q/ @
                ii=0;
0 P' k* d2 J1 K& t* C) M7 _! V" l        }
% T% C- n& h  ~( @* q# L        if(oo  >  5){
6 Y3 h( B1 R2 V# W                ii=0;
3 `3 \7 a9 H. _* F        }+ R  d1 R/ }- m0 O- }& i

8 g0 H3 A9 _* v# l' B6 ~) w2 C        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */% C4 W, ~/ @+ T' G& C' J
        /*  如果数据足够才执行主程序 */3 I5 P( p; c  W4 {7 j: f8 H* g
        oo = oo  <  5;
9 Q" A7 Q1 b8 x5 ]6 w  @        enoughDataFlag = enoughDataFlag  <  5;5 H- F& s; d, ]6 I2 V. D( c8 ^1 \6 u* w
        if (enoughDataFlag  <  5) {( H& B: g3 F7 s
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0. |# q5 Y% ^4 @' \' G5 n% _" u% h$ R
                AGC_AGC(&pAGC);1 q  k- W& d, x) N
" N. M; x8 Y6 W" q5 ?/ g
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
# j" S  V0 h3 {; f  h                FIRDecimator_FIRDecimator(&pRxFilter);
( m# Z! n1 d! I3 A( N  l# g6 Z3 ?+ [- P7 O8 E( }7 W: `
                /* Downsampling */1 U2 l  L1 }$ A& T! X6 A
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);  L0 a2 w2 u3 `9 P0 P2 |+ |  H6 r
3 l* j: B$ A6 n0 A( M  p
                c_PreambleDetector_PreambleDete(&pPrbDet);
  A* d- n; ~5 Z+ X2 ?- v
$ ?& M2 \- t5 u0 I1 U& H* I                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */4 b" r2 e& p4 J7 [& |
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
' f7 Y5 W- \1 v+ I2 l! t                /*     %帧数量=100 */
! E9 V; l- }& X% G8 b                pFrameSync.isInitialized = 0;& D/ w6 K) w4 a* C* H
! f1 M9 m/ L9 M+ q& i
                /*  [EOF] */7 U6 I. Q, Q8 J3 D$ W
                /* 前导码长度是13 *// q1 r: X$ n& T  d4 x9 ~! O
                /*    %qpsk */
  j/ I+ p9 @/ b$ u% e4 \9 o& K" Q0 P                pDataDecod.isInitialized = 0;
, m. K* \$ L2 J: v1 t' A- U! M' ]0 J" y
                /*  end */
% K; D/ ~1 O8 I# i; J  D4 K- t4 I+ e                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
- p* N1 J% u4 z7 U/ F+ |                /* Convert 3-dB frequency */' ?( S: X$ A" e1 Y
                /* Convert 3-dB frequency */9 ~9 J# C  s+ y+ F, A8 I
                filtfilt(save_buffer, usable_left_filtfilt);
9 v$ K+ R' X9 A  k1 x7 A  [3 a                for (ixstart = 0; ixstart < 81000; ixstart++) {+ d* O1 p  k' ~5 M. J' K; _
                        usable_left_filtfilt[ixstart] *= 2.0;) |# [' y$ o2 ?# A* D
                }
" K. R+ I* w# W
( L# @" \/ u" y( Q                /* 注意乘2,处理幅度 */
- G  k7 N& j: r) e% ^7 |% k                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 *// `" E# |" r* n$ }
                /*     %% 行列转换 */# v7 a. K/ Q# ?$ }( n
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);5 U( V" p1 t6 R, Y* W* `
                for (ixstart = 0; ixstart < 81000; ixstart++) {1 m$ Q; b% E1 D, [' d5 c' I
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
( f7 U$ J6 U# v( ^- O                                        - yiDuanShuJu_mean;
3 }, @0 L/ O& x% F0 Q                }/ P  c, K) f0 G9 P

6 L- G( q0 m1 t% R! e# [                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */( L) V! c, y2 u& D
                ixstart = 1;
8 H5 K: Q8 G5 ^9 b( s                mtmp = youXiaoShuJu_QuZhiLiu[0];
3 ^& j$ e- P2 x/ `* d9 \0 c                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {: N6 s$ V7 o# F8 D: Z
                        ix = 2;2 J% T& B. x& u+ |0 T, i% v
                        exitg2 = false;
2 V0 `) B. d! K& c  v- K& e4 a; L                        while ((!exitg2) && (ix < 81001)) {
! k( v- `# J" n, F: q                                ixstart = ix;
' ?. A) ^! n  z1 {( {5 |                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {- A. o& ^/ H, e! l0 h5 v- a' z' z' @
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];8 |6 `, @) K8 M+ u# A
                                        exitg2 = true;
3 R! E' r# I4 \2 a+ m) h! f                                } else {# F5 a( R" A( d
                                        ix++;
/ g  D. T4 @( A; S3 m                                }
5 |3 \3 B1 D' [' P7 q( X8 O                        }+ z( Y: h2 \5 ~6 t" Y4 w6 d( b- d
                }7 ?/ |. |0 i* [% Y
2 o' M0 B8 u0 O+ b- ]8 i
                if (ixstart < 81000) {: Z% M3 p) }1 B
                        while (ixstart + 1 < 81001) {
- ^5 y# W0 E$ U+ S, y                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
6 M/ Y, y% P+ j6 C* C                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];+ @8 @% L( Z* z6 w9 U- I+ J
                                }
5 v8 |  f! a; p* I% ?2 i" J6 L% E" }- A
                                ixstart++;/ f0 c8 o# @; f) n2 M. ?% ]
                        }
$ S! h+ k" a5 Y. L& ~. c                }
5 I- Q- K' e8 x# F
& B* a" C; ]0 d9 G0 l9 K                ixstart = 1;
" B8 [) U- z6 j: e: Z) Q$ l7 z                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
) F4 a& ?& \6 h$ n' g# ]0 K                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {) [2 j' i7 N5 i0 ]- e" O
                        ix = 2;
+ N9 y; o; X: {5 T                        exitg1 = false;
5 }; A; a  Y' C% E                        while ((!exitg1) && (ix < 81001)) {
8 a2 X4 {! T4 X" Y  ^, f                                ixstart = ix;! `4 D0 F+ _& s' {  A# \2 K
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {* O' C' j3 a' B: Q5 {6 B
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];: u0 e7 u# b) R# g$ r
                                        exitg1 = true;
7 g. C' t6 }8 h                                } else {
& d+ m1 a  A1 `2 F                                        ix++;+ A# e# e$ X2 p" d4 d
                                }
/ i9 e5 D. u% ?                        }
0 I( ^8 o6 d, ]2 W/ v                }
0 J9 ^; Y4 x; y) k; l8 F4 L9 _  o+ ?1 w: P  f3 W9 K
                if (ixstart < 81000) {0 O% A5 I( Z. e4 l$ U* W& `) H7 a
                        while (ixstart + 1 < 81001) {7 W3 y6 s/ S7 k0 s6 P( ]4 q, m. H
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
/ e/ ^* P7 }) ?7 j: w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];* |; y! e0 I' F& |7 B; ^4 L
                                }0 c5 s) a( V7 a: O+ H

; g# q) `+ Q4 }/ Q! E. c8 S                                ixstart++;
2 M- S5 W5 o+ A. O$ r                        }
3 U: u5 m1 g  f                }6 h$ H0 ~: V, e% C2 h
- f7 G2 \+ w  D# O; w$ K3 {3 u* \
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
: n9 x6 ~4 Z7 W& i1 {                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {8 T" k8 P- V. }% A% d, V
                        yiDuanShuJu_mean = mtmp;
1 T  h7 t) H" z2 @                }$ i9 p' c! y! q, Y2 ~* G

. h7 _( n/ a) q/ T3 S5 \$ U! P                /*  找出极值 */
2 P& V2 h( P% ]) v% `                for (ixstart = 0; ixstart < 81000; ixstart++) {- A2 M; V) p& B; D
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
5 j. P& t8 d9 l$ N. U                }5 n, T% y9 e7 {6 [5 ]
* w5 E$ D+ p  M- X' ^$ q
        --------------帖子字数限制------------------0 M$ T- g- T, c4 ?: i
}% P, h/ ~6 l* U/ N8 ^/ ^
, f, |+ ?2 V9 x) ~$ R

* o9 G& p& }1 p7 q) G: J8 w

本帖子中包含更多资源

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

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-24 00:35 , Processed in 0.049839 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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