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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 , B6 @4 z! u% V( p& ^) ]; y

6 W* S; }' F/ ]" C各位大神:# M* T. E7 N9 C  J% X+ N% W$ ]
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)8 y' x; j& s6 q4 a* W
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
; z$ z' Z* P# C
& ^0 o' E% c: z" v     8 U( ^$ p, E: `) f- _7 h2 Z
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。! V+ W' C) ~; \( ^

; K+ g" k2 ]3 G" Z' i0 R6 m  u并没有其他线程& }2 n9 h+ \" k7 O2 n
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
0 z$ e2 r6 j8 V也说不定是和堆栈有关系。。。。。。$ p+ F0 o& x# n& Q/ e; B
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....0 W( c/ Y9 ~- d3 N6 \; O
, l1 f9 \3 f4 @0 X0 M
6 j3 G9 z4 X/ s. T% V/ `" v
3 p; h& f% T' V
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
4 ?5 o" o% }& ^
# E+ X  u  B3 @+ K' h
: F: ~: A' [1 r/ G$ b# U& K附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];  O6 T) P& d( }- y  H0 _
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。3 i$ B- }6 q5 ]% {3 w5 g! d

/ j5 E1 J( K& l; k( J7 Yboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(: ~( d; o% X& B8 v5 x
                const double data1000[1000]) {
7 \: q, X) ?, Q' G# E) T
+ S# t" M/ K7 x+ ?        int myfuck;
2 `! Q% c% |$ Z% h9 U1 Y        double yiDuanShuJu_mean;
/ {, b* f8 G5 \5 t6 M        double yiDuanShuJu_LowMean[1000];4 h$ X* w- W$ g0 x# G/ o! ]
        int ixstart;( R8 C, L. Z! I6 a" J! I
        double dv0[1000];' \& A% [5 H: b0 G2 `1 m
        comm_AGC pAGC;
- g2 c+ E8 I1 \' Z# ^        comm_CarrierSynchronizer pFineFreqCompensator;
# N5 A' o/ L" v% r1 J2 ?        dspcodegen_FIRDecimator pRxFilter;6 c* M3 H4 |$ i6 R  ?, ^0 w
        comm_SymbolSynchronizer pTimingRec;6 o- `1 o! [3 {
        comm_PreambleDetector pPrbDet;% T/ T7 {5 J* s1 w  i% H% {  I
        FrameSynchronizer pFrameSync;
9 N+ e( ]( L; `  }/ x        QPSKDataDecoder pDataDecod;
. L5 X( c2 P4 x, T        static double usable_left_filtfilt[81000];8 y, k9 I7 D& D4 u
        static double youXiaoShuJu_QuZhiLiu[81000];
! o1 h$ [7 O& ]' f3 E        double mtmp;4 @" d2 v; }: R" f/ H" [8 E9 }" r
        int ix;1 w$ e" c7 [% }9 J8 q8 ~9 N
        boolean_T exitg2;
! ]0 F2 L* ]. ]8 w+ }3 y/ m- r        boolean_T exitg1;/ p. P  \. A2 ~. N  F$ _5 _
        double YiZhenShuJu[800];- I& o& a7 ?8 \9 m" O
        double dv1[800];; g: A/ a+ I/ S2 [1 s- N4 J
) Q, X# E/ w8 {$ `2 j* H" }

0 `7 ~' ?" y) z% u4 {6 S        double b_YiZhenShuJu[800];
( X, B3 }- N0 K& j1 e        double I_filtfilt[800];
( d% s7 a; W. I6 O        double Q_filtfilt[800];8 q& p1 D8 L* u6 ^$ p
        creal_T b_I_filtfilt[800];
1 [- s8 s, K/ W        creal_T b[800];
6 ^! Q" f2 ], _) P        creal_T RCRxSignal[50];% I/ U. w9 }; J
        creal_T fineCompSignal[50];" @! F6 x$ w; F% [
        double phError[50];; l( s" h- a. [5 }  U: E
        creal_T timingRecSignal_data[28];
0 }# D  J. E0 E0 O, \$ d        int timingRecSignal_size[1];
5 v* o, k+ T" h4 \6 Y        double prbIdx_data[28];
! [2 z! T/ C" w3 Q  C        int prbIdx_size[1];
# O5 H. U5 g, m1 z) o        double dtMt_data[28];
5 Y6 z& J# R* t8 a4 }, I        int dtMt_size[1];
4 @: Z8 w1 B0 y- }5 P% Y9 A9 V        creal_T symFrame[25];
9 _8 u) O/ z) O9 L7 ^        boolean_T isFrameValid;& s& a1 S9 g; _. E# \6 K
        double unusedU0[3];5 b- {/ I3 S  {& F# B& G
$ e3 m9 e" p( n8 }" }! Z1 P
        //调试过程中的变量- I# H( W1 Y1 y. `
        int  enough_data;
  j7 B, H! c( K  m/ J2 N" s+ W( B# F7 C* q( V& c
        int enoughDataFlag;& f; K1 _1 h( R% W$ q; y
        int yiDuanShuJu_mean_int;' W0 _2 j  D( ?: p
        int int_sum_dv0;
* n& W" k! w# h( q* m1 _        int oo;
! V/ ?3 F) m6 ~, g! ^1 ~2 R1 T        int ii;
0 d! b$ w6 U" {, X; o7 h  @        myfuck=10;
9 U! C9 t3 O) ?* f2 D        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
. H. o+ @6 k/ N& ]' I7 X% Q        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */! q( F9 N4 k5 K
; d; r& @+ K3 y# p; c1 w- I" x8 o- ?6 R
        yiDuanShuJu_mean = mean(data1000);/ V2 D5 J# d8 B' W9 K  }
