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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
1 q1 D4 b: L4 r4 e
4 Z  t0 J4 X1 X8 i1 D0 R) B, W各位大神:
8 ?2 P, Y  Z3 I7 Z3 o7 Y: z     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
1 i1 r8 \2 C* q2 G7 f8 c# M5 H6 W      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
1 `: N+ @; o# \( J6 E" i% B: I7 u/ l$ G& c% I
     
# J+ n0 O: e9 o( n9 q" R6 d' r这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。5 b; p3 @. s. H8 C! i

( c* z! }& r. T; k! W3 E并没有其他线程
! h3 \% Q. S( h' |反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。0 y& l( s  ?9 E. `: [. Z! f
也说不定是和堆栈有关系。。。。。。* d6 H6 J5 F, q* C( I; @
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....+ T! F* G; r$ ^+ J2 c

1 Q/ V$ S% T8 \' L& Y5 b& F6 Z6 o1 z; g' j& P

6 o( N; E* H) Z8 S我也很绝望啊,希望大神能帮帮忙,感激不尽,!
$ Y, T* q8 R) |0 B* U+ S5 j5 b- b# X* _% ?

; f# m4 q! @+ j. y附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];3 D% ]+ _- M' D3 [! v; v
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
/ Y! `$ m7 T: x7 E* `+ D* x, i: ^4 L% k- z' P+ T% H
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC($ L' E! B; Y' I: I" {
                const double data1000[1000]) {
8 I4 h: {/ U, I* s: ^8 y3 _8 }4 f8 k* K- u, B- V9 A! E
        int myfuck;; [* j5 W0 J/ ?2 P6 X
        double yiDuanShuJu_mean;
( Q- R3 \3 `9 z4 f/ v        double yiDuanShuJu_LowMean[1000];
2 |* R% D" H) \  u$ d+ O% g        int ixstart;2 P$ c3 P. e5 N5 a6 [7 `
        double dv0[1000];
# c3 @! k1 `2 i* [        comm_AGC pAGC;
* X0 ]" w% [7 t5 e5 N! A" b        comm_CarrierSynchronizer pFineFreqCompensator;' d4 b) G/ _2 O/ Y
        dspcodegen_FIRDecimator pRxFilter;7 u/ G+ L+ I, X4 e% Z' d
        comm_SymbolSynchronizer pTimingRec;' C6 j& x. V" }2 V$ R
        comm_PreambleDetector pPrbDet;1 q8 V% s' j5 ]! @/ n( a/ ?4 m
        FrameSynchronizer pFrameSync;
! W" x& q* t1 h        QPSKDataDecoder pDataDecod;2 i5 q/ A$ _0 R' i+ v. M
        static double usable_left_filtfilt[81000];
' ~4 N( g  ?, q# c6 E; H) \6 z        static double youXiaoShuJu_QuZhiLiu[81000];
* P+ y6 Z& F5 R  Y4 d; y0 ]0 B        double mtmp;' E2 ]5 p! E* S- J- |5 M
        int ix;8 ]6 G5 b! P# j7 X- V  t
        boolean_T exitg2;9 k. j, ?- D% l
        boolean_T exitg1;- g" [8 Z3 p  _( p  W" `
        double YiZhenShuJu[800];" A$ b  J! T, V, }5 R; v
        double dv1[800];! F; W& n  `4 _, t1 r

# I8 N" M$ j# P% s* a6 s1 `7 A5 M9 k2 E7 ^$ W) Q3 `
        double b_YiZhenShuJu[800];+ E5 `. A) x. T- F
        double I_filtfilt[800];- W5 U% t2 D3 O
        double Q_filtfilt[800];
& [  ~5 D1 f# X        creal_T b_I_filtfilt[800];
/ w1 R' R0 K& t. ^) s6 K        creal_T b[800];' n( D# P! t+ f4 p/ m
        creal_T RCRxSignal[50];
  p: u# j$ G1 h% h0 d" X        creal_T fineCompSignal[50];
$ b$ F+ N) t% j" T* b+ F& |$ N        double phError[50];+ N5 e+ ]' u- m
        creal_T timingRecSignal_data[28];1 E# y( i# ^& z$ W) T6 G3 E7 ^: S" A# }
        int timingRecSignal_size[1];8 n# V2 ^* c! c& {" p
        double prbIdx_data[28];# C: Y+ m+ |2 Q" b
        int prbIdx_size[1];
5 s; ]0 l; C* L' b/ k" q/ ^        double dtMt_data[28];( \$ b5 L/ s8 e
        int dtMt_size[1];+ o/ c& I  _7 H* e
        creal_T symFrame[25];6 G% i+ u- g9 J% A( m% k: I
        boolean_T isFrameValid;
- y& H0 J" E' d; N! j0 Y/ R        double unusedU0[3];
5 n" x% r% E8 B8 U& b( p/ ]0 K4 @/ \4 p$ u: K. r$ d! c
        //调试过程中的变量
5 ~6 ?( _2 N5 w4 J5 n  R0 L/ S5 B        int  enough_data;/ C7 p3 `3 P* ~' [5 w
4 X. v" t% m0 X7 z
        int enoughDataFlag;7 O- H7 \* C& ], _$ e+ o
        int yiDuanShuJu_mean_int;
