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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 3 o. D) W% w+ k* _3 I
( _% _2 V1 D3 \2 ^# x( f% l
各位大神:4 u4 n3 ]; T: l! t+ N
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
3 P1 \* ?! o8 i! ^, A) }      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
) z1 v: G( p; g' K4 h9 b" X& S( ]- E
     3 u4 S9 v4 L3 F: z8 G
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。- X4 p9 X: n# V- d
( ~; n$ V* b+ j( z6 [6 P
并没有其他线程8 o! T; v1 z1 m# t& x# j* f
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% l: i- B6 u8 V8 o9 M$ f
也说不定是和堆栈有关系。。。。。。
) E% y5 Q) q( g$ a: d请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
3 b+ U2 g6 F. v0 H7 z6 {! R: A5 B5 c
) p( v% f" }  k6 z( X( L, H
/ Z% d' C  K6 A/ B5 U
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
* b  @+ d0 ?: u1 q, n
7 i; Z5 R* _/ ~  J7 g
" e* @/ v" |3 \% |0 j+ k* T附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
8 {, v6 {1 O2 [3 o2 I8 C        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
1 T9 V) g9 m. G0 I0 M( U4 t! ~
2 _7 d# X  y% Lboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(4 g' X7 d! O  L- w" N! e
                const double data1000[1000]) {  Q* }" |) {$ W- A! \) \
7 ~0 U6 P4 a2 |; ^* b2 r4 O
        int myfuck;7 S. K0 `$ h9 N2 ~$ [
        double yiDuanShuJu_mean;6 i2 r, y& i) c; K7 q
        double yiDuanShuJu_LowMean[1000];, x6 L# a% g5 n% [% i
        int ixstart;
9 @' r& p; L% |+ z4 ?" W5 E5 N        double dv0[1000];: m. O" W3 X! O# t
        comm_AGC pAGC;
) c3 _: u+ c+ O' b3 s        comm_CarrierSynchronizer pFineFreqCompensator;
7 I! h/ t( u. i- z# e$ V        dspcodegen_FIRDecimator pRxFilter;) L( N6 a* p5 l2 t
        comm_SymbolSynchronizer pTimingRec;
! l! [7 \3 Q0 K8 g; n        comm_PreambleDetector pPrbDet;
5 o2 b  ?! G- s        FrameSynchronizer pFrameSync;3 a7 t3 T' c- ?1 O  D
        QPSKDataDecoder pDataDecod;) w7 a+ v. q* X: M
        static double usable_left_filtfilt[81000];; @2 i- q# \" H( A9 s9 j
        static double youXiaoShuJu_QuZhiLiu[81000];
3 g6 |( a/ P3 {( }6 h+ _1 X        double mtmp;
" e) }4 T. P- {        int ix;% }) h! B& d1 B- c
        boolean_T exitg2;8 S) B% n% m  P8 M) C) ?
        boolean_T exitg1;& j9 z/ n2 x$ U3 k
        double YiZhenShuJu[800];. l: |5 c$ q: X& g2 C. |8 J
        double dv1[800];
  d* d% o4 E, n+ w/ [* u6 b: K5 k, M* A/ e* {4 w- V7 F
  G; R# i4 v9 H% o" D
        double b_YiZhenShuJu[800];
8 v8 n' Y2 w6 `- W/ h+ m. c        double I_filtfilt[800];
- D! I9 F3 e/ ?, G( b6 @9 R        double Q_filtfilt[800];5 x% {* N, N8 F- h4 q5 J7 i
        creal_T b_I_filtfilt[800];+ X9 s7 y/ C( z& D& M7 \
        creal_T b[800];; t9 E! G% w9 I3 c& l5 {
        creal_T RCRxSignal[50];6 j, e* Z5 i- u! B% r0 k9 t4 P
        creal_T fineCompSignal[50];$ ?* Z& F5 `! n3 J% D# j, F0 p4 l
        double phError[50];5 J5 z0 R- q# f9 e  w+ Y
        creal_T timingRecSignal_data[28];# V+ H. h7 |* m" H: W6 P$ W7 B
        int timingRecSignal_size[1];
, y/ G& S' _- y1 h        double prbIdx_data[28];
) O3 A$ ?0 d% U5 `- A( D, O5 ~        int prbIdx_size[1];
& X: m% E4 k8 h/ ^5 Y4 d" T        double dtMt_data[28];4 u! i% E, |& p5 z7 @
        int dtMt_size[1];
8 B! d0 S6 z+ i- z2 \) S        creal_T symFrame[25];) l( q5 s( x8 B6 q3 o$ v/ Y
        boolean_T isFrameValid;. d' d7 H9 p, C- K1 I) b! x
        double unusedU0[3];% s3 ^% g. P0 y4 J: c8 [
2 Y2 g3 u: o# C/ w. N! d
        //调试过程中的变量5 m! e4 w& r+ L: V' U/ U
        int  enough_data;" ]) _" w. k) b9 V5 c

! r9 j/ d  d9 I$ c( M9 A        int enoughDataFlag;
$ d7 K* {8 N% `. n" Y        int yiDuanShuJu_mean_int;# ?5 c( r% _! [2 j" y0 g9 L
        int int_sum_dv0;
. Q* z. \. J" O& o" C. H1 R        int oo;
0 e: x0 s# @0 P) ~& p. A- Y: Y        int ii;+ R! |" {9 S" @) Y9 k9 ?* |8 f$ n
        myfuck=10;
" ]7 r2 W) K" u( M# g        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */) q7 G3 J% s; l9 F
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
; `% P( p' T% u2 T1 D9 r9 n1 T5 u4 m+ W* M9 A
        yiDuanShuJu_mean = mean(data1000);
+ C8 b$ n- ?3 A8 T( _8 [' n% p
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
) I* X! f. F2 D! \: p( N( s4 N8 w6 _        UARTPutc('A');8 N. G# `6 Q. [: G9 F% m
        UARTPutNum(yiDuanShuJu_mean_int);
) w" f" ~- a0 d: o1 x% @" Z        UARTPutc('\r');8 q& n, A2 X( z  k
        UARTPutc('\n');
4 j( [+ c0 T+ Q% R2 e( W0 Z2 O2 S
        for (ixstart = 0; ixstart < 1000; ixstart++) {- K% U8 |+ \% p$ F( R9 W
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
& Y) R8 H. M+ h* }: V# d/ R        }- w0 k* S, d  X

5 ?  ]9 S; j/ E2 P% O        power(yiDuanShuJu_LowMean, dv0);. v  S1 N; W2 U+ E8 G
' T+ g; O- H+ J) W# d- X
        int_sum_dv0 = (int) sum(dv0);
# j: e- e. r# M! E# Q& D! q1 ^- m4 K( ~2 ?  L6 @& c' v
        UARTPutc('B');
! b' P1 n, d: D, |, ~        UARTPutNum(int_sum_dv0);
# P- K1 c# E) G; k9 p) I        UARTPutc('\r');
3 l- l1 A/ T. a& ^. u- X        UARTPutc('\n');
: ^1 v1 _* O$ @( @, S/ `5 V# a' g+ |: M2 J
//        int compareFlag = int_sum_dv0 > 1.0E+8;2 M! k- C1 C) |& P( z* p! o

. j. m5 _7 W4 {& r5 |        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
4 k" j4 K& \) T, t" w                UARTPutc('C');
- z  u* G% E$ K2 T! P% e  H+ u+ ~                /*  比较信号能量 */& c; V) _) A6 I9 p
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
: t. a! h9 r) B//                yiDuanShuJu_mean = 1000.0 * youxiao_k;- Z& a& v" D0 ~) s
//                for (ixstart = 0; ixstart < 1000; ixstart++) {9 C5 B" b& O: }# g: D9 x5 d/ h" Z
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
" B- V* X4 O) s2 b* K. h//                                        yiDuanShuJu_LowMean[ixstart];
) j5 G  u! @$ o& p//                }
& y/ B, C2 a8 B2 H" m//1 p6 g" K/ _, g* [
//                youxiao_k++;4 F9 C6 V& u) D1 F/ R
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
/ c" r8 m3 `& j/ g2 j" A% A/ ^- o//                        /* 感觉要取21个数,即0-20, */& E6 Z% O2 X$ Y* {7 x
//                        enough_data = 10;//有效是10,无效是0& v3 P# a! {8 ]" v' T* p/ Z
//                }
! a. @  w! m* [2 `        }) e' z; {9 s: h1 R5 T" h9 W% N: Q
: m7 M  E% f3 ?+ b
5 L$ d8 I+ [, q+ S; s
        enoughDataFlag = 100;- z! Q$ \) @2 y5 W7 [0 [5 H
        enoughDataFlag = 1000;
% k* ]9 g' e: I0 ]        enoughDataFlag = 0x02;8 l7 z$ m6 W2 I# n3 F! D# `
        enoughDataFlag = 200;/ W+ K% k2 K6 [4 L" J
$ D( `; Z0 h4 C6 b6 H" d
        int myfuvk1;% K% j3 j  E  H: J. a
        myfuvk1 =11;
( ^* R* E6 ^' R/ p0 v' R. f' R% R# H$ p& {; F

7 r+ M3 v9 \# _6 A9 A/ Y  `4 }        enough_data = 0;' N5 i" j0 @: o: h2 n. @
  `" X- C+ U$ A" ?' R
//        if(enough_data>50){
) e# V6 X# |$ Z1 R+ L//                enoughDataFlag=0x01;
5 K& l. K# r! u8 i+ I* I! R//        }else if(enough_data<50){, @4 L, l# M; D
//                enoughDataFlag=0x00;//0x00还是不行- p0 N4 A# [2 m) {8 z  x
//        }$ N  I- j2 U) a
! W; M8 |5 D# U/ T% z

" U" w6 l- W- b3 v8 K6 C        oo=10;5 n" K6 x. F' b+ O
        oo = oo  <  5;
, y4 C; _' I% w        if(oo){. {* Y  E1 ^. J  z1 D5 C
                ii=0;! A( V- W" p% r7 S0 U( l+ o# p
        }' d1 X( k& u+ F2 E9 ]6 X+ R+ X
        if(oo  <  5){
5 r( a) S: o2 U/ c                ii=0;
1 a# y. D% _8 x) r        }
2 N# X8 X2 G# I! A3 u' |        if(oo  >  5){( [% h# t6 m! V2 F, A1 c
                ii=0;$ [& L3 r+ V% _
        }; d7 p) K/ P6 o# J$ A
; K  k  q( a: ~/ V9 _
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */6 r2 Y+ C) q, o6 b
        /*  如果数据足够才执行主程序 */2 |% x! v. {9 x
        oo = oo  <  5;3 Z! m+ ^2 b/ A2 S$ ?
        enoughDataFlag = enoughDataFlag  <  5;6 Q( P5 y; G9 K* ]+ T
        if (enoughDataFlag  <  5) {
) M0 K7 \8 e5 d& O) R, f% i4 _& h1 L//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0$ d( S/ K& R2 e8 y" j6 L
                AGC_AGC(&pAGC);
5 W% m/ Z2 S4 Q5 B
* Y# f7 L7 o  o* r0 L                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
# X6 s2 e" ^5 i                FIRDecimator_FIRDecimator(&pRxFilter);# z9 u$ I- r" \, R: c  {/ V
2 F, o0 c, X" \7 ?4 ]
                /* Downsampling */
+ q8 I  _. q  Q8 \6 m                c_SymbolSynchronizer_SymbolSync(&pTimingRec);3 W) H, e/ Y. h2 B# V9 M
4 w: z' ^' _7 q- p0 i, L
                c_PreambleDetector_PreambleDete(&pPrbDet);
+ w' j+ T! ~" P3 d8 {$ X  j; l, p, |5 n8 R
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */; Z8 Z! g" d- c" {* Q
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
( A2 h( z5 o3 r8 @: n8 Z/ I. U                /*     %帧数量=100 */: `0 l, q7 J' p
                pFrameSync.isInitialized = 0;
  Q6 x( C, ^: }/ V/ f# E! p+ C6 D$ b) z! f
                /*  [EOF] */
! a/ G; s4 `: w* c                /* 前导码长度是13 */. d6 k; [/ C0 S! x& W
                /*    %qpsk */) D2 |; b# A8 S3 H
                pDataDecod.isInitialized = 0;# U4 l- n* K  K. J# e8 Y
) a" v6 J% o3 L2 e( @' _
                /*  end *// i% o( G: g% Q9 @( n7 G6 A
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 s! `$ `/ M2 j7 f                /* Convert 3-dB frequency */6 {$ \) O& ~$ Z% X) t$ e* X9 C
                /* Convert 3-dB frequency */
. z& u- e$ _! e' h5 X, H7 s, w2 `                filtfilt(save_buffer, usable_left_filtfilt);
7 }& W: a* i' Z) |                for (ixstart = 0; ixstart < 81000; ixstart++) {
' j  G( X5 X/ \! o5 \8 m+ t$ W$ q  T* r                        usable_left_filtfilt[ixstart] *= 2.0;! H% q- z% Q9 w9 ?+ m% P* _
                }0 a# g" a5 f8 H0 q

7 M/ Q/ h4 ^* i2 B1 }2 Z                /* 注意乘2,处理幅度 *// X1 Z) o4 n' Z! o! S( _7 g
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
) y0 ?1 C2 a  r* u2 J+ Z+ C3 P7 `                /*     %% 行列转换 */. ]& i6 v) s7 {3 v7 D! j
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
- h% k% E/ }6 V1 c9 a                for (ixstart = 0; ixstart < 81000; ixstart++) {& W' t6 v. i3 B- d
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]/ L7 U7 b; x3 P, s3 D: L
                                        - yiDuanShuJu_mean;4 c1 D4 k1 P1 ~- h# ]
                }
9 i9 }9 [5 [# ]' a8 W2 x$ M* S
5 q3 U9 T5 x/ h' g4 A9 g                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
. r5 T* E3 v  ~$ ~" C  |$ q* f% g                ixstart = 1;! \- X* ~* V( b3 H+ L, K
                mtmp = youXiaoShuJu_QuZhiLiu[0];* X* D! D( n1 T7 Z& O% |2 U
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {) Y7 k( J: g& U( t+ m
                        ix = 2;
2 x8 i* G! f5 P8 T: W0 N                        exitg2 = false;# \9 V( Z- J- j' O  V! ?% V
                        while ((!exitg2) && (ix < 81001)) {- E& l/ J& C/ f8 Y/ T% E) q
                                ixstart = ix;. [4 h0 J- n. d9 O1 N9 _6 L
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {, @9 c5 R% U( X& s* ^
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];! J, E% U4 M+ Q( O, Q2 T) H
                                        exitg2 = true;
2 H( |9 g; j/ W! ]0 {( T                                } else {$ `; F' A1 _3 l" R
                                        ix++;
) z9 ^$ N! N' c" l9 C! c4 {" h0 h                                }1 {4 V  _+ b4 d' n7 o
                        }/ ]2 V6 ~; T: s$ z% G
                }
" l% h* o* C7 D  N* v) G' S. Y7 R/ B& b: e- `& ?2 K- ~, X
                if (ixstart < 81000) {
' n- {) _# L2 F1 ^* l                        while (ixstart + 1 < 81001) {1 B$ E: X. L' g- W/ c  T
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {+ n( g' N% g' E$ i% e
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];% _/ j+ L% f. w' ~! `5 u( f
                                }
! t8 ~& K6 Q2 X; ^; _5 I1 |4 A  P% z3 a" D
                                ixstart++;9 L4 B4 j: {1 |( w* f% a: A0 D
                        }$ @6 P: p- ]( C( b/ q
                }
7 e: C+ A. F  q3 E) H$ T' s' G! m: Z
                ixstart = 1;8 b( A) q- [8 N1 U( z; E% y
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];! e) M' X- I- C* _  k$ S
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {! ?" U2 I, w; u! O  ~" P
                        ix = 2;
: s5 n1 M5 r/ ^7 S3 W( t. ~0 |# C                        exitg1 = false;( u% R9 W# F  @1 m  j
                        while ((!exitg1) && (ix < 81001)) {6 x0 h# [" V; y
                                ixstart = ix;
& f0 A! h7 K$ a: ?1 C                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
) v# ?* W$ v: y, n1 R% M6 o* u                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];9 d) t& A- \- k: O1 @
                                        exitg1 = true;6 j( `3 m( J$ I2 x( x7 o& A6 Q
                                } else {$ Q  t" E7 a; {& E
                                        ix++;
4 i* t% a6 {, i* M, w* r( s2 I( r8 s1 C                                }
% @3 D% l+ h' a" X. u# L4 a                        }
8 C. a( {# N; T+ A                }: u/ r% b/ f. s3 Q+ G8 Y$ ]
, `3 u' @) h! z# E2 i
                if (ixstart < 81000) {
3 G+ {# S% Q. ^                        while (ixstart + 1 < 81001) {0 y8 D2 X' o6 H# d
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
' c: [$ l* }+ q0 C8 Y9 _                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];! ^3 X/ N8 c5 S" d* }, e' N" \! z
                                }
# f# \5 j6 R9 ?$ n
6 W- {$ x$ ~/ @% y  x8 M                                ixstart++;: `7 T& U$ k$ g
                        }+ e2 X) p& y& _! d* o) {- P
                }7 J+ {' z. l5 c0 ?8 ?5 u$ f) O# B
8 P7 w4 F' L/ `. O) |& R3 j5 u
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);) [. \- j$ m& @9 Z) f$ u
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
. s; H4 a8 o8 J6 F; Z5 c" y& C3 k3 f8 [                        yiDuanShuJu_mean = mtmp;+ g  f# M4 R6 S2 L% }- j
                }
6 x/ B/ G% N5 ]: L0 B6 y! V+ N$ y1 ~$ s
                /*  找出极值 */4 D3 Z! H% P; v7 t2 t
                for (ixstart = 0; ixstart < 81000; ixstart++) {% B9 Q# _8 w8 U% R9 z! Y3 v
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
& j1 k4 I: J7 C# }' c1 t                }
8 r  r" l& I9 p: p
( a2 l0 O- m0 q  x3 t9 K        --------------帖子字数限制------------------
8 o# [/ Q' @) N9 h8 ^' N6 Y, J}4 z1 G( ?$ u2 _+ R7 {" [

, ?, P, z5 Q6 s1 R( H3 r4 u5 U
0 l  R  |, C' 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-10-16 22:06 , Processed in 0.053080 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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