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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 5 c0 N* U, f5 {7 d" Q

8 n. u  J, Z( z( a5 B, q各位大神:
0 G4 ]  @! O& X     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)6 s# m2 O( f5 J6 u2 Y4 W
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
! k( r  L" P: `4 L( d( u0 c: U3 d9 K6 ~0 s
     
3 F6 Q! @- q+ e" Q# ^9 X5 U- T) v这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。0 R! a7 g8 W) w

# x8 N( }9 w4 W% \并没有其他线程
) a0 o7 Y" x! _! r: W2 ]; p反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
) r+ E# e8 g6 L; @! t6 i7 j也说不定是和堆栈有关系。。。。。。# ]8 u! l+ i) j  n1 ~
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ S7 ~4 R7 j# C& w/ C
  @- B2 p* ^  H* [1 }% X+ v5 j

0 i! p: J6 L: \% T% t& y8 S
& [$ |" h2 {# W% R* A  q* T& b我也很绝望啊,希望大神能帮帮忙,感激不尽,!$ t. y0 ?" B9 F/ `( I! S2 s9 }

+ i8 T3 K; O& r  q
+ W1 v6 H4 x/ @9 o1 r' y' R附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];8 V1 U* P- v9 }; @& a
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
% {9 O( q! j; M5 E& m. G3 A4 `) }  g: B0 I5 j& G( r
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(; O' X" U; H' z8 ^+ N* {* J2 E6 E
                const double data1000[1000]) {
  |% D) u4 f% X7 ^& Q, n5 L+ q, n. O8 k. H. g. F
        int myfuck;/ R, T. E  M3 o1 p
        double yiDuanShuJu_mean;
5 j& e8 ^/ {; E6 |        double yiDuanShuJu_LowMean[1000];' e7 p4 H: P: u
        int ixstart;
$ ], {" j! B. z& G/ J3 B3 L        double dv0[1000];
0 h" y/ R2 ^: Z5 D        comm_AGC pAGC;3 e. c% {# o1 t4 R
        comm_CarrierSynchronizer pFineFreqCompensator;; c4 _# Y, \4 t) ^  _0 u/ w
        dspcodegen_FIRDecimator pRxFilter;
- p' l. D3 T, B# l$ z( E9 v* {        comm_SymbolSynchronizer pTimingRec;
$ z- i1 z+ ^9 W3 e" ]9 ?& K        comm_PreambleDetector pPrbDet;# [# j  k. j$ n' n$ _
        FrameSynchronizer pFrameSync;
6 A" Z0 k5 I! V7 e8 ]        QPSKDataDecoder pDataDecod;
8 u4 M( `2 V8 w* O% K3 x0 V6 P% k8 ~        static double usable_left_filtfilt[81000];
0 p2 k, l- ^& w6 p) t9 H, C        static double youXiaoShuJu_QuZhiLiu[81000];
+ o5 K. \9 M# f! |+ z" B' Y* K        double mtmp;( A* J6 `; h1 }% P/ d, s0 p
        int ix;' @' `2 b# h3 X- q! N+ Q
        boolean_T exitg2;) F6 l6 [* o. }
        boolean_T exitg1;* V7 [8 i8 k) M! ?0 B3 C
        double YiZhenShuJu[800];
2 {/ o# P$ Y9 V  M        double dv1[800];
9 S/ N+ K0 N9 O- M
; s/ T! G% h% S2 w
9 ~$ _# q4 `$ b1 K        double b_YiZhenShuJu[800];# L$ h+ X2 D, [  J& x
        double I_filtfilt[800];
& l! v/ J3 u) R- r% C8 i6 l9 m$ z/ c        double Q_filtfilt[800];, I" j6 R( B- I, K
        creal_T b_I_filtfilt[800];/ S. i# S. @2 O; l+ U$ J: m7 b
        creal_T b[800];
9 z* b- q3 W0 c! v, v5 z$ k        creal_T RCRxSignal[50];
( \7 U( C9 ~7 F( U4 s        creal_T fineCompSignal[50];
% I. m5 s  C/ P' v" _        double phError[50];- O% e; U9 g3 w% q, j* Z
        creal_T timingRecSignal_data[28];
5 L! |8 v" F  M3 t. X- w1 b6 k1 t        int timingRecSignal_size[1];& A2 R& ]7 s3 e' ^+ U" W
        double prbIdx_data[28];
, B8 H  ]  R2 R; p3 y        int prbIdx_size[1];# a1 i9 u# v9 D  o
        double dtMt_data[28];
# N0 O/ j1 b3 {7 r) x& o8 f        int dtMt_size[1];
: S2 }6 f5 E! B1 C2 l        creal_T symFrame[25];
  }  t3 G' e- D# {/ F: }        boolean_T isFrameValid;6 @& h: n/ W' O% Y4 ]
        double unusedU0[3];% ~, v7 S% A% ?% g+ J/ H
, ^* l! [" ~% c  k' J$ c' |
        //调试过程中的变量
0 k# J8 M9 K$ E* C. |        int  enough_data;
5 E: A) h: E% z- k3 g, a
  `8 g: }* R8 U( L/ J        int enoughDataFlag;
! x3 {$ f6 A2 `) a% P  Q, w2 V& D        int yiDuanShuJu_mean_int;2 |) `7 W: \; O; N
        int int_sum_dv0;0 {: S6 A+ g- p; f6 ~& B
        int oo;
# r& K# \/ k+ ]  \        int ii;
' Z" e/ v: P$ V4 z( G        myfuck=10;; V2 l" x. Z/ I; w! }9 ?
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */, r8 s# n. f1 }+ }. X! e2 r9 D
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */; D! o( `9 P- J9 X/ E- T9 `# \% w

9 z, w/ b7 N6 k. y        yiDuanShuJu_mean = mean(data1000);) T: ~, }3 ?1 g( A
2 A" s4 k3 o. \( k- c! ?
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
* e6 T4 p& [5 |% C4 K# v6 u        UARTPutc('A');
5 n+ @" H& y2 Q        UARTPutNum(yiDuanShuJu_mean_int);
* q* e$ w& a  T$ o/ K, Y9 D+ J1 s        UARTPutc('\r');
5 ~$ n" n2 S! \6 h* i        UARTPutc('\n');+ @  g1 Q8 g! T5 }# I

6 x# w6 f% j" y6 ^. {3 g/ z( A) t        for (ixstart = 0; ixstart < 1000; ixstart++) {8 y) v& h3 n& G( ^
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;1 o; ^& i9 }; M1 j  f5 V$ ?4 ]
        }
$ h, G5 U  X4 `: z& T
. Y& D+ T3 [9 d' l2 n" t/ H" M        power(yiDuanShuJu_LowMean, dv0);6 P5 n" q; y" W: ~& T
$ y* S- d# U" ^1 Z5 p: u
        int_sum_dv0 = (int) sum(dv0);
6 l, \7 d7 w4 O% H, V
2 b& n- O. f, L9 @. O' R        UARTPutc('B');
+ Q& M3 T* }! N! K' x        UARTPutNum(int_sum_dv0);" H) h" G! D; m7 y' s# L- C
        UARTPutc('\r');9 g; [$ p% A4 U4 u* o
        UARTPutc('\n');; a3 A& {+ n/ N2 l
& A, J7 l6 V$ v6 G4 t3 x5 E
//        int compareFlag = int_sum_dv0 > 1.0E+8;
% [* w' h+ q: {5 {" E( Q/ W
+ K( T& Q$ I7 V7 S0 `" V- S        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?5 v: E' Q; q! E0 o  P2 r
                UARTPutc('C');$ T% Y  V% z9 f1 w7 i* v
                /*  比较信号能量 */
. B2 d0 u9 P) z# E( _) _/ g" _                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
) k$ y1 M0 a/ t! b  l7 ?//                yiDuanShuJu_mean = 1000.0 * youxiao_k;% a3 P" B6 {: W9 K6 s+ o
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
; T7 S* ~- B  D) K1 P: M- B//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =) k* y' c, E9 U  V: W7 k
//                                        yiDuanShuJu_LowMean[ixstart];
8 _5 F9 D! f3 |# E//                }
+ h% ^6 T9 D( k8 d7 j7 F//
4 a4 r, h7 I; s& F4 B, I( s2 s//                youxiao_k++;
1 M6 a) N6 E( v5 ]$ a2 q' C//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
0 V6 ?# U: ^- l. s) k: U2 @4 |//                        /* 感觉要取21个数,即0-20, */4 Q% c( U' x% s0 [' \
//                        enough_data = 10;//有效是10,无效是0
  ]& R4 F+ Q2 X3 c9 S' L9 y$ K; h( I//                }5 k7 V9 S& _8 u9 ]7 G- }- j* c
        }
: p% s  M# }+ v1 x  |4 [7 A9 d1 n4 D6 _' F3 y  u1 k- T  l6 I7 |, E+ u

# J& {: D' e* N7 _- q0 j3 g        enoughDataFlag = 100;
- S0 m, o' B! m4 q  y  L& _" a        enoughDataFlag = 1000;, V; E+ _4 |7 I! p+ @9 R- Z& G
        enoughDataFlag = 0x02;) q( J7 N: p# `/ C* j
        enoughDataFlag = 200;
" v- T6 M- F! e* S. ^  ?1 a
4 Q, K  w, I5 d        int myfuvk1;$ D; e2 o$ H- x- F8 E3 A
        myfuvk1 =11;
1 e# K  H9 E) A! s$ G' v, Y6 H" c( w; m- U% O2 Y: x* |

: f1 Y- }# H0 w0 R        enough_data = 0;( b5 J/ q: f$ l5 [# d& s$ A
7 ^! e' |$ O& T; d
//        if(enough_data>50){4 \* m5 J, J# k7 a7 M
//                enoughDataFlag=0x01;
7 l9 N8 N4 i) H! r' N' F& [' k% J//        }else if(enough_data<50){
9 v2 l6 l" q, y, J$ c9 T& w& b9 O//                enoughDataFlag=0x00;//0x00还是不行( t- w0 n' O4 s. M1 x
//        }) F; F' r( o$ j% ]+ r

+ d) c- K7 [1 ?! @% {! k- C9 e7 T( ?6 B' d/ y
        oo=10;7 N# P" J% @( N6 J2 E* d" `  {
        oo = oo  <  5;
% ~' Z" y3 m9 T        if(oo){
3 ]8 o; v! t5 s! R" ~! N                ii=0;
! m2 Q$ h0 c: z- _" x( {        }' M" U- I0 m/ K- W
        if(oo  <  5){, o0 n; n4 y% q; Q0 w
                ii=0;9 B; N3 d( w8 |2 t3 o' r
        }' `; V5 ?: e4 D
        if(oo  >  5){9 C, L7 K6 F$ f5 e- H
                ii=0;# J# {0 p, c  n) u! [
        }
3 G% o( t: \1 ^* I" I5 k7 r. d& B$ m. s: y0 L
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
  M: |1 b5 H3 R, o3 N3 |        /*  如果数据足够才执行主程序 */& b) ~5 T1 M" v! a/ W% Z
        oo = oo  <  5;6 b) M$ N1 X) Q
        enoughDataFlag = enoughDataFlag  <  5;7 g# ?$ }6 c* p5 E% Z$ Q
        if (enoughDataFlag  <  5) {+ R) w$ x, A& C0 t# l) f2 `
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是05 _  ^# X  ?+ c
                AGC_AGC(&pAGC);
: y9 @( j9 X1 n/ S
0 J  T- c! \9 H) v1 u                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);& o. I6 B  R7 J& I8 y
                FIRDecimator_FIRDecimator(&pRxFilter);/ s& |' k4 z8 ?9 R1 U+ v
5 P+ i3 C$ F' i5 L8 F9 [; J( h
                /* Downsampling */
; [5 B0 P, d3 F! O                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
7 p! }# H- @' B( g- p, M
+ ^4 z" y  r, M# }8 d( B                c_PreambleDetector_PreambleDete(&pPrbDet);8 h& K6 q3 p6 @  ?6 x/ [

# |+ d+ E+ r( _1 W# b                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */" r5 r7 g% D( H7 e, l4 i
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
0 \# U. s% U7 u# W                /*     %帧数量=100 */2 l6 N. i6 {, _. u# [4 b. ~
                pFrameSync.isInitialized = 0;1 J, f% d7 M# a, K
" [. [& \9 n$ M
                /*  [EOF] */
+ `- k  x9 V  I4 F& R% n                /* 前导码长度是13 */+ [+ `3 |2 q3 m
                /*    %qpsk */
" q9 x( F6 ?* V7 m. p/ |& b6 [                pDataDecod.isInitialized = 0;/ ~6 c9 I6 |, c" j1 q1 v% p
8 ^: K( n( Y0 k+ M, Z" Y
                /*  end */
* h% ]) c2 }; d% t0 f/ o0 _8 F" l                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */" U$ K# P5 z2 J6 C! l
                /* Convert 3-dB frequency */7 `' k3 E1 j$ D. y
                /* Convert 3-dB frequency */4 F5 L- T& p9 R4 e5 m% K( ?) D
                filtfilt(save_buffer, usable_left_filtfilt);8 N% w: p- C: l
                for (ixstart = 0; ixstart < 81000; ixstart++) {
$ ~# F2 J: a9 i# ]+ G! C' {0 X                        usable_left_filtfilt[ixstart] *= 2.0;( W; P. z- _% p0 H
                }
2 K7 I" ~# M# D- A6 A) T" P  Z" E! `$ v# \! U1 t% N' m
                /* 注意乘2,处理幅度 */- j, j8 c3 O$ \
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
6 X$ ?2 b7 h' t                /*     %% 行列转换 *// S5 |5 [1 o6 g: t- `8 o- Q
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);0 |% q% g6 N5 i) E# w" ?
                for (ixstart = 0; ixstart < 81000; ixstart++) {
" y1 Z9 h: L/ |4 c' a4 U                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]- l1 o" l5 h# X6 b% I
                                        - yiDuanShuJu_mean;
3 v; D: x& O- y. S; ~6 Z, ]! t/ R                }9 |) S& c4 i2 }7 d: o
# g) F% |) e2 t7 l9 |
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */$ g% s( ?6 Q: R- L/ L
                ixstart = 1;& C3 ^4 i7 m- l7 \5 ]. A
                mtmp = youXiaoShuJu_QuZhiLiu[0];/ [8 F9 E; |# |- |, V/ ^/ ^
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {0 |# \% R$ ~. S
                        ix = 2;
# |9 j$ J3 M# C' f7 b" s                        exitg2 = false;, _4 Z! v$ [! }: X5 x. I( o
                        while ((!exitg2) && (ix < 81001)) {
# X8 B8 ^7 l# |                                ixstart = ix;
2 p% U6 {" E. r) K( M& n                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {- A- D/ f. c" b& `, V+ f6 e
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
% {8 N7 i$ Y+ a5 @6 H2 |                                        exitg2 = true;0 G/ [. T  n; C* \% V0 m
                                } else {
3 r7 ]# U- g5 {) }5 c                                        ix++;  P# ~: F$ `# v
                                }' y' ~. O) Y5 S, {0 V0 r) X
                        }5 \  `: k% t# q
                }
- L, z; v+ j" n6 N8 ]0 Q* c2 C( B' `, _* q* a/ ]% ~* T+ c1 o6 g
                if (ixstart < 81000) {
7 ~2 ?% r* @) n; Y4 v# t3 _; S                        while (ixstart + 1 < 81001) {
' u$ z# u% e9 ?3 r/ E9 n7 y                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {" d* h' \6 X) ]% \1 h5 R- x
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];. K3 ~3 O0 e2 l+ ?
                                }
