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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 7 ^' u8 ~. [6 }2 j- N5 ?/ y

! ~( q, [1 `" E* y( r! P各位大神:
' ]! ~5 T) _5 ?     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
5 e/ K# t- H& s/ {# \* u" u      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:% X, S6 O1 U+ k* G, j
; o3 Z7 s6 ]8 ]
     
, w" R7 Q8 K* ^这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
; w0 z$ ~/ N% @8 O3 I9 J  ~
. F1 o. F* c. X, M并没有其他线程7 Y+ \+ t) J( h: e0 S% ~" A
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
# t0 I- T$ D/ |也说不定是和堆栈有关系。。。。。。+ l; W5 ?8 i$ \( s
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....; @; o$ q5 p+ [+ w. ]% ]
0 t0 b1 ]+ B/ M4 j& ?
' T  X8 K4 l: p  z
9 M' C. v8 W, f5 q
我也很绝望啊,希望大神能帮帮忙,感激不尽,!& f6 u' h- H7 |5 L, t

/ ]1 ^0 W! M6 p7 \3 ^/ k( u6 X4 T; J9 @# b9 A- u
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
9 e4 r4 b: ^6 c& }4 d: k6 Q, {        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。5 z) o2 Z0 ]8 k$ Q! C+ g

" O3 c- y  `8 [) Oboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
4 a" [( C& U0 ?                const double data1000[1000]) {3 c/ N6 m& Y1 b# ^6 L  V
4 U3 `+ T; X9 P) J
        int myfuck;/ u, p1 P* k3 A, ]3 b# Q! R
        double yiDuanShuJu_mean;
4 r. |9 ~5 p% W        double yiDuanShuJu_LowMean[1000];) ~& }( \! I+ O/ _0 H7 Y
        int ixstart;
! c/ n4 l) K( H. E        double dv0[1000];
0 a* @- e! ?# U, c        comm_AGC pAGC;
! N4 q! Y. e* r* D3 }        comm_CarrierSynchronizer pFineFreqCompensator;
" p. w: x$ c  ^2 |        dspcodegen_FIRDecimator pRxFilter;  w4 p8 l9 ~! [8 k: ?7 p3 j
        comm_SymbolSynchronizer pTimingRec;6 W: _  ^* i( Z2 ]2 P% w  i# h
        comm_PreambleDetector pPrbDet;6 w% A. J3 l7 x, U. z
        FrameSynchronizer pFrameSync;
$ f" n" x9 Z- v2 ?* S        QPSKDataDecoder pDataDecod;
4 ~5 G0 }! X' B0 v+ s5 y% R        static double usable_left_filtfilt[81000];
! {* k$ q, t0 p& l6 o        static double youXiaoShuJu_QuZhiLiu[81000];; Y( p) B3 o+ S$ x
        double mtmp;
3 \4 C* O2 S. G  h& s: B        int ix;
& m" s  T; q7 S/ i  a        boolean_T exitg2;
7 M$ n  N2 s; |: m0 B( z        boolean_T exitg1;: p* \3 _/ y; ]7 h% L6 o
        double YiZhenShuJu[800];- \8 z0 o) {& W* m; m" J
        double dv1[800];2 z- k5 V; G# T0 l1 h+ \; t" I

/ `4 r# B3 p- i* N/ O" w/ x6 X5 w- F+ q! G6 J
        double b_YiZhenShuJu[800];9 @- v  g+ `" s5 k1 E
        double I_filtfilt[800];$ O- D3 T7 e, j4 x
        double Q_filtfilt[800];0 r; ~4 i# l" P3 I! j) M( |3 c6 R
        creal_T b_I_filtfilt[800];
" P9 P" E' C+ ~7 |7 y        creal_T b[800];
- C2 n' ?7 C% K' Z- \        creal_T RCRxSignal[50];
3 H2 _/ u9 j7 @$ g. l' S        creal_T fineCompSignal[50];% Y& h- f% a' f4 |" T/ T
        double phError[50];
3 ]6 U. e/ R/ X, ?5 j* w( [4 W0 ^- H        creal_T timingRecSignal_data[28];- o+ u' \" R+ w! a+ G+ z
        int timingRecSignal_size[1];' l. M% U, j- G- V. u
        double prbIdx_data[28];
& Z& o1 j. `' C$ Y% y( `5 j        int prbIdx_size[1];5 {' W; v$ S! k# }. Y
        double dtMt_data[28];
% S. v: ~) x. x* F1 j/ ~& w        int dtMt_size[1];
9 P  b6 z+ A6 b' L        creal_T symFrame[25];
* Q8 X; D( r6 H" l: g  Y        boolean_T isFrameValid;* }/ k4 w- V: P) p) O
        double unusedU0[3];. f- ~- `. B, s# ~  x0 D4 j
$ F$ j) H' U8 m, X
        //调试过程中的变量
+ Y4 B, a* ^& M! d! S& s' ]6 Z) P+ c0 d        int  enough_data;
! E% {4 A7 z7 K; A0 \# J- B" i$ ^
0 V4 N# G# S4 _; O+ n5 C4 \        int enoughDataFlag;, Y, {4 F5 s7 W  X
        int yiDuanShuJu_mean_int;# I$ k+ t' t4 _- Z1 n# i0 w
        int int_sum_dv0;; r2 N1 i" W/ S% M9 |
        int oo;; j" f+ T( p% \3 @7 A" n
        int ii;
, y% h/ Z8 D% I. ]        myfuck=10;, A2 X6 I) G7 P: D
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
" G; S8 J( P1 l' G* r% H+ _        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
- C' u  D" R0 r8 G- Q2 y) U2 ]* K# a8 O, y; G' ?
        yiDuanShuJu_mean = mean(data1000);6 k: Q9 p; q" K' z6 q

) c7 |! W7 a" d$ ?+ }2 M: F        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
* E% C* }8 q. Y        UARTPutc('A');
" S8 `  \" \4 e: b' U        UARTPutNum(yiDuanShuJu_mean_int);
8 v0 H) V6 y6 |6 [/ w6 O& l# D# z2 {        UARTPutc('\r');
; X, ], ^3 V9 z. J. ~        UARTPutc('\n');
, p2 y2 l: U6 [, F, m& l; q* ]% o! e1 `
        for (ixstart = 0; ixstart < 1000; ixstart++) {
. h! l0 ?9 O! J8 m                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
6 }: \5 j* m2 j4 C( L# o; |, P        }
* T" d' d0 @' q* c6 B
/ E" L7 R1 u! `) b3 _' H        power(yiDuanShuJu_LowMean, dv0);/ b5 E* m2 [1 j- H/ I

