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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
( T% q, u% j9 c% j' F0 @8 L5 V4 K: |& o, [& H$ Y- {$ `
各位大神:; d$ }3 s3 {- ?" d* j
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)7 n) }7 J& @: k" f& m, B+ d" w& e
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
( s# S& b; E  I4 x# R9 C6 N
* x& c1 B+ b" n4 p+ @- \- y     * @* _  P3 o9 ^( u; D
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
, e4 b( }4 f4 U/ n
& q& S; x' l( N% m. `& P并没有其他线程
, i6 @$ X" |! |反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。/ x- B9 N+ n# w7 n# w, o
也说不定是和堆栈有关系。。。。。。1 Y, `! Y) }, J3 l& t+ }$ T5 J
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....* Y" T: g( Z# g; V
6 \3 o6 c! |. c9 Z; X

% Y& }/ v' |" Z! K
# U- N! `0 @4 J: {- L' H我也很绝望啊,希望大神能帮帮忙,感激不尽,!, m" f( ^+ D" t* z" B* w; ^8 A
) S3 {5 ^' x, P5 M4 L
0 P, S$ K, d2 N4 @+ i% U$ Z
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];, P5 e7 \) y' `# G1 g9 r' v* S8 E" O
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
% R- f! r/ c4 X. q0 C9 O9 K& X$ p5 y! T$ ~3 O
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(( ~9 l/ D5 f8 H! d
                const double data1000[1000]) {5 \$ y2 O% p; `  C( F  n

9 v/ p7 e+ a0 r6 I5 f8 ]' X        int myfuck;# L( h+ E( N3 o% O
        double yiDuanShuJu_mean;
8 E; o+ q) @$ `& S. E        double yiDuanShuJu_LowMean[1000];7 g- o& B( o! T6 S
        int ixstart;6 c# x! K8 K, ^+ R7 X3 P& o% Q0 x
        double dv0[1000];5 b* C2 }& b, H5 `" w; h" @, F1 V, Q
        comm_AGC pAGC;
2 _8 u; B- t+ Z, d' b( [        comm_CarrierSynchronizer pFineFreqCompensator;
3 h+ a5 d2 ]8 f7 F# {5 \        dspcodegen_FIRDecimator pRxFilter;
5 U! I  K# }9 \' Q' A4 L        comm_SymbolSynchronizer pTimingRec;) J0 s6 t# w+ i' G. R' k
        comm_PreambleDetector pPrbDet;6 h' G0 W5 n" H) Z: G+ i  Q
        FrameSynchronizer pFrameSync;3 i$ f. R0 H* Y" ?) s$ t4 k2 m1 n
        QPSKDataDecoder pDataDecod;
$ A& Z2 o8 R9 C/ E1 Z+ N, s        static double usable_left_filtfilt[81000];- T& j5 \* [2 y1 h- @2 U+ |* g
        static double youXiaoShuJu_QuZhiLiu[81000];4 V1 l+ o, B8 b/ i+ N0 T' u1 d, Y. ]
        double mtmp;
$ ^, X, v9 s3 G: K$ }  C        int ix;$ j6 ^1 L, v. p: o' X1 F/ |
        boolean_T exitg2;  E7 c6 [: h  D$ u6 F# Q
        boolean_T exitg1;
/ I$ c6 ?2 F9 F- y        double YiZhenShuJu[800];! f+ T1 [! _: j0 d4 a
        double dv1[800];
) Z/ T  ~3 ^2 d5 [
* x$ z4 C6 @4 h' Z
! p" w6 A" d, T        double b_YiZhenShuJu[800];
7 s" u  p8 u9 g/ J3 i  P        double I_filtfilt[800];. {% p7 T9 Z# I4 j
        double Q_filtfilt[800];
5 x+ O4 J5 {! R: z        creal_T b_I_filtfilt[800];' K, D0 m: E; J$ ?; b
        creal_T b[800];
1 j0 e7 a, E! D3 q/ C! L, m8 ]# b        creal_T RCRxSignal[50];, T  h* A6 f* @# p
        creal_T fineCompSignal[50];
+ t+ w) `" u7 a. V4 w! J5 i7 ?        double phError[50];  S4 y1 J  B0 G) ~% H9 V
        creal_T timingRecSignal_data[28];0 y/ Q2 j- Z! K  O8 a
        int timingRecSignal_size[1];$ T% O, U7 j/ D$ n
        double prbIdx_data[28];5 I2 m0 y) x7 s8 b0 L
        int prbIdx_size[1];' s( i# R  \9 B3 o7 w/ ^
        double dtMt_data[28];
+ k2 C+ H; o- c        int dtMt_size[1];
& X3 w! A, d" Z+ A  B, c2 _        creal_T symFrame[25];" G+ g# S: \9 I& h( ~
        boolean_T isFrameValid;$ D% @7 l5 x9 Y1 ]9 e8 U' E
        double unusedU0[3];
