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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
, {2 L% b0 Q1 G5 ?) l
$ A5 D, C6 C6 ]' N4 v2 }各位大神:
! X- D  l9 _' v5 y9 g/ `     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)/ `5 n9 d& ?6 @/ t# W
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
3 k$ a1 m3 w2 S5 u. a! K# R/ _7 i- r+ E* U  H
     % l( j' _" A; F! @/ Q7 S$ D
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。( F6 Y0 W) y/ f5 i4 v3 G
* G# B6 Y, w0 A7 g3 ~
并没有其他线程
+ }4 U8 S8 G% P反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。/ J- Z7 j/ a& U7 w
也说不定是和堆栈有关系。。。。。。
. h' i' T; }: Q2 \; {/ K" ^请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
8 a( [4 x  r7 A  L( X$ X8 m9 v9 b  a% r. u

  B) S( o; q( R7 l( A9 f1 W" C& S( b! ?0 N! L) I
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
5 U1 h3 T9 v( |( y! _1 J
- b: U' K1 i# A8 ^$ D6 f$ {
$ F4 \9 ]' C: Y! P4 {附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];7 h/ _  [; v2 f$ m( h/ C
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
! C' T! [$ F$ B0 \6 [
% v* Y1 ?5 t/ L! G1 ?boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(" m9 P) s( _( f' ?' T6 n
                const double data1000[1000]) {
8 |7 b8 x9 v9 X! l5 f7 l' B$ u5 T7 N- B7 ~
        int myfuck;
4 |5 K/ c: D, N6 ]' ^8 m        double yiDuanShuJu_mean;
" i6 p/ m4 d; U- z3 b        double yiDuanShuJu_LowMean[1000];. h9 k9 F0 Y# }
        int ixstart;
; b9 y, i3 t! p        double dv0[1000];
5 K+ @' G  D3 u: l        comm_AGC pAGC;
( _+ |0 l7 h% Z' ~        comm_CarrierSynchronizer pFineFreqCompensator;5 @! K0 A5 l8 r' ~- k' N4 I) t
        dspcodegen_FIRDecimator pRxFilter;6 t" e" m" @( M* y6 w) e/ X  s! H6 g. y
        comm_SymbolSynchronizer pTimingRec;( K' X* @. ]1 Q$ n6 @4 R4 R
        comm_PreambleDetector pPrbDet;
* |5 w0 u. s% W3 x9 }        FrameSynchronizer pFrameSync;
( @! s- B% g2 _5 ~  z1 c        QPSKDataDecoder pDataDecod;
' o/ c. i( p0 B* ]9 E        static double usable_left_filtfilt[81000];
0 D6 y( ^3 H1 t7 ]( M/ h        static double youXiaoShuJu_QuZhiLiu[81000];
' l2 @( X, S( M! G, \/ @        double mtmp;8 }4 |0 B3 y' m% e- H! g: R3 T
        int ix;6 O/ R# x5 e8 v. o# b5 J
        boolean_T exitg2;9 S/ c$ @* x. U' _
        boolean_T exitg1;9 y: u$ j4 j7 Q
        double YiZhenShuJu[800];+ f2 r! C4 w+ \3 v1 |  t
        double dv1[800];
9 [: D! S3 {& B' ~/ s! W# j! ^' G7 K9 u  A

- z# H) o% _- `7 h        double b_YiZhenShuJu[800];
# N' o! M9 @( i5 L2 y$ o        double I_filtfilt[800];
. \; Y) ?5 C% v        double Q_filtfilt[800];6 T: \' L0 Q( q9 B; J) k
        creal_T b_I_filtfilt[800];. H: O) `9 D6 l
        creal_T b[800];
* Y5 x) q7 M: h        creal_T RCRxSignal[50];
+ z% n. |7 @- i1 V$ W* c) R        creal_T fineCompSignal[50];! H, b/ v7 H$ b6 [5 p- F( `
        double phError[50];
9 t0 S% I% h0 J/ \, R. o# \        creal_T timingRecSignal_data[28];, R4 ^" ]6 ~2 ~+ j1 n/ I$ _* B& p
        int timingRecSignal_size[1];- k. D& U0 ?7 f( y& B
        double prbIdx_data[28];
* j/ L! R7 [# g        int prbIdx_size[1];
# r% s0 W$ }! N  g' I        double dtMt_data[28];$ z/ H$ C9 ~& o4 ]% x2 t+ L
        int dtMt_size[1];5 [8 G7 a: A3 ]5 n/ W
        creal_T symFrame[25];% J- g0 u. G* a' S
        boolean_T isFrameValid;# T2 f: Z' f3 ~
        double unusedU0[3];
8 H* m6 E/ W  V) d8 j- D& P  d( y" N* H; a! i3 V' W; N- x
        //调试过程中的变量
* z9 r: J3 |; }' ~+ r$ `& x        int  enough_data;
% B( H& s; P0 d8 T; _6 O% X/ c. Y- }$ P- c, E% L
        int enoughDataFlag;
) d# q- ]) u% W" p; B        int yiDuanShuJu_mean_int;
: f7 ^- B% O; n0 I        int int_sum_dv0;% p+ {2 n+ M3 v. r
        int oo;3 E$ j2 Q, q$ F* J
        int ii;
" b1 d3 O4 y4 j3 x1 U. `        myfuck=10;
9 y* _& _; |% v* h( Z7 H7 c        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
0 v" A2 @; f5 b2 U' w        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
, |$ C) l) ?" ~% w* }0 h  H% C' z' c6 l" U6 s
        yiDuanShuJu_mean = mean(data1000);6 [7 q6 \6 G6 B; `8 `7 E

: L8 t  w- j# u& G# j+ ~) k5 a        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;$ r: Y7 |; E+ c4 b. x: W8 e# E
        UARTPutc('A');
* K& V6 Y, m8 q& D/ ^1 d* V        UARTPutNum(yiDuanShuJu_mean_int);
/ L5 p: o6 W/ W7 p9 w  y" r& Y* L        UARTPutc('\r');
% Z- a4 l# M" j! Z( I  X" `% _        UARTPutc('\n');) |3 l2 s, D; N3 {+ r3 w

7 V! u  W4 f$ D* q: A; U        for (ixstart = 0; ixstart < 1000; ixstart++) {
- T' Y/ ~$ s) m# ]+ |8 d: M* n                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
, o! T+ V# {: N+ l) W        }6 |+ Z" i0 }5 n4 Z1 g3 z2 _

5 r5 w2 a, \; @: [" H4 q5 z% y        power(yiDuanShuJu_LowMean, dv0);9 K$ a  G* G6 t# i% b$ w
- m" W1 T! r  a6 P
        int_sum_dv0 = (int) sum(dv0);9 I  N, |3 {7 b

1 h6 r8 C4 t/ z: m: T! H& N        UARTPutc('B');
6 X7 r- |! I! |1 V) u# F( N8 s        UARTPutNum(int_sum_dv0);
8 m- S( C" k' I4 Q. E) |7 u        UARTPutc('\r');/ p/ _3 M4 j0 w- e: O; p
        UARTPutc('\n');
1 Z: I( C' }" a, v0 ~
1 F5 H+ W+ G5 v# q//        int compareFlag = int_sum_dv0 > 1.0E+8;# E7 D' ?' l! v  i% w  c* i, O
6 I' ]4 `4 v* z& D/ K, ]0 I: V
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
* V. ~/ w" }$ g7 {3 D                UARTPutc('C');
, l( x# k& @8 {' F                /*  比较信号能量 */
" x' E$ p( F8 T5 ]* U                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */; e$ N0 B. c& c
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;3 L" r/ D( e& ~7 N3 t' R. n8 A
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* j9 R" C9 u$ n% h//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
: o; x  B( s/ X/ i0 b9 X, i//                                        yiDuanShuJu_LowMean[ixstart];
4 \- m5 K  z+ q" g7 X' x//                }
: d' G+ _( l* v1 }//
( I' z- @" w9 S# T//                youxiao_k++;$ V6 Y! L+ }( B" Q5 s  o
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
& `+ {8 |7 i7 j//                        /* 感觉要取21个数,即0-20, */
9 x6 E7 e; t" K: K, r//                        enough_data = 10;//有效是10,无效是0
2 O9 {  z3 T; y7 [//                }
4 {. S  z  r+ S+ n% X0 u7 o8 Y5 N* D        }! _  u8 v0 D- A  |# S+ _! X

* E; x( _5 k6 D. [; @0 `& W- F
- u+ w9 c) x0 E+ G        enoughDataFlag = 100;
. @  M, r" _- i' _/ M& o        enoughDataFlag = 1000;3 R( A: {' S8 }; J3 i& E% t! @
        enoughDataFlag = 0x02;
8 ]& G4 K: G* z+ C6 K6 m        enoughDataFlag = 200;
' Q$ r8 @, U, c) f5 k! \2 p2 E1 D5 Q) q1 f$ |% t. U! e
        int myfuvk1;" R! o1 v* O8 w" G
        myfuvk1 =11;
( ?1 J+ M* \6 F& h$ c: o/ w
8 X' f0 x6 i& J3 D, U& E3 Y( B
0 u! N8 Z- D- ]; \3 [7 P" L( {7 c        enough_data = 0;8 k5 v8 R; C, ?  S! o8 `* V; a8 k+ \
  M! G- x+ L# d
//        if(enough_data>50){
  {+ ]! n% S  P' I//                enoughDataFlag=0x01;1 D% t$ G& z  ]7 s  ?, o
//        }else if(enough_data<50){
  z) ]) C* ^* F//                enoughDataFlag=0x00;//0x00还是不行
, q  Z! p0 X; \! R//        }6 {7 _, o; E, P

( J7 g8 O1 D0 q, l" o; a6 L; U3 Y/ }! c0 M
        oo=10;8 G, S$ I8 J: C6 h
        oo = oo  <  5;
$ F) q2 O, P  v8 [        if(oo){) L* Y- z) o  K& M7 m$ h
                ii=0;
8 u, a' W$ L+ M  j# I( L        }1 @7 m$ f' ~2 U3 B+ k) I- W
        if(oo  <  5){. J; @6 G# o1 g) I' D' L+ u& y5 b
                ii=0;
3 `3 d# e# u* [) i) G  n0 V. n" z! l! Y        }
# I+ g! d1 y# d( z  t        if(oo  >  5){
  a/ ~3 g) x5 o                ii=0;
8 A9 l" @8 [  u: T+ e4 ]+ O( P* H0 e        }
$ U4 a4 y0 u- B( m; c  J2 d! k
# Q7 a1 ^# m, w; p. |$ ]        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */9 _1 Q, }# f# O
        /*  如果数据足够才执行主程序 */1 a) a4 Z# D4 G) Y. B1 [
        oo = oo  <  5;0 ~- _% R9 b2 K4 E9 z! [
        enoughDataFlag = enoughDataFlag  <  5;& W+ n3 L+ h) z+ t& T; L
        if (enoughDataFlag  <  5) {
; m% q. T. T* a1 i/ U0 V7 i//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
1 m6 |% r9 @% d1 i% R+ c' }; R7 d7 _7 M                AGC_AGC(&pAGC);
! w. \8 Z' s8 o4 o; W( w/ t& z6 F- ~6 i& a8 o! l' u1 Z
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 d2 S7 A1 X$ z. n
                FIRDecimator_FIRDecimator(&pRxFilter);
% c' [1 B* R! ?5 h' V/ W- V+ ^9 K# {# j+ v  ]
                /* Downsampling */; C' ]8 s5 _* w7 b' h* Q- m( C
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);6 B8 ~8 i/ ~$ s( @: o' d8 t. k

, B3 T- v+ {8 B6 D& y6 H1 }( `4 J                c_PreambleDetector_PreambleDete(&pPrbDet);
7 Z+ A3 f+ \# b8 _. |4 u& V  ~. U% f6 Q* B6 ?) V. g: i
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */! w& p5 j) v- j9 _
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */7 {& g9 W# m" u) e
                /*     %帧数量=100 */0 u; c9 _% ]2 a0 J! i/ J8 Q+ F
                pFrameSync.isInitialized = 0;
/ v, c8 I7 v& S# n1 B1 z, ]9 _1 O" Y/ y8 |5 W& U+ I3 k
                /*  [EOF] */
, L& U5 N3 v6 z# i                /* 前导码长度是13 */
+ C0 f- N" _4 k' U+ M# h                /*    %qpsk */1 c3 {8 g4 q& I9 w( p
                pDataDecod.isInitialized = 0;
% m. X4 w# K) v/ Y9 O
+ [& p+ [& P1 r! v. a- N                /*  end */
9 i4 F9 t$ R% @7 n) P                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 ]( f  ^) ^0 D3 b4 N$ H                /* Convert 3-dB frequency */, |- C! t2 O1 o# W
                /* Convert 3-dB frequency */* y: X5 B- k" k" o
                filtfilt(save_buffer, usable_left_filtfilt);, \9 @+ U* D$ a6 y- g% V
                for (ixstart = 0; ixstart < 81000; ixstart++) {. \% s* N3 v6 w0 d9 K7 O7 R
                        usable_left_filtfilt[ixstart] *= 2.0;
  B+ N) n( U9 z& G/ [                }+ w/ s4 X# j# [; u5 F$ f$ Q
8 x! B# w) _# n
                /* 注意乘2,处理幅度 */9 G) `  f  I; G$ a0 x
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
1 ?6 S4 O8 \0 u/ [) D% b0 |7 H1 z% a                /*     %% 行列转换 */
' X- K0 f9 h5 W0 V8 o& T) K                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);. C( J8 _8 j& B3 D: z6 n
                for (ixstart = 0; ixstart < 81000; ixstart++) {0 F) I- Z/ A8 e6 E, @& Z. p
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]0 [! X" n. {- J. Z8 W! g
                                        - yiDuanShuJu_mean;
0 z1 V0 `$ R0 Z& s0 X$ @: _" A                }
+ y5 Q7 s" u* q* U1 j8 ^; c: }& q/ Q( }* t5 M
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */: a4 F6 y7 O! c. K
                ixstart = 1;
6 i" C% p* I, _6 ~! X                mtmp = youXiaoShuJu_QuZhiLiu[0];' U4 m$ ]- ^- P) p% E  e
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 Z1 a1 j+ w# t3 m; G( I0 J1 `. L                        ix = 2;
2 I2 F! _( Y' H: u                        exitg2 = false;
9 x8 B) D  c2 {% o                        while ((!exitg2) && (ix < 81001)) {
0 U* Y' i4 F4 [8 Q" u# g$ J0 L                                ixstart = ix;
4 W% K4 p2 u( @* n8 N; E6 t6 R                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% \* |$ o- I! T8 d3 N) U" H
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];- B$ ^+ Z  b/ h' H8 o5 c6 O7 y
                                        exitg2 = true;
3 p) J2 x- z! X) g7 }3 C: ]; u                                } else {" U, U+ y* y1 d1 Z0 {3 r' V4 Y& j% r, |
                                        ix++;" V* j1 H3 h0 e5 ?
                                }
) v3 E0 {% a$ y! w                        }
6 Z) R: B. }; o" V                }+ s9 h7 m9 a  G! x) o9 _- [0 L
8 C5 @7 J9 I; C* P: v
                if (ixstart < 81000) {
, y- p9 W% _+ f" [6 h                        while (ixstart + 1 < 81001) {* i- L1 }6 b' g* [3 |
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
7 f4 c" ?1 C9 c( O                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ }/ ^! l% u" Z& y                                }! d+ ?' Q3 D7 i  c( X

7 W0 o4 \/ ~- ]8 F3 c1 j6 W4 T" u( m                                ixstart++;9 Z+ ~! a4 N- V8 K
                        }
. v; k. |9 c7 w" K' l. S                }' y3 M& `, \; i. X; @8 K

- m" r6 X  R5 D  T( n$ y' k9 a                ixstart = 1;; T; [5 n, t0 E" K! q, l
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
! b2 h2 D( J: o$ i- h' T7 m                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
5 }8 N* F% R8 V/ h                        ix = 2;1 s& h: r0 B1 J8 M$ N. X2 X
                        exitg1 = false;
8 C5 {; g- `- \3 c                        while ((!exitg1) && (ix < 81001)) {% C6 Q: C8 ~( x* x& X7 f( ?
                                ixstart = ix;
' }  J9 s  X! f6 ?% N                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {* h& b" Y/ G! q% `! E, E2 }
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
# {5 _0 c: i' b0 J                                        exitg1 = true;
0 `0 Q2 ^" I9 |2 T! }                                } else {
5 n& }9 S5 n) _                                        ix++;/ v% ]- M2 R+ _& Q! c1 A
                                }0 y0 R! }, q0 _0 l+ k# a1 ]! X
                        }( H" o4 l! n& P) B& M
                }
5 D! m2 |: ~, O: r: i$ b
: Z& i7 g1 n  q( ^/ S, a  k                if (ixstart < 81000) {# X" i0 [8 {: v: }' S# h7 g
                        while (ixstart + 1 < 81001) {
3 Z6 B1 w$ c3 P1 T, s                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {" W* |1 Z! I+ m1 B2 M
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
- b& E8 f9 ?8 \  `                                }
% H- P0 P8 _5 {: c+ ]+ t2 \
9 q% h0 m- w$ i7 v                                ixstart++;
0 J- Q7 E; j* R5 E6 k  m) A                        }
3 e3 j5 t1 M  t8 J+ k                }/ C" V2 z& H+ `4 l
4 j! r1 m3 |2 A0 h5 q: a
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);( s8 Q( A: J$ k# F7 L+ R# E
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {8 N0 P0 U  v1 l
                        yiDuanShuJu_mean = mtmp;( V' X1 ~6 l% |/ R- ~- A" y& f
                }
4 Y! m5 P0 v5 _# A& L* Y2 L- I- P' d2 K1 B: h$ O4 Y' J
                /*  找出极值 */
! x" [0 }* t6 `- f                for (ixstart = 0; ixstart < 81000; ixstart++) {
4 }$ i7 f$ }. F' a& S4 ~# |                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;8 e  s1 c+ o' H# g
                }% ]/ W: K0 {: X+ H9 @
! @* r# ]8 S4 p+ {) a
        --------------帖子字数限制------------------! M4 m' e7 l  Y
}
* F; S( x6 p' E$ D" ?
# [  ~) _1 _  b7 G$ R4 w6 ]* S8 H: f: ~, z0 y+ M/ t- n. H8 R

本帖子中包含更多资源

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

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-5 10:34 , Processed in 0.054675 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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