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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 $ p+ m, |+ J2 S

# N9 _- F( Q- m2 z: U/ U! `( V* ?各位大神:
3 T2 ?- Y  ~/ ~9 T" g9 x     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
2 l' z5 N: t( q+ e$ a# \' R      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:! f7 [0 j7 R! `6 e$ m/ d
* m# c/ g  v* L$ y# P& w
       {( J) E, x2 i" u( _6 ~" k: \
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。  x1 k; ]$ a4 }

, J3 h  f+ L: P6 N并没有其他线程
8 t9 C, u+ P# o7 \9 H反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
* E+ x! ~* f: Z+ z5 j3 c也说不定是和堆栈有关系。。。。。。0 o1 U" H2 [2 ~# H
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....% x; P/ i% x" c: w! m9 k: c& H

& q) j, l. U3 M6 i) S+ i3 P/ X
6 e; \7 M$ g0 j# r/ e
2 T8 L  s- I% p, F- ?1 n, p我也很绝望啊,希望大神能帮帮忙,感激不尽,!' ]9 I0 F" r( o

& e% N2 C. E2 t7 V" X% A$ r
, V. l( _/ ?% o5 Q$ k" s' s附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
6 Q' _, E( c8 e  y! _        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
) C2 s* R# Q- d+ _7 V' x
$ i/ k+ ?8 D9 S' {( u% k5 \) Dboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
8 `& i" E% j) Z0 B) J  g                const double data1000[1000]) {0 F- R4 r% p: _% g/ S
* v8 A9 b* v/ r% u! T- l
        int myfuck;
( b) P' b) ]. d8 w# t) l        double yiDuanShuJu_mean;  i# Z5 K/ R) T
        double yiDuanShuJu_LowMean[1000];- m8 q* }: E9 ~0 h7 L% R* F. _. z' L
        int ixstart;, c9 \8 Z) F6 ^- E
        double dv0[1000];
& O4 G6 B2 C. Y; ^$ f        comm_AGC pAGC;
! k* C5 X; `( [% x8 u9 g' c; g7 f        comm_CarrierSynchronizer pFineFreqCompensator;! `( r$ k" {+ Q$ ~- ^7 a9 p, I+ ?
        dspcodegen_FIRDecimator pRxFilter;
" A5 \1 U3 L2 ]0 s6 D9 C' J' L        comm_SymbolSynchronizer pTimingRec;
) k5 l1 R# Z. R% c& W( u4 T+ c        comm_PreambleDetector pPrbDet;0 S1 L$ S& ?2 z/ I% a* ?- b
        FrameSynchronizer pFrameSync;( g' n7 `7 f7 w; s' P. o- C
        QPSKDataDecoder pDataDecod;$ r) q" a& _  t$ M0 Q9 }; @
        static double usable_left_filtfilt[81000];, K  Q$ X. A* }, L% p
        static double youXiaoShuJu_QuZhiLiu[81000];" G2 h( U; y7 r. B, b
        double mtmp;
: h, G4 ]8 W/ d* ^/ _- }/ O. T" q        int ix;$ k- {7 q: `5 }: J
        boolean_T exitg2;& V% E' `' u5 r( t
        boolean_T exitg1;  m7 j$ |  e# R" k: O$ v) v6 K
        double YiZhenShuJu[800];0 Q* D  D) f7 u- I: C$ ?" ]% Y
        double dv1[800];
' H% f6 V" r, j) b/ c
; K. t0 m! u2 Z
% K6 x) ~. i7 i, l$ n) |+ s        double b_YiZhenShuJu[800];* z! B9 @" f* l+ Z  `& i( r
        double I_filtfilt[800];
1 _0 o/ \  y# i. E) H        double Q_filtfilt[800];
3 j8 L3 s6 y+ C7 S4 G9 `& J9 z        creal_T b_I_filtfilt[800];
: B/ A, A( s" i* F        creal_T b[800];+ O6 I  L$ F, o" t7 s( ?7 H" D: g
        creal_T RCRxSignal[50];
% s4 |  q4 G6 ^" ?6 i        creal_T fineCompSignal[50];
4 ~: U0 @! x% h/ V        double phError[50];
; f2 S2 T4 r5 z" H5 C6 u9 b        creal_T timingRecSignal_data[28];
6 O" U; ]! _6 Y; J( W        int timingRecSignal_size[1];
. d# x' ]1 J5 F# S/ T- ^        double prbIdx_data[28];0 L6 z) h8 z% o+ E8 J, `
        int prbIdx_size[1];) Z& x% p# r. x7 t- a; X: L
        double dtMt_data[28];
) ]4 @7 @$ L' i7 n* A        int dtMt_size[1];
' [! m8 C; Q6 g( h; X        creal_T symFrame[25];
- G; e+ K# X  d        boolean_T isFrameValid;
6 s( h& g! c* A/ i7 u        double unusedU0[3];; b. @; Q  Z0 w8 g  M
4 Y$ s  A8 q" F/ x
        //调试过程中的变量& L4 ^: q$ `/ C0 s: X1 h- ]6 y8 \
        int  enough_data;
/ q" y" v* n4 i/ j) W8 _8 R
8 B; x& h$ W9 \  f# ^0 d        int enoughDataFlag;0 c) Q  L" ]8 F* v6 r; ^6 m9 Z6 p
        int yiDuanShuJu_mean_int;# X2 P; r0 a6 c5 @
        int int_sum_dv0;9 A: ~; T1 d3 Y, U7 F
        int oo;! d' p, b9 n/ ]; p$ f8 `
        int ii;