8 b/ q0 K* P3 q4 U6 z; L* }        int int_sum_dv0;
7 X- l8 `- e) w) p        int oo;9 ~! }8 g' s& l0 l# T3 d+ r+ v
        int ii;
* m% f; N( _. X3 `) S  T        myfuck=10;+ r. M' j0 P& v$ |" Y
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
- B' M+ K* m/ L! W5 u3 B        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */9 D" N3 q4 Z* c; O$ B+ f
& X: e, k% C( L, p5 n
        yiDuanShuJu_mean = mean(data1000);$ B! W- a# L- H; B5 \6 [! L
! m  m' y: R. O0 }1 J7 F: |/ M) s
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
* |+ R/ x" ?4 t! y        UARTPutc('A');. p- p4 e+ I+ ]! x; s* d0 H$ L2 C( X
        UARTPutNum(yiDuanShuJu_mean_int);
* X5 F5 Z/ z5 V5 R        UARTPutc('\r');
% N1 h* v1 X9 @% C: u8 i        UARTPutc('\n');9 B( q' N$ O/ M! X8 \4 _# {
1 }- |3 q) h, B+ A( }, D4 J
        for (ixstart = 0; ixstart < 1000; ixstart++) {9 e+ M- T0 j6 O! j6 B  X. \9 _6 Q' F/ o
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;6 \" E. P( ^: u; s; P% s1 W. D4 W
        }/ P0 B; d6 `0 v

0 z+ m- x/ F" S2 a0 T9 A# q        power(yiDuanShuJu_LowMean, dv0);
2 x. e$ @  l: L0 r- S2 j! |8 l  }$ y2 D& U' Z3 O
        int_sum_dv0 = (int) sum(dv0);8 L9 i8 R: Q, d9 U) z% h) O% @
  w, v7 n" e. r/ @  `/ Y
        UARTPutc('B');1 M7 s" v2 w2 u' x/ O
        UARTPutNum(int_sum_dv0);( P4 j( u* _2 d. I. j( Z
        UARTPutc('\r');
5 H$ i7 D5 `& m& Q3 O; S        UARTPutc('\n');( H3 Y# f1 x& E& y

& _6 J4 x, W+ i' p//        int compareFlag = int_sum_dv0 > 1.0E+8;
1 a4 W) K! G; N" u
: w9 K0 P- }9 L$ M        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
' }- D2 ]  |* W5 C$ x' a* d& y                UARTPutc('C');
- w; w, k% R! Z9 ~                /*  比较信号能量 */8 a- R& x$ ~4 r( s8 Y! u% Q4 t: u
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */( M8 u7 i5 r) A
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;- p, d/ t! S3 _) [
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
! D- p- t3 I" N//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
/ f; d2 e( z/ a- P1 b//                                        yiDuanShuJu_LowMean[ixstart];6 O6 l4 y* V- {) m8 }) J' ]6 H) i1 C
//                }# X2 [7 D  ]# W8 @
//
2 j* B3 Z1 c  b: x. ]//                youxiao_k++;5 m) P4 y3 c" P+ u- d
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==% X* }0 d. m; p2 W  P6 F
//                        /* 感觉要取21个数,即0-20, */( V. n4 f" i7 B; z  p
//                        enough_data = 10;//有效是10,无效是0
. y0 E6 t. l& t! [- J% ?' B//                }8 \. M. Y% Z3 y3 K2 `2 I
        }
/ i3 w+ f1 M( A/ [9 L3 h6 t$ `; ?- P3 Q

$ L* {5 ^5 F$ Y8 C7 \+ N0 k" n        enoughDataFlag = 100;
! K# y  U+ P7 |        enoughDataFlag = 1000;' u4 C* l5 N1 s; o; J0 ^5 i
        enoughDataFlag = 0x02;
+ H* Z2 [; ^" q' x& V        enoughDataFlag = 200;$ x, v! H% Y( C! j( i- p2 H3 u2 J
; |1 e3 u  t1 [" Y3 P' Y$ w* l
        int myfuvk1;/ R' M. J$ V; [
        myfuvk1 =11;
/ e, g) [9 X  [. M" v8 x' P3 t  J0 B( n  j' B
. ~4 c5 C; [9 t. g$ w2 D) }, o$ q
        enough_data = 0;) k0 H; [$ s1 Y8 F8 C) F/ X7 ?
* Q8 c3 j3 a1 W3 J! V7 z
//        if(enough_data>50){9 U/ H- w3 H) h+ N
//                enoughDataFlag=0x01;8 Z# h5 q1 k" [" W7 S
//        }else if(enough_data<50){7 F& U, M* G  E
//                enoughDataFlag=0x00;//0x00还是不行
$ T+ g# [0 Z  |2 }//        }: ?# |+ p5 ?. u$ _

9 k! X% F9 F8 J% j& y/ I* Y: R2 ?' Y
        oo=10;" L' T+ u4 X( J/ V% b/ S8 e
        oo = oo  <  5;5 S2 T% t' c3 e  K% I  R4 h
        if(oo){0 {- E/ U, j3 \' D* d# X+ w
                ii=0;
# E5 u! U  S% y6 q# S* n2 {- O        }. N# }* [$ L0 |1 m; t
        if(oo  <  5){' d" ^7 E" W( |' s; M
                ii=0;) d. @. q* I' R9 \
        }: W& ]  H5 c  W6 P/ s& M
        if(oo  >  5){& O; A8 s  ~3 W( @& n. J0 G
                ii=0;* U' [* _6 h* N- `3 f5 U- t
        }. S. Z) a2 F9 \0 g4 C  @# R

5 y( j/ m+ R+ M! j: ~; @        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */* w* j( i  z% `6 N" Y4 ^
        /*  如果数据足够才执行主程序 */6 H: o1 e( l$ m% _
        oo = oo  <  5;
4 X# y6 m- Y: l! f* |5 h        enoughDataFlag = enoughDataFlag  <  5;
' g4 e! u7 J' Y( X* p        if (enoughDataFlag  <  5) {& G" S4 B9 J8 p( P: M2 h
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
. L( q& w( D9 c! e                AGC_AGC(&pAGC);) j7 R9 C3 G" J0 {0 S) P
% V* p' u) ]( c/ H
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);/ ~0 Y5 H; d, Y) ~  h$ k& M8 ?: I9 l& h
                FIRDecimator_FIRDecimator(&pRxFilter);
* _! q$ F# Y  x5 x$ i
0 }$ e1 S% i- [5 G2 y# j                /* Downsampling */3 i' N% f% p$ {# Z; e* ^" ?2 W
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);8 M2 d7 c$ {6 b% p# a" @9 I
$ Z0 u+ u, @1 v3 ~2 [' ?  `8 D
                c_PreambleDetector_PreambleDete(&pPrbDet);0 M* L8 u+ F1 \* U& q( c

! |6 s7 [# m6 c+ n9 ?  n/ A$ B$ _' ~                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
1 R6 }* O$ Q/ M                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
0 b7 n7 I2 N4 d) S5 A. v  I                /*     %帧数量=100 */# u; [) l, L/ U3 K1 T
                pFrameSync.isInitialized = 0;
, i7 @: ?6 l: D( G# ~% v4 N
+ H2 |8 \* x0 P- B9 A6 z' m                /*  [EOF] */
8 Y1 p7 T3 f  y4 j                /* 前导码长度是13 */
- p  A" p' n* a2 F+ m0 e# X                /*    %qpsk */% n* V0 c1 M& I
                pDataDecod.isInitialized = 0;; I& [- L* ~# }* E" v6 p- \4 s: x
% W$ O, K7 S, H- x4 I1 \+ l8 g
                /*  end */
" g. j: S4 g; |9 C                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
9 \  o- h4 ]3 `) U- U1 x* w2 @& ~                /* Convert 3-dB frequency */; D; @* v! y; @' [- u
                /* Convert 3-dB frequency */) |# R% o; w: O& b3 E* k$ Y
                filtfilt(save_buffer, usable_left_filtfilt);
0 f; {0 \& @& ^5 [4 _3 P# _                for (ixstart = 0; ixstart < 81000; ixstart++) {5 R  B5 I7 A, ~
                        usable_left_filtfilt[ixstart] *= 2.0;
+ C" D- {8 r" ]% D' W9 |% a: b                }
: Q4 [3 E7 P- `. c) M" D
# m; k2 b! V' [# K: e, p                /* 注意乘2,处理幅度 */
. I& M/ O8 Z' T' F. f  J                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */: d% b) \2 v3 ]/ t5 ]' f3 g
                /*     %% 行列转换 */
+ u* }9 x' L: G; h5 [                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);4 k% E- C7 h2 O% `
                for (ixstart = 0; ixstart < 81000; ixstart++) {; }  A" W" l$ n; r1 N( ?' M* j
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
& E4 h' z# g0 m7 V                                        - yiDuanShuJu_mean;: N) A7 X! b# F% c2 T
                }/ [" l& e  g9 v1 o
- D" v* ?2 K, G$ M
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 *// u- P4 D: |0 u* e$ Q
                ixstart = 1;
6 E2 H3 a4 n$ K" M& L$ }( {                mtmp = youXiaoShuJu_QuZhiLiu[0];
2 L' k; p% y2 ?1 c                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
' O6 A  e- D8 A                        ix = 2;
: C( O! y  b  P3 a6 R                        exitg2 = false;
# R( [! O% g- Z$ S/ r! U                        while ((!exitg2) && (ix < 81001)) {
9 w# H# k1 P$ \5 w                                ixstart = ix;9 _% N& R6 ^, n: l0 V$ `3 \
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {' i) S) H4 `) Q' q5 z. C
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
9 X9 U+ o! Q) B# }                                        exitg2 = true;; _9 K9 N% f7 e9 K! I0 ^$ s. P( f
                                } else {5 c8 v) z' }! b! o
                                        ix++;
  ?, ~& u" S6 D. `6 a% C, g& y+ x                                }0 N; p0 x8 M+ |2 [: E
                        }
% m& s  L7 T) W- L                }) }% E+ T! s3 M. u9 `
5 w. x9 w/ D. L- C& y- k& s9 _
                if (ixstart < 81000) {! \5 b) x, X( I4 Q
                        while (ixstart + 1 < 81001) {% a' U1 ?" q; ]1 ?  [
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
9 [( e& |" }8 x) M  V( R; t                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];4 \7 I2 E; o3 j  Y; y( C
                                }) \+ E. D" H$ w- I8 n; ?

8 q' x' A$ ?+ b# ?/ U4 C; X                                ixstart++;: @- U4 Y2 t) v
                        }$ X4 p. d) t6 b2 ~% n3 Z  C2 g
                }0 @( ^7 K! A* N9 Y* Q* t# F( S' X+ T
4 M, b# K: p! z! h8 S5 ^- g: _5 x
                ixstart = 1;8 ^2 J4 H& x8 C1 J0 s
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];' M$ P/ [4 W$ F+ m  G  _5 j. m) B
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
; T( W7 E4 f. T; R6 |9 y7 P0 M                        ix = 2;5 B; l! ^- D( k  o% d  _
                        exitg1 = false;
) T1 J4 S7 f! E3 v6 _7 j                        while ((!exitg1) && (ix < 81001)) {
5 L1 X4 M' i+ ^& m6 X& c                                ixstart = ix;
" D+ O4 p' S) M8 t# V  e! Z                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {- X* T+ Z1 }8 L8 P; e! l' j
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];+ s5 k% a( W! [( _# S+ o$ R
                                        exitg1 = true;9 U9 i8 C( H) E2 f( q  ?
                                } else {
  ?4 u4 P9 K$ a                                        ix++;# h1 d0 N7 |, J& Z4 q
                                }
4 ^6 a0 I& x2 ^# l3 J                        }1 \, [5 ^: t- p
                }
; {4 B! M4 H* @  T; S* ~0 a7 |9 A0 j
                if (ixstart < 81000) {
0 R& g' d: G, D' K! T                        while (ixstart + 1 < 81001) {
$ P: u& o8 Q) \: g                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
9 }  w6 y( t" Y: l; }+ ?                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];' m$ O/ U: i  Q* ^  _( g
                                }+ E6 Q5 E2 S$ m# v! R
) r4 o: s" }, o" R9 w' V
                                ixstart++;
0 R* e% u- I8 u) n; \6 C! s  Y$ v                        }
/ U: s6 ~! }! G( M; ^                }
( J/ t$ L5 G- F( J# q# z
5 K2 Y1 h. v. G) f                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);  z6 l) r2 k. ^$ Q& I3 |/ g
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
/ s% J; Y+ I0 j7 N                        yiDuanShuJu_mean = mtmp;3 @. c- p8 p- g4 r5 z+ c
                }
! H2 a( T0 q) E  Z+ J3 {% l
# H' L% u2 B- @( R9 A                /*  找出极值 */4 U/ H' B$ d! l9 Z
                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 o& b) c0 |7 q; Z# g                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;2 L% ^4 T( w0 Y& v6 l4 y! I
                }5 }4 d6 `6 P1 D1 h+ l! [

7 Q# J/ V7 `9 Q8 I. i( k2 z2 h        --------------帖子字数限制------------------
% W  K4 E% r' E3 {}; Q& q  x* I& _2 ~2 Y

- w% e0 G" `) o3 ~
% c1 z7 J( I4 V( [

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 05:53 , Processed in 0.043624 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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