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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
) ^! t1 c1 e. B2 a6 v# H$ e( U% q( N' x  C0 F
各位大神:
. i+ |+ @% T  Q     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)2 }, g, ^/ n0 f. L  k. B
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
( W4 U7 g9 Y0 ]' S0 g) v! ~$ f( n! n8 f( F
     
* `! @' L" w9 ^$ N/ l' f2 t这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。0 I" \; d* j3 v9 n+ M% f9 n# p# D

7 O4 R1 M' g3 K/ I- |并没有其他线程
$ @+ H7 E' i4 T. C; N反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。6 \6 h& h8 \# s6 l
也说不定是和堆栈有关系。。。。。。
- i+ o; R! V$ ~$ u$ Y请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
( Q$ ^1 {; ~6 U/ W5 `3 a! I8 \- n1 `; N5 f2 m- p
) `$ a, P9 u- z( L3 ~' ]# s  h
$ l/ w8 i, O$ n6 }4 U
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
8 d' O1 k" T( ?; b6 K
2 m6 f# S$ G1 n/ J1 C
( ^: \8 N5 R% ^+ y6 }附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];( ^6 @$ y5 h. u0 z
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
( E% ?+ G5 @1 n  {+ r; B
6 o0 O0 T) e5 e5 P- kboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC($ \4 }: {) y# U4 o; `+ J# F
                const double data1000[1000]) {- e3 ~/ F4 d0 l. b$ v4 S, K" ]) D
. X0 D& b8 Y( }7 q: X4 h) b
        int myfuck;
  {' h# ~1 [8 f; g% P  a& s        double yiDuanShuJu_mean;
+ h* v" D. Q; e3 L# l; S; \        double yiDuanShuJu_LowMean[1000];
9 ]& h8 i( Q7 x% G; E) o* ?- O        int ixstart;
( j) X( n3 M! ?* x( i        double dv0[1000];5 f" d) I% y5 x" p9 I. Z- U
        comm_AGC pAGC;
1 V6 q( f5 l- f' ?8 ~& [5 O        comm_CarrierSynchronizer pFineFreqCompensator;% f8 M3 q1 L+ c
        dspcodegen_FIRDecimator pRxFilter;
! j) Z, F0 g. s0 z9 S        comm_SymbolSynchronizer pTimingRec;
# s0 i; g) S  F; q: l6 Q( S  V        comm_PreambleDetector pPrbDet;! ^' ~% h. }4 e, n
        FrameSynchronizer pFrameSync;! T0 }, ^. H: _! ^8 q: C
        QPSKDataDecoder pDataDecod;! p2 L. t9 Q* m3 j! j4 @( w
        static double usable_left_filtfilt[81000];
8 L/ U: w- f9 Z  H5 }        static double youXiaoShuJu_QuZhiLiu[81000];
0 ]& ]' K2 d, F+ V9 V        double mtmp;4 U3 D- V8 a! N
        int ix;
- @6 M7 J1 |, j" b  p        boolean_T exitg2;$ E' K2 }/ V. _
        boolean_T exitg1;
% P- M5 `8 A' m: o9 V        double YiZhenShuJu[800];% {% x/ b2 h6 m) ?1 p" Y( Z
        double dv1[800];
7 |  s% N5 X, o( g8 Y+ [7 U5 W" Z' n+ Q6 h2 S4 _
- m: r4 q' f. c+ s' o3 m
        double b_YiZhenShuJu[800];9 l) h$ Z& Q: x4 }$ E9 K
        double I_filtfilt[800];, o( }0 p) H# x
        double Q_filtfilt[800];$ w2 V5 v3 P  W- B, Y6 x- S: T% {
        creal_T b_I_filtfilt[800];
- t* x5 S- E0 M8 y% ~( J        creal_T b[800];* F7 m- O: ?; U. B: `: f
        creal_T RCRxSignal[50];
& d& S$ F3 |9 f( I# [        creal_T fineCompSignal[50];
1 n& S: Q. q& Y9 C; U& i( v, z        double phError[50];
6 |! }2 s, h) E1 u/ ~5 f* U        creal_T timingRecSignal_data[28];
) B2 f* r5 J! T) I/ u" p        int timingRecSignal_size[1];
8 O9 R$ G9 S% a# W        double prbIdx_data[28];  R* V  U3 f& H* x
        int prbIdx_size[1];
/ C: ]" U4 g+ a6 U% R        double dtMt_data[28];
$ W: k  }3 p" W) }* c5 K1 Z8 h        int dtMt_size[1];
+ c, \5 o/ U& E7 S; D( A, l        creal_T symFrame[25];
$ s3 P+ O! k! F" u3 K  N$ E4 q7 T        boolean_T isFrameValid;
$ A& K( o8 K$ n9 ?6 ?        double unusedU0[3];
- ^  w. j, x2 j2 O2 \
1 x7 ^* Q$ _. i% j; E        //调试过程中的变量
. J2 A- s! N: X6 c; Y4 N0 L% l        int  enough_data;0 n: x8 ?( \: Q) H; ]9 Q4 w6 }

