debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ) u. B; {( Z+ ]) W
# `5 w) K3 E" D8 G3 \
各位大神:% a" _! W8 C: k  M9 g. }
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)1 g& ~# y- Y0 b  S" D* e6 Y
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
) @* a: H0 v% V7 b$ T. e! E+ t' ?+ W/ F0 Z, V
     % A' O# T  i( Q2 s
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
4 G6 R8 ]; y, B( g# C& ^  h, R$ @* _. s, n) b
并没有其他线程
. N' g( E/ P5 ~3 v% g反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
2 O  B# }: G* `, c- }+ Z也说不定是和堆栈有关系。。。。。。
9 ~0 W2 \- T" f% D6 }请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 ^7 ^9 F. ^) Y$ ~% P5 O( w+ I3 \. n$ r' o7 t3 R" }
' i/ o& s6 W3 |9 [$ r$ w  W

1 e  O1 }: X# E% v' e2 e% D8 w1 {我也很绝望啊,希望大神能帮帮忙,感激不尽,!6 E) {5 ]* h# k3 e
5 O( S3 L7 M- v: E' n
2 ?/ x" H$ c  [* ^* ~7 J; q9 `
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
; s8 o. S) R0 N8 N4 E3 m! S        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
2 f8 D, t& A. y: W
7 h" z* M# k2 T2 Cboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
8 f7 V9 }! }5 B% a) P/ q+ j                const double data1000[1000]) {0 o* \7 I0 s  `4 \

, O5 U* W; P# |% z/ G' J        int myfuck;
2 f3 H1 ]( T3 u8 V% ]0 x+ N4 B        double yiDuanShuJu_mean;9 `8 U/ r2 H; I9 L4 \: f/ N* s
        double yiDuanShuJu_LowMean[1000];
/ W- T' Y1 y0 p7 I% h, ^" T$ O        int ixstart;# b# e2 `4 [0 \$ j2 l
        double dv0[1000];' }# n) g% ]) T2 y4 h" H8 r* M
        comm_AGC pAGC;6 P* I; [8 [5 y# ?" w7 N
        comm_CarrierSynchronizer pFineFreqCompensator;' Y) ~) P% r: y
        dspcodegen_FIRDecimator pRxFilter;
; X2 R1 F- u' i2 ?- L% F        comm_SymbolSynchronizer pTimingRec;+ P- J( Z  z$ F# q1 Y
        comm_PreambleDetector pPrbDet;
. S; F1 s9 L. M# w, m: Q- T        FrameSynchronizer pFrameSync;
" h0 ^$ D" \+ Y2 @        QPSKDataDecoder pDataDecod;: \  t+ V! G& x
        static double usable_left_filtfilt[81000];
+ w+ w' z1 f) h' \        static double youXiaoShuJu_QuZhiLiu[81000];2 H: [4 y% ~' u/ \# z9 Y
        double mtmp;2 s# \2 B- o; ?9 Z% u
        int ix;
; o% x- G1 `4 L+ N/ F" G        boolean_T exitg2;8 Y4 _- l' c5 Y- e' c) M# \
        boolean_T exitg1;$ G. b3 r1 e* I* [5 k
        double YiZhenShuJu[800];
4 w0 o/ K9 d  X, k. }" r        double dv1[800];$ U! ]" ~! g) X& `/ s  l) Z3 w- a
3 `& B* n+ }: ^9 N. B, Z3 J

& l  G: g  V5 p4 [' f: {0 _. f- j        double b_YiZhenShuJu[800];; {5 W- s% ~& l( i" W
        double I_filtfilt[800];- D1 y3 C0 ^; y& S; `3 o
        double Q_filtfilt[800];
6 W! j0 ~+ s* {( l) a  s! W        creal_T b_I_filtfilt[800];- i* F! l) m' s: @3 D) j% p) A" u  [
        creal_T b[800];
! n7 L0 [; g7 p5 \& Y        creal_T RCRxSignal[50];
3 `/ u' U2 [- I5 x        creal_T fineCompSignal[50];$ M  V6 ^. s4 U  i, _7 N, R
        double phError[50];7 _! N  h  y; @3 J$ D& \3 e
        creal_T timingRecSignal_data[28];
& N7 [- E* F8 D2 J        int timingRecSignal_size[1];
, U" o$ Q+ e: m1 h        double prbIdx_data[28];
" O/ }9 U3 i8 T9 \6 p+ Q3 N        int prbIdx_size[1];
  M- Q9 J! f8 f" C" ~; |        double dtMt_data[28];
1 l* ^6 d6 f- n1 k        int dtMt_size[1];
' s  Z3 U3 N3 V& X        creal_T symFrame[25];
$ A3 H6 x; N2 l' e7 s        boolean_T isFrameValid;3 d; P; v  `3 q& }
        double unusedU0[3];* o3 o1 z" ~( ?" x3 h4 Z8 y% A

! ^6 W! _: {' w: H2 [        //调试过程中的变量
$ c( }; c8 s: I. Z        int  enough_data;
3 X3 p9 e- X4 P" ^$ r2 {# _9 S
/ b- _8 ~2 w4 Q  [/ s% H        int enoughDataFlag;% K& ~6 X; V: h3 }
        int yiDuanShuJu_mean_int;$ [+ U! w# f' ], O( m$ R
        int int_sum_dv0;$ T- s% ]5 j0 a: k) Q" g' f
        int oo;
( J0 ~8 S$ t; T+ O  t, l        int ii;7 u) l6 ?* Q$ }7 ~+ S; O
        myfuck=10;3 Y' O8 E; Y1 V' @# J+ ~
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */7 ~  S3 g6 S. K
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
  U2 ~7 P* }6 @7 c
8 ^- y" l6 i$ f        yiDuanShuJu_mean = mean(data1000);
( D6 b0 K9 E! h' Q: h
( E0 R. c' G  {        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
' e+ {& `* [' a        UARTPutc('A');4 O9 k, |) A; C( [) w$ G
        UARTPutNum(yiDuanShuJu_mean_int);3 s7 H6 j/ v0 n; G
        UARTPutc('\r');
/ \  B9 _5 [2 f. `+ S8 G8 Z4 V! K        UARTPutc('\n');
$ j% J$ {3 a8 U8 Y; ~3 [6 H8 ?- K* e0 H$ r. h
        for (ixstart = 0; ixstart < 1000; ixstart++) {
! H4 e& Y7 I& g                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;2 l: ^& P  ^$ a' A- k4 K0 w: ^
        }) R" y# J9 o* M3 j7 S$ r; w
: p  z/ m8 y( {( l# n7 N  V# o
        power(yiDuanShuJu_LowMean, dv0);
, ^& V# P) a# c2 F) z4 V
* f4 Z" m" t! o" A8 b6 }+ l        int_sum_dv0 = (int) sum(dv0);6 Q8 l+ W2 s( }6 m
) [7 e* i2 b' }  ~! o6 v
        UARTPutc('B');& Y/ B3 l- A$ B, _4 ]
        UARTPutNum(int_sum_dv0);
! Q, c9 j, C) p) b7 m        UARTPutc('\r');
1 y) p  {  \" I# P* Z        UARTPutc('\n');2 Y2 n/ f+ q: d- m

* R2 d2 W1 U6 R+ w" g- |' ]//        int compareFlag = int_sum_dv0 > 1.0E+8;! H% ]& C9 A& ^9 `+ Y- u1 w' W
/ X0 j% w. A/ R: f+ s: H
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
% |9 [" E3 N, v9 `                UARTPutc('C');$ D5 u' x; [( E* s3 V' V# X" i
                /*  比较信号能量 */) ^& o* B" y0 j( y8 {  [) [
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */0 Q- _) }) S0 X2 v" W5 x
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
2 _% ]( v/ p6 U" B3 m2 B. L* q& Z% m//                for (ixstart = 0; ixstart < 1000; ixstart++) {
/ }( M( M- `0 P: Y- }* N) n& d8 d- x//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
: }( N  V1 h7 k2 i" V. r//                                        yiDuanShuJu_LowMean[ixstart];) T$ m" Q0 h  v- W
//                }
" }# v- P& g: v$ f8 y4 k//8 H: w) }2 d" L- k# \9 I
//                youxiao_k++;
. H  X9 X3 D! Y5 a: e% Y//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==; @4 V4 ~/ o0 _7 S
//                        /* 感觉要取21个数,即0-20, */. I9 Q8 c7 \! s1 X' C" ~1 ^$ t
//                        enough_data = 10;//有效是10,无效是0
9 V9 G' \& G; n3 _$ I2 F# D//                }
# ?! _& s2 p' X* `        }
- v6 f( e# E4 u& r" B, y3 R! U
; r. ~; m. b+ ^# F3 G: I; a( O: X8 L8 A: J
        enoughDataFlag = 100;( @$ t9 \. X0 g
        enoughDataFlag = 1000;
) h+ B- Y! v/ c* f6 i0 t) N* o        enoughDataFlag = 0x02;
' l- j( @, ]  ]0 [( i4 U+ B        enoughDataFlag = 200;
7 ^( p( D: k9 G5 _. x9 l5 l0 S) t4 F2 i6 m3 t
        int myfuvk1;7 _9 }+ A. K7 ]1 x' l6 y
        myfuvk1 =11;! C: Y. L; b# d4 |% Q- n1 l6 `
