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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
3 U* `7 |6 ^; O; ?2 J* H
, {7 F6 @: x( _8 @" r9 ~( K各位大神:
1 I" Y  e; E( N; x" }0 p; L     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)3 D: D! a- F$ `$ R, ]- [* j( T2 a
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
$ B2 V" e: p  Y: K. j  p( W) R
1 L# ^! W5 o& G0 m/ s* h     7 R0 y' |# z. s. j) Q6 R. W
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
# s# n9 N( I3 X6 c+ ~; Y0 V/ L* J7 {& w) b- P* V
并没有其他线程* n1 F' }! I5 n6 l# E
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。3 M1 T* X. ~5 {. v/ n
也说不定是和堆栈有关系。。。。。。
& P' \7 `& @# r3 m* w7 U  @请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 |5 `( G# @$ N( q' c: j8 q4 b4 Y- W( L% A( a

, q3 w, Z1 w1 v9 `) v$ S" A, O) V+ J8 F) U% n7 Q, A# u
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
  z4 J$ P2 D# R2 Q9 W1 \  [9 i  }) _2 F! P& Z( l) Y
, I9 O( c! A: a8 s, j8 |* b/ ?
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
1 `/ o; j7 `2 l1 g        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
$ I& `$ _' F7 N' k& e6 m- P
  Y7 z8 Q2 S( m: B: \; Sboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
' R* _! l  {5 [5 p3 D                const double data1000[1000]) {$ n& u# S7 R; n: ?1 {" P
* p! ]0 h5 X% g$ g
        int myfuck;" Y5 ~5 r! o2 C( C# T/ O0 l; D
        double yiDuanShuJu_mean;
' P2 j' c* \5 F6 h, Z" f7 H' H        double yiDuanShuJu_LowMean[1000];
) e' b& ]3 U* K0 G# _2 Y        int ixstart;1 b# p: p7 C2 I5 O: X" \& D
        double dv0[1000];
* [7 C; N9 g  O. l        comm_AGC pAGC;& d1 \; e7 J, O$ S
        comm_CarrierSynchronizer pFineFreqCompensator;5 U+ k: w# }# P9 l
        dspcodegen_FIRDecimator pRxFilter;& k- ]0 [! @- D0 V( z6 `
        comm_SymbolSynchronizer pTimingRec;# t' }$ M9 t& [8 @
        comm_PreambleDetector pPrbDet;
6 C, T- N3 D$ O! {! i        FrameSynchronizer pFrameSync;
+ I9 M- e0 z. n6 p        QPSKDataDecoder pDataDecod;
0 _( W% Q/ Y+ E        static double usable_left_filtfilt[81000];, w2 C7 F- y+ ^9 m7 S# L% ^: {
        static double youXiaoShuJu_QuZhiLiu[81000];+ h  X( X4 I2 f" \! I
        double mtmp;
# S% x0 n: h0 z4 Q, x        int ix;7 x+ ]. ?2 m1 W' m8 {/ f
        boolean_T exitg2;
/ A; _& u: m+ m6 t' K1 F/ m        boolean_T exitg1;1 D" F3 e! ^- P, d6 C3 E% j9 y: u% h! o
        double YiZhenShuJu[800];
- p7 M* o4 J5 c        double dv1[800];
, y# ?2 W, D! h( r0 w- T( w
( B* I0 O7 W* S+ Y$ q9 w. p% y* U6 U# g7 [
        double b_YiZhenShuJu[800];' [9 ~5 }. Y$ ]& `8 |7 o
        double I_filtfilt[800];* e) r1 u, {' _1 Q9 ]: M7 j
        double Q_filtfilt[800];
6 x% z4 f0 P1 e7 K( T        creal_T b_I_filtfilt[800];" x2 v4 k: D0 M6 L1 R
        creal_T b[800];
5 n7 M4 b. L7 U$ P& K. Y        creal_T RCRxSignal[50];. f  r, O3 ^! d1 q3 P/ u
        creal_T fineCompSignal[50];
; J6 U& a( D8 i& i        double phError[50];* _5 g3 {/ Q" N4 b
        creal_T timingRecSignal_data[28];
, p4 `3 w! D5 R( v1 r7 ]( n        int timingRecSignal_size[1];) V& S9 R7 O+ Q2 e& M$ q
        double prbIdx_data[28];
' P9 ?, ~  o) N9 a/ G: d7 }        int prbIdx_size[1];: R& _2 T: O9 O
        double dtMt_data[28];
. U% }; Q/ _) L, K# x" h) P: q        int dtMt_size[1];$ n5 \, K( |* {% C1 f
        creal_T symFrame[25];
- M3 Z: Y: b  h: J2 p+ F        boolean_T isFrameValid;2 H9 L: U# r. Y- r
        double unusedU0[3];
2 a! d; e% L' G* c
6 S3 ]. z6 B6 I4 E4 P& r        //调试过程中的变量
5 e5 i7 ?' R. B5 w, Q' ^        int  enough_data;0 `/ _: j3 u+ t

8 p2 ]/ z; a; X' I$ o. `) }        int enoughDataFlag;! @7 Q1 x8 v# u7 {# b2 y5 x  L
        int yiDuanShuJu_mean_int;
6 K  j- H0 e5 I! P4 D2 D        int int_sum_dv0;
% }- r. V1 S3 e7 D' x# o6 D4 X        int oo;+ J- b) U3 E, x
        int ii;3 B2 s3 }: ^* Z8 `* D, Z
        myfuck=10;
( N# i. m: w( c4 g        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */- y+ `' X% t' W5 Z4 n
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
$ L+ v; S& }: u. G8 S; ^1 D2 o
5 S+ Y4 Z$ J% T4 [1 `& s        yiDuanShuJu_mean = mean(data1000);
7 C+ o" ~- {# s. w: ~. B( E# N  M5 T2 B! j0 ~
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;% v' L1 p+ g* _: S0 T- `4 N. {6 ]
        UARTPutc('A');
8 v; r4 g- }+ W8 R' f1 }5 g4 i        UARTPutNum(yiDuanShuJu_mean_int);
) H" Y$ K) R$ q        UARTPutc('\r');, X# @, P- A4 i( o8 O$ y
        UARTPutc('\n');4 J0 z, V+ M' X. H6 ~' m0 x0 y* e

& m/ i! I+ h9 f3 Y1 C5 w& k& ^        for (ixstart = 0; ixstart < 1000; ixstart++) {; b* p+ e! L  H. F4 d
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
5 A4 S+ z  I% D5 k/ H% m$ }        }
$ D+ m  S' O( N9 y4 ^; b, z+ v, G) }1 v* [7 U3 b3 Z/ d6 s
        power(yiDuanShuJu_LowMean, dv0);- }8 s, l: m9 N: p1 o6 o8 {
+ B# J, p6 I# B- b8 z
        int_sum_dv0 = (int) sum(dv0);4 U. {7 }8 T* c; @9 H! W  \

, e% N) F/ j+ u% K        UARTPutc('B');. H# M- n$ `1 Q2 N
        UARTPutNum(int_sum_dv0);
) c2 L/ A! A) p, u* V0 `5 |        UARTPutc('\r');
0 K* q7 |, b* K' P1 u0 a& `& s" r" u        UARTPutc('\n');# L5 Y# Q6 t7 W0 w9 ~! j+ ?
) J% f4 m$ M" L" }7 {
//        int compareFlag = int_sum_dv0 > 1.0E+8;5 K# K4 x2 J* b2 x2 g$ N

) p2 R$ X9 s: @4 K0 O4 y2 {        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?: H: t9 g% ]) f* |* B. o, N5 o
                UARTPutc('C');
) A. d9 O& a+ L2 s3 s                /*  比较信号能量 */$ x! ^3 Q4 W3 r2 R/ ~8 ?
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
/ x' \( h, I2 K( n  ^//                yiDuanShuJu_mean = 1000.0 * youxiao_k;. Q! v& X$ v+ x: ?, d3 K
//                for (ixstart = 0; ixstart < 1000; ixstart++) {6 B; p: Q6 N, S  K$ K
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =: R0 {( ?" `% _5 W, s: \
//                                        yiDuanShuJu_LowMean[ixstart];
2 M7 ^" w4 X' K# |; X//                }
" \* b4 e$ \% q- P//# t- C9 r: j! e. Y7 ]
//                youxiao_k++;
% J  D" l3 x+ Y+ U9 M1 q//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
9 @9 L6 [5 T1 Z' L" ~//                        /* 感觉要取21个数,即0-20, */' X2 l1 k3 C! F" G' Y. ?$ d
//                        enough_data = 10;//有效是10,无效是0+ \5 ?, U5 b2 p: F9 c* W3 G/ a
//                }& {1 a% z( k5 E* B2 L3 A
        }) y! {6 [5 r/ _+ ~9 b* y, d

; }, F5 a* K# q! B+ J# {/ D( h9 i: u' H1 L2 _
        enoughDataFlag = 100;, f7 [- K$ a; z
        enoughDataFlag = 1000;
5 d9 N4 Q; {. s* K# n; g1 F# {        enoughDataFlag = 0x02;
- k2 l  P+ w. f9 @! G: K) |" I5 W        enoughDataFlag = 200;
5 S2 G5 {2 f! ]2 a
, O# l1 T' V. q0 V' V: S  l        int myfuvk1;
8 Q" R3 d6 [5 v# L2 {- `        myfuvk1 =11;7 ^. `4 v, q) W, K

0 |, K" r- r# v; L% H# [. f
! i& M* A; G! v6 C2 @. y6 U" M& n: e        enough_data = 0;
0 j0 q, m* L$ a& G4 ~8 j! X; M' M
) }. ?3 I7 x4 u# S' J' c& U+ R- N% f' ~//        if(enough_data>50){! e: W& _+ C3 L: i; a4 Y
//                enoughDataFlag=0x01;
# u" M) K% V6 E//        }else if(enough_data<50){
3 h; h* k* u( ]! `! }# O//                enoughDataFlag=0x00;//0x00还是不行& e3 t4 [- M: L% L5 n
//        }
) X8 }! p, G# J& k' r1 Z; R7 w8 ], p# l* A' _2 J
7 z% g( S  }# Q4 o5 p
        oo=10;& S9 z: Y5 d2 R" _7 c8 Q2 x3 V& V& B3 N
        oo = oo  <  5;
* \" @$ I4 _% J' k* Q# C3 f        if(oo){8 b- s  z# F' a8 a* t  {; N9 l
                ii=0;' F$ @; D2 A- X9 b' b; j
        }
8 N, O  M; P( R$ g: k& G. X8 O0 V) Y7 j, I        if(oo  <  5){
, q+ {/ v" w7 y0 \- N: `                ii=0;
7 K3 Q# n" f4 r; A1 w        }
/ W' x. `: l. H2 y' {" ~& I        if(oo  >  5){
# H5 u4 H* Q% f" n, f                ii=0;, x3 U3 e) ?# h6 A
        }
1 f1 @; l2 v8 J. t! Z+ M( g5 J7 ]  \. E( O
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
& `* l' b8 w9 C9 H( X/ S( h        /*  如果数据足够才执行主程序 *// ?6 C" s, h0 M. y# d; w' h) F7 Y
        oo = oo  <  5;
* `1 u5 S6 b' A        enoughDataFlag = enoughDataFlag  <  5;
+ }; W8 S$ P0 u+ q        if (enoughDataFlag  <  5) {
1 v" A: N4 f. {7 A6 }, b//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
$ y9 j* [+ R* D- I! v8 d                AGC_AGC(&pAGC);
: F6 q( o9 ~) m4 j3 Y1 P6 l& }4 n  k7 T  U) Q+ N
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);7 Q# I2 B! [2 \* H
                FIRDecimator_FIRDecimator(&pRxFilter);
