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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ) L2 Q: ?0 C) l5 j  L

) b0 G: }5 n! y1 S% ]' U& o各位大神:) E2 `; L& T# u. l
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)* H* P2 Y+ t& i8 I0 Q, D
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
: v' C" m" e4 E8 P1 x1 h+ w: \
; x% u1 w5 T: s* b* `     , S: [& p& q0 g" c# O
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。& v9 j0 M+ \2 c: p, s8 z" N$ Z$ F( c
2 n) X* r1 p4 m, t! }
并没有其他线程
+ r) K" M! s6 \' b1 K) [' n反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
1 u! S; D1 P- p# t6 e也说不定是和堆栈有关系。。。。。。. H6 o6 `/ K: R9 O2 l9 k7 y% F1 p
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
5 }8 |; l# F% n7 n/ b6 k/ G4 f: y2 t+ a( I( z7 e
/ A' O, [' V2 A8 C

7 a* x% O& x) p) {2 x$ H我也很绝望啊,希望大神能帮帮忙,感激不尽,!# Z0 }( Y3 \# a7 ?8 ^% b/ I+ O3 m
0 W  |; ]2 U7 l, Y: x
0 T( n- ]2 K+ [
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
3 t8 L# \( e- V        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
4 M7 h+ t- t  J7 m8 q+ F
& U7 C; E, K2 u! rboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
5 p; c; X! t; Q8 D                const double data1000[1000]) {- C' p/ ~" v+ N0 m* K) U" f

# x2 j+ J8 @  H5 C$ _9 |' ~6 ]  \        int myfuck;& }1 Z' F" x. n8 _4 v5 [
        double yiDuanShuJu_mean;
9 ^1 g% G9 ~4 o( d* f        double yiDuanShuJu_LowMean[1000];
, v, Y, Y! J5 F$ ]/ \8 L        int ixstart;* o* C: O- ^( t$ E0 g9 E7 ~
        double dv0[1000];- P& K+ l3 n' A$ L
        comm_AGC pAGC;
/ O. V3 S+ }, t' i1 t" M6 K        comm_CarrierSynchronizer pFineFreqCompensator;
2 n7 \- P( c; F0 j; W5 k$ h6 X  ?        dspcodegen_FIRDecimator pRxFilter;1 l3 X6 ?' f$ k# S. e
        comm_SymbolSynchronizer pTimingRec;
. i7 s2 _- D9 O3 F        comm_PreambleDetector pPrbDet;
% ?0 g8 J8 k4 }6 N& @: \: l, J        FrameSynchronizer pFrameSync;( N& p; O' Z7 x2 d3 Q# I9 T
        QPSKDataDecoder pDataDecod;. ^) Z; m% V' a& j9 i4 N/ e
        static double usable_left_filtfilt[81000];
- ~6 m# C. d. A! o/ ]1 y/ ]        static double youXiaoShuJu_QuZhiLiu[81000];3 Q4 w1 H& n0 \/ K
        double mtmp;
! b9 x4 X( n& B% d: ^6 H        int ix;
4 ^# F: Z5 G  [4 q0 ]        boolean_T exitg2;+ G# \3 Q8 e* D# r1 B0 ]
        boolean_T exitg1;& R. c" D+ ?" D) A; x2 K" T4 G
        double YiZhenShuJu[800];& D  Y5 g* i1 Z5 [+ C" {
        double dv1[800];; X! v5 ^3 K0 T/ H( k) c

7 X" {6 E+ j8 ~7 \$ M
1 P; k% P' e0 h) |        double b_YiZhenShuJu[800];
# T+ x% g7 ?. e1 H# r$ ^        double I_filtfilt[800];- K9 r, k" A! }- V  N0 {/ W# z
        double Q_filtfilt[800];
" ]8 K# Q( Q# m" [        creal_T b_I_filtfilt[800];
3 C) F/ l0 X2 S) [0 ~        creal_T b[800];
) R, W& f9 H3 l! @% e3 {# i        creal_T RCRxSignal[50];8 T: F, A% w( n5 B( Q6 @# ^4 a2 B% W
        creal_T fineCompSignal[50];) w7 P2 C1 o% A7 v. i
        double phError[50];
' }9 m& R8 j0 S3 G" i        creal_T timingRecSignal_data[28];
: @$ C. l# |, l$ g) o9 M        int timingRecSignal_size[1];
7 m; U. _8 |! C2 L2 D8 `! P! N        double prbIdx_data[28];
2 t: P4 ~8 B* h7 a6 L2 c        int prbIdx_size[1];
! A; T( V8 _: x/ |$ n3 k; x/ l        double dtMt_data[28];
6 L# Q' ~  m! e, X  q# G/ M        int dtMt_size[1];
! e( ^! n: c- ?        creal_T symFrame[25];+ \7 X* }/ @& U' A9 n7 j8 y
        boolean_T isFrameValid;
+ \3 i. B+ q# {$ n        double unusedU0[3];
$ {! T" e( s; u! s* X* \6 y6 m! V6 L- A2 P0 w. S; |
        //调试过程中的变量
5 T. e+ p5 H3 V* x& _2 D, k        int  enough_data;/ \3 J1 N' p; |) L5 F0 W: `5 [. s
7 Y2 |0 `2 w; p" N
        int enoughDataFlag;' c8 `4 M' ~" C( S' L! x8 ~) R
        int yiDuanShuJu_mean_int;
; n9 Z5 q6 ^; F& d' @        int int_sum_dv0;
0 H% Z4 b* ~% E8 I" g5 T& M        int oo;. D. D, @9 F/ y; z
        int ii;" W' Y- h! l- ~, f
        myfuck=10;
( R8 y2 J6 _4 ?+ G        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
4 Z6 A  A! h- l0 Y0 W        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
# m( x/ y3 _: s+ E( \
5 S4 T7 A8 ]! j        yiDuanShuJu_mean = mean(data1000);0 ]9 g6 G: Z2 T! F6 b) [( e4 F

  b2 u8 p3 ?2 Y6 Q) I        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
6 \1 c- D$ n4 T! H, l- E        UARTPutc('A');* W& K) v$ Q* O9 p
        UARTPutNum(yiDuanShuJu_mean_int);( S: t; F% i$ `- ~
        UARTPutc('\r');
! G7 n$ ]* f0 k" u3 {        UARTPutc('\n');# G4 l& F" _7 O: |( v

3 m+ a  I1 x# f7 l. g! B: G0 R        for (ixstart = 0; ixstart < 1000; ixstart++) {
8 W4 V9 w$ a9 e4 J% x8 v" E) t2 ?                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;; u" h. T9 m) V- b& Z2 a8 N: |
        }! q  p4 d% B  X. U, N, W5 q5 W5 U' p

& J9 m, c7 [1 Z' d        power(yiDuanShuJu_LowMean, dv0);
$ ]9 u9 |$ D# i0 ]  A' V# Q& s* I9 V4 U% x1 q
        int_sum_dv0 = (int) sum(dv0);. U, E8 h" C% O7 s, J" w4 W

% A; f  k- i. g6 N4 x; q        UARTPutc('B');1 t3 W5 G! L3 J
        UARTPutNum(int_sum_dv0);
) P8 N+ ^- T1 t; B- l        UARTPutc('\r');
5 z% z: s4 P) _, l5 `        UARTPutc('\n');' G$ U) F. T" R; g1 P4 y, C

& y) V) L- O& _" Y5 i//        int compareFlag = int_sum_dv0 > 1.0E+8;
/ k/ ]6 u0 S) u: n4 d0 r0 z0 |+ B7 M' S4 O% H: S, W( h. c, Z) a
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?; k% |- |5 n; ?# D5 n0 q
                UARTPutc('C');
  `/ {- q: u# v. X+ p                /*  比较信号能量 */7 ^5 |$ G! V! f  [) h. f4 s$ F
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */# H* ?& i% s5 ~2 y4 [- v
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
! k6 k. x8 S2 b5 G6 q; ?//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* e; S" i/ d, g0 p3 P  c//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 A% P5 B2 `8 C3 [9 A+ Z0 C. c" Q
//                                        yiDuanShuJu_LowMean[ixstart];! |# y! o8 |" C
//                }
% S, G  |6 ^; k1 v//
- q# R4 q3 q, l9 e& C: B/ ]//                youxiao_k++;( f! D& [6 A. s$ i
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
0 }* }9 N6 n- w5 V: \//                        /* 感觉要取21个数,即0-20, */
- ~  ]$ G, ?' _//                        enough_data = 10;//有效是10,无效是0
/ b4 I- \' Q8 W) p2 K/ p//                }
& k0 W5 [2 ^* f) [+ h4 Z        }' \6 U1 c" m' R$ `
8 L9 z$ j- q0 b8 \/ F

& c4 S* X) D( }        enoughDataFlag = 100;% T0 p4 E* w7 H0 P4 h5 O4 g
        enoughDataFlag = 1000;
9 X( i2 I  Y- f0 X2 `7 @        enoughDataFlag = 0x02;+ ]  B# C; L0 @9 t% e
        enoughDataFlag = 200;' q  I5 P! b) [+ A3 t3 \9 L( r