: p* s9 y! C6 [) _" n# K! y3 j7 \

% f! a3 U. g8 R$ H+ _4 v        enough_data = 0;2 b8 V- x8 Z7 T3 o' O' I3 Z
, g* @" `3 l7 O5 m0 v
//        if(enough_data>50){+ ?( g1 K" j6 }3 d8 c" p2 q
//                enoughDataFlag=0x01;
  {$ ?8 y' r( A! X$ W; n! S# h5 \//        }else if(enough_data<50){
  l$ x- Z4 d; ^$ {//                enoughDataFlag=0x00;//0x00还是不行
' V% X( T& s# c  q8 j//        }
4 }9 s0 m5 Y0 K8 q: R) T' v3 Z+ A$ K# ~
( |. I# v: x; d+ @& P. S
        oo=10;
6 X/ l. w* Q$ N- H% c$ f        oo = oo  <  5;. u5 P$ r/ i  q  H; x# f1 b
        if(oo){  n6 f( o, j" L8 Q' V/ N3 a$ f  W
                ii=0;
/ x; L/ G- k+ L        }
! _8 o) G1 e3 ]        if(oo  <  5){( t' R: l( ^6 f9 T" t0 i0 F
                ii=0;
- s+ Q0 e- n; o! w( o        }* b; d& T4 }. n* @! c1 @; t9 C
        if(oo  >  5){
: E, Y5 I6 ~5 N5 D) V' t                ii=0;$ n* W: v  r. ^& p6 M1 a, d$ ]
        }
