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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 / h( r* e* t6 t/ ^' k9 J
. n6 T' ~, k* N) J3 I0 V$ @$ @
各位大神:
* K/ c) g; O( p+ Z$ S     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
+ g1 I% t: K8 z8 C# Q, m( n0 Z; h      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
/ h, D& H$ x- g7 d/ {3 r/ ]" [7 i9 }
7 H. Y( |  r& B5 |9 u3 A/ H2 n     , u* X' }  {, p& J4 O
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
9 N4 O8 j/ K. n* C/ A( g7 e
, v1 n& p7 R  W2 V$ h并没有其他线程: [: s2 k! W6 D7 C- r* S
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。+ l. R. k! O/ r% r, [
也说不定是和堆栈有关系。。。。。。
) `* J. W4 o! u& f+ O# B5 {! m( }请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
& u, ^# _9 a$ L1 B) ^
0 u( v' J; G% P; a" r" [6 W  \8 ~1 [5 F1 r
' L+ Y6 ^6 O' T8 J% G) |
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
; p2 l- Y, F; D6 O- v( y  z
, {4 Q' |5 H& q% F: R3 g
/ M3 c: _3 \& [0 x8 C0 A8 M8 ^附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];: i" S; ?0 c, p1 B1 |& I
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。% l+ ]  H# ~4 {8 k$ {, B

6 k0 n' W: [& F0 qboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(5 \0 ~5 k4 y- a' U5 w3 L" o
                const double data1000[1000]) {
4 z. W5 p  Z3 F2 X
  k  H% Q  N  I& O6 q0 K5 R        int myfuck;; `) s4 W0 O, v/ ?( T. X
        double yiDuanShuJu_mean;$ S5 f4 j/ `' ?) \4 J
        double yiDuanShuJu_LowMean[1000];. j# y. O, G8 p) ^
        int ixstart;  j1 f! H: v3 e; Y  x7 \
        double dv0[1000];
& x/ B- l/ e7 \6 ?; z1 g/ t8 A& }        comm_AGC pAGC;* w: m. `- A7 t& Y9 ~
        comm_CarrierSynchronizer pFineFreqCompensator;: M3 V$ E, ~6 O+ X
        dspcodegen_FIRDecimator pRxFilter;8 F& n8 X1 ]$ s% Q
        comm_SymbolSynchronizer pTimingRec;
- U0 A) w3 y5 C9 N3 W: g5 o        comm_PreambleDetector pPrbDet;7 d' I% y( k6 m$ W
        FrameSynchronizer pFrameSync;8 E/ V" G5 x& ?2 X( C0 S' T, ^
        QPSKDataDecoder pDataDecod;
$ \  `1 z" f( P0 G/ J8 e4 ]' Q        static double usable_left_filtfilt[81000];
/ ?7 B) B& h/ W" p        static double youXiaoShuJu_QuZhiLiu[81000];
, b+ f  A# Y3 U  y5 [0 n! D% u        double mtmp;
; [0 y! ]+ {- z3 y& Q6 r" B2 D        int ix;8 W5 ^) f1 H% f& z
        boolean_T exitg2;& w8 r9 S5 j# Y0 S* L- `- T9 R
        boolean_T exitg1;) C- F* D1 h  w8 f/ L& _
        double YiZhenShuJu[800];. }% e5 O' y6 `8 R7 Y5 b7 A
        double dv1[800];: c$ J0 n- g, y

) t1 A2 s. b$ o2 |+ h. O5 m! ]1 L
        double b_YiZhenShuJu[800];
; @2 d2 m- m6 E! w9 h8 V/ U        double I_filtfilt[800];
4 L; z# t, k% e  m; |+ g- u        double Q_filtfilt[800];
: V5 ~" A& `" E        creal_T b_I_filtfilt[800];
; G- p- a, M$ a+ r* j        creal_T b[800];
3 B8 s0 M# W3 z" v8 O, F- k. P        creal_T RCRxSignal[50];
- |: m* ^! C8 z" [, y        creal_T fineCompSignal[50];
, _# y) f4 Q, e7 P/ o        double phError[50];+ l4 Y* U- s1 B2 V+ X
        creal_T timingRecSignal_data[28];
9 b# X$ }$ g# W        int timingRecSignal_size[1];
, h9 o9 \! p( {% G) a& ~/ c        double prbIdx_data[28];+ \2 ?6 k9 J. @' N4 D; j
        int prbIdx_size[1];" k, \6 t8 h) j2 Q5 }
        double dtMt_data[28];
6 t' u' n% l0 ^& I1 d. }; G        int dtMt_size[1];
" U8 S6 E/ C3 j% R5 Q        creal_T symFrame[25];( f/ T: j! a9 i) V
        boolean_T isFrameValid;
