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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ! h( [9 ?/ s5 z5 k6 e8 m' v

0 n6 i3 B2 D1 N# v4 K2 d各位大神:
9 E6 W+ ?' H' `* k     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)& K  j& ~. _5 ^
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
& x& r; N% Q) r) D& U+ e
3 _2 K1 i% G  U! E6 o     
0 V8 e" b7 q" J1 o8 k0 a这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。' f, i" i7 N; X; p0 X3 ^

0 A7 q; I1 N) a并没有其他线程
( v. `* B0 V/ o6 b$ _反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。8 o" a' X+ _1 p" H: ~
也说不定是和堆栈有关系。。。。。。9 _. H& N/ _# I3 ~# B5 _% s4 a
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....) P/ L& K( ~9 u/ J" y
! x8 e; [: K! f8 z

# X/ G7 a$ \6 ?' }7 a* v
; K- L, S3 f, p: T, C3 a0 F我也很绝望啊,希望大神能帮帮忙,感激不尽,!
; T) ^1 b4 f9 `: D# I
$ o% C' B& ^9 b1 e9 z) y/ l9 ~$ W5 K  ?
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
0 _! F5 z6 d# {. ?- R6 H# D( T  j        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
& K; h# w. z+ J3 D7 v6 v" ^3 [
0 Z( h. a, C3 u2 B9 dboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
. {% \6 ~; b% Z6 W                const double data1000[1000]) {
- M" ^3 o! S: T' V7 L: C* h. n( i. u6 L/ U: `% h# W. k
        int myfuck;: _$ C1 G# B& r8 I0 t- Z) o/ H
        double yiDuanShuJu_mean;
- i* H/ q2 X& V; |1 L& L/ _        double yiDuanShuJu_LowMean[1000];8 h- u' m6 B6 ?/ i# ~* k
        int ixstart;) K( M9 \2 |+ M! x" t; `
        double dv0[1000];6 h5 I" P% }) S7 @7 Q2 ?/ ^
        comm_AGC pAGC;. S; {6 K5 O% |4 M
        comm_CarrierSynchronizer pFineFreqCompensator;
* g+ K8 W$ E4 q  A        dspcodegen_FIRDecimator pRxFilter;" o. N3 j: A3 z+ \" ?4 i
        comm_SymbolSynchronizer pTimingRec;
5 V+ {6 U# j! p" j8 l( w: \5 K9 p        comm_PreambleDetector pPrbDet;
, `3 ^8 n  T% }1 ~% `$ K0 t        FrameSynchronizer pFrameSync;
: C: U2 t6 C+ e* i* ~        QPSKDataDecoder pDataDecod;
' ]4 k  w- m* T. a. Q4 }        static double usable_left_filtfilt[81000];
6 f) W' z3 Q: ]" ~        static double youXiaoShuJu_QuZhiLiu[81000];" i5 v# e2 Q# a8 Y' w# B( ~5 Q" T
        double mtmp;
' N  y' M5 h* B2 o        int ix;7 J5 A8 i% F9 o
        boolean_T exitg2;/ @* z0 Q: O5 o: T7 p% r8 {
        boolean_T exitg1;
1 ?: Z8 B9 T4 u9 e2 g" U& m        double YiZhenShuJu[800];
  k5 R; w1 S; f- U- K8 x        double dv1[800];  R$ t" e9 K( _2 `# h; H
6 t  [& B( L5 t; E3 ^
- M5 `- L# H! _
        double b_YiZhenShuJu[800];! C$ S+ {2 G' ?! ^& e0 \
        double I_filtfilt[800];
, X4 P, G* X) c; Z        double Q_filtfilt[800];
/ s- I/ `& @1 F- W# Y1 l9 C        creal_T b_I_filtfilt[800];
$ h/ s: j/ n1 @  ?: t        creal_T b[800];
+ n" s/ \1 [' h* J) e+ F( L        creal_T RCRxSignal[50];/ y# @9 T3 p1 d9 T4 P% n% S
        creal_T fineCompSignal[50];
% f: R9 I# j. ^1 C, J$ f        double phError[50];
2 x$ k% J; z9 N4 L, u1 I# v# L        creal_T timingRecSignal_data[28];
) E9 K' y5 s" G7 o. y. {/ P        int timingRecSignal_size[1];; d' P) s& R/ e
        double prbIdx_data[28];
* Z4 C+ n, h# I# a  a1 V! X        int prbIdx_size[1];
: i4 i! t! [$ [# B& A        double dtMt_data[28];. R. Y  b: u9 h1 N* k
        int dtMt_size[1];
- m7 H1 \  }$ R& k0 C        creal_T symFrame[25];
- W+ R' @3 E3 W) B! f        boolean_T isFrameValid;
" \: N8 r7 s' f" h        double unusedU0[3];- Q/ |) Y" N% I5 u5 [

6 j( I' a' C5 [$ {& i5 h" z        //调试过程中的变量% h( i, E' n! Y5 S) D0 U: }* e
        int  enough_data;
: \; b" O( \, N) K
+ \2 M* n- ~4 \) t8 G/ Z  H# M        int enoughDataFlag;
3 I$ D; E3 q7 j. \" V: V        int yiDuanShuJu_mean_int;% F& P% x( G0 S0 |/ W! R$ T7 ]
        int int_sum_dv0;. C: w; l; K$ f- i
        int oo;5 \2 ?- K9 M! K3 |: o' Q. `
        int ii;
6 J" H& z: ?2 {: G$ a        myfuck=10;+ g7 U" j1 [, o; K7 v
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */4 X' k/ G$ ^  J% K( {
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
9 p$ c) S1 J7 U: w# y. D  _4 t) h# ?" P  d! I
        yiDuanShuJu_mean = mean(data1000);1 B$ J. }! v) g! ]0 A

0 U; L* U; k8 h2 H7 s/ P        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
/ a: b4 k/ k: F- ?' ?( a8 B        UARTPutc('A');; v$ A; e: ~6 G0 ]9 q& W- A. V
        UARTPutNum(yiDuanShuJu_mean_int);
  k' g% ^' [  H% s* V        UARTPutc('\r');% w& C: D, x$ O% `" i" p) R
        UARTPutc('\n');
3 V5 w+ p4 A& U+ o6 J1 I' P4 Q! z. T  l
        for (ixstart = 0; ixstart < 1000; ixstart++) {
& Y- v4 A4 ]/ k: P$ a, L; b                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;6 g& b' t3 C7 y0 a
        }
! g) ~5 |1 f5 j1 E+ R
5 z2 i8 X; z/ v: v        power(yiDuanShuJu_LowMean, dv0);) Y- W4 W4 J0 q& B" s$ M

" w0 D4 Z5 @& z7 U- E3 I1 o; s        int_sum_dv0 = (int) sum(dv0);
* n' {- e+ T0 G4 [6 g: j) I0 T( C( d" y/ a6 e4 S
        UARTPutc('B');$ H7 y( t( r. c/ F0 V! K
        UARTPutNum(int_sum_dv0);
7 A" W( M7 ?* _; S        UARTPutc('\r');
2 T- Z, a; I+ G- G        UARTPutc('\n');7 I# S' \8 X; C: K  H
. R- v) i; u: \4 e1 ~) Q1 e
//        int compareFlag = int_sum_dv0 > 1.0E+8;: M. J. y% \( [! S0 j$ ^" k0 k

! V2 s3 m0 u% G, `, r3 }, V) ~        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?' j8 _( Z2 _# q, m+ B7 \
                UARTPutc('C');9 U! q) {7 a: M
                /*  比较信号能量 */3 `$ u% M6 e9 J: @8 \) n" f
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 *// f6 [, Y5 A& q7 }8 z1 S! D& P5 y
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
& C- l$ M5 U8 n& t. [//                for (ixstart = 0; ixstart < 1000; ixstart++) {6 J% W0 |" K+ I3 b3 W% J$ o1 v
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
8 }# _; |& |9 D& |  [4 M' N- G//                                        yiDuanShuJu_LowMean[ixstart];2 E, L! A% Z" x7 ^! E
//                }
6 T0 B' V$ Q  [5 X//
' B$ t& {: w- m' P) H//                youxiao_k++;+ c( N' A7 [" c
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
1 o- |) n# V/ o2 B& _//                        /* 感觉要取21个数,即0-20, */
& s# D2 ?4 }- U# i" J8 T6 P//                        enough_data = 10;//有效是10,无效是0
( B4 Y2 ~5 \& y3 K: W; t" K5 d3 f//                }
" G1 _3 ^2 y; m6 D# y0 }1 \        }
% h8 J# ^1 }4 a
* a# k6 a' J9 x$ c5 z( S5 t6 V
* b8 l+ C# t; G8 R, @        enoughDataFlag = 100;7 `3 B5 x7 A1 Y# Y3 Q( Q$ I
        enoughDataFlag = 1000;
* `, D1 r/ D6 @: X4 P6 `        enoughDataFlag = 0x02;" L1 \) I* ~. U
        enoughDataFlag = 200;9 a1 T6 H7 e, {; R
( P& a! [8 v( ^+ c0 N8 S
        int myfuvk1;+ D# e) P* i$ R  u- J' h
        myfuvk1 =11;0 E$ u" u# C# J' r1 h' B

  I/ f: E" m2 U% O. w+ c5 a& r7 p- s  u' o+ D8 I- ~
        enough_data = 0;. M) a/ |. z1 E  [+ E9 z  h

$ {6 B8 u4 N2 Q//        if(enough_data>50){8 u; X# }7 A7 ?
//                enoughDataFlag=0x01;
( G! c! @7 Q: @1 F//        }else if(enough_data<50){
7 D$ G. M. t* M$ y) w5 X+ h//                enoughDataFlag=0x00;//0x00还是不行
/ B* N9 B* G1 T: i8 S% e//        }
! j$ H! o9 u$ u8 P* D3 W, q
0 P. g% w, p; a% h' @* r3 L  J) Q4 |5 X4 _
        oo=10;
! E% H; p6 ~7 a! I' g# J0 m        oo = oo  <  5;
1 Z# J" c2 T# f7 X        if(oo){
) W, `, D& M- P+ u* V: n0 u                ii=0;3 x5 h6 e" }  c) o9 M
        }
) A  n2 Z- K+ a/ V8 O* a        if(oo  <  5){7 k& N5 I9 @( i
                ii=0;
# N  ^! Y$ T+ H        }1 N0 o8 u- c7 a6 I2 U
        if(oo  >  5){
0 j& o! J6 D! H) `# `                ii=0;
9 s8 @6 @3 l( U: b4 y9 K        }
/ c# O9 z0 h& [4 H1 ~+ Q6 n6 A' D0 h
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */5 ^- {+ z" R: q% ]
        /*  如果数据足够才执行主程序 */& Y3 A" @4 p3 Z: [
        oo = oo  <  5;3 R; a$ ^' q6 ^
        enoughDataFlag = enoughDataFlag  <  5;! f9 e% b% _  \
        if (enoughDataFlag  <  5) {' X0 M! Y: [* m! E) G' o, R! ^
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
" U) H: G/ a* }2 X) m                AGC_AGC(&pAGC);
# L. C! ]: D* D6 X
. e1 T: D2 S+ Z7 i' P+ z                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);8 U. T: ]8 T* v# r2 |& W
                FIRDecimator_FIRDecimator(&pRxFilter);
# W/ P8 @: I, t& D, L5 d# h& `6 A) Y9 \, \$ y0 Y3 M
                /* Downsampling */2 k* {& K* R4 ^0 l1 c
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);4 ]; X2 j4 B5 a' L" y

% M* d2 P" Q. g; Z                c_PreambleDetector_PreambleDete(&pPrbDet);# D+ ]4 w" g6 F1 S! X, |' d5 P
3 h; G8 d* l' j/ d
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
1 ^' M8 V4 L3 r( g8 Q* P& P  J                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
) l- }; o$ C. v) u: Y- n. ~  h                /*     %帧数量=100 */
% ~0 x2 r' q: x3 |: ~5 U                pFrameSync.isInitialized = 0;' ^& V- t& N* f- C6 a8 y1 k
1 v, x& M) ]/ k: U
                /*  [EOF] */$ @7 e" \" ~' `3 C9 N
                /* 前导码长度是13 */1 ^/ c, Y+ c) E. m
                /*    %qpsk */9 }- `# S& k  C5 F7 @0 ~) o5 l
                pDataDecod.isInitialized = 0;3 t. i. d  i. u$ c9 z
7 o8 D2 K# O# v& N) D: ]# @
                /*  end */% Y+ z( T% u4 ~1 g  @- Q* P
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
" m. o! C& z# S* r) {( t3 E                /* Convert 3-dB frequency */0 Q) b  T0 H7 Y1 C# M
                /* Convert 3-dB frequency */) N+ T; c) Z' n& x2 c, o. [
                filtfilt(save_buffer, usable_left_filtfilt);* c/ u# b, P$ c# {- c
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 N) J8 H( L: l8 v& @* P                        usable_left_filtfilt[ixstart] *= 2.0;
' o0 F1 `4 k7 \0 Z4 r                }( Z$ |2 k$ F# w- t0 q* B9 j
8 m- L' j& L2 C1 m9 L% U
                /* 注意乘2,处理幅度 */
9 d/ w; C' ^' y; @9 ?" p                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 Z6 q5 h7 B4 [4 L' r' ~- z" J                /*     %% 行列转换 */
3 i  T5 @$ s  K- Y                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);1 `. U  \- F. z7 R$ r. `, D$ v
                for (ixstart = 0; ixstart < 81000; ixstart++) {5 Q! p1 I% r  J% k% z7 P
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart], ~9 o* T" y+ _  C" J5 ]- M
                                        - yiDuanShuJu_mean;) ?1 w) B7 @( z; F. c+ @4 D
                }