; v% L) _1 n0 M: \5 V! _) ]
        int myfuvk1;8 C4 v! }, H: w- A, I
        myfuvk1 =11;
- V/ i/ e3 S8 P; O6 F+ Q- V$ u$ L8 V- d( m& j2 i. E, G
1 _1 [' U  g" R+ W# B
        enough_data = 0;
  i0 T7 `& k/ L- M0 o
7 p9 l4 f3 |& Z9 l+ Y0 ?9 q//        if(enough_data>50){
% `  p' J/ v  j5 T8 O$ f//                enoughDataFlag=0x01;- q7 E: M5 ]" w$ p0 R/ d
//        }else if(enough_data<50){
$ ]" |( X) w, v% G) f//                enoughDataFlag=0x00;//0x00还是不行
- r: j5 v; U! [) F5 L" r//        }
# U9 @4 y3 o( `) R# Q; Q( x' H) Q! P) z! J: M$ R

' B+ O9 I; b! l, B        oo=10;/ ?3 T, f: @; z8 `0 K, Q
        oo = oo  <  5;9 E3 a4 q. v& j  t! U0 `
        if(oo){; L* E/ \+ ^6 C: B4 X$ I. A4 l$ @- w
                ii=0;
7 J% o0 Z8 Z% d# c        }9 n$ L- \6 w; n
        if(oo  <  5){
7 S! j( D2 N1 D. Q5 i" X5 }                ii=0;& M9 b/ f0 C: k
        }
8 m! `+ X$ G7 q% H( E; a        if(oo  >  5){& l6 L+ Y% H$ i
                ii=0;
. ^1 v3 t; h' y' m# t1 ~" y        }% W$ A7 z7 N. C) r
9 }' \+ t7 \! E: h1 _" h) U
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
' P7 H8 `7 m: a7 W% x+ a        /*  如果数据足够才执行主程序 */
+ q1 v7 N$ b9 R) H" D6 F( q        oo = oo  <  5;7 k2 S0 i! O* v) ]. `
        enoughDataFlag = enoughDataFlag  <  5;
2 Z& O8 T9 Y7 p! h) A0 S        if (enoughDataFlag  <  5) {5 o) g) [" D% e1 g* L- I: X8 t% e
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
: l* N1 m) S( j$ K0 A$ Y) \                AGC_AGC(&pAGC);
2 ?7 O5 M2 L' N+ P7 L
7 D$ j1 `# N7 `4 T% X                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);( z* J' D4 ~+ w8 Y/ j
                FIRDecimator_FIRDecimator(&pRxFilter);
4 _; ~7 ~% O, @1 E8 x) ~) c
2 V3 ]! g8 M+ D                /* Downsampling */
: F) ]; |2 B# f4 ~4 l                c_SymbolSynchronizer_SymbolSync(&pTimingRec);3 x; J! b% \# U. K3 M8 k2 D
+ d- \0 Z  J  t: ^; l0 C% f# h* B& ~
                c_PreambleDetector_PreambleDete(&pPrbDet);# r& r$ m( b2 _. U$ @9 h5 u6 G1 k; X