* p% b. Q1 a; J( s* }1 e; d        int enoughDataFlag;4 Z% i" e  F5 ~7 M/ h
        int yiDuanShuJu_mean_int;
1 _6 N% f7 s3 Q) D2 t% E        int int_sum_dv0;4 n5 k( D+ @, S/ T7 i2 D1 m
        int oo;
% e- L' U; i% `, T$ N( Y; v        int ii;
2 u2 p% p# P% ^$ e( [' W        myfuck=10;1 U- T2 T5 v2 i6 A. x; Q. ]
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */: R: v/ A+ g5 A! P8 ?1 C& v
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
+ b5 l% C+ n( u3 R! u5 l: G
, f7 B' {% f+ u/ e% q7 `$ ]        yiDuanShuJu_mean = mean(data1000);# k$ B. ?5 x' M4 {; ^
  K' y  ?0 d# x' o, F& k  h
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;( p2 F! C' X( z  Q; T2 q
        UARTPutc('A');/ a& U8 o! r& M5 A3 \/ K7 m  n
        UARTPutNum(yiDuanShuJu_mean_int);
" H  N8 @% r& f* o) t        UARTPutc('\r');
6 \1 ^6 K* J; ~+ c        UARTPutc('\n');# e7 N" X& f4 C1 q4 B4 q: A8 J
% t5 t2 ?! ^* `5 a3 D0 J- |
        for (ixstart = 0; ixstart < 1000; ixstart++) {, U" ?' K4 N& p' q
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;" ^7 `+ f$ O- S+ a* W6 g
        }5 o& M  P" f8 c5 x1 U" n2 ~
1 h, Q% L! V; c! Y4 w% A
        power(yiDuanShuJu_LowMean, dv0);" p. v* o# i& y

& q* z  ?5 O5 x/ Q1 k, X3 v1 |        int_sum_dv0 = (int) sum(dv0);+ n& Y( A* d+ @( Q, p
' M! j4 q  r0 J. Z
        UARTPutc('B');; G5 s6 k- v( M/ N% F
        UARTPutNum(int_sum_dv0);7 r. p& x% t, d3 @1 U% C
        UARTPutc('\r');
0 o7 ]0 n" c4 R2 v4 }* ?$ z9 K        UARTPutc('\n');
7 `) {8 y$ a9 \. \( ?: B) Z8 r( t0 j6 \) h0 E  n
//        int compareFlag = int_sum_dv0 > 1.0E+8;
9 S7 |& F, b: W8 E% v- a; t& @( @, @
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
2 X$ q8 _. b5 q* o8 Y                UARTPutc('C');
+ X7 \/ W6 N* X8 l/ Y3 J6 h" ?  A                /*  比较信号能量 */) l( X5 L" B6 Q: {1 `' N! {( v* j
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */" n8 z6 Q" n4 v% m0 `
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
' T3 p" [1 T# l/ v. T9 ]" q//                for (ixstart = 0; ixstart < 1000; ixstart++) {; W1 o/ ]3 }: X" y
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =  @8 X5 H- C' b) d' G, k
//                                        yiDuanShuJu_LowMean[ixstart];
+ H9 z& S8 ^2 E: {8 V//                }8 E3 f) t* o; p/ k/ }- M
//
+ F( |4 i) p% P7 i! |' J& _//                youxiao_k++;# P5 b; l8 y) a
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
5 w+ g- ^% ^) `8 J& M6 P//                        /* 感觉要取21个数,即0-20, */
8 C- {. i1 w1 e" ]# b4 r+ j//                        enough_data = 10;//有效是10,无效是0
: k  @5 y: K9 j6 \) f8 N: _//                }/ m/ i, I: e1 A0 q' n
        }
& X8 R1 I' j( ~
# f% V% f& |: F
- e% _+ K% L# M4 |* ^3 O        enoughDataFlag = 100;9 C/ h$ m5 S6 |1 \$ ~
        enoughDataFlag = 1000;: ]' k$ k: S- i
        enoughDataFlag = 0x02;
8 j8 t8 B) \7 R& X        enoughDataFlag = 200;
$ [3 J- S1 `6 W( x# Y+ y/ Y
/ \/ z0 }+ i& ^5 k" g& R. ~        int myfuvk1;5 Z& n2 r7 E/ {9 c1 x  \6 U
        myfuvk1 =11;3 x, x, B5 t( ]. k3 N4 H
2 q5 q7 I2 ^7 T# d3 n+ n
7 I& e. n" j3 o4 s
        enough_data = 0;
/ S; _* X# Z* p% ^3 W7 h+ q
- z$ T8 h; P4 g2 E8 B7 d  o) R& _//        if(enough_data>50){
/ T5 d5 G( B7 V//                enoughDataFlag=0x01;0 q% t1 s8 V' d6 O9 b5 u9 p
//        }else if(enough_data<50){  o' J% l) U- L: R
//                enoughDataFlag=0x00;//0x00还是不行
$ _+ C' Q; J2 D# C//        }
  }1 B" D; i" e) C
! o: p) k4 K, p: z- Z9 d3 y* c& q- X  W! H& J- M  T
        oo=10;
/ [1 N; F7 T1 {( Y+ Z6 [2 t        oo = oo  <  5;
3 Z* X% ?* o- b        if(oo){
0 ]- x5 s& O/ H- V/ v4 e# I" m                ii=0;0 f- d( D$ q( ?0 A+ a. h, L
        }
; M: @; R5 C# a/ k  }/ ?6 h4 I        if(oo  <  5){
7 [; c, ]  p( Z* A: [                ii=0;+ F! }5 ^" c1 T( J/ M7 H
        }7 l0 _% A/ L, T/ ~2 L" Y/ ~  A
        if(oo  >  5){
. b  o( l! g2 D. k' p1 l. p                ii=0;
7 C. X+ K0 \- J' r7 L! n7 C        }9 y$ j) g9 \" e/ ?
& b7 u& k( H- G: P
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
- `9 o6 \6 e: I4 Z) Q% a        /*  如果数据足够才执行主程序 */' v$ T+ o0 o! G" G* y2 G$ Q# _
        oo = oo  <  5;+ C, D& l* P$ Z, C* C, {/ ?+ O4 g
        enoughDataFlag = enoughDataFlag  <  5;/ n" N9 \( a. h/ U5 {2 w3 X
        if (enoughDataFlag  <  5) {
8 a, l8 q. C1 n; s//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
- W2 A/ }% _( l! m% w/ v3 C                AGC_AGC(&pAGC);5 ?: o2 e4 X! f* y

9 S0 _# f; @) h' j9 {2 r6 B$ R                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 f3 _, I2 X. y1 v  ~$ Q2 ?# R
                FIRDecimator_FIRDecimator(&pRxFilter);
* a0 C9 [4 j; Y# p% w, t# n' L& g' j$ V% ]# i
                /* Downsampling */
. f( w4 v' i& A                c_SymbolSynchronizer_SymbolSync(&pTimingRec);/ ^. b# h* m+ B& C' a4 K

2 C! @* ?' R! F& G2 F7 q                c_PreambleDetector_PreambleDete(&pPrbDet);
- J: T5 u5 t7 h) }( W% f
, T6 |) T' d/ W/ N                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
  }4 B' x9 J1 A; w                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
+ n+ x1 q* O! l+ I7 L                /*     %帧数量=100 */
* i7 E, K3 H+ |9 }+ w  I! ]! N                pFrameSync.isInitialized = 0;
, {- b/ a, u- _! m# G. m5 N) n6 _$ r
                /*  [EOF] */
* x/ L6 ^. m3 c) J# r                /* 前导码长度是13 */
$ d/ Y$ t. s0 K! |4 U& l                /*    %qpsk */9 B9 p2 C5 j8 n* j( \! M$ m- E
                pDataDecod.isInitialized = 0;
  o2 r1 V+ `" ]0 N2 i, _: e6 G$ Q6 }
                /*  end */* j" b, d7 N6 k- n9 Z3 z$ X' S
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
/ P4 I0 q" }( X- ]+ T& ~7 C% h                /* Convert 3-dB frequency */% V1 A* h# r8 r
                /* Convert 3-dB frequency */7 T& J. x6 z) T2 Y4 v) B
                filtfilt(save_buffer, usable_left_filtfilt);
: F( O$ C* p% M) G5 n1 M) w                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 t4 a. i( s  {5 N8 ^/ s                        usable_left_filtfilt[ixstart] *= 2.0;# y0 H4 L  ~5 D$ H. Q; c
                }
! L( @7 u4 }, y1 E# }) E. D1 o/ T" r0 ]) l9 j; `
                /* 注意乘2,处理幅度 */
7 n! k" v8 G# U% [! y                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */& h# t6 E' F% v- [( ~0 r; M
                /*     %% 行列转换 */
8 a& ?/ p9 s. p6 A0 B7 J+ q+ _1 [$ C                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
- @. Y, ]% }" h3 V$ N* Y+ h                for (ixstart = 0; ixstart < 81000; ixstart++) {
& n9 O& A1 T% }                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]3 r- K9 x; K; e" @
                                        - yiDuanShuJu_mean;
