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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
/ e0 k8 X% ]5 M, I( T, O3 l1 f
! M, _' H2 c+ o- j! X各位大神:
! B- P6 z4 \$ O0 |' i* w     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)1 y- N. \: @" P6 ^
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
& U  |2 _- s4 J% h
1 E& Z( ^+ w( K6 K     
4 y( m6 S0 f# J这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。+ D$ `$ ~3 g7 [( Q: {2 B
' H+ D- x8 e  ]) w; i: V5 V
并没有其他线程
  g- n4 \- D9 M3 i; \+ C- \3 h反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
4 R5 ^  d* C4 m, B也说不定是和堆栈有关系。。。。。。
$ x& O! z2 h  b, B+ ^( L请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
" Z- `' U9 Q+ j: q/ u! u4 {, Y) [8 ^+ \1 W) v6 B+ L8 N) f3 H
! ^5 O) [% n+ z* p+ |: {
) c% F' g9 J4 p+ z" W0 I
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
+ n) c) `2 s# L; o, k
+ Y: t+ f& G" c
2 z/ h* s5 D6 H$ J附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];/ H3 c9 r3 _, p& A* ?0 z
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。' Z' K: a: f+ [# A# \( Z4 A3 X3 U

: j  N7 W" G- a7 |/ M  F; s. u  r, mboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
1 D/ t3 b" |8 e( q2 A                const double data1000[1000]) {; i! ^; r/ S& F* ^% n) j

; D& y2 Z; P. |+ B: g( I4 w        int myfuck;- h+ h4 b" H7 r/ \' B$ ?
        double yiDuanShuJu_mean;
' G, k5 y/ t, b* f: e; }        double yiDuanShuJu_LowMean[1000];
. L+ Y$ w0 z' R        int ixstart;
9 e( Q0 d$ Y+ g        double dv0[1000];
" {$ m( L1 c5 B7 g( L0 i7 p: I        comm_AGC pAGC;& _. g/ L% Q' {6 P# t2 l
        comm_CarrierSynchronizer pFineFreqCompensator;7 r* R) L9 ?5 p: G
        dspcodegen_FIRDecimator pRxFilter;
' e, E/ ?7 V4 a" ^4 d# j        comm_SymbolSynchronizer pTimingRec;
8 [) c' H3 \" M, d7 V        comm_PreambleDetector pPrbDet;
3 b! u( J( k2 r0 i3 c4 p        FrameSynchronizer pFrameSync;; @" b3 d, E. X" V& {
        QPSKDataDecoder pDataDecod;- V8 h# V! }& c5 ^
        static double usable_left_filtfilt[81000];0 g/ l/ H% f3 t4 X2 t- l  g9 S" c
        static double youXiaoShuJu_QuZhiLiu[81000];
8 T1 }' F/ [# j0 W        double mtmp;. W# d% H5 S4 C' f- S! e
        int ix;
; `# b, [( d8 _- Y7 [- f        boolean_T exitg2;
- B, t0 |6 G; k% O        boolean_T exitg1;8 X8 R0 A0 g$ _# ^9 b' E! O
        double YiZhenShuJu[800];
* j1 }/ l" s9 I5 K' ]; @- W        double dv1[800];% x0 F! k( O% E: ~8 L

) Q: z0 @+ `( b$ h+ J+ Y8 l/ N7 z* F7 B( Z! f
        double b_YiZhenShuJu[800];# q) i. Y# i+ w: p8 _; X
        double I_filtfilt[800];/ ?' P% ^) Z# g, m9 m
        double Q_filtfilt[800];$ F, y# y2 h2 ^' m3 B' a
        creal_T b_I_filtfilt[800];
  O, R+ F& o& T$ F9 U9 e        creal_T b[800];
* F% C  z% J6 J5 M! I$ I        creal_T RCRxSignal[50];
, S5 Z- P- {# k        creal_T fineCompSignal[50];! [, U% R4 {3 g) L
        double phError[50];
9 e2 _  l. k6 \$ i1 ?8 j        creal_T timingRecSignal_data[28];" j$ V% n% h; ?0 {# S7 g; K
        int timingRecSignal_size[1];
" X* ^5 \- e9 h! b* x        double prbIdx_data[28];
- F: y1 O5 _1 `4 w  b5 L        int prbIdx_size[1];
8 _( f0 j5 R2 ?0 T        double dtMt_data[28];
9 E; E% d& }5 q        int dtMt_size[1];
) J! w+ S/ F2 t- F! E" H        creal_T symFrame[25];
1 N* X2 `9 S. Q  X2 {% D: g        boolean_T isFrameValid;
" ]. Q% q6 w, a( F; g, U9 U        double unusedU0[3];
( [1 _: H9 e# g8 m; Z# v8 v4 X$ @. g
        //调试过程中的变量
. x3 ?- q: q- z7 ~1 g, p        int  enough_data;1 N/ W+ ~' w8 e2 U/ S  N
# W: y# T* K9 A& A) L' |. Y) z& ~+ _
        int enoughDataFlag;5 Z# t+ Y) ?( s$ g. X% m
        int yiDuanShuJu_mean_int;
8 s9 A" ~8 L8 q9 m( v        int int_sum_dv0;/ G; ~2 T$ M8 u, c5 ]5 ]
        int oo;
( [! z& q2 g9 _        int ii;
$ o$ E4 t9 p: S9 D; f# e        myfuck=10;% H2 S& Q2 Z# M' _- K
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */( o9 w, R7 H3 B- D
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */6 r; b( S- X" I  ]: k; U
2 @! j9 D& X. q* I* J$ d  b
        yiDuanShuJu_mean = mean(data1000);
. }, n  m. B3 X( O: f4 H4 z) [$ J0 o( M6 H4 j8 z2 T
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;! e$ F: {6 V( W% N$ |
        UARTPutc('A');( D9 R, H5 n; \: |% f( _1 s4 X8 ?
        UARTPutNum(yiDuanShuJu_mean_int);
2 G$ U5 g# f# \        UARTPutc('\r');
  m8 Y5 G' g6 K' y        UARTPutc('\n');
7 f- e, j  e' T$ w0 `$ m6 [) d
; W/ }" V$ \6 [% y" K        for (ixstart = 0; ixstart < 1000; ixstart++) {/ X( C0 b7 a: i, J6 p, ?6 B
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;  g1 k+ P4 U' `3 }) B# v; `
        }
$ @/ D2 T4 i3 s5 e6 Y; [, E+ T, R" I6 E, r$ p
        power(yiDuanShuJu_LowMean, dv0);
! u+ T  u3 Y& {- o3 b6 ]: Q/ m! t  D  X( D
        int_sum_dv0 = (int) sum(dv0);9 ^; G, j4 n6 z) _# {9 z
- O/ E! t. W% y9 t
        UARTPutc('B');/ P$ G+ @1 E/ h8 g4 m( q
        UARTPutNum(int_sum_dv0);
3 I; F' m" f/ P. V; G8 I" f        UARTPutc('\r');1 \8 I, R  R- `- C
        UARTPutc('\n');) X6 S, `+ y6 }( L8 v2 X! s

4 p/ d/ V* y7 B! c//        int compareFlag = int_sum_dv0 > 1.0E+8;
  s* t" \' N" }$ y. q0 g4 J. N3 _2 W: I; P! G7 ]
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?9 ]2 ^2 [& w) H8 {9 U- z
                UARTPutc('C');
6 \5 N- G) n- i  {8 }5 a/ {                /*  比较信号能量 */
7 q- ?- z. `% v4 q6 O& J. F                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
6 C: L: h& T/ m/ v7 r8 S' ?: x//                yiDuanShuJu_mean = 1000.0 * youxiao_k;( B1 Y" y+ Q) f- P8 `3 y/ f
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
, @# g8 i; c' a5 r  m//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =/ X9 |- ]& A7 q/ p% \" B9 S: k
//                                        yiDuanShuJu_LowMean[ixstart];
" W/ [' M7 V1 d, @//                }: F6 O8 L) ~% J% T0 x
//
6 b1 [4 E* o& I" C0 ^' _//                youxiao_k++;
+ G2 _0 u5 H- f9 @( g% j//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
: C) `0 h# z& y$ t# U7 k5 ^//                        /* 感觉要取21个数,即0-20, */
, H: H( D+ k) r) V//                        enough_data = 10;//有效是10,无效是0% P3 |) k4 f: f7 g& V
//                }
0 c# s  ~* E; E: X  b$ m7 T        }2 z- [' L: S: m- x8 d- A* s" u
% S/ ]* U. O2 m+ \# @

* c# J7 z1 ~; [7 T& M. l$ I        enoughDataFlag = 100;) B9 [; ^8 v: d
        enoughDataFlag = 1000;
: y7 Q6 l# r* ~2 |9 o1 M        enoughDataFlag = 0x02;
6 e3 h+ m; @: i        enoughDataFlag = 200;
1 S: S0 W$ f9 t' z0 ?  i
" x/ F& m( B+ t$ W        int myfuvk1;
8 X' e6 @7 J9 ]; ]; c- M+ \+ W        myfuvk1 =11;
3 h! D- x  B' o" O/ E
  G8 q) R2 k  a7 N9 M. ^, p. s/ |2 J  H7 i( g+ z& s
        enough_data = 0;- T$ |, @* B' V
5 M0 n8 q: |& U. o& g  r7 ]! t  n
//        if(enough_data>50){
3 V4 @2 l" S: N( \" z3 A& y% t//                enoughDataFlag=0x01;
" W! h4 Z1 J! R7 y5 q//        }else if(enough_data<50){2 }! {7 `% N3 ^& a; }' {. j
//                enoughDataFlag=0x00;//0x00还是不行
- J7 C% H& N( b# L  ^//        }: A4 N! _: q4 D7 r6 f$ U- I
+ x/ ~3 }# I, K$ o

0 ~: s- \! |6 `2 x% x6 C- y        oo=10;4 B/ \$ O; ]2 f
        oo = oo  <  5;! C- ^" d9 f. [4 y! u% }; I0 H- y
        if(oo){
  U- C1 a! ~8 \# X                ii=0;
; H6 q0 x6 b2 W- u  _        }
% M; M6 A) b$ D3 K, o% ~        if(oo  <  5){. q; J' h  E. p% Z; G% {: U9 I+ E
                ii=0;6 f5 N8 h# }6 \+ b
        }
) J. {' Q$ @# l# d        if(oo  >  5){9 C. `  x5 s2 R  o  {
                ii=0;# x$ Z( A1 N. ^1 r" u& k6 M
        }
! W/ E" _, d5 d0 ~' x  g
0 j2 d; a1 M4 S' w, b! x        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */+ J- s  i3 q' J/ E( O6 G
        /*  如果数据足够才执行主程序 */. Z7 |1 f5 S3 h, f' I3 s
        oo = oo  <  5;
( Y# Z3 f7 H, f& |. P        enoughDataFlag = enoughDataFlag  <  5;
  y* z6 E1 j. x        if (enoughDataFlag  <  5) {) t& H' y- D& ^2 ?& v0 L  {. W
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是03 t+ O* n+ m- @4 e' M
                AGC_AGC(&pAGC);
& |/ g% |4 X- u9 S7 }
; c. J& @3 W5 z8 c                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);- P( X/ n/ w$ @! a
                FIRDecimator_FIRDecimator(&pRxFilter);2 Z) ]/ F! y/ \& H9 n2 `

* h  ?/ u' A4 r* o8 m                /* Downsampling */
" j* l3 F8 U/ J. c8 \/ s# i& o                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
8 q6 n7 n. y( o; v3 `
+ P- o( N' d# W" Q, f                c_PreambleDetector_PreambleDete(&pPrbDet);
" y" S& j1 ^; W2 r9 d$ R4 x
' [! L! r! i* i* r/ M8 F                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
( M+ c( `" }, q                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */4 m) O$ q( a; N  K1 d
                /*     %帧数量=100 */( n4 |. v$ I7 ~# ~) E* H
                pFrameSync.isInitialized = 0;# G" d- U7 l8 `( I
9 h; L  }5 q( [, O; R
                /*  [EOF] */
. q, \9 Q0 v0 |                /* 前导码长度是13 */
/ \9 b3 S4 e+ T4 m                /*    %qpsk */  m: G* q" y2 A$ i
                pDataDecod.isInitialized = 0;
: k& R, k* a: {7 [, [% `
! i( L  O) m  B& _                /*  end */
: k' |* t5 E, _2 Z/ R                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */9 j, `: {: ?0 h: A$ P. r
                /* Convert 3-dB frequency */) u# _  i6 D6 C5 x
                /* Convert 3-dB frequency */0 ~" J  D; l# E# x/ x
                filtfilt(save_buffer, usable_left_filtfilt);
# o% h) O, {; w2 T1 K( i                for (ixstart = 0; ixstart < 81000; ixstart++) {
$ z/ ~% F7 F: J9 {                        usable_left_filtfilt[ixstart] *= 2.0;! h/ j- y, v+ p/ J9 Q: \# O+ i2 [
                }
; u) z: b9 q+ R. y
) Z, d. Z5 S3 H# U, [* V4 i, r) y; U: w                /* 注意乘2,处理幅度 */
) y# |: ^" `! g- B8 W                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */$ M  x  T! _, {4 o& {7 t7 i
                /*     %% 行列转换 */6 S' ]9 ~' r' }( u: C3 a& p, {: h
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
: k  ^/ Y% m- E6 }( e                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ q; e  U; f) E                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' c: h" `* U: N) q! ^                                        - yiDuanShuJu_mean;
# o3 a3 f. ]0 K% @4 D% |% E                }
: |1 ~" ]/ V0 {5 [+ c0 X, S+ l! ~& N+ W* A' Y
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
& u! X# _' B7 e9 P5 R4 A' i                ixstart = 1;4 S  M: d/ C9 e+ q% A
                mtmp = youXiaoShuJu_QuZhiLiu[0];
8 v0 C& t- @3 c1 Q) J6 |/ E                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- B" b6 J( N  n% g$ |. J
                        ix = 2;
- ]& D+ z! O, i, r3 M. H, y; L: B                        exitg2 = false;
$ c: K, g+ a' z7 W" B5 N7 D                        while ((!exitg2) && (ix < 81001)) {: v# y; `- ^7 f. T! H0 `7 S
                                ixstart = ix;! X# `' W2 _- i4 l. r2 i4 {$ Z
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
( Z$ |. [% A! D& z' R5 p! z                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
8 I& i& Y4 D0 {" L& c' R% n                                        exitg2 = true;3 b7 q5 _- }4 Y+ c; z1 C0 T; ?
                                } else {
# O! d  W# ?) D' q                                        ix++;
1 J  o, w, K6 L6 ]# S. Y0 ^                                }$ ]" y( p: o* L  S
                        }+ s% a/ H3 ~: l% A8 X% W
                }- b6 P4 w# A9 L

4 J% c7 s* I3 I6 o% s# f  e                if (ixstart < 81000) {
4 U) K6 s8 J3 Z                        while (ixstart + 1 < 81001) {
0 p, X) U6 v' I                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {+ m- l! G* o+ k$ b2 T
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];/ U- ?. o6 D" y8 H
                                }