3 ^, G* l& [! c! E7 U
2 w: R: X: o2 g! o1 B  l                                ixstart++;% P4 T' S* S5 N- S7 C
                        }
  {+ y9 e$ g" t                }
: `" P1 U: A. x2 \* @# B0 d* y2 Y8 G6 p, `: H6 z- G
                ixstart = 1;3 @8 F" I# t, H9 ~
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
  h. B3 D  q+ `* |" \                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
; r- x0 W3 m* T# q4 J9 A3 r                        ix = 2;) N, [% m5 ?& f( w
                        exitg1 = false;
" |5 R9 O- H( [6 H, ~4 `                        while ((!exitg1) && (ix < 81001)) {; z0 y5 K6 ]- |. E* r" n
                                ixstart = ix;
9 H' t$ @% g4 Q5 v                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {- ^$ @) c) q4 Q' W
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];9 z; @# X! D7 V! q; j3 Q
                                        exitg1 = true;
( j3 X$ L" K+ [                                } else {
* C6 m  I0 ]/ G/ a# l* F1 P8 P8 x                                        ix++;
' I. ]- s' r* V5 ~. J* @                                }
, h! b+ v. B  ~" J                        }
: m' |  Q/ ?! D; l6 ?                }( S8 S, F! b( E; l

$ t0 T$ }+ B7 W/ S0 B' e0 Q8 b                if (ixstart < 81000) {
9 g. k% k9 I: n, U( X7 n% \                        while (ixstart + 1 < 81001) {
6 J+ T. h* d6 ]* K7 b9 f                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {4 d6 b- ]0 u) J; L0 S1 K8 z$ j6 H
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];: O6 o1 T- j2 o% m
                                }/ c- w+ A7 T9 O* {' R) Z
8 T/ e( h+ m, V# d6 o1 Z# |
                                ixstart++;- b& a' @' j" Z" I- O( w% r
                        }1 d- _: c4 C# G9 a8 _
                }
7 |+ L+ J* s- B: x& n( v- D; K2 P4 O  t* V. S' Z! p* _
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
, _4 t9 J8 E( C( f( C                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {; X! `$ k7 g% d& E; D( I
                        yiDuanShuJu_mean = mtmp;! a2 E! M. u  I& P. }
                }
8 }8 U% h( b# F- i( \9 I
. P1 s' g) C7 ~1 `                /*  找出极值 */; t! V4 u$ q" M( L1 D
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# t- j& `- [6 X- w1 Y0 X. X# v% ]& [) O                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
+ j1 L9 a7 ]2 _" Y0 F* p& x                }
+ \; I( j7 H" ]: ^, N% k+ e, s3 q0 x
        --------------帖子字数限制------------------3 Y; j, T, ^6 n7 l$ M$ n4 J* x- E
}5 \4 q5 ]7 d5 \, g0 Q7 t+ k. m
7 f. {" i1 q- V. [0 ]4 S4 g; O

1 j4 E- f9 V/ e$ K7 Z& h

本帖子中包含更多资源

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

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-8 06:14 , Processed in 0.046864 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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