7 ~, p' F2 s- a, p# q6 L" ]2 ~1 J. f& ^8 ~
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
" L& k1 ~( u6 b) v% A% U        /*  如果数据足够才执行主程序 */
* Q) B; X1 ^$ |, [0 l" X: i1 [        oo = oo  <  5;% r5 {" q% J6 g/ W0 P
        enoughDataFlag = enoughDataFlag  <  5;5 t$ `! z9 m7 g0 c
        if (enoughDataFlag  <  5) {5 F2 H3 S* _1 ~' |5 y6 H8 E0 R' f
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
* R& j' h1 D6 |                AGC_AGC(&pAGC);4 m8 C( y  L$ t0 t* v
% i* v5 u( V) g, L1 D
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);1 O( ?. H+ R. @: h& ?
                FIRDecimator_FIRDecimator(&pRxFilter);- l1 ]$ F' }3 M" z" v

; J4 D$ V9 _/ }) ]2 Q% a                /* Downsampling */
. G: e4 Y- Y7 M, d5 J                c_SymbolSynchronizer_SymbolSync(&pTimingRec);! K" Q! D" t- G0 A, i+ E
/ N& B1 ^( a# }+ J
                c_PreambleDetector_PreambleDete(&pPrbDet);: u: ?* Z7 I3 F7 x# J" J- P
' W$ s9 ]& }$ |) V! f9 b
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */, X$ d+ M9 _) E# H" @: Q* [- ^) w: C2 ?% L
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */7 i+ a0 \8 I+ X- _. B  ?
                /*     %帧数量=100 */
9 O4 k/ `$ i5 n- B. c                pFrameSync.isInitialized = 0;
9 u" ?1 Q7 O  v) p! I" h: J1 G" ]9 {6 @5 C0 [  H" f! v
                /*  [EOF] */
% m+ Y6 g% U# d( _7 Q+ q                /* 前导码长度是13 *// |: _) d0 n, ~  ~/ O
                /*    %qpsk */  A4 ~, [3 i; J. h' p& E8 A: Z8 @- z+ p
                pDataDecod.isInitialized = 0;
8 C# L4 o0 f% A$ A2 i! o* w9 q6 t' V1 i6 K& T
                /*  end */
$ S( e0 Y( p$ g: o4 d7 R1 l3 D                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
& Q* `3 P% b* @  U, G* z- [                /* Convert 3-dB frequency */
& C# p2 C. v+ l  Z* t                /* Convert 3-dB frequency */
7 O0 e& D2 R; g+ M7 ?5 C4 r& ]                filtfilt(save_buffer, usable_left_filtfilt);
2 C, T0 V* G, m' W! P8 g$ k, _                for (ixstart = 0; ixstart < 81000; ixstart++) {
. l9 N" N4 A. i" Q1 N0 Y$ Z                        usable_left_filtfilt[ixstart] *= 2.0;+ k0 E# C) B* G& n6 N7 l% ?
                }
" K: Q' J. v# b- \& d& `; W0 g! L
. b' z& p9 F0 h# c) o' s                /* 注意乘2,处理幅度 */' n- Q7 O" r- x6 h% Q7 q4 u7 w
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */+ \+ ^! f; |1 D* p1 H" f6 _  N
                /*     %% 行列转换 */& h! g9 Z. s9 \' C) A
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
1 d0 u% f8 v8 f! N$ l                for (ixstart = 0; ixstart < 81000; ixstart++) {9 b8 e; J, U5 [8 U6 C6 \6 f
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]4 [$ ?1 ~' N. I& V/ t- ]/ z
                                        - yiDuanShuJu_mean;! B* Q/ _: M' a5 D$ s) S+ K
                }2 I( K$ r3 y1 [( R- x' c' \
$ T" L% x5 N) E; z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
. ~! e$ J9 Q0 K4 V) F                ixstart = 1;
& K: X: M- Q( y                mtmp = youXiaoShuJu_QuZhiLiu[0];
8 `4 ~+ T% I0 L9 O" n: N! V3 ?5 [                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
4 R1 t$ m$ C6 T" A+ o0 U                        ix = 2;
9 ?% w' ?( M! v+ m% D                        exitg2 = false;
% x, `% G' ?" W+ _: B                        while ((!exitg2) && (ix < 81001)) {0 G1 g0 G/ e. z0 f" ~2 J. |. m
                                ixstart = ix;" y# ]0 e9 l& Q
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 U0 D3 X  ~' e" G' R                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
5 `- X- c3 f& e$ _2 r4 c1 E                                        exitg2 = true;. D4 P( d$ @; |. ?& S# |/ O
                                } else {( A" p8 R2 Y6 b- G( k: A* A+ I
                                        ix++;
: p& s/ L; Q, K" a' M/ x                                }
; j% h" I! N0 M5 r3 V                        }
3 g+ N0 T( Y- d3 Q! V                }
/ K& r' z; @. V1 H5 k% F; `( H1 I; e( T2 Z7 }
                if (ixstart < 81000) {3 v. ~9 n4 k7 E% s2 H
                        while (ixstart + 1 < 81001) {4 g9 D( @6 h$ K2 F% Z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( }( G; f% D/ T3 S0 W5 E2 a4 g3 K8 q8 |                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
% A% z3 P5 R) |% E                                }/ r9 m, ^5 N  ]: D8 ]% A

( w: _7 c0 {. d+ B) B) n0 ]9 g                                ixstart++;
" E& T: e  V! ?$ f+ J- |                        }( ^+ J" {& r: W- [) }
                }
6 K- f) F# l3 }4 i! D% b9 o0 W- m7 ^- R* X6 E) g0 _+ ^/ D
                ixstart = 1;& v9 |  c# @3 r, {
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];1 D! J7 F* ^$ l" V0 K, B8 m; }; [
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {1 _. M' v8 D  }. m
                        ix = 2;
9 x5 e, t# \1 j1 l9 S# `                        exitg1 = false;" K6 g$ H9 v1 [8 c# J1 a  T4 x
                        while ((!exitg1) && (ix < 81001)) {
+ s; }4 V, o2 ?4 r) [% j+ Z/ U                                ixstart = ix;5 @4 H9 y9 d2 h4 ?* g* p2 x) R
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 v. i6 b4 Y  f, w; C                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
. o, a" K3 E( K) g2 y/ X0 j                                        exitg1 = true;; u, _: u0 N: }" d$ E
                                } else {
  x& {4 R, ]' }                                        ix++;
1 B1 c, j/ u  ?# a3 V                                }& `, t8 Y& j3 Y& U
                        }
' U# `* {$ d: Z/ Q5 \- M7 w                }
! W6 v" ]: @1 k) o; s. H6 q0 P  K" |( ]6 B4 o0 d4 m+ i/ e
                if (ixstart < 81000) {5 k' v# p0 `7 p4 ?9 P; I
                        while (ixstart + 1 < 81001) {
$ o" g' L+ Z1 ?! P' _* J                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {* X( B- x& s2 k. P
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
) _" p7 P) E  a8 r% m  {                                }
+ t$ H" _) X) h4 O# v2 g) l9 S* Y. G* }
                                ixstart++;
" v5 f; ], k  X( V                        }
$ ]& @: u$ V, f" v' v% `                }  r: n  T5 O& Q9 C* t6 d- j( |
( ?) K/ x2 n& K" z( t
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);6 j* w; b. V2 Q
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
1 Z- N* [' e, f; N& W6 E- m! t  G- s                        yiDuanShuJu_mean = mtmp;) N5 U$ E( ~5 _7 I1 e: m
                }/ \7 e3 x$ P8 Q' t. g3 ?" z2 C

( `- s! j1 O1 Y& |2 D4 A& |                /*  找出极值 */
. G* d+ K1 U2 h( z! l* k                for (ixstart = 0; ixstart < 81000; ixstart++) {
, C' e3 E, J6 Z7 M, A                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;& |. U- ~; v( h3 d1 _7 g
                }+ u3 d* ^% P( B& m' D! U( t
( o# U' _# J: F3 C. f/ p) F
        --------------帖子字数限制------------------: {; R& m4 t4 b% |: i3 q) `
}
6 U  b: u" u9 B3 |# @+ n/ ^. P2 e( E3 R( h! ^" Q
" Z' u! b% ^* u9 h* D1 O

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-5 05:34 , Processed in 0.051260 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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