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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
) r' x3 I% i- Y: ~% _
9 y- k4 W* ~* ^- Z# I' n! a各位大神:7 r  y# N* T0 r- R7 |
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
" R7 g; }! e. l& G4 I) c      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:7 L- i2 c- z- U, K2 ~% k, W1 m! Z

" u; @$ K& A1 O5 {/ y, R& r7 K     
1 n* j' o9 c  T4 W& }$ k这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。5 F8 E0 A- V, h  J

, `; f0 L$ r/ ^8 R并没有其他线程
# P: O1 F5 i  }1 c1 t- V反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。- I% r4 N2 B! [2 @/ E0 ~
也说不定是和堆栈有关系。。。。。。  N# H* m5 ?( G1 U. H  m6 n
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
# a' y) q. d0 p0 M2 g
5 {& w2 P: E7 e% F/ t9 T1 f+ u
1 v# f5 _$ Y' z* m( N( v/ z. V+ s1 l6 d$ m
我也很绝望啊,希望大神能帮帮忙,感激不尽,!0 @. h+ f' ~" Z6 H; y
2 p* V  S" X: B) f, J; C, S+ g5 }0 E
% @% P0 h6 p3 ^
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
* D" R3 I( w7 B# [/ m        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。! f2 Z- S  b3 z9 ~- B6 Z

5 N6 J& l; Z+ \% u6 t9 n  Vboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
! P  d6 ]+ S$ {' l7 b" W                const double data1000[1000]) {
8 d  Y3 f5 j5 A* u' O9 n& U6 T: ~3 M2 W* H4 ^! G* j+ K6 p
        int myfuck;# o; s, @! y) V0 U
        double yiDuanShuJu_mean;
& c4 h; B) O) r- e& T7 f# G        double yiDuanShuJu_LowMean[1000];
! k  J/ [0 p. |9 V& j' ?        int ixstart;
$ o' [/ J, k: J1 L, i7 C) {6 L" k" c& `5 O        double dv0[1000];* |4 m3 Z* _4 c6 g
        comm_AGC pAGC;7 S& \* ^) W/ x6 {% L" c
        comm_CarrierSynchronizer pFineFreqCompensator;: @' Q/ B6 y4 F
        dspcodegen_FIRDecimator pRxFilter;6 h; w2 d7 v9 ~  \) V
        comm_SymbolSynchronizer pTimingRec;5 t5 L- t( e* s4 \6 M0 C4 @( R
        comm_PreambleDetector pPrbDet;
! c7 u7 Q/ o1 N  ?/ l* F/ j        FrameSynchronizer pFrameSync;
: c. |$ V( ~" R' \& U) h% d% d8 e% G        QPSKDataDecoder pDataDecod;( l$ M! g. x# O/ b& W
        static double usable_left_filtfilt[81000];
& E# ?1 g  g8 d! ~) K        static double youXiaoShuJu_QuZhiLiu[81000];. m; j( J- |$ [3 n& q
        double mtmp;$ m  D& P! I4 M& o0 D6 p
        int ix;4 Y9 L) f5 C4 p- d% d. g4 Y5 X
        boolean_T exitg2;
8 h% g3 [; H4 g/ \2 \        boolean_T exitg1;
8 l+ X4 S1 k" D' k% E        double YiZhenShuJu[800];
: h5 S! `  P  d, l3 U        double dv1[800];. w) H5 Y; B0 w$ W8 d1 m

6 g, L! k9 s! Y" W8 O2 L% O
9 F& H1 c6 V9 c, Z! H, C+ K9 S        double b_YiZhenShuJu[800];9 g# G" p) U* K" ~3 y# k% _
        double I_filtfilt[800];/ v' \% `' ?, s$ Z6 P$ b, X# _) Z
        double Q_filtfilt[800];
8 y2 P% [1 r4 o& h! V4 ]# v        creal_T b_I_filtfilt[800];
. H+ S& l( ?3 e        creal_T b[800];7 i& ~- E, J4 A9 N3 c; ]
        creal_T RCRxSignal[50];: H6 t+ {+ L: {" @. x% C' S
        creal_T fineCompSignal[50];8 u4 Y% D2 G4 p
        double phError[50];9 i- u6 k0 j0 Y0 Z- R
        creal_T timingRecSignal_data[28];
( {( k" B  M8 l! p0 N        int timingRecSignal_size[1];7 N. z6 x( S2 R" l
        double prbIdx_data[28];
# m9 z+ c8 t/ G3 C- Z        int prbIdx_size[1];+ E6 g. p& P) @/ Q* J* |0 `
        double dtMt_data[28];, r: M6 ]1 d6 W8 M
        int dtMt_size[1];$ G& ~1 }0 W8 a5 ^$ P( c/ S
        creal_T symFrame[25];3 p6 E' m7 n9 s; g
        boolean_T isFrameValid;* u$ Z3 h( p( P. u% M
        double unusedU0[3];
1 f6 Y! j) f/ a0 V# \6 ^
! q" |6 _+ |/ ~6 N0 S8 s        //调试过程中的变量
1 J# J& V6 }4 q        int  enough_data;# O- D9 d% J0 q6 |# E1 _- j4 c
/ T& o0 n: x. {# d: J: a
        int enoughDataFlag;% i1 T3 s# n9 E- u& t* {) p8 `
        int yiDuanShuJu_mean_int;; L7 ~3 a" `- T+ D3 B( o5 D' g- n
        int int_sum_dv0;
- `$ s, e1 A9 }, N7 ]        int oo;
! X6 J1 ?" }9 v9 a: ~# Z1 r        int ii;" {  @: P' o6 p. b1 U! Q4 D
        myfuck=10;' x" B  c2 F6 v. b$ D
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
, u) G6 I- p& J( P# U/ O        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
' r0 ~2 I$ S( X7 @$ m0 b
. T) X) U. _  Y2 X        yiDuanShuJu_mean = mean(data1000);
, `# o. j, k' M. \6 [9 ?9 E4 R. z+ Y% r' ~2 s) n, a! L1 ]- u
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;- \5 r$ ^" Q7 m
        UARTPutc('A');
9 m0 S" c& u, ]1 L( }- v) |        UARTPutNum(yiDuanShuJu_mean_int);  e! Y! |) {, H6 F
        UARTPutc('\r');
1 H+ m$ g0 Q. ]! y        UARTPutc('\n');$ ?! d  X3 a6 c' t% g% O3 j$ ]

1 m4 N2 }# o" z2 K  k        for (ixstart = 0; ixstart < 1000; ixstart++) {
# M: x1 E, t% y# c0 B, g                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
/ Q7 ]  s# y2 q" [- k3 @+ s; D        }
: |9 S# U: D6 o* `) O7 v
* R/ ^* U: `5 G" T+ n' [        power(yiDuanShuJu_LowMean, dv0);
, b; q- V. c1 m1 j% ]
* Z. l; C8 `" |+ ?9 \        int_sum_dv0 = (int) sum(dv0);; w+ B; ~3 v* Y$ K7 d9 {* v. F

' `1 O6 }. D( [$ b9 ~- c        UARTPutc('B');2 _, i+ N0 k. l. [2 x' E
        UARTPutNum(int_sum_dv0);$ U4 d; _7 c6 S% Y, A5 p8 N/ Z
        UARTPutc('\r');0 G3 @$ L) ]0 T8 {; ?8 ^
        UARTPutc('\n');. l" D  H2 t3 E: y4 x9 l, X' S+ t
  B5 B: x% Q  R5 h: c
//        int compareFlag = int_sum_dv0 > 1.0E+8;
) f- {# G% {: x7 c7 j: q) l. b# m, Y$ @
" R6 Z8 @. F# z        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
5 }3 r( M0 z5 P1 ~2 D$ _! f' m; L% W                UARTPutc('C');
6 \/ z9 {) C3 ?# E                /*  比较信号能量 */
' w  A& o. ^# ~1 L                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
7 s2 u, z( v" c" D# m  h& s' L//                yiDuanShuJu_mean = 1000.0 * youxiao_k;* S' x/ w6 l: U& B$ v
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
9 m! \" E  P9 |2 e2 ?& b3 h+ l//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =& V5 V1 n' G) ^8 J
//                                        yiDuanShuJu_LowMean[ixstart];
) w/ }" q( j9 }) t//                }# I; q" v5 L* F
//
- N* {1 F4 W2 o3 _3 ]: _& s: E//                youxiao_k++;
6 ?  l( B) m) j7 w) o//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
' {& \) W& o% U' n  y//                        /* 感觉要取21个数,即0-20, */
9 ^5 N( _6 W- Q' t//                        enough_data = 10;//有效是10,无效是0
0 U- p" x( |1 X% Z, ?1 N//                }
1 e4 _5 e; g$ Q( K        }! x% M! W" o/ r/ o

: ]% ]1 u6 i# A; g" d
, o/ s: ~; P. Q8 s0 a2 g        enoughDataFlag = 100;
- @9 a# {8 |8 x6 }' Z        enoughDataFlag = 1000;* @' S, O9 x  O2 U- \* U. S4 c+ y0 O
        enoughDataFlag = 0x02;
1 F# `+ \6 k) k* S' i        enoughDataFlag = 200;
  F* {9 _4 {! A
7 h- @' D4 s& O; n; o' E        int myfuvk1;
6 n; y2 ^! k& z# u1 {+ ?2 C0 d        myfuvk1 =11;$ N" J7 f2 }; w
6 i- C5 C" K0 o0 L* z

6 \, t4 a' ~' E* ]4 L: b) |        enough_data = 0;
- o: U6 G* U9 ^5 E, K' x: k/ [; a+ M) D, w; U
//        if(enough_data>50){' n$ z' ?' j. g" k5 C
//                enoughDataFlag=0x01;
+ F4 Z0 G( h" M//        }else if(enough_data<50){# K5 B7 \% X! Y( g. k
//                enoughDataFlag=0x00;//0x00还是不行3 ]6 t' p& e6 j3 R! m
//        }/ L. g5 n! F" Q) O$ E
& t+ b; ^6 W; \) X

6 q9 o8 m, v/ N3 o2 B0 T) s) u        oo=10;
) \0 ]) f+ {2 {4 @+ o        oo = oo  <  5;
9 z7 x" |( x9 F( o        if(oo){( f) j/ J) x/ I2 U. K: i+ g
                ii=0;
4 S& P& c: f( `) A3 C% O        }
! c6 k: u/ Z" y+ b        if(oo  <  5){7 G# L; |* ^' g: n/ Z) I# K
                ii=0;2 V  w6 ~7 g& p% \
        }
, n' O0 n+ S3 J        if(oo  >  5){
" r" K  H* L* u& ]- k                ii=0;
. c$ \3 r, s! P6 T        }
# R. N! J, \( u
2 b' f0 S" Y7 M& Y% y        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) c1 N. M6 Y2 B( y/ W+ D        /*  如果数据足够才执行主程序 */+ _% a7 a/ i: T) Z7 e* S
        oo = oo  <  5;* p$ q  P+ r0 ?+ ?
        enoughDataFlag = enoughDataFlag  <  5;9 r' g/ P; u7 n/ G* x  i
        if (enoughDataFlag  <  5) {9 v/ M3 i: \0 r1 A& Y- a' N
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
1 b9 K/ P* Q8 a$ {0 L                AGC_AGC(&pAGC);" e0 s, }9 Z8 ]

3 F+ k; J9 e! o/ C6 X7 ~% w                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
9 j( }8 [. w1 Q* _) Z                FIRDecimator_FIRDecimator(&pRxFilter);
/ Y2 _% X- p6 S* o+ P7 _6 ]5 C% I, T9 v6 n/ _, `
                /* Downsampling */1 d! v& q+ d3 e2 w& M9 j- G/ f/ D+ p) z
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
9 f& I5 g) p5 O6 S8 @0 d3 F# n8 B/ ?9 E0 v
                c_PreambleDetector_PreambleDete(&pPrbDet);
5 S. M- X7 z1 H7 T, W* d2 F3 f1 w% x7 |1 ?
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
4 `0 S$ Q  z" ^& x5 X# r' p$ e                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */8 \$ b4 [6 h. m' ]/ r& k/ G
                /*     %帧数量=100 */2 D" J3 Y" {( l5 F
                pFrameSync.isInitialized = 0;8 A- e4 D. b! F* A" f9 U

2 n7 E  d  G3 i  N; y                /*  [EOF] *// ]& K3 t5 n6 B6 k
                /* 前导码长度是13 */1 [: v9 D5 r1 s6 w
                /*    %qpsk */2 _% Q( c4 f1 n
                pDataDecod.isInitialized = 0;+ S6 v, W( e/ m# p! K
- x1 P' B1 V! T3 {6 y
                /*  end */
8 M" U9 j; B* q; v& G- O! N                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */3 j5 t: L; j  d* U& }( m/ E
                /* Convert 3-dB frequency */
* ?% y4 n! S$ o2 L                /* Convert 3-dB frequency */. l. t2 B0 U% B
                filtfilt(save_buffer, usable_left_filtfilt);0 V6 v. g( t' z( k% |+ W
                for (ixstart = 0; ixstart < 81000; ixstart++) {; W, l) l% Y) D( f$ p% x
                        usable_left_filtfilt[ixstart] *= 2.0;
1 p+ Y" v- m/ H                }# q2 Q4 U* s$ l0 h$ u6 l+ l( h
) V/ {) W( _8 |, v! L2 {) h- A
                /* 注意乘2,处理幅度 */
' X$ t: o# C9 P# J                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
  p4 W5 ^9 H3 T                /*     %% 行列转换 */2 X9 \( x9 @& V& @6 o
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);* S8 }! }3 \  g+ l) e
                for (ixstart = 0; ixstart < 81000; ixstart++) {
( D  t5 T  T! S# T/ }8 r% R                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]' h6 S2 M% h* [2 Z3 c  [8 x" i; ?
                                        - yiDuanShuJu_mean;
! k4 |$ u" K" g* |0 M: x4 I4 X: x. d2 H                }
( j! @( D; z% U( t
' A# v; |5 ~5 S: `                /*     %% 应该对数据归一化,但是这一步放在哪比较好 *// O, B) m: c. M  M: B
                ixstart = 1;0 Y; d8 f: S/ `+ v0 P& G5 j( Y
                mtmp = youXiaoShuJu_QuZhiLiu[0];
0 G( x4 c0 v" a% f' p7 t                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {5 K1 q7 o9 I* z2 h7 M
                        ix = 2;
8 Y3 D$ k& S" x2 e9 T! y+ f                        exitg2 = false;0 l6 N) G& t+ ]9 e& O( O$ q
                        while ((!exitg2) && (ix < 81001)) {  _( k+ j1 s+ [, Y3 C
                                ixstart = ix;
1 d) ^! n. I8 ]4 n+ s4 R* s' g  l                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {  M/ P/ q* Y! E. N
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
: ]$ ?1 u5 \3 ^; l, E1 I" \                                        exitg2 = true;
" N) _( @8 I- E                                } else {
* s7 ]" @- F/ z: t) \+ e3 n                                        ix++;$ N& u* ]6 D" e, j+ s4 q3 V
                                }
6 X/ p' R+ K9 i( x6 r' e                        }
2 t: \" |  d2 P: c: W0 Z5 _/ [                }1 C$ C! t, [& C0 F9 e- s) v
  t/ H, i& X, `2 n8 s" @0 f
                if (ixstart < 81000) {
; @4 @0 z! k) O3 P# ?                        while (ixstart + 1 < 81001) {
% z3 L! g8 U! K5 m/ l                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
9 X8 c0 N. c8 \- S                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
# p) n0 K8 J- ^1 u. b2 p: `! A                                }7 s% j. N* h1 }. F4 U* H" x, o: ]
& Z2 L0 o) C' u6 z, p+ O: _
                                ixstart++;