2 r% \% z$ `  E8 K' ^" t  ~+ l+ H
        //调试过程中的变量4 G/ l, h' h. y
        int  enough_data;% O1 ~; E- \* B) y- Y( n  }9 w/ I

' n9 Y- u/ ^8 y( R( a        int enoughDataFlag;
; t% p5 Z7 ^  M9 N        int yiDuanShuJu_mean_int;
- c% U' }) K3 x( A        int int_sum_dv0;" r$ c5 O' N/ }, E! }
        int oo;5 q1 [8 h' Q4 P
        int ii;# g5 |/ }: W! n% t
        myfuck=10;5 T; e$ i; e/ b
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */, g3 F. {$ V) f5 B6 A. O+ F
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
$ g6 o  E- c8 B
  ~8 g! L" t3 p8 G$ w        yiDuanShuJu_mean = mean(data1000);
* M7 m+ J' Q5 u" g* w9 Z) V- [! @: e( r# @; w6 Q  f% R& n$ P
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
  s4 f( ?, c. F# j* N4 N6 T' O        UARTPutc('A');
" t; K( g  Y/ r: R        UARTPutNum(yiDuanShuJu_mean_int);( O; X' a; R$ g
        UARTPutc('\r');
( u) l: s: b8 [  a8 G- `# J: b! A        UARTPutc('\n');/ d& d! `+ S7 j, j& W% D
* g. {/ }& P+ j! Y& [* C  f$ ]
        for (ixstart = 0; ixstart < 1000; ixstart++) {9 v' d8 R/ b) u- b4 T- d1 J. r( u1 c
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;! U8 g  S% j$ M
        }