; {4 n& X' o8 s( D& b/ Y. h$ n  S/ ?. l                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
- ~# s+ y: E! z( u                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
8 h& ~0 M5 e; M! V3 q# v                /*     %帧数量=100 */
4 q7 B! m) [1 C, s  a                pFrameSync.isInitialized = 0;$ W. i, t4 d. H$ m! \
  X" ~6 C0 X9 k8 l+ H! q/ ?# B8 [
                /*  [EOF] */
+ L; ~4 H* W) L" K2 k                /* 前导码长度是13 */
7 j; L. N, R% k8 s9 }* w8 X5 y                /*    %qpsk */
0 r: v& m, y6 W, R+ w3 p4 D) F- |; b4 ]                pDataDecod.isInitialized = 0;
% _4 }/ X5 X% V9 s+ U- H0 T: ?
  m  _, R9 M0 w                /*  end */
. k  ]7 r: x# K                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */5 c" V, I8 V+ n6 L8 e2 P; _
                /* Convert 3-dB frequency */' W7 y' N4 Z) Q* c
                /* Convert 3-dB frequency */
" ^2 U7 l! V  I) B! h                filtfilt(save_buffer, usable_left_filtfilt);
. J: g) j5 i4 N                for (ixstart = 0; ixstart < 81000; ixstart++) {5 ^4 q9 h0 O+ M7 ^, B" q
                        usable_left_filtfilt[ixstart] *= 2.0;
& y( M3 f) \& F/ Q                }
8 Z; ^2 b6 y6 b2 U# m) Z3 T7 x$ |
- `1 d# _2 I4 B' R; x3 A                /* 注意乘2,处理幅度 */
' y% ?* [& s* z9 A# V, @9 N! D                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */, A7 I1 w+ y, t/ o. u' ?
                /*     %% 行列转换 */$ o. g0 Z" W' F. @0 i
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);; w3 @* C; B' ^! `  D3 H& Q
                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 e" r! _0 s! C$ x" h0 t" @9 y, K7 b1 \                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' h* v, |' ?) O0 X5 ]0 j2 m* }                                        - yiDuanShuJu_mean;3 g, ^8 E) \& r  W$ |' R
                }
