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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 " P5 e' B6 F6 }% F. }# q+ s- c+ U
3 }+ z+ V9 G- z7 T0 M
各位大神:2 U, N/ j1 W+ n3 G/ K% F# P2 l" t7 B- N
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
* f) N# G* y: R0 F      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
- ]/ y4 W* j, O! a/ u5 |, g& M; Q% o' H" ~0 ]" X
     
# n- e* u: g! T  v/ J/ T这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。+ z) Y2 L, ~' o8 a0 P

! U. R0 F! {, y* x! `' C( M+ }0 |# k并没有其他线程
- b4 \4 L0 w# l反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
3 N( z' N; Z9 u6 A! b) L; R也说不定是和堆栈有关系。。。。。。- J* t; v' g- T7 d% P
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....- G- j! G# V( G/ T; J- u9 D

! n' x6 _& v0 F# _. I- T
8 D7 s- k9 O  p8 G# Q) w6 U1 M+ A+ x. f& G  O6 c
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
6 k' ~/ x, F" \; Y4 O" q# J9 h1 M) ]# H( }

/ S1 K( b5 z9 L" D$ ~; P附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];  H6 d0 ^' w8 J+ _* O+ w  r
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
6 ?5 ?$ X& ?' ^+ N, Q% E) _, |, n1 E- e
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
* t" r, A, M  f8 o                const double data1000[1000]) {3 @8 E# y, I4 H& U

( C3 s" ~9 T: `  W" G  w+ n        int myfuck;
/ p; h( d; P3 O8 {; [% ]( `# i( y        double yiDuanShuJu_mean;* R& A% e# R/ P" i% Z$ g5 h
        double yiDuanShuJu_LowMean[1000];0 [" ^6 n9 J2 F' u
        int ixstart;! E/ D) v  i& m% b7 f0 j. `8 g
        double dv0[1000];, p9 Z# b) v: w# I
        comm_AGC pAGC;
# V$ X- i) Z# Y        comm_CarrierSynchronizer pFineFreqCompensator;% Q- T# x! g2 R+ }% f
        dspcodegen_FIRDecimator pRxFilter;! N5 w9 _- T/ r
        comm_SymbolSynchronizer pTimingRec;
4 }0 l7 E. S0 ^  o  u        comm_PreambleDetector pPrbDet;
" ~4 [% }! b" S        FrameSynchronizer pFrameSync;& z4 g  o7 J; _3 F9 f
        QPSKDataDecoder pDataDecod;- s0 u) N' \4 P7 e! a
        static double usable_left_filtfilt[81000];/ D! n& z/ ~  P( }3 n
        static double youXiaoShuJu_QuZhiLiu[81000];6 q8 T% s( z' G% v2 J! A+ }
        double mtmp;2 g5 I' M# H5 V+ d9 H: b
        int ix;
% P5 W0 R2 k9 k4 t        boolean_T exitg2;
  a+ X/ D, c) \) ~& u' D; [0 a# f        boolean_T exitg1;- \; ]6 {! |6 t' m3 I
        double YiZhenShuJu[800];
. n- @" r; {2 q# W        double dv1[800];
  z% d- e4 H3 P, {+ j0 n
7 i) G, t9 U4 ~. F. z
& j; S& K$ q& D. K; L& o3 G! `# ^        double b_YiZhenShuJu[800];
- G4 E/ e: i1 K/ {        double I_filtfilt[800];
$ H" E: p9 z+ k        double Q_filtfilt[800];
0 X; U# ?5 p( k. d0 m        creal_T b_I_filtfilt[800];: _) S, Q4 K- p+ P! K
        creal_T b[800];
) R+ h5 U) a+ O$ x        creal_T RCRxSignal[50];
4 _5 d2 o6 Q4 o. \        creal_T fineCompSignal[50];
$ W2 [% j' E( m        double phError[50];8 C- l; x" z8 M# r. H
        creal_T timingRecSignal_data[28];
! k0 `6 J4 c' E+ H- o1 t$ D  e        int timingRecSignal_size[1];* \; G1 E3 e0 M5 Z; ^
        double prbIdx_data[28];
- X/ s& M$ x) J4 F" s        int prbIdx_size[1];
6 s$ U- }) o6 K9 }9 W        double dtMt_data[28];
/ p% I0 g% v6 W; M$ m        int dtMt_size[1];
$ e+ z1 Q& c! J2 P6 [6 Z        creal_T symFrame[25];
0 c+ B) b  @4 d8 w0 t3 J        boolean_T isFrameValid;7 D/ I8 k( r' {
        double unusedU0[3];+ l' q" W4 S. ]& A6 d2 W$ x
( w; j. ~, y5 V( I+ H+ _9 Z$ O
        //调试过程中的变量
; |0 x* j) p, ~1 @        int  enough_data;
7 \$ ~% g4 h) G/ |; ^) ?
- g0 g; X1 Y5 f- Z9 W        int enoughDataFlag;
: o: J9 H* X$ J" W: X* P9 Q" K        int yiDuanShuJu_mean_int;
9 f7 x+ p  p* Q1 I5 ^% q        int int_sum_dv0;
: L0 i+ m. n% a, i) v        int oo;
5 R# ^! w( z  E- `& |2 r        int ii;
  c/ |# {9 C  u, X( g        myfuck=10;0 q# z/ E6 ]# c6 H
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
  y; e$ \) T" I* e: E0 d        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */+ o. j* b6 V6 s9 r

) M% C0 B8 n  y) c' y& K* S        yiDuanShuJu_mean = mean(data1000);9 K2 M- V. F! P8 {/ X; O" Y
: N: v3 L% t, t, [' `$ ?7 |
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
; x% k# e7 w7 O: n        UARTPutc('A');7 R0 p; R" q% Q, \0 ]+ I
        UARTPutNum(yiDuanShuJu_mean_int);
. P& N+ {8 `5 P) l        UARTPutc('\r');9 M3 V- Y1 X5 [" x; W  X
        UARTPutc('\n');
8 Q9 ^0 U, ^3 n& Z# j$ e; @  [3 ^" ^3 k2 `
        for (ixstart = 0; ixstart < 1000; ixstart++) {
' K' q. \- @$ {/ U. @' j                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
' R$ E: S6 a1 Y- [/ T        }
& Y  n1 f) v! ^2 D! q) t
) n: u6 C0 N  Q6 _3 @        power(yiDuanShuJu_LowMean, dv0);
6 V' V0 {7 n  I/ i1 Z$ y; X: J3 G3 _3 e, U* y
        int_sum_dv0 = (int) sum(dv0);
: `( f. A: F3 g2 M, }5 F3 N
; v3 G5 n+ x8 Q& T( Z( [        UARTPutc('B');
  D: ^6 j! k1 c, X1 @( }$ I        UARTPutNum(int_sum_dv0);8 n' ^# E0 R* u1 p' r
        UARTPutc('\r');
( S% J' U8 A9 j$ Y        UARTPutc('\n');
3 f8 Y+ p" s1 p
/ l' x- N- h+ \/ b9 A. r! h) Y//        int compareFlag = int_sum_dv0 > 1.0E+8;/ Q4 F6 I7 C* @/ \/ \
6 u0 E1 O1 ~+ m" F6 v7 k' y5 A
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
/ v/ V/ t' M) o0 P$ H7 x                UARTPutc('C');8 l) d1 l; T. r" Y
                /*  比较信号能量 */
4 P# v$ R+ p' E' i* t                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 *// L; k& l+ S/ @+ o  s
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;: S% ]; ~" q2 l: Q
//                for (ixstart = 0; ixstart < 1000; ixstart++) {( K' Q5 W3 }: [4 T! c2 D8 Z2 e
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
; s8 z# A7 _0 [9 M7 p( ?7 r0 }//                                        yiDuanShuJu_LowMean[ixstart];9 N) \. \2 C; C+ D) [$ A/ \
//                }
  r2 q, U# z8 B( G6 N# v//+ J. V! s" q# b. x( g% ^
//                youxiao_k++;
3 K$ a. A, m3 J" g# |0 y//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 G- d4 @  w" h0 a  `7 e1 n
//                        /* 感觉要取21个数,即0-20, */
5 b* z1 b2 e. ?( Q$ `//                        enough_data = 10;//有效是10,无效是03 S/ Z' o. f7 b% V# M8 B7 q
//                }
% w2 f& V3 S+ b        }  z9 P+ o9 Q* x2 u

: v$ [# H; w, g5 M) c8 Q! {  Q
. G: \8 E7 x6 N- x* D, \7 l' {        enoughDataFlag = 100;
3 o9 r: J/ l6 y        enoughDataFlag = 1000;
7 {) T5 q( D4 x, U        enoughDataFlag = 0x02;
2 [9 k1 n7 J- r* @( n" O0 W( h        enoughDataFlag = 200;
$ M! ]% j* o* \( I0 t6 J. F" w" I- u5 A/ x) B( P2 g
        int myfuvk1;
' k% T$ T: `1 q# {0 {: ~! L0 b1 A        myfuvk1 =11;5 R& ~- R- m3 b; @4 [3 c3 W  G

( M+ W. Z6 d/ A  i
  ^( t: v( I5 P+ J8 y1 Y        enough_data = 0;/ ~) H* z2 X- i2 p; P* p! M1 _

! @% U) [0 v3 O- [* \+ Q//        if(enough_data>50){- P5 c9 J6 u' b: M1 g
//                enoughDataFlag=0x01;% Y$ n* G5 C* _* m# F5 P, U: a% _
//        }else if(enough_data<50){
% ~) n. i8 ~$ N% l/ T& m0 O4 D$ g& C' r//                enoughDataFlag=0x00;//0x00还是不行1 w' _* ^2 [6 o
//        }
  l. |0 o; h) [: e4 h
( x, ]& |5 q9 k+ W- u; f, L% e8 G5 a. V* S* G
        oo=10;
) M4 n( H0 |' W1 D2 R. e# y        oo = oo  <  5;  ~9 X8 u; x) c2 ?
        if(oo){
2 a' s5 e; h% a9 \                ii=0;+ g# \' V8 A% y/ w: E& e) {
        }
8 V3 v$ e* _: M  {) w        if(oo  <  5){
) ]% X% k1 U4 ~' a7 T; [  K                ii=0;/ N; X6 C2 G  u  l
        }
4 _! P" i: @6 O' X        if(oo  >  5){
) x0 B% @  l7 I# F$ w$ o* q7 o) i                ii=0;& |" M) }- v6 h8 j! S7 {. a
        }
  w4 K# T" O$ X5 I5 p
0 |& z& B4 f6 C4 C/ j( ?        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */2 f& G2 _" ]& L( ]) B; c+ N
        /*  如果数据足够才执行主程序 */, p1 h6 x5 @1 }4 t& h7 `2 r
        oo = oo  <  5;
6 M% j+ S2 ?( w3 s" C( @* [        enoughDataFlag = enoughDataFlag  <  5;6 T% f  N( N' P2 \& C" Z
        if (enoughDataFlag  <  5) {
, u2 U$ V. o8 \/ Y- Y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0+ Q5 |6 L: }' H( w4 V- R
                AGC_AGC(&pAGC);
& S- q# H  g$ C" f. c4 G! |( i3 K, p3 O
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);; a' ?# T7 t8 U: Q. O: z: u% z6 ~
                FIRDecimator_FIRDecimator(&pRxFilter);; P* D. w% k1 z% l5 H3 p
9 g, L; i% F: C$ @7 L
                /* Downsampling */
4 [( j1 [+ I- m: X) x" _" J" V                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
- ?4 l' i# `0 K9 n0 s" H4 M
3 I% }: J. C3 I                c_PreambleDetector_PreambleDete(&pPrbDet);
( o/ {3 D: v# J8 b4 p% ^, r7 {$ m9 j4 n" w
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */6 z+ B4 F7 l% j) s7 L3 H
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */3 S: w4 M& g! x1 O+ B) H+ a
                /*     %帧数量=100 */