1 _( `6 x2 R. l; }! @( H9 O' q
0 \# r) \' _8 C6 u$ l2 |        power(yiDuanShuJu_LowMean, dv0);4 Q: t! @6 f8 k/ V7 G
# d  H. P. t4 v) A% w
        int_sum_dv0 = (int) sum(dv0);- r4 U* [7 O" b, {3 v& F9 s) b
2 r# i1 N% i( w! t+ c
        UARTPutc('B');5 n1 v" P7 P" e  d: z* D# d5 `# J
        UARTPutNum(int_sum_dv0);2 N4 f7 s, M) {9 C+ O0 w2 Q+ ~
        UARTPutc('\r');: E- e8 C0 q8 W7 u
        UARTPutc('\n');1 p( ]* m' ^* N+ q
1 F" `% q; P& ~. `
//        int compareFlag = int_sum_dv0 > 1.0E+8;* c' @  c0 S' R( b) Q

% r0 y9 v) w% {5 Z& \/ \  q        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
/ f: {: ~, [  q8 A6 o  r                UARTPutc('C');4 Z% s( r# R/ v, L
                /*  比较信号能量 */) U) {0 h- K& Z8 B: M5 U3 c$ R
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */' b' @! i# s: |  j2 X, @5 K$ |$ z
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;, e6 g. B" v, I( t3 r6 R
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
  p8 f3 m5 n3 ?* D1 q+ _. G//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
* c7 Y  f& p  m2 m7 V- ^" e//                                        yiDuanShuJu_LowMean[ixstart];
7 v& _# l7 H2 q0 y, p5 L, g//                }
: d% F% n, @5 _6 ?! e! u3 l//
$ z0 p! \" e! |! q- d& X- x/ e) M//                youxiao_k++;6 k4 @: G( L# Q5 t
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==2 g7 r1 i+ c; n' w$ Y
//                        /* 感觉要取21个数,即0-20, */
' u3 _2 S7 Z3 D% g4 }: e+ l//                        enough_data = 10;//有效是10,无效是0) u0 G& d5 t6 ^: }/ X: L( ~
//                }' U" c0 z0 H& L" K
        }
8 ~# K3 o/ ~6 j( _! }0 U7 U; T; ~: @: C5 E" r% F6 E
# v  U# x# }, P( m( l; _
        enoughDataFlag = 100;
% d' S3 p0 S4 i: F        enoughDataFlag = 1000;
6 q8 o" G4 o+ w1 h9 g2 Z        enoughDataFlag = 0x02;
4 x% |2 p1 D/ c7 Y& e4 S        enoughDataFlag = 200;
1 n/ V9 T' k6 g! B9 {
' ?6 y7 x4 w! _- i$ C        int myfuvk1;3 C- I' m& J, N- J  _- p& P5 q
        myfuvk1 =11;% B" l/ |; C8 G, e

- X" t8 Y/ y2 _3 V0 P( Y: y1 a7 m5 [2 r* I: f% c5 O
        enough_data = 0;2 P8 Y1 y) p- o. _- v2 Y5 G
( f+ ]( S0 c0 H, l- h0 M
//        if(enough_data>50){
( Z4 A6 L1 a) d( T6 v, s8 Q4 {//                enoughDataFlag=0x01;3 A) V6 x+ w8 |0 Z* e# m5 m  I6 r. u
//        }else if(enough_data<50){8 C$ A7 W, [* _- ^
//                enoughDataFlag=0x00;//0x00还是不行
$ h! w  H2 c. `4 b- k  ?//        }
/ A) F3 X1 r, O1 z% Z! m7 r3 i4 P  O1 |6 k2 h" |, g# F! G
& @& x8 h" R+ R" M+ {. x
        oo=10;$ ?9 o3 J) p; J2 e# p) p& y
        oo = oo  <  5;& M- M! @9 ^- E. T. u
        if(oo){
$ [2 l1 d4 ?$ t' o/ z/ k                ii=0;
+ k# u& w0 P% |+ K5 j" m        }6 s" i" F$ Q% K
        if(oo  <  5){; C9 y) ^+ \4 b; v# i, ?
                ii=0;
) z1 q0 f6 w. s, p& C' j" X        }0 _3 Y" u7 L9 ^4 C
        if(oo  >  5){
1 W7 Z9 r8 U1 `5 F6 F+ a0 r: b/ `                ii=0;4 J. x  r  h  c
        }0 j4 z5 @% o8 }! {! ^

  \1 F" k, H% }$ ]  j" G        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */' s1 F6 V0 [0 `6 [1 y& a: g3 i/ Q
        /*  如果数据足够才执行主程序 */
. E* `4 b5 b- F. |1 o( g/ Q        oo = oo  <  5;
' a: H$ \/ F8 c9 a+ ?% p        enoughDataFlag = enoughDataFlag  <  5;0 b) A+ L6 ?# G
        if (enoughDataFlag  <  5) {, I. o; z0 W7 k( H# H5 N' h
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
' _# P: r; e  ~3 M* K                AGC_AGC(&pAGC);' P- L+ `: y- h, @7 w; Q
  t1 m* y5 Z4 s2 Y
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
( p7 n6 `( c5 Q. c/ K2 K; T                FIRDecimator_FIRDecimator(&pRxFilter);
6 h7 G5 U0 n  ?5 Z" `0 ~* s8 e  r7 |) j" s, w4 z5 @# d" M: J+ C( |8 B6 I) i+ A
                /* Downsampling */
3 {; d4 r2 p3 z! [- F                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
: i+ C; Q# G3 c+ v: S- [: E8 ?+ F! @% y. _
                c_PreambleDetector_PreambleDete(&pPrbDet);! |0 @9 J1 F, E( L& T0 J

& U! Q1 }# D, D8 l! e                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */# Z/ ^1 q; E% _( |( |( Y1 p6 T2 g
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
, e, U. a( y3 S4 [; N# n  X$ \                /*     %帧数量=100 */
; ]& m( i2 e7 R% Q                pFrameSync.isInitialized = 0;
/ @/ k# N7 U* [+ @! c" x. B9 e
/ F9 |/ L( `. |" Q                /*  [EOF] */8 @( W$ w/ ^8 W' k4 Q
                /* 前导码长度是13 */
2 n" k  G: ~0 k8 Y* K                /*    %qpsk */
! c5 f7 Y6 t! r0 f' T, l5 D                pDataDecod.isInitialized = 0;; M- Y/ P6 A; E1 z5 h

( O% F; E& _3 X                /*  end */3 L9 |& q- x1 M+ S, {- X  j  i
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */* B1 T$ [6 a+ F1 B2 N6 ~6 i, q
                /* Convert 3-dB frequency */
- `/ X$ k! E0 u/ m3 s                /* Convert 3-dB frequency */
/ ?1 W# l- C% B                filtfilt(save_buffer, usable_left_filtfilt);6 q5 P7 X. Z% E0 n% k3 _
                for (ixstart = 0; ixstart < 81000; ixstart++) {
) [! Y' g) `  r- d: T6 R& ^- g5 h                        usable_left_filtfilt[ixstart] *= 2.0;( Y) x" E. s. A# ~
                }( @" S0 l; E0 i9 r# u
( T- c1 s9 A1 A2 U) x% Q& Y
                /* 注意乘2,处理幅度 */
. u. g9 t. s( R* S4 {1 H                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
6 E1 X9 ^7 Z  P. n8 w# B3 \* i3 F                /*     %% 行列转换 */
: `- F8 H, n& O9 x* I                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
' _. y( c3 |  ~* T                for (ixstart = 0; ixstart < 81000; ixstart++) {3 ~" C2 o% s" n: w2 B% c
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
( b% j# E( R! d% I$ ~1 R                                        - yiDuanShuJu_mean;
1 l4 k/ ^2 X/ u9 S, i                }
- b/ b/ h! q& _9 Q: H
5 u' O' M! F( D9 ]6 f( H                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
4 t" O0 y" P0 ?6 G5 u8 x                ixstart = 1;& S) n& }+ p& z- X) M% s8 l
                mtmp = youXiaoShuJu_QuZhiLiu[0];
3 {' ^# T5 Y5 _8 U                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {" |& R1 t- B3 F# c% Q2 ]2 B; T+ x
                        ix = 2;
. a; k% ?( T; w- o$ [7 i& t                        exitg2 = false;& F% R% L- P4 K; O5 }  g1 P
                        while ((!exitg2) && (ix < 81001)) {0 ]* J1 {2 l5 G! A) M& ~3 J
                                ixstart = ix;
1 X* m6 T. Q4 f! M9 u                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
6 U  d: j+ H) ~4 v, N5 |* a                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];" E2 d% x8 R. s: A2 D
                                        exitg2 = true;4 [, F( d  Y7 n3 x
                                } else {3 w, y6 p& ?- h% G; w
                                        ix++;, j: J! F8 J2 d+ A( `6 K, T; ]
                                }! b! @1 T# k% d3 O6 P
                        }
6 |  K$ C9 A% ^6 S& f3 V7 S2 s                }+ V" h2 d" Y% Z1 |. f* P7 B* z

: S" ]; D2 u) A* v: J! x8 X# P& m6 U                if (ixstart < 81000) {
9 V" c% _" [: R3 ?( V  K3 @0 p                        while (ixstart + 1 < 81001) {
- L! q) \7 a% g$ e4 L4 P                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {& _# D4 Z) T5 o
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
0 K! |- ^9 H0 z* O2 v! c6 O                                }
; h# e2 _6 E" ~3 l1 A; x$ L2 k) ?+ x% O8 ~
                                ixstart++;
0 Q  Y" w$ T: ?1 c+ h5 k8 i- i                        }
" ?* `+ S- h8 @% m( d3 v                }
" T* U9 m& N% t) g4 G2 R6 t5 |6 a4 Y5 \, `  H, d$ `
                ixstart = 1;2 a/ [, ?0 h/ x. b6 V
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
3 {! N8 [) O3 k" @# H3 v( @                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
! E4 a1 `2 L' H                        ix = 2;
; @% }: R$ C/ F. X                        exitg1 = false;: f8 \, g2 b' D% d, x
                        while ((!exitg1) && (ix < 81001)) {
5 t/ l- }3 p# A3 P1 v) e* `                                ixstart = ix;
5 u& C% ~3 S/ s) @: G2 ?                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
2 E" c0 R0 X2 E( U0 F7 N                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
- h; H" x" j0 H& P2 h                                        exitg1 = true;% m& h* A) A! a1 d% g- X
                                } else {) X6 ]# o  I! x, w$ v
                                        ix++;; Y8 e7 [5 V/ a. X5 B" \
                                }
2 U: q, E: h# P# k: n, y                        }7 k" F! L, ]) ?
                }3 ]1 b8 p9 }' ~

, g, P7 ]( D* f2 ^6 U" P( U                if (ixstart < 81000) {
& }. P# c, J3 {1 B                        while (ixstart + 1 < 81001) {/ k& o: E; M) n: J$ v$ y# A" \
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
( {! N$ h5 \- c7 A% L7 s/ p$ Z5 l                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];# B8 Q3 R1 j: ]
                                }
1 P, m5 G& y  A& }& _% F; N, e" {2 v) H% [& C4 V- T
                                ixstart++;# Z0 Q5 C8 @6 {+ I; ?) ?% q
                        }
, V7 S) f* {7 k  u: {: A                }
, F4 U# d* q# G9 ?5 C
4 C  s+ j0 b4 ?3 e  R$ R5 T/ |                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
: N4 X0 G7 r+ x$ i$ r" E6 k                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {' E. g" Z) {/ G6 U! J8 {$ i* R& b
                        yiDuanShuJu_mean = mtmp;( q3 F* E/ ]5 U
                }) z& f6 w& S- O( g% y# n
& `" f  c# h$ B! ~) h
                /*  找出极值 */# K: Q* R2 `- V0 L2 c8 _9 [
                for (ixstart = 0; ixstart < 81000; ixstart++) {
; U* |6 b- X6 L, D4 |3 o6 P1 Q                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
# q$ O) d* M9 a6 }0 H" m                }% _% G) l( n- e9 g  o- b
5 j! G- A+ }% P; L+ t3 g7 h$ ^) D
        --------------帖子字数限制------------------
0 x- e* j) p6 w5 S! B5 {}/ h+ H6 y1 n7 K

/ ~/ `2 l( b  j5 R/ P; ~& l* a% A2 u' C4 p/ _1 E

本帖子中包含更多资源

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

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-25 18:08 , Processed in 0.042121 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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