1 ~* y, n* Z% x. {& X$ @3 [                        }
. ~2 D' ~; v# f" h) U) A                }- S: H  e% [. I+ R+ j
+ j, }" A( R* ]4 s/ n4 u0 ^* x. w
                ixstart = 1;
0 v4 T/ i$ z: h; r6 k1 K                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];0 Z6 K) W! N) d, x5 |: H
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
! M- |9 t& @' a  E% R% t( J; r                        ix = 2;0 g6 b/ a7 n$ e4 }0 F& |7 D
                        exitg1 = false;
' M" P4 o" V8 I9 f0 K4 P) [$ }& I2 f: m                        while ((!exitg1) && (ix < 81001)) {0 ?' F& z3 S; R, f/ o
                                ixstart = ix;/ q6 u3 X/ l$ s2 z# \( u; K+ W
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
8 p5 ~, ]. K$ ^" k7 q2 q; p# E                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];3 t3 x, f6 O/ _7 t  v5 V, i  M7 N% x
                                        exitg1 = true;# v# I, L; z( b. n
                                } else {
- @1 p, m4 y- V$ H" p4 W& T                                        ix++;4 H  F+ d/ i9 r9 `( W
                                }
5 T8 U. }/ _: q* ]8 T. }                        }
9 r+ p7 ~) |- q' j% E8 J$ l                }
6 z5 l9 u8 f% c
9 l  Z9 y7 }$ q& ]1 i                if (ixstart < 81000) {
* Z2 U$ k8 }: D# n                        while (ixstart + 1 < 81001) {5 ]; A/ C5 e( h. g4 A9 Z# L
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {6 P: M! v# K9 }; d9 s. C0 \
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
2 Y5 l- F- I& p8 z1 H                                }) |& B$ a0 \, y+ Q$ o, f$ `. K

: x* ?% b/ G0 Q# p5 g                                ixstart++;
5 P0 n+ V  s. o                        }5 _! ?% }5 P$ R* ~
                }! P% j3 M: _" ]3 E0 G
* v$ G; l" u2 c& X5 c) Q
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
( }1 X6 C) p* j2 L9 e                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
, D8 G# i9 v; f7 {: Y3 n                        yiDuanShuJu_mean = mtmp;
, s6 c! M, N( v6 [                }
, M3 o  F3 F* L% K
7 S. z; G5 e8 @1 Y% {                /*  找出极值 */
+ C+ E1 F' n5 A- J; D                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ j5 u& @2 o" j/ W                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
: P4 ~0 R% t4 E( }7 {( b6 s) M                }% s2 w1 |/ V: H$ X

4 N* J4 s( k1 }        --------------帖子字数限制------------------
7 ]4 j6 }, b( z7 W3 Y! x( m}
4 r* m5 F" G3 F7 m+ w% ^1 t! k% B* T! o0 T

' P$ y+ k. g7 A! s0 z) s

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 03:04 , Processed in 0.046591 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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