5 g4 L* N7 t8 k; C9 G+ U7 n0 @        myfuck=10;
) b7 s" z, F6 T        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */* K# X, Z5 G/ V$ n- ~! U& [
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */: i& r8 p1 t: m, U) f9 ~" T0 S, V
& s6 F  ~8 Q3 f7 y' S$ p# X8 h
        yiDuanShuJu_mean = mean(data1000);
% K+ a2 u* g' x5 n1 E& w/ P/ A! [3 G. K3 L( c( K. n2 z# [& J
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
: l# s  t/ @1 P9 X4 }) W        UARTPutc('A');
+ ]' d8 y( C- s        UARTPutNum(yiDuanShuJu_mean_int);
# }* l7 _* X- G) [* Z        UARTPutc('\r');+ u5 r: f, \- z, ]4 a; F
        UARTPutc('\n');
" J3 ~& X$ D" |( J& z- ?' U! a/ Q; w5 X: f2 h  F
        for (ixstart = 0; ixstart < 1000; ixstart++) {
6 B* |( A$ q- }                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;* H1 X  p+ A0 {& h- s
        }$ L/ y6 j8 d  `: b; k
! G$ B1 a( x+ z! M9 R6 R1 g4 S
        power(yiDuanShuJu_LowMean, dv0);, j& W; u$ V. h  Z& C
6 J  P" L9 K0 a! M% a
        int_sum_dv0 = (int) sum(dv0);0 r3 L/ o% b9 m2 f$ J7 m

! }) F& T1 U1 H. t1 x8 j$ D1 f6 Z7 l% ^        UARTPutc('B');# s, q% h0 F8 ~4 C
        UARTPutNum(int_sum_dv0);" h) @3 L8 r1 i4 Q2 q, C' {- Q
        UARTPutc('\r');
4 m! s$ [& o1 Q& r% Q' b; s        UARTPutc('\n');
, ?" `8 }, m1 q; I+ o
) F/ ]5 y; X6 d//        int compareFlag = int_sum_dv0 > 1.0E+8;
" B* @' e- ?3 f& ?: g- I0 g5 j3 O1 z1 q! m- X0 W) T
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?* {3 l  ~" z/ S7 B2 X
                UARTPutc('C');) y+ Q# V9 r& X7 o& k. I- z3 f
                /*  比较信号能量 */  H9 g( B& }" W1 o
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
# I" W1 s2 ^9 Q1 ?# j* |//                yiDuanShuJu_mean = 1000.0 * youxiao_k;# T2 g# D. T- C
//                for (ixstart = 0; ixstart < 1000; ixstart++) {# A# x# i+ V  }. e3 z1 x
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =( l$ b+ G+ d. D1 o6 R2 w
//                                        yiDuanShuJu_LowMean[ixstart];
$ i- `: p6 |6 F% S! V$ X2 E//                }
, a0 w6 x3 U9 [4 Z2 ]7 T//: U0 n3 @' X6 Z2 `7 T
//                youxiao_k++;& U* h% D' s, F, u' h% U
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==3 O( i) s' C: i  J/ ?
//                        /* 感觉要取21个数,即0-20, */  F0 v  w; f% L% z( ~- j
//                        enough_data = 10;//有效是10,无效是0- E1 S; X7 m6 w$ ]1 u4 ]
//                }* @$ \- s  o+ O
        }: F- z& F/ A4 @& n  {8 r5 g
; K  P8 z: {- p2 u' V. m* Y
3 x3 {9 g0 Y" X) X
        enoughDataFlag = 100;% x  q' f$ C  ]8 ~) `/ `
        enoughDataFlag = 1000;
) t4 G6 Q& t/ T& D' q$ C% v        enoughDataFlag = 0x02;6 z4 D4 A7 [* m* y
        enoughDataFlag = 200;' R$ g# d0 }% \" w
0 }0 N3 i/ b1 T8 p
        int myfuvk1;( b9 x( s9 Y  j5 k; x, H, b5 N
        myfuvk1 =11;
7 W/ G5 b3 t# L; g0 M+ l2 i% Z4 j$ O* @0 O. X; X/ F5 E1 L0 e0 u  O

0 B  o- m8 {  N' m" O+ m        enough_data = 0;
0 |" ?# E3 S6 ^4 q1 n* K2 }3 d6 ^/ v& U* U# c3 J
//        if(enough_data>50){2 n; H6 w# k+ q1 k
//                enoughDataFlag=0x01;/ R$ x; _2 B/ c; N3 D* v# O+ A! R
//        }else if(enough_data<50){0 i; \. e$ i4 ]
//                enoughDataFlag=0x00;//0x00还是不行7 }4 C8 c% n" B) P+ L1 s5 N
//        }
- @; b& D8 c- l6 o3 B8 i! B7 |
& B: y2 X2 A/ r  t, x2 _# W) C1 A6 h2 I9 ^( s; s6 O
        oo=10;: k: T3 d6 L) d) o
        oo = oo  <  5;
" D# X/ e' s& z* Z, ~9 |) P        if(oo){. }2 u0 I9 f( G3 ~- g3 z2 A* z
                ii=0;/ o/ a8 i, z! l$ d/ z, N' r
        }
4 ^8 _1 j0 v  r- _) R' N5 G        if(oo  <  5){
7 S3 S# S; Y7 @0 u2 r0 l6 q                ii=0;
5 w8 u1 G; T" [: |        }! h0 S7 G$ O) l+ C0 E
        if(oo  >  5){% L1 |- h" G4 h
                ii=0;
& E5 V7 u+ j, `" @, o        }/ Q  k0 m6 s7 ?" m. R# x
! O9 S6 `/ R' }9 m! e( k$ J
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */$ j" Y" c- l  l5 R
        /*  如果数据足够才执行主程序 */2 f. M& N4 V3 G2 Y, X
        oo = oo  <  5;% X, _% B7 ~3 }3 \% \( I
        enoughDataFlag = enoughDataFlag  <  5;" [+ r; u8 a3 u* P1 K* Y- Z4 G  o) k" u
        if (enoughDataFlag  <  5) {* ~+ M. j; t. n9 O; J; k9 H
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
# A+ g) ?% |3 s6 R# s1 {4 O                AGC_AGC(&pAGC);9 b  J7 X' U8 Z( d

. v) W0 _4 d) j# P4 L                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);: g' V% w; C/ `
                FIRDecimator_FIRDecimator(&pRxFilter);