2 V. K- q- a; [7 q; ~) ?
9 ^' ~! X! i' M4 R                                ixstart++;9 X* j( t1 P! z5 R, w5 `5 s
                        }; r/ c) p0 I4 R* g/ Z# [4 J
                }, x) o6 k4 [- R$ Z6 b$ g
# t' O* t- D4 k
                ixstart = 1;
" `. k- p/ a) Y, F9 q9 W$ Z                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];' R/ Q; A- p$ T4 @  C+ N- M! ?
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# I# v( r/ }! K) P5 S! ^
                        ix = 2;7 c) P+ y8 [+ i& f2 U* v
                        exitg1 = false;6 f( w# k0 U9 ]. I
                        while ((!exitg1) && (ix < 81001)) {
; c1 \; L# _$ {" C& Y0 X                                ixstart = ix;
9 ]# O8 X" B# Q3 s) f% S                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& }. ?# s/ E8 |* \6 {! \9 V                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];% o" d! Q- _  ^, Y( b8 y
                                        exitg1 = true;! B* @+ r) e# r; F8 x7 T
                                } else {6 b% ?/ G. B, h" k  V' k' n  [! R
                                        ix++;0 l( z: ?9 N; q; G0 U
                                }
) G) m7 N( K+ M" N* K! |                        }" g, `4 D, R# ?0 q
                }
& m) ^7 c% F; z  Y' o) X8 r! w) X" y& M. I
                if (ixstart < 81000) {
* N9 W' j8 }, y, a                        while (ixstart + 1 < 81001) {% r3 M, Q9 Z" H6 N4 q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {) O. J+ o/ d% a4 Z
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];3 B: T+ S9 k3 ~9 g& F
                                }
$ D# G0 X  y5 O7 |. `$ u- Q
/ s! u- B) B1 h7 a                                ixstart++;1 x) e4 Q. Y; @
                        }
2 d9 O  l2 V& z8 n2 b2 F                }
" ]! w4 J; x$ m) }; W# `( h- g6 E( X
. }, i/ [) B1 w# L0 g8 Z                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);" D" Z9 y& r. K! `) {2 S8 Q3 c$ L
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
: o- S+ C+ i9 M: A                        yiDuanShuJu_mean = mtmp;
6 h2 I4 @8 J( [0 T                }
4 N2 d# M7 e8 _& e5 ^* z' l. T5 ]6 y6 c4 V! u8 u$ ^3 Z
                /*  找出极值 */; I# a: z- Y! v$ n  ?' u9 C3 c7 s
                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ }+ r  s9 o# q4 j  d  h% v. X                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;9 H! B, ~2 c- J' E9 n8 j% q7 L! |
                }
: t& x: o& U! i3 q/ {' o
0 J8 F8 a  b( @" A; U        --------------帖子字数限制------------------! D1 I$ d, b$ q0 K/ z1 b+ {! k& A
}
1 I0 k$ C. ~" v8 P! N+ b# j/ r8 P/ o7 N  a
/ _( d9 B% K* ~6 Q- f! ^  ^

本帖子中包含更多资源

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

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 06:02 , Processed in 0.064526 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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