, t9 D9 ~; @/ H6 B: ^3 _4 o2 W  o
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
+ L- G, \) z/ M) X' f                ixstart = 1;# u% |3 f* H# c
                mtmp = youXiaoShuJu_QuZhiLiu[0];+ B1 y" J) Q" K/ y9 t
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {7 I/ x& ^. R2 h5 Q% `' P- {
                        ix = 2;
  M! g& m9 G, j. k$ f6 Z                        exitg2 = false;
6 L0 b8 b- f( E4 n                        while ((!exitg2) && (ix < 81001)) {  y. z- U7 K) M0 e# R& {
                                ixstart = ix;
& ^) G& X- V2 S/ f* X' D( H: |                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 h) `6 [) ^$ ~5 c; {3 E; n
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
8 Z+ d% c6 s" r2 D9 _. S                                        exitg2 = true;
  O: L; {2 c+ j3 k                                } else {* T- ^. @' I1 L, S2 r1 \  _
                                        ix++;5 b. B4 V8 H' H# L. f& G% z
                                }3 j" y- I. L' D) ?. s
                        }
, J! l5 z; X  d/ B/ S! _1 E                }
& T; _6 z% l: u% F. ?9 _' g3 h4 P! \. d
                if (ixstart < 81000) {
5 v1 }0 l+ I1 B5 n, Q2 l$ {6 f! {6 G                        while (ixstart + 1 < 81001) {
7 ]9 `4 Y/ w# f" I5 P                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
$ t. O: o! Z4 K, i. ^+ z& O' l/ D                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
1 j) F* B( F+ {3 Q/ q8 ?9 d+ Q" ?                                }
  X5 i$ V& L% q1 {: Z4 b. w' z; K/ ]% R1 |
                                ixstart++;: N4 j( s4 S6 y& d9 D
                        }5 U# q& w  H# V; }( e8 S0 C3 V4 d4 v
                }7 R. d9 \) ?/ n0 W2 j. t; ^

7 Q, U( `! r: A& @: L  B$ n                ixstart = 1;6 g6 F  \. @3 h
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];- G1 }# j6 Z% V& y/ v- m. b
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# {; |/ p5 N$ l6 j
                        ix = 2;
# v/ H2 W4 Z6 T0 K: R                        exitg1 = false;
% G3 \7 d9 w( `8 Q                        while ((!exitg1) && (ix < 81001)) {
, U% ]; g6 f+ p                                ixstart = ix;
" [3 Y' [3 Q( ]9 R7 |( m& F/ S                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
' b1 e& q) k0 u; L2 f6 p; b                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
4 K; R! J) B& s+ Z. _: ~# @                                        exitg1 = true;! A4 D( L7 N7 _1 H3 y4 ^) R8 r
                                } else {
# F. I( a% a: b' f                                        ix++;
3 _! _  |0 y0 U, K% n                                }" j4 Y4 ^8 I, R9 o, I
                        }
; k' R4 O$ D$ q! v                }
7 p' z4 {9 I# U- s
( D0 ]; K5 {3 e8 F; Q                if (ixstart < 81000) {
1 I2 g1 N! T7 C7 Y+ n                        while (ixstart + 1 < 81001) {" Y5 }* K& h6 m
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
9 n- I7 ]- \$ C. d                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];6 Q& R$ H' y  \4 P6 n% j& f
                                }
8 T& X$ |: \. Y( q7 E" W& V7 s& b& x& h7 w; B' k; m4 C+ @
                                ixstart++;( {3 d* V9 E( H7 a
                        }$ f. z0 |7 @: @' H
                }) y1 `( l/ I  _1 C) o
- g. g6 G  P1 ~+ l  b# C( R, h
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
: R0 L4 g9 F1 R. |( U+ m                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
' ^4 t3 I4 n8 V% t                        yiDuanShuJu_mean = mtmp;
- {9 l* W( @: `6 _5 X3 b* m                }
4 M4 P+ O$ Z8 y' p' p. |
2 _2 ~3 Q1 Y1 n' E# u3 d1 p                /*  找出极值 */
2 X( }8 q  C& D, c# b! b6 R                for (ixstart = 0; ixstart < 81000; ixstart++) {- h( K* Q6 O& i9 L$ S: R. x) l
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;0 m7 S; p8 P8 M/ k* x6 T
                }" t! \" Z# ]$ X7 O' H  }3 |' j

/ x3 v6 r9 p# x0 C        --------------帖子字数限制------------------
* _& S& v) n8 ?4 n, ~, x# W}
. l& _* \. c# b( Z& C! t7 {
  e) I+ A* u& N( H* u- S( E# ]$ ^$ T8 @; u

本帖子中包含更多资源

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

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:18 , Processed in 0.048978 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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