0 }1 H/ M8 j9 Y2 E8 F                pFrameSync.isInitialized = 0;) \! z# {9 N- Y5 V

. b! M8 }$ U* \* m- l- H  |1 d                /*  [EOF] */
7 h! |- @1 C- I                /* 前导码长度是13 */; J, v, [- V1 X$ O% ~! m
                /*    %qpsk */3 F* I/ i- ~2 B4 j
                pDataDecod.isInitialized = 0;4 ?: M3 w$ k% W  F

+ x/ R3 R! \) f) z9 `$ r3 n' W                /*  end */
& S# s# m- H  j" S4 J: Q3 `3 J: q1 X                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
) b9 ^) O: S/ H& b9 _2 t                /* Convert 3-dB frequency */
/ G3 G- t* `+ @4 L4 x2 s' D                /* Convert 3-dB frequency *// b4 x0 W0 T  d7 A# W1 F
                filtfilt(save_buffer, usable_left_filtfilt);
) U" [' d9 C( @* O$ {, f& {8 T                for (ixstart = 0; ixstart < 81000; ixstart++) {
& a- {) {8 `4 h/ u                        usable_left_filtfilt[ixstart] *= 2.0;
9 O) P; ?- L2 |3 r4 a& u3 a1 j                }3 G! U$ l- e7 n3 k5 ]- \
1 C# N, l  C" N8 B5 c
                /* 注意乘2,处理幅度 */1 `3 _; n5 J7 G( n! K7 j- L
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
1 A1 t; R( z# T8 c) d( m! Q/ ?                /*     %% 行列转换 */
1 l( U( k. a! C* ?: y3 x- a                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
+ ?, X* }4 `; Y) ~7 \                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ [$ D) h3 S& K; u+ d: E5 A                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
- V( X+ ?1 `9 A( M% D& s                                        - yiDuanShuJu_mean;3 _; U: e5 L/ N$ J0 |; q4 @+ @
                }
, W) @! `9 j8 d: M5 g8 @8 T& K) D! H
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
% X- W6 j+ c: L& s                ixstart = 1;
( M! R2 E1 _2 C& s; C2 @                mtmp = youXiaoShuJu_QuZhiLiu[0];' J( r! D) x$ G
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
: q- x9 ~& C5 m% ]. H/ x                        ix = 2;
! @4 G" N2 G7 L! a. F! ^                        exitg2 = false;. _) X2 O& g9 g- o
                        while ((!exitg2) && (ix < 81001)) {
5 A$ I$ W6 H8 ]9 j0 X                                ixstart = ix;" S1 v6 j& D7 w: a( N* `6 e0 Z/ j
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
6 m) j3 o( I0 k. W                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];( J# e5 t+ D3 s
                                        exitg2 = true;
+ n; Q3 }5 |6 ?                                } else {$ J6 b& t& B7 F9 `" [2 M
                                        ix++;/ C9 S2 N2 Y9 M! ]+ O
                                }6 y8 m: P/ u9 a, q1 b
                        }' K0 R: P9 G+ k: h
                }
% o( o& i6 D8 Y: D) e$ X6 ]1 g- g- }
% F; B3 l/ E5 \* |6 e                if (ixstart < 81000) {7 l8 C: g0 n3 v5 ^! b4 D, x! U
                        while (ixstart + 1 < 81001) {
6 r. J8 D' x9 ]# x5 j- n                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
* ]) q  h* L. J                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
9 G7 ^+ ?7 s& n1 W4 }                                }5 D! r& E- R' h( c
& F9 ?2 m4 L4 \# d
                                ixstart++;& |$ k( ~% r. e9 Q9 e
                        }0 v8 z, V. o& d
                }
! U9 ]! N  ?4 z9 t2 Q
8 N: B8 |' Q, c* w                ixstart = 1;
8 K3 o+ E1 K% b, ?0 `' J                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
' I" I8 d' J/ i. |% u, Y- a                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( ]1 h: M: B: \& ^1 t/ h& h                        ix = 2;
5 k/ u0 u/ e) F+ N                        exitg1 = false;
  G* V8 w0 C; Q                        while ((!exitg1) && (ix < 81001)) {# \1 |0 x& g* ^% Y. R- l
                                ixstart = ix;4 L* P' g0 g/ k" w9 B; z
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {, _0 F' W1 ], g5 q1 L8 i8 \/ K/ t( A
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];$ J4 V/ j0 ^3 [1 F8 k4 W8 I" w
                                        exitg1 = true;
, I/ e5 J; |8 M7 }$ m                                } else {
+ @! w. B0 j( L5 k0 p. ?$ f- u. W                                        ix++;9 Z6 J0 K" B2 n5 }
                                }' a2 t8 ^1 b( c) c4 P
                        }& X' k2 p! H& o: X8 q" q# a
                }+ E6 _0 c5 w) h/ K/ d7 w