: C0 v  r$ G0 r        double unusedU0[3];
2 n* m9 G' P. {% q1 G5 Z
) W, z# s$ H: K/ Q        //调试过程中的变量4 V: |! u% U" V# _+ s" l
        int  enough_data;& Z3 x+ Q9 E2 |6 t! ]
0 G1 }6 A" M8 c
        int enoughDataFlag;
6 X2 h7 S1 y" {5 k7 |* m( |+ k        int yiDuanShuJu_mean_int;
0 B: a7 H8 \+ A; n, X: z" T        int int_sum_dv0;
, e2 ?2 f" l- I        int oo;
; z. y3 g* E2 s/ o& x0 F        int ii;
. B/ ?# h* |$ H  P: A        myfuck=10;
! h$ ^' f" d! d2 v        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */$ [2 G( z+ u* [' \! i4 Z
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */) O8 G7 k* }0 m* P# h, F% `6 J

. }( p. ^+ S, R0 A- h4 Y+ i        yiDuanShuJu_mean = mean(data1000);
, L1 a# [8 ?0 O0 ?  n2 Z  A  p6 m! D* [7 j7 z. V7 D# a4 O
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;% @4 u( b$ e1 o* x8 @1 `4 L
        UARTPutc('A');
2 P8 y! B8 E( h        UARTPutNum(yiDuanShuJu_mean_int);) m. m( R# Q+ x/ ~9 o
        UARTPutc('\r');, P/ S0 G: s9 @9 |
        UARTPutc('\n');: j  s2 S* y, B

8 E0 _* i, y5 }  {4 O# h# y        for (ixstart = 0; ixstart < 1000; ixstart++) {
" U( F$ n8 k3 {" S' j( z% ]5 g6 X                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
8 q1 Y. q- Q4 I& u6 e" y9 T' m        }
* K! N; y% W7 h2 u6 Z% G5 m6 w% v+ W; Y  k
        power(yiDuanShuJu_LowMean, dv0);) }  }) B6 r/ z5 @
: c. i8 ?0 D' m9 Q; U
        int_sum_dv0 = (int) sum(dv0);
8 p; A+ Z% n0 @: H* ~  C" l# e
5 ^0 c' ~9 c9 K1 _( z        UARTPutc('B');
8 h! W" h; Y" }4 \, q- ?9 j/ w" Y        UARTPutNum(int_sum_dv0);+ Q" K" t/ |! l7 ?/ |- w/ i
        UARTPutc('\r');. r! w7 {4 V, o( J; a: Y+ H0 }+ x  l
        UARTPutc('\n');: M, V, ~; z4 ^
7 e4 [8 X9 Q/ J6 E% T5 Y: \
//        int compareFlag = int_sum_dv0 > 1.0E+8;
$ y# H% F2 @! P* X# r: j) i- d# ], Y
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
+ t5 ^4 E, K" z7 Q( I8 u                UARTPutc('C');
0 P/ o3 a* _5 E' X: X& z  c                /*  比较信号能量 */2 N" L1 w9 p1 D9 F
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
" e6 O; R9 c! M3 `& d//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
1 O3 |4 ~( S& ?//                for (ixstart = 0; ixstart < 1000; ixstart++) {
3 E( g( N$ ~$ i4 s2 c//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
3 \0 A. j# Y  w# u( }//                                        yiDuanShuJu_LowMean[ixstart];8 H- g* r) m1 T' Q' V5 ~" c
//                }
3 F" ]  d6 @6 {//
- [( C/ C% Y, a$ j8 d3 `//                youxiao_k++;3 H- B' g. `/ v$ k4 A. L' E
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
. a) A, b: j8 o" w//                        /* 感觉要取21个数,即0-20, */
$ `6 U) X  C/ V* K+ c3 f: A//                        enough_data = 10;//有效是10,无效是0
- D3 W) Z  t  o+ |7 e2 Q//                }
! E* C. i+ q( ?# C4 d1 b7 \8 d        }
0 E8 \; y+ d$ {4 h# [$ r
  s' v9 U  v! S; F+ v+ f6 h4 s. o3 c7 F0 t" U2 P
        enoughDataFlag = 100;
% i4 r; K) l/ P  l        enoughDataFlag = 1000;& O5 n% t/ f* p7 {8 I
        enoughDataFlag = 0x02;- B) a( @8 J* A- S* D+ U* ?
        enoughDataFlag = 200;
* y" \6 _& o, {
1 Q0 O" g2 W( u* u! x        int myfuvk1;, c3 b$ b" f0 ?4 q0 q
        myfuvk1 =11;
5 o  y7 u0 ~( r, _( t) ]0 h
7 q& H2 G7 m6 E; T: i7 b( Z+ @/ s) c) R
        enough_data = 0;2 p1 h( n2 I- H* Q# ]. N

( v  q; |1 P4 z//        if(enough_data>50){
& P/ h1 H( {( p  }1 P9 y//                enoughDataFlag=0x01;2 z) {: w) `9 x$ u* B# z, n2 J
//        }else if(enough_data<50){
; ?0 V7 C$ I3 T& r//                enoughDataFlag=0x00;//0x00还是不行
8 V; \& \' R" L* U//        }, L7 o  Q/ D2 |  x4 S) {6 V
- o* T+ j1 s9 I' _* I5 k8 o

. o; |5 Q: u. \$ ?* J0 `/ H2 a, i) V        oo=10;8 [: \+ |7 r% Y- `3 ]: X
        oo = oo  <  5;
% ?1 m3 @+ K* X) |" d        if(oo){, s8 W( i' [& V) z7 @: t2 ]
                ii=0;
; a9 ~1 t$ i4 q0 U9 r' ]2 e        }9 K$ P  D8 L+ P7 W
        if(oo  <  5){
& d7 _1 @# C3 }                ii=0;
$ ?: c% x- i5 l        }4 N9 P+ V" N  g% B
        if(oo  >  5){
, p7 A4 N3 O! u; v" R- Z7 I2 b. }                ii=0;
5 m) _& ^! Z2 Y9 d* P/ \        }* f+ f3 T3 T0 D: X) S- X0 N
/ s8 c3 [7 r2 p$ x, u
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */" z" E0 w; ~( V, U  c0 a+ v) S0 E$ p
        /*  如果数据足够才执行主程序 */
3 A+ c! Z6 m5 k$ i9 Y8 G        oo = oo  <  5;3 g" h+ L2 [0 V8 t
        enoughDataFlag = enoughDataFlag  <  5;
6 e' _  t3 C# j4 n7 ^. H* E        if (enoughDataFlag  <  5) {
& [' E! J2 \5 S* C8 z//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0, a7 }/ t2 }: `4 k% ^: c: Z# D* `) L
                AGC_AGC(&pAGC);' k. W! ~; n2 z9 m

1 i1 X: a/ K! d, T                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
1 f0 a# I3 e3 }6 U6 c: I                FIRDecimator_FIRDecimator(&pRxFilter);8 ~) B1 \* R" \4 M6 H5 @& z

0 u1 g. N. c4 `9 D' w                /* Downsampling */
$ T; d7 c: u3 M/ Q                c_SymbolSynchronizer_SymbolSync(&pTimingRec);# G: t4 @3 \% g2 G/ n6 m; [

. |% p/ e* h' _! C                c_PreambleDetector_PreambleDete(&pPrbDet);
' Y4 ~2 y- S1 E" \. u4 |; T
9 A5 }- T6 H7 x  P& w. c                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
- I! K' R2 a; w  Y" K( J/ z5 x                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */; L4 J( v& x% d6 z$ X
                /*     %帧数量=100 */
% z3 g" d( G3 s+ m                pFrameSync.isInitialized = 0;' Q" {2 l3 Z  m) [2 \
6 M5 `! U0 a( M+ `3 b1 s  \0 V7 @  ^
                /*  [EOF] */
' G" i% U% P, m; t1 |' Z                /* 前导码长度是13 */
5 i6 K  w5 f  K5 E' s) c                /*    %qpsk */# ?  @, p; C* }2 Z$ u. v8 i
                pDataDecod.isInitialized = 0;$ i( e# w" J6 j+ b: s+ v
& ?" t4 E# B, E# H
                /*  end */9 r$ {& J  f' M. z( H3 o1 v
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */& `% c: V7 a- T4 r6 _  Q" n3 h0 B
                /* Convert 3-dB frequency */6 |. j! A  J$ c' {) O: M: w+ ~
                /* Convert 3-dB frequency */' v  B; w! R0 N( O7 @
                filtfilt(save_buffer, usable_left_filtfilt);
' {* [! g2 a. R# W4 X8 g6 l0 \                for (ixstart = 0; ixstart < 81000; ixstart++) {; A* ?+ X$ Y! k6 S1 n7 ]
                        usable_left_filtfilt[ixstart] *= 2.0;
: F. \% X9 f$ E* Y- x1 R                }
* v6 Z  j* D; f- J* s$ s5 J3 G; a* W" d
                /* 注意乘2,处理幅度 */
$ z& @/ J6 Z* m( C2 \                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
: q5 _, b2 d' L                /*     %% 行列转换 */' {1 Y0 q+ ^) J- n) A& ~
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( X2 G. [& q. q                for (ixstart = 0; ixstart < 81000; ixstart++) {$ {7 s5 Z9 g" i* V; H0 Z8 U
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
* P+ Z9 [6 P" a& z8 k7 R, S                                        - yiDuanShuJu_mean;
, Z; Z# z% r. M. i                }, f7 S4 c: \0 S* Z& W" L% U
( P# F3 ]7 B: d! Y$ w5 y! O9 a% |, Z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
" X5 q  x# Y, s                ixstart = 1;) _" o$ H0 Z2 j) a( c$ \
                mtmp = youXiaoShuJu_QuZhiLiu[0];( ?2 o& [$ A7 p2 d$ |
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {" M$ ^% k* z: \( w2 }1 n! t
                        ix = 2;
- z: P  [/ `( J3 o  c: `                        exitg2 = false;
6 P& {  b0 V/ b: m4 U( v                        while ((!exitg2) && (ix < 81001)) {
6 G/ d+ g" J  A/ [3 N                                ixstart = ix;
* K' s, C- L, ^( s1 z                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 I: A1 R5 E8 Q) I, @9 ?+ c6 r6 i8 p
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
# j' o# q1 \# Y9 K3 `                                        exitg2 = true;
/ k$ z  Z$ e& j# ]6 p) V; e: m                                } else {
! }$ g7 s' a7 ?5 i                                        ix++;
5 e8 D7 @' j0 a7 J( ?$ j9 G( e                                }* q6 @+ v; R, ^1 s5 ]) U
                        }
6 N* s% o6 ?# m% b                }; X+ W: J6 @- u6 M
0 e" c& m$ E; T& b" t' Z
                if (ixstart < 81000) {
- l# r9 H$ p$ Q- T                        while (ixstart + 1 < 81001) {, v& H9 z3 n4 a* t+ ^
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
" x" t+ W) ~: j' ?0 C                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];1 G0 E' G% _6 u! u' Z
                                }  C8 [/ W1 {  i/ P( t

9 C& r/ ^& s/ p/ l1 |2 J: @7 {                                ixstart++;$ g9 q! Q( l* K% Z- n
                        }
& ~& o; V" v( M, h1 |4 L                }/ Y) X; x' v& m

0 w9 J. }; N- f% V- A2 i/ w                ixstart = 1;' k& ]4 j0 [* Q3 N8 l! Z  f
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];& Q$ m2 u. \9 d* k4 P9 y
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {* z: y( [  ^7 l, y! l: _
                        ix = 2;
% a8 E* E# ^6 V* C1 v7 t+ H                        exitg1 = false;
/ V) j3 S& o6 D0 F) f; f, w                        while ((!exitg1) && (ix < 81001)) {! l9 N, }1 z4 T. M9 _" {% Q7 @0 U
                                ixstart = ix;, S% H4 T1 `9 p
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ j. O" T, g+ ]( @% O                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];" D, H4 r/ B* P( }
                                        exitg1 = true;
8 V& d9 f- s& s. w- h                                } else {
4 W) w  @3 @4 W& D2 M                                        ix++;$ C% J* x$ k0 Z$ T7 \& v4 J0 `
                                }6 ?: `! I. E9 y& J
                        }$ B. k6 k) ^' \" x0 I5 |3 p$ v
                }( o$ K1 h1 o0 L, _9 Z
0 D; J: n% K1 u0 r% X
                if (ixstart < 81000) {
3 f: P8 _8 Q& }) G% D! J  p                        while (ixstart + 1 < 81001) {. L3 K6 G; e  [
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {' ^7 Y! c* `4 q6 M
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
! n* y6 b1 L4 e5 E2 _* j8 S& y( }                                }+ J# q9 o5 I: F
; [  x* O- U( D1 h/ W! D  C
                                ixstart++;4 k7 p3 h) F" Y' ~
                        }
+ P0 Z" R5 H! \4 I; h3 i1 I                }3 x' O; m) }9 i
6 |7 F6 `: G. a" [" K( r; ?$ ?
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);( p& {. _% Q$ y. U# T& S
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {5 e$ k0 g# R! @. l
                        yiDuanShuJu_mean = mtmp;
* K7 {5 t& l( b+ s* o" e                }% W& R2 R! L% c0 e0 v1 S

- B+ |* A0 d6 d! n2 {: [                /*  找出极值 */
  S7 p8 v3 O& l% p. v& O- W/ ?7 {                for (ixstart = 0; ixstart < 81000; ixstart++) {
- L* f+ b9 P/ H- G6 t# l                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
& S/ X/ J) R$ Q( t8 G! }1 e                }
, ^3 ?, Y6 |! C* ^1 V6 \$ @
* p/ y; d/ x* T. I) y4 E! j+ N        --------------帖子字数限制------------------
& c! q7 U3 H5 U* Z4 O4 A2 m' s* B}
7 _) u$ Y. e+ d, Q1 I9 ~- T& H
: U  r$ A$ r: k6 A( ^4 w4 ?" N; y' u# ]/ D* W$ K' I; |2 r

本帖子中包含更多资源

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

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 07:41 , Processed in 0.051467 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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