- I: c1 k0 q) `$ F  p- w* ]1 H3 b        int_sum_dv0 = (int) sum(dv0);
1 s/ T) y* d7 C) S1 W1 h
+ R* I3 D( C4 S) ^% G; N% R        UARTPutc('B');
+ P3 O- T. v) N, n8 a9 P7 Z/ W        UARTPutNum(int_sum_dv0);
" t; u* I3 h7 ^: y- M        UARTPutc('\r');  k9 S; U& N  i  O; o/ c# F$ z
        UARTPutc('\n');
3 n  R% F& q% J( `. P: d& V5 D5 Q: M: U' C
//        int compareFlag = int_sum_dv0 > 1.0E+8;. |. ?) c3 y7 L6 d9 Z, S
5 z2 Y* q& \" p! t( c( Q5 }3 P; P
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?0 t+ Q' e# t7 {5 L% X* f
                UARTPutc('C');; F  {# i( h' p% c
                /*  比较信号能量 */( y. j4 k# k$ P  F3 i' a
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */  n, h& w9 W0 c2 j3 r
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;! ~2 e) i% z8 F  ~$ E4 n
//                for (ixstart = 0; ixstart < 1000; ixstart++) {% ~( Z- c9 t! J0 T
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =- N  h5 E- T( E+ a; a& D$ g" _
//                                        yiDuanShuJu_LowMean[ixstart];( _5 I- e: g0 ^, t
//                }
+ U; Y9 \9 T" P5 G5 ]//
. e( m0 C" ]* Q0 v2 I/ Q//                youxiao_k++;4 u% E) k, R: R8 W" d$ n6 p
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
2 U# X2 y9 s' E) s9 \//                        /* 感觉要取21个数,即0-20, */% K$ S5 W4 I' q- M' o
//                        enough_data = 10;//有效是10,无效是02 H( E* d; e/ N
//                }
# Q9 J* M) z( R9 v        }9 A: Z9 P! U  o: k2 g

% K9 k* C: m( g0 ?, d7 A: E: J0 O/ S
        enoughDataFlag = 100;! R* P  A; e3 e- E
        enoughDataFlag = 1000;# j" P* h8 t$ y+ A; [+ r
        enoughDataFlag = 0x02;
0 |$ _. j: z* y: ^8 B        enoughDataFlag = 200;
+ q4 w# [0 S- M( V5 K- Y
& V8 D7 o0 B% d" _; L8 W) j        int myfuvk1;+ N) x; }3 ?8 D2 a$ B/ y. R$ k
        myfuvk1 =11;
$ Y  o) J; x+ K0 a" {# ]' E# h* n( h  |' {. u) x! m$ B9 Z

4 r' J& N  _* m4 E; I1 R+ d4 V        enough_data = 0;
) [2 h; O. R# a8 K/ d" f+ i3 f/ K& z  ?" R% y. {2 J0 q
//        if(enough_data>50){2 e. m, I$ \" \) `
//                enoughDataFlag=0x01;
( y! M* J  R' I+ @9 l- F7 c//        }else if(enough_data<50){
& M; R( `- r$ h( H. a; z* y//                enoughDataFlag=0x00;//0x00还是不行. f/ \$ ~0 d8 P# t
//        }5 ]/ z- [" |7 [2 d! ?8 _' q# A
0 q1 ]3 B9 T+ _1 c9 G

  y; i' F& {+ [        oo=10;. b3 |& q# q& M2 X5 Q$ [' n" {' Y  a
        oo = oo  <  5;
3 L+ ], D( s# c" a) z5 [        if(oo){  D5 |) Q' F& n, w8 V9 I9 B
                ii=0;  x* T+ L$ ^6 m0 t: V9 [$ V
        }5 Y( o# F: O' _2 t% J# w, S
        if(oo  <  5){+ s3 C( K' Y% X' e/ X! u; _
                ii=0;" x' b$ v8 d* o
        }
6 R# w4 O4 j& a7 I" V& y$ U        if(oo  >  5){8 E2 P' x/ g6 N3 t
                ii=0;& W- ]: O" j. p
        }
/ h5 k3 [! I; N
- K1 ], u3 \" V3 V- w        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
9 A; J3 K: Q+ B" q6 n2 U        /*  如果数据足够才执行主程序 */* y# O! d; Z& i
        oo = oo  <  5;; i* @' \6 x# o. ^* n
        enoughDataFlag = enoughDataFlag  <  5;' \+ ?) y6 s7 I* G. x6 o
        if (enoughDataFlag  <  5) {4 `% r2 h! t  B) S  P
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
$ Z( d* y9 y) J' r: {  d* G. B2 E$ p                AGC_AGC(&pAGC);! i% M: r' V; L' H9 d8 N* D7 l9 ]6 S

0 C# }# E& C  i' Z7 X                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
& w2 n4 U. x" r. I1 x! M' w                FIRDecimator_FIRDecimator(&pRxFilter);
2 k# c2 s( T* s+ }/ t
% T% t) [8 Y7 Z3 V) i$ L: a! N                /* Downsampling */
; i: }9 L! A  h" s& ?+ R5 P) b; l- o                c_SymbolSynchronizer_SymbolSync(&pTimingRec);  c+ c0 T& w7 f, H6 Q9 V
; h0 \) \  J0 Z# \1 D( X
                c_PreambleDetector_PreambleDete(&pPrbDet);) r  q5 U" s5 D" I
