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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
% x' K* A& i/ U; `! W/ o. E: c- n0 P6 A$ i# Y0 W+ X  v3 |! _  O
各位大神:' x& s; A1 h, n& Z6 J5 q
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)' y6 j, z: c- {$ t( l5 B) y
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
8 r7 ?7 n3 u$ ]" j1 Y. S7 S
4 m: G  s/ v* S, p0 F5 g* \: {     
% z7 Q3 r3 t! I  U这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。3 r& _8 }" l( P. S/ Z) Q  z# O

. c# p: L! a: d. B' u6 f! m并没有其他线程2 b/ @6 A$ E) l( D; j
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。3 q: i1 Y/ H9 Y! Z2 G! ~$ ?) z$ [
也说不定是和堆栈有关系。。。。。。
+ D' R' S% E2 p3 _4 W" A$ U  g$ [3 m2 S请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ t; S5 u$ ?" o/ x/ y

1 {+ ?* F0 N* c# E2 x6 _6 C7 H
0 m6 C  }/ Z% W  }& `" O
/ r7 H# e; P7 R我也很绝望啊,希望大神能帮帮忙,感激不尽,!5 g4 D) t+ N' K7 g; Y* I
9 `' g0 C" i( M! N/ p
5 L2 ]" A3 C3 F7 Z* n2 _. R' Z6 K# \
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];2 `# ?4 R8 u5 E
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。0 {1 i; {. ?" T& ^
" y* L. j$ ~- }$ O& S
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
* A2 Z  m% D7 @% I                const double data1000[1000]) {
3 t* |6 q& ^, a- X+ J
) c. F, ]5 g! G+ }  f# j# ~        int myfuck;
) J8 z+ j& N& Z: F        double yiDuanShuJu_mean;( ^# w, {( C: T; Q) D
        double yiDuanShuJu_LowMean[1000];
. {  c2 j. E3 Y* X8 |8 p. E        int ixstart;
2 K9 G( j* L" ]" P% o0 {        double dv0[1000];0 s! b. ^1 ?9 J) ~' r# t9 \" k
        comm_AGC pAGC;3 p& h2 M' V, _4 A
        comm_CarrierSynchronizer pFineFreqCompensator;
( K0 n8 r3 t+ J9 k) n        dspcodegen_FIRDecimator pRxFilter;
" q  _( i9 X3 W. z' k9 g        comm_SymbolSynchronizer pTimingRec;
& v4 ^) M( D& l        comm_PreambleDetector pPrbDet;* b, c9 k* f7 ^3 O" ?
        FrameSynchronizer pFrameSync;
3 M: l5 m7 C( T0 p9 w        QPSKDataDecoder pDataDecod;
0 [/ b# B( |% g' f  _8 p. q+ Z/ X        static double usable_left_filtfilt[81000];
5 R2 p1 J3 M, ~        static double youXiaoShuJu_QuZhiLiu[81000];
# D+ N4 a* j. |" a! d, A$ @        double mtmp;# Q4 B  J+ J5 f+ t
        int ix;
6 Y" |4 _# M% Z" v: T        boolean_T exitg2;9 W" _6 h7 k4 o! _4 M
        boolean_T exitg1;3 h8 U8 w9 ^% T$ B( i- z; s7 B: @
        double YiZhenShuJu[800];
! v) O' A/ ^. z  ?% f/ n! g% g$ L3 r        double dv1[800];
  w  H* E+ K7 E$ ], o  b- r% ~, c' F2 q8 K& t5 n
, F6 k7 ^" k  y0 n
        double b_YiZhenShuJu[800];! l( l* n- o9 b
        double I_filtfilt[800];
4 N/ L/ N7 ]8 l1 l* N/ ~; V( S        double Q_filtfilt[800];9 S* c: Q" ]2 b& n: k8 o8 N' Z
        creal_T b_I_filtfilt[800];# T4 A5 I6 b. r3 _
        creal_T b[800];$ l9 @; f% y7 l+ V6 r
        creal_T RCRxSignal[50];
4 W5 p5 y- M+ o" e$ X        creal_T fineCompSignal[50];
0 z7 l1 |# v/ \9 V! ]4 i        double phError[50];
. z- D) N8 L, q' P( W7 o% A        creal_T timingRecSignal_data[28];4 d3 q9 X0 O2 m: p
        int timingRecSignal_size[1];
# ~! T7 Y$ S" a" S# q        double prbIdx_data[28];
& [2 l9 Z, f( |5 Y4 Q        int prbIdx_size[1];
. `# {4 L) p0 [        double dtMt_data[28];) k  z8 d, s' p. ?# j5 w, E5 j
        int dtMt_size[1];
, m. g4 n; c- J- U3 U        creal_T symFrame[25];
" u: |$ \, Q7 m2 q, v$ E        boolean_T isFrameValid;
# f& o/ I8 X; ]+ Q9 i        double unusedU0[3];
$ S- {0 i& C, [& J+ }! c
  M/ P% l$ n# y  J* s5 h" J        //调试过程中的变量- l1 @+ a  |6 o/ J
        int  enough_data;5 G: K6 k3 L( [; p. Y6 x1 M
1 {; @+ ~# c6 G% b' X
        int enoughDataFlag;
8 |9 _+ K5 K: }5 u3 L7 q4 B        int yiDuanShuJu_mean_int;1 P9 m7 \6 S4 P
        int int_sum_dv0;
  `5 I; O( c7 _1 S; q        int oo;: d& N6 K0 E  ~! u) o$ l" m
        int ii;
8 ?5 t1 T* O+ L* ?        myfuck=10;
6 n2 A2 U! H1 H0 K        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */! F9 w% e( S' f& [: O0 o  W
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */$ r6 v; J$ P) Z! m3 m' @0 h% q
, Z  s" z2 p; [4 F% w3 ^5 N2 O) N
        yiDuanShuJu_mean = mean(data1000);" B- \* \# D( F4 I% k8 q& _# _% Y

, t% c; `! n5 P# k6 x$ ?        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
! G+ ~4 p9 n( Z) _        UARTPutc('A');: W) Q0 V' L, R! g$ V5 p
        UARTPutNum(yiDuanShuJu_mean_int);
" m$ `* C# K% R+ B0 `8 ?9 u        UARTPutc('\r');( ^* D1 m2 w. h% k; o5 O
        UARTPutc('\n');
, s3 p3 P' {5 y$ Q
6 d+ U2 w9 I9 D6 q, a        for (ixstart = 0; ixstart < 1000; ixstart++) {
9 `' \- K: P& i7 r" l5 G( l( x                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;5 C! y) p- y% A9 @/ w! U
        }
" U* N/ s) H" s+ F7 h# J9 r) o8 v) u( _" j+ N& u
        power(yiDuanShuJu_LowMean, dv0);
& z6 t" B' [4 x/ J* I3 d( P; c8 r* w6 K
        int_sum_dv0 = (int) sum(dv0);
6 k4 w1 M2 E3 {8 n3 r/ D
1 I$ F, U1 M* M( d7 C8 _0 C) m        UARTPutc('B');% H$ b: e2 B) A( h' ~
        UARTPutNum(int_sum_dv0);
3 ?; ]5 ]6 |: F$ \5 ?        UARTPutc('\r');
: T: V- q7 Z( s        UARTPutc('\n');
, b- p# B/ A1 U5 X" Y8 ~" v( {4 W: S- a1 ~6 H
//        int compareFlag = int_sum_dv0 > 1.0E+8;
2 q, W# _2 x! f" s. m; q
, h7 t, S" ~3 E# K+ [* D        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
. b6 k$ a& ]4 C" P5 h. o- G                UARTPutc('C');: @6 u- M, z% K" t
                /*  比较信号能量 */
! f) `/ _$ ^' J' A: U1 Q5 g. z                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */; ~0 n3 C6 \, C4 R0 v) E
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
, {, r- j: e& [2 N5 |//                for (ixstart = 0; ixstart < 1000; ixstart++) {+ e0 T; A  D; |% v5 [' ~- a# [
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =- N% O( x# }: X7 f/ N/ r/ T
//                                        yiDuanShuJu_LowMean[ixstart];3 r1 B' Y* @5 U
//                }
! w8 J9 [' q7 u# d7 d# z' z% [//
( a2 z* X' J2 Z//                youxiao_k++;
3 G1 x' i* U  d//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
9 d* h; ~8 n- Y, A- X0 _; t//                        /* 感觉要取21个数,即0-20, */% b  u1 S7 B2 `$ O2 |9 @5 ]+ O
//                        enough_data = 10;//有效是10,无效是04 ^" k3 V6 @! ]9 L4 x3 y* \  N
//                }
5 _% g- \! A0 T  O  n. A9 k1 f1 G+ P        }7 h# o/ |! m6 j6 l; y( R

) V0 @3 e3 W9 x3 e7 `0 ?: w8 N& R) l  J" ~. m- M; g/ s" A! _
        enoughDataFlag = 100;5 e4 A* r. Z/ _: K5 C& ?, a
        enoughDataFlag = 1000;
( V& e( i- D0 q, j        enoughDataFlag = 0x02;; [, |2 v3 B# }+ c
        enoughDataFlag = 200;
2 |2 h4 u2 _$ H+ d2 T* l+ J& b8 n1 H/ T7 o  ^* c: z
        int myfuvk1;
5 K' b- n$ P. M2 K8 _3 j        myfuvk1 =11;) O# U8 r) L( Z' l1 w  e8 h( J

0 s9 f8 k8 [  C, S0 C
' K" Z2 d( X7 q  z, d0 [4 J        enough_data = 0;, |+ Q( [# L1 I% ]' g3 ^2 U1 n

- Z8 g( t/ ]2 Y0 u; q$ ?3 X) m( T//        if(enough_data>50){
+ L$ n4 w  M8 A  R! k8 Q' S- z) l//                enoughDataFlag=0x01;
; t3 X% M. ?$ M2 R//        }else if(enough_data<50){; ?' c0 [+ S: ?6 n  ?" o0 d
//                enoughDataFlag=0x00;//0x00还是不行! E- o+ s3 f1 Y& n
//        }
) X0 t- M% g& h, u, @# w7 B+ n- j0 Q2 M! i

8 [, i! f2 q. [! s2 ?+ T: `8 Z        oo=10;
0 O9 b! Y: E+ x: C1 w        oo = oo  <  5;
5 `3 m) x) R# U  x1 ~        if(oo){
; c* w6 F, S, P* ]                ii=0;- A3 z! m: _' s) z! W' q7 v3 D
        }
1 T" E  |( u; J+ ]- q5 `! @# K        if(oo  <  5){
* S+ b- M: F+ j( W( C9 L6 R# l                ii=0;1 e/ x2 d1 T* H# `& j( H5 }! v
        }
  Q! Y% K# W3 O' d        if(oo  >  5){9 J: f4 _+ b+ @0 n% A0 ]1 I
                ii=0;: H; a# [, u; L. h5 M1 I0 L
        }+ O- ^8 Z/ I1 `  Q2 I. m! E
7 H8 A3 T* V# k9 d' ~
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */& V+ W+ ?: J+ F6 c! G3 f
        /*  如果数据足够才执行主程序 */
" j, @/ u' h% z7 P6 Y7 j, p8 f, P        oo = oo  <  5;+ m8 A7 v' j* K6 z( I+ |
        enoughDataFlag = enoughDataFlag  <  5;" U" |6 t# F1 p' h% s" H  I
        if (enoughDataFlag  <  5) {
5 l$ K5 v3 W. e4 ?2 F  }//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
* J8 ?* k6 V6 I0 A                AGC_AGC(&pAGC);
/ b# n5 E0 H# q9 J! h* q- X% C
: O; r4 h# H: f/ q. o3 o                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
! s% n9 V* u/ e8 \( W                FIRDecimator_FIRDecimator(&pRxFilter);9 s: `/ s' T% p# x5 w
. W# w1 I0 h: Y
                /* Downsampling */
' o8 d4 f- c9 y                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
$ [  z! q$ Q- {& s
$ G9 E" ~& H+ a1 V8 w                c_PreambleDetector_PreambleDete(&pPrbDet);
/ L- S; j. r, Y# }2 ]8 M: M4 l$ F2 n, L* l6 d0 V6 f
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
7 J, P3 s2 P' A3 O$ c                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
2 t- w' j' C, {                /*     %帧数量=100 */; C  T  N5 t/ J
                pFrameSync.isInitialized = 0;1 ]+ y0 {. y" X) I9 _9 K
' W  y3 [, N5 H: _* ?. ~/ ]# v4 h9 T
                /*  [EOF] */2 u# L6 O& s# Y& K4 j/ c# V! {
                /* 前导码长度是13 */
9 B, v& U% [. k% j% w. q+ M( z                /*    %qpsk */
3 \' X! u1 G# {- `& b( W                pDataDecod.isInitialized = 0;
. P' w+ f8 ^# \  {
' u9 C* D3 W0 F2 b. s/ l' y3 K4 `                /*  end */
6 b2 M- N, d' J  G" z                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */" V8 |+ Q( ^+ O# v. \  B6 I
                /* Convert 3-dB frequency */2 {( \  v% M4 g2 y; e  S
                /* Convert 3-dB frequency */$ Z; U0 C4 r6 P" ^, X
                filtfilt(save_buffer, usable_left_filtfilt);
3 H8 n; D  x. k                for (ixstart = 0; ixstart < 81000; ixstart++) {
8 M# q2 R( n. e. x* n3 Z9 ]                        usable_left_filtfilt[ixstart] *= 2.0;
5 S. w' D! A* F, H) D& K7 q                }
  J5 L* @. ]# ?8 _1 D3 P' Y& y% x. m
                /* 注意乘2,处理幅度 */
1 E8 D6 R! C/ L4 W" r                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
5 A$ i7 @3 o. L1 e, r- Y, Q% ^2 x                /*     %% 行列转换 */8 Q( i: k: {2 R3 B0 D( c
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);+ ~( v) L+ @. P0 M0 E$ I
                for (ixstart = 0; ixstart < 81000; ixstart++) {2 |. A; x2 p/ ]) t
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]  Q. ~# c' l6 p3 V% _& V
                                        - yiDuanShuJu_mean;$ ~: b# M3 _$ V" Q  ]# f
                }
& v+ ~4 N/ U/ x- V  O5 ]
9 o- w/ ?& R, a7 E8 h9 L# w  I                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */" K1 }5 w% V8 l
                ixstart = 1;0 m6 `: l( e+ ]2 q* A. w) I
                mtmp = youXiaoShuJu_QuZhiLiu[0];
( |5 C0 E+ S! D9 L                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& d' `* R: j; i5 p! F. ^: a
                        ix = 2;
7 [$ o$ s* L5 ~  w                        exitg2 = false;
! S. x% D4 S; c% e2 R                        while ((!exitg2) && (ix < 81001)) {
( w! o7 O  i* G8 s* q* x                                ixstart = ix;
* ~, n- y5 o- [5 \5 y: R8 a                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, K2 F! U9 z2 o6 ^: @                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
9 m  G' t% W* N) Q* E7 x8 }( z                                        exitg2 = true;
# X6 L; Q: S7 k                                } else {
* ]8 C  J: A+ J8 \" E  l* [                                        ix++;
* p( S& s) e- ^. }; F                                }2 i  s' j" F. S9 j& ^# D
                        }! G2 G  u' J% `+ u8 H- [
                }3 o* S4 S$ u$ q) Q5 X& Z

9 G! x, U, N& t8 C, T4 i  B3 S                if (ixstart < 81000) {* [  Z1 M& N$ m" Q
                        while (ixstart + 1 < 81001) {. d! r; l! D. M5 i+ r( [
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {$ T* Y1 g2 e% Z; Z, C" g+ @
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ ]) I3 s" r' u                                }
7 S0 Q  z' n. {4 R; {% P# {
2 n  i* m: A& A  O                                ixstart++;
) B4 H) n3 ~9 X0 U0 ~/ O4 e                        }
; [9 N: H' x2 Q0 g                }
4 Y1 s/ q# j+ j4 y. S' ~6 Q! {$ j4 F' U2 T+ ]# y6 T& U
                ixstart = 1;9 j" J! U/ d+ N( {
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];, F! @5 ]% F( ^! k! Q
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {+ M. S: a. Y  [' W$ Y" W, m% Y
                        ix = 2;
  n( Z& v( r/ s5 g2 Q                        exitg1 = false;
  [% V. Y; R0 h9 S0 ^. G                        while ((!exitg1) && (ix < 81001)) {
1 z7 w1 o& F; e- e" `3 T                                ixstart = ix;
* s3 s2 H9 _7 y5 w                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {  ~# q- u; T! y$ h+ e: D
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
+ c9 n$ ?( t9 ^6 s- n  i. x  Y                                        exitg1 = true;) K' V3 W+ a* _9 ?$ {% ]
                                } else {
5 P: ~; J& K* g, P6 N! ]! E  d                                        ix++;
+ m5 U! `* b+ ]                                }- K' N, s# W7 x1 _& M( x
                        }; ~9 O& Q( o7 H; C" R/ s3 i8 H
                }
! g2 Z0 g. ?6 y
; Z2 Z& P+ I: z! H2 @: c- E& i8 P+ c                if (ixstart < 81000) {1 p/ d/ u) F& T% l4 `  o* A3 W
                        while (ixstart + 1 < 81001) {; {  o, A6 x: f
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
* i6 g/ ~( w! Y8 g" k# j' d( R                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
. I- ?  L( [  e) [: p7 ~  [                                }
* X  B' I6 v: t+ u" t: q+ E' g+ S  U1 g% A& S% s3 z2 Q: M  n8 `
                                ixstart++;3 c, S" g6 u8 Z% A: U6 w
                        }# e) F5 y- u. m2 C, m+ ?% p
                }1 F/ {( o6 q$ G7 j; O2 P: g
6 I# \" f' s; f5 G9 j. H! F& h, k2 b
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);8 G+ ~1 i' B4 }) ]  u0 J
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
- r/ r, O4 f! e. C5 v) c                        yiDuanShuJu_mean = mtmp;4 |2 n, R, V0 J: N* f$ Z
                }2 t9 W' J$ c5 N1 i* r
8 r! d+ L( W1 M$ ~
                /*  找出极值 */
# I# ?( P1 S  z                for (ixstart = 0; ixstart < 81000; ixstart++) {  Z! w( s7 ?& @# @# E
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;% M, [0 h! Q" F9 W
                }8 w8 r$ r; S9 I, ], L& b6 @' E

$ q, a* a9 G3 A1 {        --------------帖子字数限制------------------
2 M8 i. Y" P& U}( T! ?6 ^% X8 ]4 e* T3 u7 a. Y, n* ?
" N% y5 g; i- d; ]

) L+ W' _3 F# H& S6 D1 Y9 e7 R  o

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-14 14:46 , Processed in 0.049747 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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