4 g* E0 ?! @2 {) i4 r' Z                }$ X  C! k* l1 _4 o9 a/ i. s
" ?; N0 k! s, A( R+ e0 }# y
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 }2 P# O, W- c- N( v
                ixstart = 1;
" K7 u3 z( w/ Y7 b                mtmp = youXiaoShuJu_QuZhiLiu[0];
+ w  k( b% u  v; K' Z- a+ u                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
% h$ [: w  {# n9 J& w, o$ m, T0 D+ Z                        ix = 2;% w- e& _" J  i9 p
                        exitg2 = false;
9 E3 w) z5 u5 ~- n                        while ((!exitg2) && (ix < 81001)) {
. G% f5 k9 z- h4 d3 P                                ixstart = ix;! U5 i$ s5 i' O1 _- ~
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 b. d" \8 I3 H  X" s9 M
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
& ~' O9 p' Q* f" }$ t                                        exitg2 = true;
; e3 b; T+ A* H) C: @+ a9 V                                } else {
$ W7 N1 c# O1 d  y( C                                        ix++;2 b4 L% {5 H/ z/ @* F# a- i6 C7 ?6 e! g
                                }$ @9 ^( a! _6 D: E  I
                        }
+ w6 L$ @; N* S6 Z                }
$ b" w% A: G6 L4 l3 @9 F9 J6 C+ |: @# m6 i- f2 H8 N8 c% e
                if (ixstart < 81000) {
; K$ F3 k2 D8 m1 V0 R) I: _                        while (ixstart + 1 < 81001) {) r: N% p9 B* g& N5 |9 P) r1 \
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
9 m# c/ h3 I: y2 u. c: V( Y                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ ]9 t0 \. n. s! m/ W, X                                }
$ D  |1 z! o3 r( h7 L5 o3 e: E1 O) J2 i. ^3 f
                                ixstart++;