2 Q" G; d! u. P/ y$ @/ r& `" F6 U# K" f
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */% a/ h3 s3 {  [. m
                ixstart = 1;6 |4 W/ \. l6 x/ n  ?
                mtmp = youXiaoShuJu_QuZhiLiu[0];5 U% Z9 I- [) e
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
% s8 J* d# g4 _* H                        ix = 2;
  r# g0 T5 q0 Y* p                        exitg2 = false;+ x/ k5 h7 H( t! H
                        while ((!exitg2) && (ix < 81001)) {
# O2 f6 X! \$ ?7 r+ L0 V) S- v                                ixstart = ix;
% T% D$ ^: g' ?. B4 ^" d* d                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 o& i5 n5 `& F3 ?4 f0 c
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];3 F, j: |( x( ?6 ^1 s
                                        exitg2 = true;
8 t& K9 M, V9 a$ D& E                                } else {8 d6 l: O9 y8 e9 z( `3 a" H$ f
                                        ix++;7 L+ U1 t% N: X3 M
                                }  h9 l$ A) I2 ?( x# Q
                        }
  f% X4 ?: Y) [$ z                }8 Z& W% M" S% W" B4 i

! S; `+ K9 s7 `                if (ixstart < 81000) {
4 o: p: h+ S4 S) i                        while (ixstart + 1 < 81001) {
/ t7 X6 h" }+ i+ y, @6 q4 s                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {7 k9 [+ O5 U( O2 ?2 X' F
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
, u" i6 a8 |  \* k0 G& e  `' z: P/ m                                }* `: Q2 R9 F5 ~  x

% ~. z- H* W& c5 @. ^, ]& \) l* F6 n                                ixstart++;
- C" O' ]( r/ W+ L5 ^3 x# S( o                        }+ G8 S1 P' Q2 T& o* T! r
                }
' G3 ]- }4 A/ n
' [6 {( P  d0 A) R+ j4 |                ixstart = 1;% [1 [4 o, A; E
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
0 t" o8 o4 _4 ]! z/ Z                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {+ b  g* u) T! R" I( l' o
                        ix = 2;* x. Q& ]$ I9 ~$ i8 L5 ]7 S
                        exitg1 = false;
5 ~1 d8 g7 Z7 K! p3 Z                        while ((!exitg1) && (ix < 81001)) {& \& M' \- q; P% m( G4 ]! @0 a
                                ixstart = ix;
8 q1 w5 c5 G, Z! S                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {: u* m+ }5 y9 D! I8 h! W
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];0 }% J  s' d! S. }' P) S
                                        exitg1 = true;3 w% W" R% x9 ^
                                } else {
' K7 e( v4 ?& y. G7 C                                        ix++;, w' c9 }. N3 V# k, i
                                }