" _# Z* r. L( Y7 I( h$ I5 d% y% e
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
# C% k* m- T2 F! y        UARTPutc('A');
: S- H5 s6 Q) z) h* i        UARTPutNum(yiDuanShuJu_mean_int);
7 `  ?4 k% v! e" i: z+ t! G0 I        UARTPutc('\r');
8 R$ k. S; H& ]- p+ v0 z: d        UARTPutc('\n');% V! ]" {" j9 q5 o! W$ p6 t. B6 ~0 K

, u3 z; \# I) T+ I( y9 o8 V* r        for (ixstart = 0; ixstart < 1000; ixstart++) {1 G4 w+ \; ^3 Z4 e
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;$ f! z4 C- P4 Z4 |
        }7 z' k. M, x- k( Z
1 j. o3 v: Z9 s5 U8 b
        power(yiDuanShuJu_LowMean, dv0);
- G+ p2 w6 W5 z% h
: k0 g- a$ T# T, i        int_sum_dv0 = (int) sum(dv0);0 Q) X, l  j% I+ ^% W0 G4 x

- Z5 a7 ?7 N' p) V9 L" g! m. W* P        UARTPutc('B');0 r, o/ C& B" C) g' i' m* D2 o
        UARTPutNum(int_sum_dv0);1 E3 i8 e' I% U; V9 \6 Y$ U, n
        UARTPutc('\r');
% W0 y6 ?5 J& M2 ?. t+ S        UARTPutc('\n');& F# q9 G! x- b4 r. H
; C" h( D4 J9 }/ a$ L) O# J1 a2 J2 H
//        int compareFlag = int_sum_dv0 > 1.0E+8;
, |' y; |$ |2 I$ F# D/ M0 e2 d& m! j+ k9 r" }  J, P  _* d6 B3 j! f* S
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
! E6 [6 f! [; ]! M                UARTPutc('C');! C' f: e" b( v( \5 q8 H9 p
                /*  比较信号能量 */! K# B6 U- d. V% B' K
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
$ s; g; _1 Y3 g% y& I4 T  m& B" X//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
) O4 w5 Z0 J! h8 w//                for (ixstart = 0; ixstart < 1000; ixstart++) {
4 _/ w3 [1 h  w: g7 k# [8 P: U//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
1 x6 C+ f$ Y5 r; q' s//                                        yiDuanShuJu_LowMean[ixstart];
* P7 \2 }9 U& l6 n//                }0 {9 \! H+ I1 ~5 e% y
//
6 j# u# P" w* m$ z/ d1 |//                youxiao_k++;
, {+ Y7 n3 g5 C5 Y2 ?. @- T//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 {' X1 g, y0 v# ]
//                        /* 感觉要取21个数,即0-20, */* q4 V7 j* w5 ^9 I# {
//                        enough_data = 10;//有效是10,无效是0( f5 `% v; A7 Y
//                }/ X! W9 _) q5 j, |5 L: v+ `* _
        }. r  t9 \3 o" N2 w$ h: W
2 w2 x7 Q7 I0 K3 t