0 \" T: H9 n0 O( Z& N4 h+ q
: l' Y) v: V" ]! t: e                /* Downsampling */1 W& Y8 }- x: K2 _& s
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);7 f% i, C3 _& ?5 Z) x1 y% u- x* |4 b  B
8 _, h4 E% g, F! m9 k7 u
                c_PreambleDetector_PreambleDete(&pPrbDet);* \" ~" m2 W8 B" w* G) l7 H: i
. c( T; Z2 Y2 X; _
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
& b% n. X0 }$ t0 s                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
# `7 m! u4 p, ^% R0 v                /*     %帧数量=100 */& Y' H2 Q+ W* O. p1 V
                pFrameSync.isInitialized = 0;( O, o& \; p, [

3 T# X; M$ K( d6 \. R1 R. w& ?: K                /*  [EOF] */) D3 w$ ]. W8 o" G! W: X: J- R1 l
                /* 前导码长度是13 */) p; R0 ~. U  ^
                /*    %qpsk */
: x8 _8 i) f6 l9 R. W! o6 Z                pDataDecod.isInitialized = 0;+ [! [+ ]& M: T  k
2 Y& ?! D% Y8 ^% n0 S* k/ o6 J
                /*  end */- W6 a' d3 n  A8 i) J2 y
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */; P; e1 j* r+ W$ N" B2 y+ B0 ~+ s
                /* Convert 3-dB frequency */* A% E- {' T+ }$ u1 q
                /* Convert 3-dB frequency */5 ~' h0 e) k+ a. n5 ~9 j$ @+ A
                filtfilt(save_buffer, usable_left_filtfilt);
3 v9 Q" k1 l( H                for (ixstart = 0; ixstart < 81000; ixstart++) {
* C3 \+ T5 w* |* a2 R8 z4 B                        usable_left_filtfilt[ixstart] *= 2.0;
2 ?' ]7 l% D0 S! z% D                }: R2 P! s/ C3 b3 N+ O
2 P, T; i8 c0 F& Y( f
                /* 注意乘2,处理幅度 */: u$ C* T+ K! h: V/ R, u. J/ G/ b
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
. v/ `5 y; F; D: ~: t  P                /*     %% 行列转换 */
" @/ P$ v) g6 t0 j' @                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
4 v, H1 N1 Z# s. G4 R; }& x                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 t+ S% y3 D$ S                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]( t3 S/ t. `$ p% a3 P2 Y
                                        - yiDuanShuJu_mean;* L( y/ J4 Y2 S* c; U0 ~
                }
  N: x$ @( Z7 N: z; m+ Q9 T" W- s4 K, H& p
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
8 O. }- R* m6 I6 N: h7 i$ q                ixstart = 1;
) o/ m3 X5 ?# Q" E' ]2 i" `- r                mtmp = youXiaoShuJu_QuZhiLiu[0];2 ]& D2 f5 o4 o6 Q4 ]
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {4 E, N' q+ O) K
                        ix = 2;0 B" Q9 d, M" u8 I8 d5 m
                        exitg2 = false;
, Y& L, U' s7 T& z5 J! b2 N  P. X                        while ((!exitg2) && (ix < 81001)) {
' C% I! r$ e) ^: F; {9 L  i                                ixstart = ix;
- }' B* y8 F& j% h                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% _8 [% f/ g) `
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];1 d; @$ @# Y3 h- b
                                        exitg2 = true;. w/ M8 t! y# ]+ y2 D( Y1 j% J
                                } else {/ S" C# _* |' R* g: Z( W) S- g
                                        ix++;
; X% a& M* n: G: [                                }
5 p$ J' L( j! E$ B5 w$ G' f                        }* _6 e; f* u. O) F9 `" Z6 Y3 ]
                }! A# ^. M6 l" B, h9 V0 x

# k* ?/ A) ~- b! e4 o3 _                if (ixstart < 81000) {
3 D+ x. d$ @1 b6 ^                        while (ixstart + 1 < 81001) {
! w, f6 {& Q  `                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {* t* H# o% ]& F8 h: g
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
% g- J! q: y) j) t. s! w- ]                                }
; k3 W9 m0 }2 r1 q5 a' X/ l. U/ H/ [; [; w% Q) @' X
                                ixstart++;4 n# m& J6 x% L" o) G7 H2 N
                        }