% _2 M1 n' N% J% g. h4 {" m) D                        }
* N3 s& K/ Y2 n1 m) l( _                }
7 i& c& B  N8 _( u4 n9 b7 t! A  f4 V) ]* B
                ixstart = 1;
3 ^5 K; J6 u$ i/ q                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];6 e5 q  j# a# u' z
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
) ^7 u- F! N5 P. L1 H! u- O9 ?                        ix = 2;% T7 `1 m6 g1 p: {
                        exitg1 = false;9 Q2 k% J$ _! T# Z* p7 T
                        while ((!exitg1) && (ix < 81001)) {( S+ u7 \5 {& N/ A
                                ixstart = ix;
( J2 g) M9 _* X* M4 p8 W6 O                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, F8 N$ S% {, f% |1 E5 }+ e                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];8 B. d/ C! N  n7 m8 F! p. K) g
                                        exitg1 = true;
  Q; ]8 ^4 f: F2 y+ r                                } else {
/ J; M% S) U$ M; }9 p% L                                        ix++;
7 d9 L  O9 a5 Z4 B3 I: a* z                                }
# g" j4 [4 x& [8 I# p% m                        }
, ^2 W6 s9 |8 E. S, Q* v" W                }
6 ~  [/ Z: v. S* C% `) k5 ]2 V: n
, G( Y$ R1 X3 z. l: ^9 M/ _  O                if (ixstart < 81000) {
' i. n7 U: ~$ y& D- K! H3 @+ o                        while (ixstart + 1 < 81001) {+ N" W- q! O+ k6 M1 o; @  \  _0 s
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {9 }$ H  H* x- p" A; j' `# p
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
6 ~4 M) Q% a. q- R) y1 i- O$ Q& |# ^                                }  P8 e1 U1 ~9 F) \. T3 M! o: a

  _8 o8 ?) M8 A' u+ C6 D                                ixstart++;7 b6 r' E# u  Z, Y
                        }
# d. o! I/ N6 n5 K                }; o$ F- w$ h! W& ?/ h  P: m% s3 @0 u

* i& `/ E: u/ O* R                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
) t, A( p% L* h' ?                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
" l9 z' B5 B6 H                        yiDuanShuJu_mean = mtmp;$ P9 ~6 f6 `, \
                }) J6 g- [  H8 }- P

' E  }& @$ u7 m                /*  找出极值 */* B4 D  L3 @; {  g' M& ?! a' m
                for (ixstart = 0; ixstart < 81000; ixstart++) {4 @7 u6 g4 q7 \% ]# K+ j
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
1 Z9 t! w0 `) l, ^2 W* g, Y* O                }
- X" a6 L  \# @: C! t7 F# I  S" K4 I. a- W
        --------------帖子字数限制------------------! z; z: O: e: z, l# b
}( n4 s: q# i" H. ~/ K
' U1 w( K8 v2 `* f
0 E# T% l) W+ W

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 18:52 , Processed in 0.044405 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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