# A1 J* r# f  R+ |2 K+ y6 ]: i4 r# K2 }5 r$ U5 J0 X. N' A
                /* Downsampling */$ D) O5 L4 E4 N" V
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);% }; J/ }# s# j0 O5 t
- X  [5 @) `4 l
                c_PreambleDetector_PreambleDete(&pPrbDet);, h6 t( p% d  }# U! D8 N# H
6 H& H1 F% s! ]' v4 I* u
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */* E: }1 J: @! Y
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */6 E0 ~. P' T( p2 M+ @
                /*     %帧数量=100 */
& C) P; W2 i6 O1 a                pFrameSync.isInitialized = 0;1 Z- ]) _$ O0 K

% U! ?# A( J) F* q9 ]/ G4 M2 J                /*  [EOF] */2 B0 r4 G6 }6 \, b+ W
                /* 前导码长度是13 */' v& ~+ g' X: y7 b
                /*    %qpsk */  N2 b9 s" n, ]1 C3 T% ?
                pDataDecod.isInitialized = 0;% b8 w) v3 d( W8 j
5 X( D: W8 {- e, J- A- T
                /*  end */
( |- F2 b& @1 I& p& I. _$ p                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */$ n5 D# E# }5 p0 B) w+ T1 Z
                /* Convert 3-dB frequency */
! P5 {. Z4 Z! j% D& m2 s                /* Convert 3-dB frequency */
5 f6 i: L) |$ V: y; u                filtfilt(save_buffer, usable_left_filtfilt);
. b3 M# M* z5 Q9 T                for (ixstart = 0; ixstart < 81000; ixstart++) {6 o. w* R) Q/ \/ l. D/ r+ P9 ]
                        usable_left_filtfilt[ixstart] *= 2.0;, g! ^6 D! b; G* Z0 N. C6 c1 @
                }, v# _6 I# O$ m' n1 q2 j

: J1 W+ F" H  H# [4 M, P! p6 s" j& g# b                /* 注意乘2,处理幅度 */
& r8 A- r! g. z4 q$ r                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */% O4 A8 x" H; Q8 F
                /*     %% 行列转换 */
- E5 N3 P5 m) k6 `. R% E6 v                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);2 ]$ q) l* |2 h  S- y
                for (ixstart = 0; ixstart < 81000; ixstart++) {. Z/ l0 M- x  i
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' L! ?4 F! ^- w) t1 ~9 G  Q, @3 h0 b                                        - yiDuanShuJu_mean;
& q& L0 @  i' |2 N                }
7 ]1 B+ ~  B! k" B, z& `, e5 M1 N" V/ @  }2 o
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
4 z% M& \' e& ^$ Y# z4 T& {: Z0 ]                ixstart = 1;
, Z. \4 x8 C7 n# i: [                mtmp = youXiaoShuJu_QuZhiLiu[0];/ ]( F5 H) C3 r
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 m8 a( H: [. x9 |' Q                        ix = 2;+ D% x  I; z% q) H
                        exitg2 = false;4 ^, k' d' E) Z9 S, b/ `8 I* V
                        while ((!exitg2) && (ix < 81001)) {
* ]+ m. W9 n( l- o0 \                                ixstart = ix;
( X3 n2 O2 Q( t* w3 g7 d- J                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {; M2 o  V# Z7 ?: m1 T: Y! |
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];. R+ i* J- R% |" K3 n
                                        exitg2 = true;
! U1 x/ x- v  \% V1 v                                } else {% G3 s5 }& n0 g, I" D- J, ^
                                        ix++;/ X4 Z% R" M1 ]/ A6 j! {- P1 _/ G
                                }
& `! D0 M9 H# L6 w  w. m                        }
' G; j! T" K' V) V# Q; k' L3 |4 n1 \                }
) o& _# c. \# g' U0 [7 v9 a% E3 w; }  w" E# o7 L4 ~: {
                if (ixstart < 81000) {. {* a: n7 p5 @$ y
                        while (ixstart + 1 < 81001) {
; [" P1 ]0 L& v% t" b* d& [9 h" z                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {. ?0 S. H9 v& t) F: w) ?0 [
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];/ W  ?2 V& v  g
                                }
4 T# z5 G4 K) b% D" L
1 a  i" A* w: F6 `6 Y                                ixstart++;9 W9 t/ w" V* W2 h& ]
                        }% i( i4 }; L; J, e# R
                }
