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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
6 c8 l, I7 @/ E1 G6 i  S& p! }
# l8 [2 O4 d8 z8 x( g各位大神:( b. p8 |  y7 H. E  W/ h; l; }
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)7 J4 X# g* L( x0 U& @
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:3 r+ f0 ~7 l6 Z* [% e

) _4 M# w/ Y8 ]4 H$ ~0 R* C( |     ; \  U* V5 Y. {4 d/ o% O
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
" y  c2 o3 q" s; i4 C/ D; B2 \. L$ s+ e5 C) ?$ J+ }) q& I# g
并没有其他线程  @$ k* P4 i3 T$ f& J% S
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。2 l1 f; r4 D+ K7 |; I3 M
也说不定是和堆栈有关系。。。。。。9 g1 l: o) k/ }' S6 E) t/ O
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
8 w0 n2 x5 K8 o8 B+ E6 Y+ {( N+ Y8 r9 A1 @7 ]# W' w7 c2 n4 M

- A+ a5 b! s' K: d& w+ j( _7 E/ K) G( q1 ?
我也很绝望啊,希望大神能帮帮忙,感激不尽,!* F; Z1 {: H1 l8 Z  _9 n
0 O5 e+ O& z4 X

& w- r$ [0 l* Q附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
  ^# R9 Z* F# L, O+ q6 z- Z        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
1 k% \6 F; ]2 t" n/ ]5 g7 h4 k- r7 f  ?6 e4 k' {' L
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(8 n) ~0 X- |' s( g2 j2 A
                const double data1000[1000]) {' @% n9 |; b1 R* b* W- o

6 S' Z/ u- U. S7 a. j        int myfuck;
  n8 ?& c0 N! R0 @# j) X# \        double yiDuanShuJu_mean;
$ W3 q  ]% f0 O7 X, z' b        double yiDuanShuJu_LowMean[1000];+ C: T; R* `1 n$ u
        int ixstart;" H% \4 B& y* O# P' T
        double dv0[1000];' |% T  C" L0 M$ Z0 q$ j% m
        comm_AGC pAGC;
7 X1 u" V* B& w        comm_CarrierSynchronizer pFineFreqCompensator;
) G- X2 C0 c5 ^! N; h        dspcodegen_FIRDecimator pRxFilter;+ o! Y0 ]" C; Q3 `: D4 _9 W
        comm_SymbolSynchronizer pTimingRec;+ ?$ F% e5 ~- i: {/ L) ?+ H
        comm_PreambleDetector pPrbDet;