6 C) t% S6 B" i                        }$ [6 h" C8 P2 x' ], c+ q
                }
% W) e1 Z- Q" E' [' U3 m  h# n  n: O* u* h: p: T; ?* j
                if (ixstart < 81000) {
  ~9 i* q3 }: x3 ^                        while (ixstart + 1 < 81001) {; c( t( P; X2 D
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
; m% w! x+ h7 l; J                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];. i5 _8 V- X, `5 v" r* ]
                                }/ V! H& g' I9 [4 h6 y4 l, ^" w/ ?" q
+ O7 d* t( b- x9 x- o3 w
                                ixstart++;; n4 w1 b6 L5 d6 \$ f0 P0 Z; B
                        }
6 o$ d7 i% N& `  H3 M( b                }- s' U0 r( B# {
* n  u7 s' C: W
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
. r& D- P/ l. @! z) s9 X                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {: L% n0 v9 z/ p9 j5 t
                        yiDuanShuJu_mean = mtmp;) c& y# D* R4 i" _2 @( i/ L
                }
- k9 b; m: b9 D0 ]! k7 @- W) s. c! |  D* @2 O4 M& x
                /*  找出极值 */
( ~& E( {& H+ H3 L# L/ m3 S                for (ixstart = 0; ixstart < 81000; ixstart++) {
6 Q% J+ N/ D( E                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
; ~- E! S$ f( ~1 a6 ]. a4 j: R# A! V                }
  c# X7 }7 m8 ]8 Y
) X- s/ `2 h; s* p) w        --------------帖子字数限制------------------
5 U3 k- h6 Q% z; q}' W, M, Q6 K# B( L/ ]
( W3 j4 L, S9 D2 n; K
% M1 v1 o0 e8 v5 p. d

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-9 07:14 , Processed in 0.049325 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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