* @. |: i! S, c
                if (ixstart < 81000) {
' f2 X9 v0 a+ ?. \8 ^' W                        while (ixstart + 1 < 81001) {
# C( \( d! v0 ~1 J+ h$ J. m                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {  R* `: {# b3 F; m
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];4 X# a6 Y& z+ K9 ~
                                }
5 z& o# G" O/ _" p2 x
; S7 y0 n* a' Q/ x                                ixstart++;& B7 I, P1 Q: k) N) m+ z
                        }
: p9 d( ~& o: J9 D2 N                }
* j8 p4 I  E) M  [
# x& \- d' h; Y, R2 Z                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
7 ]+ E- i! n+ G; S" {4 c                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {5 r) c3 n" L2 B6 W
                        yiDuanShuJu_mean = mtmp;/ d- R$ d& s3 c2 s* P, f( [% p
                }
; O8 {, _1 I; I9 H3 i5 s0 q3 ?( B
                /*  找出极值 */
  w( o5 l1 {! A& ]  o: X: B3 |0 L                for (ixstart = 0; ixstart < 81000; ixstart++) {# h3 j( N+ z/ s: R
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;! d. Y) U; W, D. M4 J: |
                }
4 r! z" c* U* k& Y2 x& n" T+ ~/ r/ C9 S* A
        --------------帖子字数限制------------------( b& Y, _0 O  x. V7 A1 h
}
: W3 z/ @+ M- y$ V8 O, ]1 M7 s
$ p, x+ G1 v2 C( `
: ^$ _8 a! s, q9 B" k) q8 d

本帖子中包含更多资源

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

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-11 05:37 , Processed in 0.043751 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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