9 x. K$ X7 {/ H, o* Q
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
" i: P% W1 M! J; M1 \                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
8 U# G  e6 r# G1 ^# z& N  z                /*     %帧数量=100 */  J7 r: E7 G' l( m$ g* k
                pFrameSync.isInitialized = 0;- _. x: D6 w0 p" q/ z: X/ G
: a/ L3 h3 z& `/ n( M9 Z* a8 i
                /*  [EOF] */  O" E" E- i8 b; b
                /* 前导码长度是13 */( u& ^$ i6 f6 L
                /*    %qpsk */
! n6 m4 D( X* L# }7 [# }/ \                pDataDecod.isInitialized = 0;9 h2 M7 F- g+ T  v

+ p& x6 C1 ]" W8 `0 s% e4 _# x8 k                /*  end */
+ ^$ j* L. z2 r8 b& A5 _                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
$ S" j! P1 z' j                /* Convert 3-dB frequency */
( {' b, l6 w! f* H1 U8 v                /* Convert 3-dB frequency */
. r) l% G6 c( a: j( I                filtfilt(save_buffer, usable_left_filtfilt);
+ A$ u1 V' l+ B                for (ixstart = 0; ixstart < 81000; ixstart++) {
# Y6 R* Y6 J' t/ V# T% O/ M0 j                        usable_left_filtfilt[ixstart] *= 2.0;- P$ y( U  S( E6 C& j! I
                }
# C" J% H6 B& f$ R9 P4 e; q+ J1 ^3 _$ q/ R* c: K) P
                /* 注意乘2,处理幅度 */
1 }2 k/ X2 I! R, c3 g' a                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 p% r6 T5 c1 ~# z3 Z; b; K; }                /*     %% 行列转换 */. d4 a* e& X1 A4 \5 @5 u
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);+ O6 f+ @0 ^! d5 ?: }  `
                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ E) {& w- K6 Y* u+ h4 K4 e+ _                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]9 m5 g# y5 {0 h1 p* B* u1 H- r
                                        - yiDuanShuJu_mean;
  l. V. h2 P! _; J- o! x% l( r0 N6 V                }
7 v7 r, A; p8 m" t% F5 `8 `
6 t* h, l, C4 \. t# e* {                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */5 c+ W+ C6 F& `
                ixstart = 1;0 W$ s6 j* t. D
                mtmp = youXiaoShuJu_QuZhiLiu[0];
  c; O1 P& C; B3 I& J" d                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