6 L- c/ D# V6 y: a+ M3 }1 h1 {; e- n
                ixstart = 1;5 I, ^- ?; e: e! {
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];; h1 m4 \% I! q3 ~) {
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
& M8 Z4 `! v0 \. @9 ]0 _! w                        ix = 2;. y5 P" y' Z' `5 S
                        exitg1 = false;# D# Y% v2 [3 {7 r+ o" n% m
                        while ((!exitg1) && (ix < 81001)) {
/ J8 [( N' x; x4 [" J( `% a* i                                ixstart = ix;
/ O6 {* V& O4 n8 U" `                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; i, a3 _2 N+ U4 x6 K$ Q' V                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];% q+ D- d/ M" Y. r/ Y
                                        exitg1 = true;2 B: I( A+ [( f) Z" O( V
                                } else {9 F) w3 P4 J. E1 [+ I! L
                                        ix++;
8 p& [. p8 ~0 q" X- d  ~" k                                }: ~  \' B2 w1 F
                        }1 o# j* k$ x9 y) V% V4 R
                }
  z0 ~" A: V) W; z4 h, A# w8 k  c, ~9 K, A: ^
                if (ixstart < 81000) {
  _* J' D# |% {& k" n; S. \                        while (ixstart + 1 < 81001) {; ?- C$ q% A! B' Z, L8 U
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
( x4 ^4 M/ L: [( f( y# P4 U                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
9 |4 o& P. t5 i( N. [                                }7 C2 B. v/ P( C1 G( B
& D5 ]6 d( [4 `$ [: m
                                ixstart++;9 q! S# q3 R$ d) d8 }8 a, a2 B
                        }: j" {* a! y1 y. F0 Z7 G5 i
                }
+ B4 x+ u, ]! T
; V8 Z4 I, a' I6 Z8 K, O                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
: L+ }' n) H3 @                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
9 W+ K/ B* B1 S& K9 b; q4 A                        yiDuanShuJu_mean = mtmp;
. E. q; C% |( L) H$ l                }; B. F' \" L4 p( x$ ~
4 P/ q3 z1 u, T# f
                /*  找出极值 */+ C9 b2 p& Z! k' u
                for (ixstart = 0; ixstart < 81000; ixstart++) {0 x1 I' N* B- |& z# G
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
. K! [6 e& t4 @! v7 S                }
. W7 v- H% V7 Y! \5 @: H
7 a' z3 o0 Z& g8 ]- Q        --------------帖子字数限制------------------& o' d/ N! e3 ^8 g+ d# y+ V. y
}
5 R" c% w& I+ G1 B
0 K: a  q& S) n; F: D! m/ a+ ?9 D0 m1 i7 X- B

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:39 , Processed in 0.041969 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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