( u6 j% K0 ?$ M+ Q4 i, O        enoughDataFlag = 100;
, L' E3 G1 t& c: ~        enoughDataFlag = 1000;1 ^- b! Y. B- w  ]4 A9 E
        enoughDataFlag = 0x02;' i' I4 m* c" |
        enoughDataFlag = 200;' ~( j. ^/ Q3 q7 Q
! g( B2 W7 |/ E% k/ h
        int myfuvk1;
- W: s- _; m2 w$ X        myfuvk1 =11;
% M! A/ w" h/ i* g* {# w+ }  v% I9 [5 |- n4 l- ], X$ }

7 x! A% w8 K. P$ U( x( R8 b5 [        enough_data = 0;9 Z/ r0 d# l9 S6 F) S

* W5 J5 B4 J8 p1 J1 v//        if(enough_data>50){
7 `0 n8 t) }) l& A//                enoughDataFlag=0x01;
6 V  Z" U  U* Q& q//        }else if(enough_data<50){, ~) y# ^$ n3 ]0 E
//                enoughDataFlag=0x00;//0x00还是不行) U& o) n7 E$ e2 G. ]  W% m
//        }" s1 |7 @0 v7 _! J

) c  U( {5 a5 \2 i' [: S. [& f; J. f; L2 v  ^4 }
        oo=10;# x" ?* V- i% L. q& i5 M
        oo = oo  <  5;
8 t" z# M  W. n) a% \6 F; N        if(oo){
, p' k6 ?) X3 a0 G% A  W                ii=0;" K  T$ M' x* S6 Z& G: k) L
        }4 ?/ L5 c' u7 _' ~, y, x9 I1 E
        if(oo  <  5){# b1 n$ h" [5 ~, n
                ii=0;
$ r% ]' i9 |8 e        }! N$ E( ]  y8 Z$ U
        if(oo  >  5){
0 J+ W! H) R! T8 J1 w                ii=0;: X5 z9 R3 d7 ^
        }
5 c$ g9 q- R& v
  f- G7 m3 l* H. \        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
# I+ s2 ~5 @2 B3 r7 L8 U        /*  如果数据足够才执行主程序 */- e% [+ y, _6 H7 q5 |$ o, E3 Q
        oo = oo  <  5;
7 Y/ `; ]8 b# W+ Q; J: Y+ K) c        enoughDataFlag = enoughDataFlag  <  5;  G/ R0 O8 A9 N) Q+ I$ Q
        if (enoughDataFlag  <  5) {
0 U* l8 }9 N& S! r" y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
2 N% M% @: S6 Q) \                AGC_AGC(&pAGC);
& F4 n2 ~6 Y6 ^* J) l' ^2 H4 W/ t1 e+ z
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 N) f% `6 ^" O% }9 B0 r
                FIRDecimator_FIRDecimator(&pRxFilter);* }& o  J' o6 q
* z0 y' t8 }& d4 m
                /* Downsampling */9 F  G5 R* L8 N9 {
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);3 a: T- F: h  r5 M' V* E
9 a* e0 p" n* D4 d/ C8 o3 G9 s: H
                c_PreambleDetector_PreambleDete(&pPrbDet);/ H1 s* w8 t. j4 Y, V( t
" g. ?8 Y  g9 o
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
1 L0 R9 d# p3 m* j. |1 u                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
# Y4 u6 ~$ M- p- V% [                /*     %帧数量=100 */
4 Z1 ]! k, U0 r                pFrameSync.isInitialized = 0;0 ]2 C) J% n6 i, F

7 }; S8 Q6 z! ?3 L" C7 Z* Y                /*  [EOF] */+ o, K6 ^, K  u: l+ I) Z2 R
                /* 前导码长度是13 */% M  d7 s3 k. F8 g" R! `' A
                /*    %qpsk */" P2 d6 P  k1 N: k/ z
                pDataDecod.isInitialized = 0;
/ k6 Q* q  S# h4 y0 U
5 w% S7 i+ o& W7 w* B                /*  end */
- O" d  b" z) d, k5 W                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
1 y' ]3 j0 y* g4 l! [/ ?                /* Convert 3-dB frequency */9 j3 {" Z& C7 G7 H* B5 |- |/ \$ C- `
                /* Convert 3-dB frequency */