+ [' B6 O$ a2 m2 j! h* f+ k        FrameSynchronizer pFrameSync;
# R9 y, h+ j2 d' n1 D' G# ~) v        QPSKDataDecoder pDataDecod;
$ y. b8 O; M! g% P. @9 s9 o1 S. K( G  \4 T        static double usable_left_filtfilt[81000];
, b: p6 g* ]: f! Q* F        static double youXiaoShuJu_QuZhiLiu[81000];+ p( g# I% t# S# O
        double mtmp;
7 W2 a! L3 A: t+ v. i. a        int ix;
/ B7 `* q" K* a  ]  d3 F7 c) P        boolean_T exitg2;0 `4 s4 h1 g5 _7 X
        boolean_T exitg1;9 P8 d) q1 t+ V8 ^, s% ?# P
        double YiZhenShuJu[800];) i9 Z$ p. c( [6 J/ A
        double dv1[800];
! f$ E4 o- o# C8 D, N; r8 j1 }  r3 Z3 x# q: U$ e# c' q
1 I/ r% \0 y  @$ A
        double b_YiZhenShuJu[800];
; A( e2 B9 ~9 Y' ^" {# ~        double I_filtfilt[800];, x* V8 e0 J! t" O, u) c/ w
        double Q_filtfilt[800];  S! b# m7 C& a& t+ p0 H
        creal_T b_I_filtfilt[800];. N- e) _; n2 b. x2 d! @4 ^  S
        creal_T b[800];& A$ V( K8 }0 f
        creal_T RCRxSignal[50];
. ~- K9 v2 r' H4 S# k4 \        creal_T fineCompSignal[50];
( D- o& L7 e5 G% m5 Y        double phError[50];
& e. E/ o# l% r' V+ k        creal_T timingRecSignal_data[28];% Q) Z, h; w2 _" d
        int timingRecSignal_size[1];
2 v% V, [0 ~( o2 _2 k% P- k        double prbIdx_data[28];
" d* H0 L* ]' J/ C8 K        int prbIdx_size[1];# R+ x- o3 O. R9 V* }0 ?9 _7 Y- F
        double dtMt_data[28];! p9 q; F2 k% I3 t
        int dtMt_size[1];) W- Y9 s, q3 J/ d. W3 D8 c
        creal_T symFrame[25];' [0 R7 x1 ~# a
        boolean_T isFrameValid;. S. s( q$ B* {1 M& Y
        double unusedU0[3];
5 X( P/ x. Y$ o) M% y! w; e" ?2 d% P2 D; d/ z
        //调试过程中的变量
: ~# ?4 E. H" e8 z. m        int  enough_data;: Y( |5 m7 U$ w7 |

1 @/ C9 q* ?; L  W5 L* d& Z* v+ y        int enoughDataFlag;
3 N* e: p( b9 Q5 v% N6 k1 A8 L        int yiDuanShuJu_mean_int;3 l9 ^  ?$ O7 ^/ H/ A$ Z8 A
        int int_sum_dv0;" Z: n- q+ R3 m3 K
        int oo;
: H. u: T6 k. v: T        int ii;1 Y0 I7 z4 a( g+ s- b: r) T
        myfuck=10;/ d( J) v! _) A
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
* f- {+ a0 [( g" i* O        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */+ y, U9 d' {8 o$ F9 k
9 Q& j$ i) z2 \) s' y! Z+ {
        yiDuanShuJu_mean = mean(data1000);
) c8 ~' _2 B7 _- @$ q" N4 d$ \$ L$ L4 `) {" A
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;! t# v- O9 Z/ h3 a
        UARTPutc('A');
9 W# K& _8 G% Q- K( S        UARTPutNum(yiDuanShuJu_mean_int);; p: ~- i1 L7 F9 D% j) H& v
        UARTPutc('\r');
) f5 b" ~' s+ f" B5 r* i9 R& |; Z        UARTPutc('\n');4 v* f; i+ L; G, `9 D$ ^. y% o

- Y1 d, l& @, [4 m        for (ixstart = 0; ixstart < 1000; ixstart++) {
0 ]0 K/ K: b' O: j& B                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
7 \9 n) `. ~' ~! U) w        }' Y, }( B0 {1 d

* Z9 {; N# k( s* N3 c        power(yiDuanShuJu_LowMean, dv0);
; H; T1 \/ Q# d# o+ Z7 Z( R; n" X- s: O$ U3 ^
        int_sum_dv0 = (int) sum(dv0);; v6 a) C- I6 T8 ^( W
1 z2 @5 ?/ w$ S3 c! D- v
        UARTPutc('B');+ L9 x- ?$ j2 K
        UARTPutNum(int_sum_dv0);6 z% I/ u8 z! V! t8 p0 y2 @% N
        UARTPutc('\r');# E. O$ y4 Y1 }! e% R3 v
        UARTPutc('\n');
: c5 `( {0 C2 u- B( u
0 w. O( n9 O) d  U//        int compareFlag = int_sum_dv0 > 1.0E+8;, K, x1 d: r( T

* L% a" C* H& g/ K        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
! e/ U$ k/ P$ s) B                UARTPutc('C');" W" f* p  h0 d$ Q+ i- f
                /*  比较信号能量 */1 I" _+ p3 i5 p
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
2 p) \, w! a8 O3 r6 G+ |  Z' y//                yiDuanShuJu_mean = 1000.0 * youxiao_k;1 q+ B! U6 X- W" z9 F
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
- W% `/ ?$ n0 C- L: `* t6 R//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
3 P$ j- _( j( _$ t//                                        yiDuanShuJu_LowMean[ixstart];
; g/ m! x$ o  k0 X* R+ e5 K//                }
$ o+ V; }3 n. H//, ]* q  t8 J" C: s) w9 K! }
//                youxiao_k++;' o/ J2 t' B( t: H9 t7 D, B- |, v' k
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==8 l: b1 _8 T7 S7 m" s- q3 U0 p
//                        /* 感觉要取21个数,即0-20, */- G1 R0 d3 Z: c/ T% u4 V( ?
//                        enough_data = 10;//有效是10,无效是0
/ I, z5 c* X0 w5 C4 _+ O//                }3 U1 u6 ]- H% H2 G+ ?2 Y/ b
        }8 |- e' g8 i! E" w1 i/ `
+ S0 K1 U3 R, H/ [

4 g. H6 Y. Y. i7 J2 O        enoughDataFlag = 100;
) S% D2 W9 Y$ b( Z        enoughDataFlag = 1000;0 C& n3 S' B; D6 w0 @
        enoughDataFlag = 0x02;
! C1 s7 [, d7 C/ s% c- e        enoughDataFlag = 200;% t% {- N! T( K" ^

3 F/ \5 E7 m- U9 L) T7 d        int myfuvk1;+ P9 \7 j3 l  F2 U3 w  H, Y
        myfuvk1 =11;1 z9 p/ f( L/ L2 W  p4 g
4 v4 e" b: ?! F( h

+ t) k/ g3 ~' w6 g: o) X. A! \. o        enough_data = 0;! T/ Q6 X# p" h. n5 y* U: u: f
/ I3 k5 n" M  f1 j' m
//        if(enough_data>50){
6 }+ J" k6 T5 c  F//                enoughDataFlag=0x01;3 u" h5 f0 P. F& b8 I
//        }else if(enough_data<50){
  f" C( F% p! a//                enoughDataFlag=0x00;//0x00还是不行& c! @2 Q9 ^/ d0 O- }
//        }: j! o" P; j0 F( p

7 D4 r) O" p9 V* n. Y( J- w, M. K) X! H9 k2 y
        oo=10;1 G$ c& [8 a  M' G( F# w
        oo = oo  <  5;# Q! t7 ~' \% u0 ~+ \- |" b- W' E+ g2 Z
        if(oo){- F: R. g* B! ^1 F# {6 P
                ii=0;
8 N/ ~& w' {. @3 T, u        }: q# A; [( m9 j
        if(oo  <  5){
" T. V, v" [7 g% J$ ]# b                ii=0;3 h2 q( ~) u" h8 [
        }! c1 i- o2 I5 C/ S. y7 S
        if(oo  >  5){
8 r0 N5 v9 x5 t8 i( [                ii=0;) k/ h& i3 U( j7 Z( H" h. q
        }
  B7 |" O1 x: J0 c3 e
$ `0 Y. a1 N+ D' L        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
( g2 L- U. I* L; Z+ q$ Q* q        /*  如果数据足够才执行主程序 */
' m& E/ U9 `& s8 Z- d        oo = oo  <  5;: B5 m* g/ Y2 L* Z/ v6 o
        enoughDataFlag = enoughDataFlag  <  5;
. n2 u" h1 Q" r4 Y" ]3 }. j        if (enoughDataFlag  <  5) {
# a; o  ]6 T# i+ H//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
7 i, j: u, Z& a) a; V! Z8 |, N                AGC_AGC(&pAGC);
% t2 `) U* e; H  ~7 A8 ?! Q" K2 y, J, P! C9 S
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);' f; s. H# {0 {8 b; [' v8 E7 P( _
                FIRDecimator_FIRDecimator(&pRxFilter);
7 N+ X) u0 Y: m$ x3 C7 U- d" L( f, r, i+ W' G
                /* Downsampling */# V. o3 o- e6 t3 D" v
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);) \5 J) P, t: E  W+ x1 z1 n
4 H5 a% \( d6 ?1 g
                c_PreambleDetector_PreambleDete(&pPrbDet);! m4 M* B. m6 p8 o# s( G& a
0 C* ?2 H6 \# l# @! Q  q
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
$ u* X2 s! r- z) m                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */( X% A) ]) T) _! f
                /*     %帧数量=100 */' j/ N0 c4 p3 q+ [; A- ^6 A4 {1 ?
                pFrameSync.isInitialized = 0;: v% ^: s+ M8 U2 P- I8 F* b0 y

* o6 T5 z- l6 c* }) Y- \- X                /*  [EOF] *// W4 S# G( W& }# A
                /* 前导码长度是13 */" x) t$ V% W8 u# m# [, i7 Z% ^. M/ r0 Z
                /*    %qpsk */2 n6 f* b( J3 ]6 N, g4 h7 K, S
                pDataDecod.isInitialized = 0;, `: z6 \' ~, n# W7 j- S

1 l8 `) G2 `( [; o; U) W                /*  end */0 W" s- C: B& B  F4 k) Q
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
, l0 M) q6 c5 M$ z3 Z1 C2 ^                /* Convert 3-dB frequency */
4 E! M; N0 [$ X. \6 [6 g; F                /* Convert 3-dB frequency */
1 _7 g# a9 u2 I5 m3 D                filtfilt(save_buffer, usable_left_filtfilt);' A& `8 K2 ?) T5 r  ~
                for (ixstart = 0; ixstart < 81000; ixstart++) {
( @' Y: |# d6 E- X6 }% B/ {0 W                        usable_left_filtfilt[ixstart] *= 2.0;
0 v7 i5 J0 p2 u; G                }+ T' G. E2 R5 d

1 }- C5 t! ?2 B* T" y2 c- ~                /* 注意乘2,处理幅度 */% @4 Y  ]# N5 d8 d
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */0 p; @. Q* C, p; ]
                /*     %% 行列转换 */
2 P) Q, J' G3 x- k8 v, K                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);: D3 Q4 a# p: w6 d/ X
                for (ixstart = 0; ixstart < 81000; ixstart++) {: Q4 H& E/ H" V/ C& D/ F9 ?4 K7 K5 S
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]/ Y! \3 J! ]# z1 ]$ [5 l
                                        - yiDuanShuJu_mean;  ~& ~/ y1 R  n7 W! ^- Q
                }
7 D$ l" N9 B6 W3 X) o, g4 a* \. |8 e3 A8 p6 |- T* Z9 W% ?
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
' x! ^. X0 W. {! m                ixstart = 1;* T  f+ a# n* F
                mtmp = youXiaoShuJu_QuZhiLiu[0];
0 G. U5 ]3 y& N9 P1 S/ C                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, U1 D3 M1 m3 @+ [
                        ix = 2;! m! b' u: M8 B, P
                        exitg2 = false;9 R  @! |% A0 ]7 T, @
                        while ((!exitg2) && (ix < 81001)) {; k' m% C) E2 A: n3 S
                                ixstart = ix;* r  `, q% Y& k9 \
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
/ t. Y* Z, a& l  ^2 B                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];# u& k  j! O6 @& A) p
                                        exitg2 = true;& `. {- D7 H, N4 ]( x
                                } else {. {" }# i  h* F& x) z
                                        ix++;
, ~) D5 T. p5 u: r3 y2 a  n                                }
& ^, l! p! a/ W5 C3 [                        }8 e2 x6 Z7 y- j0 I; _
                }
" ?2 A" J/ l" `  K
1 y9 S- Z. ~/ D( Z: }; E+ d* e                if (ixstart < 81000) {
9 N; c' O1 X/ q2 h                        while (ixstart + 1 < 81001) {* V, F3 c0 n/ G
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {" V8 w/ \* O/ c3 M2 `% z
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];  T7 A2 }* Z3 l# J9 h' S) m2 m% O
                                }% V, L9 c: p6 ?/ M1 ?; z% f

( p6 k+ q: n2 `- u* N                                ixstart++;, V5 h3 G* E0 i
                        }8 G2 a- v( y  s8 k/ t, {
                }
% x  G# V- D" G7 I) L8 e
1 j- d( S1 X# V                ixstart = 1;" n4 c) b/ E( N/ |& |6 J8 _2 r3 Z4 W
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
. q! X7 i( s! `; w; L8 m- W7 c  H                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {2 ~! d6 t7 ?# l5 V8 u
                        ix = 2;
: K! ?) O" j  T                        exitg1 = false;
/ G) n" `' O) b" ]                        while ((!exitg1) && (ix < 81001)) {
9 U' [3 N; e/ C                                ixstart = ix;0 D. e2 Q6 {" }
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
5 e6 l" b/ R/ P) f4 l                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
. P! {4 T+ j5 b3 C7 p  h. [( ^                                        exitg1 = true;$ R6 A& V5 F$ h
                                } else {
0 g* q2 p! J; M5 J# r9 H) `                                        ix++;
3 g) H/ j7 r2 ?! h! D                                }
4 `$ e9 i+ k6 i$ J( G! d4 O: W' |                        }; X3 O  G+ ]( E; x! x8 G7 x8 U
                }
7 B7 n) j  s1 i7 {$ |
4 s- }% g# h8 r* m                if (ixstart < 81000) {# s* S; j& R  ?2 v
                        while (ixstart + 1 < 81001) {
( }6 B( S3 s5 Z" S1 V8 P( S) h, r( E0 O                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {% e; O& H) H; G$ b7 K- I
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];3 b. M2 X( ]6 E' L5 I0 v
                                }
! f/ x* Q+ U) Q+ y  p0 P7 P1 I0 ~& O' C! a
                                ixstart++;
+ Z4 J6 ^. ^8 k$ c: a& _2 \6 Z! }! g                        }8 O- z7 M/ h& v7 M# T" V
                }' e4 @7 u; v/ e* j: H1 l" F( j
8 r: k$ q! |$ A( ^8 g5 ]
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);* T. X- @  d& c# c' [
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {, x- C7 D1 u$ u! q% {% Q& B
                        yiDuanShuJu_mean = mtmp;
7 B( ~' U" n/ ?$ r" a                }: H; {' w  w' A) |. S
! @( j. H, V. Q1 B
                /*  找出极值 */
$ ^9 C" I# e0 [. g0 ~! s$ y                for (ixstart = 0; ixstart < 81000; ixstart++) {5 F) D4 [4 Z2 n9 Y4 a3 e+ x
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;8 ^& G. c/ _6 i# j
                }
% K) ^5 n( O; O1 K5 C; S* D5 }
6 `; J8 C2 W" Z; I/ q        --------------帖子字数限制------------------8 `' D% h' @5 K  y
}3 M+ i( k0 p2 [8 M; c
9 D5 Z& M0 K: r- X8 S, ~
4 U% z8 |0 _, |' e8 W% f

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 04:29 , Processed in 0.040705 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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