2 H1 w9 t. R* C: \8 q! {% j                        ix = 2;
6 d4 y5 @5 @; Y- ~1 O                        exitg2 = false;
8 v. v; a- M3 o0 R" n7 e. `                        while ((!exitg2) && (ix < 81001)) {/ ?4 _% T5 g% b$ K
                                ixstart = ix;/ U9 D- |& v7 o  X( q6 m$ Y, [
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
1 D- G  m2 ?1 e2 U) X& M                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
  G6 o0 A3 R( a6 j7 k                                        exitg2 = true;" p, x" {# a) M+ v, x' H
                                } else {
! I1 U6 X% T7 C3 V                                        ix++;+ Z3 V  o: v/ t, l$ L% M# H& X
                                }; }" l5 @( v# c4 O- ?" _
                        }
' L' o5 I& V+ e0 y* J; h, s                }
5 J/ J9 D' j1 q0 d! P( H/ p. c; Z; N" ]' ]
                if (ixstart < 81000) {( U0 m2 S, z' _
                        while (ixstart + 1 < 81001) {9 C3 ~; x8 o0 t, h$ v
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
) ^: }; ]2 y. K4 T4 b2 E                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
( q, O$ T1 b0 n& q2 Q                                }# P5 C$ Z0 R; J3 o

/ Q8 [. n; J7 |5 N, b                                ixstart++;5 v2 D- [9 e) b; A0 R
                        }
& w3 _4 |8 C0 l$ L, ~9 H                }7 `$ Y: T9 y9 _4 `: Q) E6 t# ^) p
2 D9 @/ X0 l8 l/ s7 \( S
                ixstart = 1;9 H; X) @9 t: V6 _/ n) N
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
) M4 D1 {4 w5 b0 V% \                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, I8 F# `0 \* O) q3 n
                        ix = 2;5 |# ~. F& k( ^
                        exitg1 = false;" w$ c  w  }. R. f
                        while ((!exitg1) && (ix < 81001)) {. }, o! N$ [/ U! _; N4 M
                                ixstart = ix;
+ w; b+ K* i. O0 L                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
0 g& p. Y( H0 x' L4 y* u/ b                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
4 P7 ]( T' X1 @) ^9 j8 C                                        exitg1 = true;
# D3 U2 P) _* }& E. d; ^! r                                } else {
4 I% M: R  k( M) T6 B                                        ix++;2 @9 C! u$ c. n0 m& ~
                                }8 n; C* b; B" Y  e. z8 E( R
                        }
' u8 }: R3 E% R, g9 [0 C                }
9 T1 o  t$ s. p& H5 {" S8 y# X1 v' _" K/ R
                if (ixstart < 81000) {
# p: q4 M) r7 D2 V; b                        while (ixstart + 1 < 81001) {; x, R4 s/ F/ A: g5 u2 B! C, p# G
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
0 I. d9 t! f0 c! C                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];# Z) T6 E6 X3 Y, `- a. o  a0 _: G3 L& ^
                                }
1 Q6 n% N/ q2 X. d- \1 m# |; Y+ ~. L. K  R" C
                                ixstart++;% ]& A! N# W! _5 P; V! c
                        }. Y) K) A1 O4 P. c6 e1 E/ N
                }* _- x+ h! Q( i: D

6 f/ b/ R7 M9 A, h8 i4 l, [- H                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);# T' Y! U! y; @& H9 G% n
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
3 D8 f; k& \# }7 O- C                        yiDuanShuJu_mean = mtmp;
$ K7 k4 f$ b) Z% t                }) a8 K" X3 {9 H3 F' w
9 y6 A/ `6 ~6 {. U
                /*  找出极值 */  c6 F. O& E* L7 U1 f
                for (ixstart = 0; ixstart < 81000; ixstart++) {( ]5 g$ K1 r7 g, H
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
, u: S$ @3 C8 Z& v  l+ s                }2 I" E9 T7 E! ~& k" p( j
9 w4 u/ r3 z& m  c8 \
        --------------帖子字数限制------------------3 {2 `% ?( N* X3 ^7 `  X
}
* l$ o; Y* Y4 u* Y3 O6 Y
# F/ F# {$ x# `& o) K. G$ W2 d% B3 W* h1 \+ E

本帖子中包含更多资源

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

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-28 21:00 , Processed in 0.047091 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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