( l9 _6 K: N$ @7 T- |: A5 b                filtfilt(save_buffer, usable_left_filtfilt);
$ B" ]! N# x/ |0 p' N                for (ixstart = 0; ixstart < 81000; ixstart++) {) u4 g# w# _- ~$ M4 x& t6 C
                        usable_left_filtfilt[ixstart] *= 2.0;
5 @6 j" ]5 |) ~2 Q1 x                }$ b- e7 g0 Z3 I  A. |
2 I* f/ H/ k1 Y' J$ p
                /* 注意乘2,处理幅度 */
- E8 i) V& w5 `( A  k9 ?                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */$ V8 j, ~% v1 f, }- S# X; p) ~$ q
                /*     %% 行列转换 */
9 B, V) m6 o( V+ o& c. g: C                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);, o0 {' D4 R5 W9 h7 I5 e
                for (ixstart = 0; ixstart < 81000; ixstart++) {4 w+ B& u- O: @# r  u
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]1 X7 y, o' ^/ _$ M- t% q& t
                                        - yiDuanShuJu_mean;* h0 V$ K- b0 |* s$ u
                }
8 y1 @. t: f; }# A: _! Y' T# C, I% R7 C8 @+ y% z2 S
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
; e: ~* h% r" f6 a% a) S$ b# N! L                ixstart = 1;
0 k' f+ Z& X4 Q5 \( D8 ^                mtmp = youXiaoShuJu_QuZhiLiu[0];
& v, I* [3 t# ]                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& P: B$ l; l. S, K- Q* Y& Y7 L
                        ix = 2;
: ^3 @! {5 N0 e2 P                        exitg2 = false;
( Q& R8 u( _0 y- x; Y2 P+ h8 o* C5 Y                        while ((!exitg2) && (ix < 81001)) {
; R% M! L- f1 j% p+ H) J2 x7 }, l; N% D                                ixstart = ix;; p* V( J& P& @
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {3 }8 w* ?( ?- t0 I# {' L( ]2 F  j% P
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
! [: T! K2 y( ~1 i( ?                                        exitg2 = true;/ L2 `$ o4 d" q. M8 M( k$ x
                                } else {
4 |% S+ u" ?7 A/ T8 N$ B                                        ix++;
) B' [5 |8 w: ~( s3 a: \                                }5 |! N  u4 a- [. Z" J
                        }* {( R; N, L% F1 Q( o
                }2 U. Q" L: G, }- ?# P: E& q
' D/ e/ S- A: T9 W: ~
                if (ixstart < 81000) {! B4 C( `# `  N/ I8 O& ~' n
                        while (ixstart + 1 < 81001) {
  z6 _5 U8 x' e                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
5 B$ Q5 N. R% Q- J' b5 Y                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
$ ]6 o5 z1 b) g7 C, [0 e                                }
1 x# F- q/ s9 t: r6 n* }
! K3 T& X, s* g' E6 B                                ixstart++;
0 [& N5 b. m- t8 ^7 W4 A                        }2 P. v- P6 u( o; J
                }
$ B7 z, v0 }- D  T7 E" i+ r
( ~1 h5 R- I9 m( n) q. ]" ?( B8 L                ixstart = 1;
! I4 I# I) l- s                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];( a2 ^; K( B9 @8 f' [- V0 N
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
/ @3 C/ n4 Z; M* T9 u, U' b- P                        ix = 2;
9 \, W4 r# T, ]7 I7 M+ B+ a                        exitg1 = false;
, O9 [; y! W; }8 m' z                        while ((!exitg1) && (ix < 81001)) {: L5 N2 x" n7 n' e) q% v# N  w
                                ixstart = ix;
4 F$ M0 A' O7 P7 z6 Y( N- N  R  ~                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& _( _, |& p# p9 ?" f/ J                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];. L* T7 A+ g' W4 h" y8 R# H
                                        exitg1 = true;7 v- Y- l& H# p: ~* G8 _9 m
                                } else {
3 R' h3 t+ i8 I/ ?9 l' S$ |                                        ix++;
2 _. f7 u: U0 |                                }5 H1 _4 {2 Y) T% v  Z/ F: B5 J& W
                        }. i& Y6 S# t! h( z5 B2 m
                }
- l3 L& v& [# O6 ~3 Q+ F. \
# b! n9 d$ I6 p, `" r- `                if (ixstart < 81000) {
/ w% ~5 b1 D+ ^1 {8 o0 n                        while (ixstart + 1 < 81001) {$ s- x3 L( O4 m9 p/ p1 _/ c, N  A
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {, |9 h& y0 e, ~4 u
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];; n* u2 N$ J9 U/ a# x) U* t
                                }
$ |8 g2 W8 g( J8 ]' L
$ Q2 {) R7 e5 P; R3 b                                ixstart++;9 v$ o. c. z* R" C6 G
                        }
' f; u* \# u: g. F                }/ N& K# u4 h& e$ x, t" z# T
$ e' R3 B9 o  Y4 l1 ]0 w
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
7 D, _7 D. {) |                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
4 g- H0 W$ f& t# z4 X8 i% `$ ~; o                        yiDuanShuJu_mean = mtmp;2 z2 l8 C3 P1 }4 `
                }; P2 r" X: |- K& g" S' Y+ O$ t" K

* k) n8 K5 ]6 r* ~1 }                /*  找出极值 */
* c  B+ B' s+ D5 [$ y                for (ixstart = 0; ixstart < 81000; ixstart++) {
# @' k- a+ T( U6 E$ E6 D& C                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
8 H+ I% N  @6 l& X+ n0 G* I                }" T7 ^3 p  W  D. \! H: G5 f2 z# T
/ |: h! _' ~6 W% Y. a
        --------------帖子字数限制------------------" q/ r1 T: n) ^) B3 e
}
  S" o! {- o7 y( c# }* S" Y9 d* I; A3 v: T* L+ a  Y2 A
$ c- {! q5 S. y5 A* B! m

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 13:47 , Processed in 0.051075 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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