2 U/ R7 N2 q4 x9 V& W                }
7 C, f$ S8 m  K& f% S# O: H6 b
3 O( q$ R8 ?' ?( D! f                ixstart = 1;. D1 y: Z1 |' W- ~- R4 R2 Q+ N
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];* e; V' h! z, I& _) P/ W
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
& k! D7 F: C9 D9 f8 k                        ix = 2;
! D  U9 a- F& o( Q8 M                        exitg1 = false;
% I9 l4 o+ _  m7 b6 A                        while ((!exitg1) && (ix < 81001)) {1 m  }2 O# H6 r) O- T1 a
                                ixstart = ix;: S7 |' u* q2 H7 b& O* l4 j
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 r+ t6 b6 l3 t* d  t
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
+ h8 j! g0 o. m& _" H                                        exitg1 = true;
1 I4 ~; X7 c* Z- s/ K                                } else {
5 a3 `! V  u: a+ a* `$ q% [                                        ix++;
" w+ c9 }0 x4 A, {3 C                                }' d- e* k; z2 v& G0 C' e/ h9 q) v
                        }
0 w0 s+ Q% z) J( q# |                }
+ ]; A7 s2 e$ |5 o  @2 ~, h6 e2 o# R9 c
                if (ixstart < 81000) {0 W$ w* e, r2 A/ d% {' R; O
                        while (ixstart + 1 < 81001) {
9 v; J: M  E, E7 O7 G( a0 q                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {$ d$ x6 {( Z  r7 \, }1 @
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];0 R! Q  L; @3 d$ ]
                                }
+ r, @6 B3 p7 ^
5 p8 A8 J& I5 c4 _9 q" z6 r                                ixstart++;
& d) K  P( x! Y* v3 z1 O                        }: t7 G2 B6 r( Y8 I3 x
                }
! h1 @3 D1 G7 u+ L) Q3 o: F( E! S9 f4 K# i/ l- F+ E# Q
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);$ i& U5 T/ E' e. w, F9 }; g& f6 |! \
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {& F% c3 Q- P& ?+ Y
                        yiDuanShuJu_mean = mtmp;
# d- s7 x& D( q8 Y/ N. l5 W9 j5 `8 k                }$ v0 T+ D. O: r4 V9 L8 a9 q

2 D7 M1 `. p. o+ Q4 o                /*  找出极值 */
1 A6 {1 E, h" G& r+ g" L4 r/ C                for (ixstart = 0; ixstart < 81000; ixstart++) {7 d1 @, d/ A( W0 |& R4 P' }
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
- v; k: i( g4 z/ O( B! h                }
6 n) [0 Y' _+ S6 K) B& U6 U$ q+ `! _! \. X1 U  c) \
        --------------帖子字数限制------------------
% {( q9 t% o6 i}# S! I+ [. ?5 j* D! P" m

$ ]$ k9 S, C' T: U
* J: a. [. B, Y6 B, N, ~* a

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 02:25 , Processed in 0.042020 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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