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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 1 n( ]" Q7 G% A# u! F8 O

+ `! E/ L% a4 H各位大神:2 C0 A& H: I+ U2 r* R# R
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)8 V( W/ a/ i) Z# P( t) ?* T! p
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:9 a' C+ o* t3 j

/ R: I' U. z$ u( c% u/ T) d     0 ~! n/ ^" B: @: S* n6 v/ W
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。- v7 v; I$ }  F

5 Z- K( I+ t5 }4 _并没有其他线程
+ e' b% B) f4 y8 J4 u9 G% ?反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。( s) D7 g! b4 m8 a7 }8 k2 B7 w
也说不定是和堆栈有关系。。。。。。
/ Z6 E' [; V# m/ B请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
5 Q. d! }4 o: Q" k6 E, ]% `2 }2 [( y1 A4 @  E4 N

9 J8 w9 q+ L' n( V9 K, L) }# @4 F3 L* V
我也很绝望啊,希望大神能帮帮忙,感激不尽,!+ s# ?$ ]' I% y/ \4 R6 j4 M# ?
; G! p& ~* F) L" y) L5 d

) i0 I0 B7 V% l: r4 p附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];# k) c- J6 h' f- R
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。6 W$ c) a' x1 d8 ]3 O' G$ u2 u

% x- E2 [4 J. n1 gboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(, H7 s1 T6 s. h5 m
                const double data1000[1000]) {
! U5 n: a9 P+ \1 W) M3 A( C  n( U( m% c4 ]3 n* d( H
        int myfuck;
" `: q4 V9 j& `$ P        double yiDuanShuJu_mean;# i# I4 M: b: C+ i: d5 q
        double yiDuanShuJu_LowMean[1000];
& ^  G! B: a( O6 e6 b        int ixstart;
% f8 V1 _) \/ U0 M& m        double dv0[1000];
; A. V2 A; p( b        comm_AGC pAGC;
6 y- P) G1 s# n! u' y        comm_CarrierSynchronizer pFineFreqCompensator;4 m9 ]1 V) J7 V) |
        dspcodegen_FIRDecimator pRxFilter;
% p& K2 N, F2 S* V+ D) y. p        comm_SymbolSynchronizer pTimingRec;
8 m  z. w. R* C$ H        comm_PreambleDetector pPrbDet;
8 `. R3 V! H- V- P0 [0 E/ [5 {0 n        FrameSynchronizer pFrameSync;- N0 x7 ]; C+ L* ^( p! S; f1 u
        QPSKDataDecoder pDataDecod;
+ Y8 d, O2 r5 ^        static double usable_left_filtfilt[81000];
5 C1 Y' D: V% T$ O% b/ L        static double youXiaoShuJu_QuZhiLiu[81000];
3 V0 F1 p+ J. [, c        double mtmp;/ x) j( [; }4 |2 t, k9 c- \
        int ix;4 G' i, |8 G3 f: V! p+ Z% s  ^
        boolean_T exitg2;5 p8 H! o' a! B
        boolean_T exitg1;
8 |6 z: Z4 Z9 K4 p1 _7 J8 u: z        double YiZhenShuJu[800];1 Y( Q: N2 k  b+ R, i
        double dv1[800];
7 J3 k- O; j; U- P
: _$ G7 \  q. L  p3 ~  E
; W( z9 p0 X6 D8 w& t( z. D        double b_YiZhenShuJu[800];
8 b; v  D, H" H        double I_filtfilt[800];. D; ~$ G- \6 N" |6 C  F2 B" s
        double Q_filtfilt[800];. K& c9 O% N/ p0 y# S3 L( b. o
        creal_T b_I_filtfilt[800];
, o. P4 t  {8 T6 q5 J5 B5 I6 ]2 t        creal_T b[800];# {- d5 H3 G2 F7 _$ P
        creal_T RCRxSignal[50];8 }# T( T9 ?& P# b9 J1 P8 L
        creal_T fineCompSignal[50];9 f7 Q) p! t9 @. x! }9 Z5 r
        double phError[50];
# q2 x- d* Y3 L8 r! m        creal_T timingRecSignal_data[28];# S+ _1 ^6 r" c( j$ o0 a
        int timingRecSignal_size[1];
+ U* |6 L; U! [; H2 E+ r  _5 J" x        double prbIdx_data[28];  H1 ]; ^# \4 h8 a  Q: [1 Y# ]4 m
        int prbIdx_size[1];# M4 u5 O& H& E! R9 H
        double dtMt_data[28];
* S# p! v$ S& m$ \& V2 F        int dtMt_size[1];: H$ f! I3 i+ o: \$ Z
        creal_T symFrame[25];
2 u1 G% j4 f1 u; C1 U  D3 D. ~        boolean_T isFrameValid;
8 a+ c$ p2 d6 B) v8 R; e        double unusedU0[3];, H$ f; [) n8 B6 S  H

4 w) s+ K9 k$ n2 D+ i- n/ ~' c        //调试过程中的变量
, W: ?! F  x: \8 k: ~; W0 q' f8 O        int  enough_data;
& n, @3 ?  \8 r" c" x( m0 B5 s3 [( K/ ]9 |( |/ `
        int enoughDataFlag;' p# W- R7 \/ h- X- X: \
        int yiDuanShuJu_mean_int;
0 Z6 I1 N. z* F1 S/ L        int int_sum_dv0;% j0 E& }+ \. R5 {
        int oo;. P3 R& `1 L* I( H) i, Y
        int ii;2 c9 J0 c$ [% v! S
        myfuck=10;. ~5 Q% M$ g6 r3 m. O9 z
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
; F- A; Q$ L) ~# H3 @        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */( j% b3 q# W7 X  f7 @- H, z, `, v& |7 a

- H! }! @! o" u/ u) t$ ?( `        yiDuanShuJu_mean = mean(data1000);# Q7 w4 M6 w) C9 R9 [( q9 G" }
* Z6 r4 f: t, N6 G, {8 N  z+ c: R: o# N
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;3 u5 V" m- w6 }: _/ C8 ]. Y
        UARTPutc('A');
2 D' i, v# Z3 Q" O        UARTPutNum(yiDuanShuJu_mean_int);; s# Y6 D7 C" V8 V
        UARTPutc('\r');. {! K: J; a4 ]- C7 y
        UARTPutc('\n');9 B2 c- u4 ]( p4 G9 K6 _
. e* n( Q) N) j) d' u0 [+ l) j- L
        for (ixstart = 0; ixstart < 1000; ixstart++) {& c9 U3 }) H; K3 q
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
' ]" u  c5 ^+ E% C: u        }
2 x6 D+ c9 ~( P* H; D! y: N3 f; p  Y( b) A  L+ n
        power(yiDuanShuJu_LowMean, dv0);
* a& x" q- c* m" j9 G
& A( r! P9 g# w+ {) F) q        int_sum_dv0 = (int) sum(dv0);
+ |6 f: J: c  p" G. {
) Z) b- [  F& G) |        UARTPutc('B');' R7 r' g! Y2 s* s; c6 ?* z
        UARTPutNum(int_sum_dv0);& u# ?) o2 _- Z0 D6 V/ H( |) n
        UARTPutc('\r');
. f& Y: H/ X. @0 i5 `+ }$ f% E        UARTPutc('\n');4 W% H) D4 `1 h9 ]

, h7 |2 F% Y* Q% z9 T//        int compareFlag = int_sum_dv0 > 1.0E+8;
, ]: t6 M6 M( R- A% s7 j8 d2 P+ A/ Z- t7 i
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
) v1 P6 P' |& ]6 }) _8 ~; ?! l                UARTPutc('C');
% W  U- c2 u/ Q                /*  比较信号能量 */2 w. l0 U% s' v
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */8 F/ _) k( i7 w# L9 a8 Z2 w" {
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
9 N( H/ c7 d8 ?# ~//                for (ixstart = 0; ixstart < 1000; ixstart++) {' p: ], r8 @3 |: @
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
5 h8 _2 Y/ ^6 `6 [& E//                                        yiDuanShuJu_LowMean[ixstart];
" m6 |; e* d$ C) u//                }+ q5 Q$ @, b2 x" ^4 E0 `- Z8 d
//0 U, d4 N% ^5 |4 n) c
//                youxiao_k++;
7 e/ _# P' S% [, {) o# n/ r5 p/ u//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
) ?1 w: a5 ?9 e9 a; d# W//                        /* 感觉要取21个数,即0-20, */
: q) M4 h: H4 b, j//                        enough_data = 10;//有效是10,无效是09 U8 W, a) b7 v# ~1 t; @
//                }
4 c9 Q% J: P- D# t6 M        }) V% W3 L6 ^" c4 F6 P
  D1 Q- d- {) a; w; `# [
+ I  X6 G1 z' d/ g
        enoughDataFlag = 100;$ `! l% }& R* X, g
        enoughDataFlag = 1000;1 \! [6 B) B$ S# g
        enoughDataFlag = 0x02;
9 r# ~8 X# P. S        enoughDataFlag = 200;- I: e% J: N$ H

6 Y0 L# g4 N5 z1 {        int myfuvk1;8 [1 S9 Y+ d2 S4 ^9 z1 M' [
        myfuvk1 =11;$ Q" X3 M% Q  k- }+ N! @+ U
5 \3 B7 `, Y5 P7 Z( c5 d

8 B2 H+ h* u5 l3 x& K9 U* ~        enough_data = 0;8 \# ?# f$ O1 G) Q; p0 E2 j
, e9 _0 |' K; G2 r& D$ E. W
//        if(enough_data>50){
, ~6 I, e4 ]: C/ N3 x1 P7 y2 N: o//                enoughDataFlag=0x01;0 q# @; I4 Q8 {" {- z: m
//        }else if(enough_data<50){
- {& q4 w0 C/ x. R//                enoughDataFlag=0x00;//0x00还是不行  ]( }& E4 \; v$ @0 I; v& `6 M" F; H
//        }
" I0 [+ V# `& ~
: y( F: o7 Z4 V% t1 E& E5 {/ q( e! d& M
        oo=10;8 R. O8 T  d" d0 @) Q7 i' |  V
        oo = oo  <  5;
0 U- _6 }7 X4 I1 f+ T        if(oo){4 T4 x$ H0 M2 p& N, C
                ii=0;! x$ H& q9 V' j9 L& A) K
        }
7 {) e$ d' i8 q# s. G        if(oo  <  5){
' U" \4 e) ~' ?                ii=0;
8 X( ?& w+ m8 {2 k        }
! [9 ]0 [5 |# J& o& b& c        if(oo  >  5){
. m5 o1 n$ B) C0 R                ii=0;
1 w8 {& Z8 G6 {2 p# T3 X        }
7 F' g) h  D" W/ t; J  t; a8 ~4 T( `7 @0 ^! M
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
% R% Q& F$ K& F        /*  如果数据足够才执行主程序 */
' \0 @3 h: ?% Y. O        oo = oo  <  5;
4 {# ]1 @5 W" H0 m( R        enoughDataFlag = enoughDataFlag  <  5;* f. D) \/ T5 }2 Z7 z1 F
        if (enoughDataFlag  <  5) {4 P' A3 ?. C& J7 r2 i
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0* I6 _3 V. V0 Q% V  v# y: Q3 v
                AGC_AGC(&pAGC);
3 p+ E( |5 |$ O
) G# t2 A! _6 T6 d, C' A                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);+ V  A1 E, D2 D9 z5 p1 W7 D/ @
                FIRDecimator_FIRDecimator(&pRxFilter);  p0 ^6 `5 w% y7 D, i: E

" M7 k1 d! h6 b% ]9 E8 r, |                /* Downsampling */
3 K. w$ s9 h! W( @" l" Z( g                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 b! ^! Y/ @$ y4 p# P

7 i* O9 e4 G7 S8 a( A  i6 W                c_PreambleDetector_PreambleDete(&pPrbDet);
# ^2 {- D1 F9 O6 ^" `- F  \  U3 I/ X$ R6 s2 l8 J
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */# a$ K5 ~$ a# q' n* @0 q
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% *// b  X8 Q  g+ G; [7 z- [; O
                /*     %帧数量=100 */* z! @3 Y8 V" M. d( j. c% Y
                pFrameSync.isInitialized = 0;9 b5 ]7 ?7 D" q$ t

- @1 H. T4 {" L1 m                /*  [EOF] */
# P4 r6 Y+ Q2 x8 S+ e                /* 前导码长度是13 */
1 z: e, Q: a* Q" `, i6 k7 C* P  w# Q% H                /*    %qpsk */
! h( a/ e# E% T% [! B                pDataDecod.isInitialized = 0;
' x7 }: b3 P% D8 m4 K% `6 w2 N
+ B' R) X" j: z; z                /*  end */7 g: ^& }( P9 c; c
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */- [+ H  z/ o' D4 H. q! k
                /* Convert 3-dB frequency */7 |/ C" d3 e' j3 q9 ~; a7 d
                /* Convert 3-dB frequency */
9 Z$ O9 k0 u) d. Z                filtfilt(save_buffer, usable_left_filtfilt);
3 Z  F3 F, G% j0 a0 V4 m/ {- O2 k% t5 f                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ l$ N1 u7 u( {/ w. x                        usable_left_filtfilt[ixstart] *= 2.0;: }, z0 y8 t6 o
                }
3 `& A+ i; o3 l- F2 D& y1 o5 \. }; }. H& v% Z: b2 d+ d
                /* 注意乘2,处理幅度 */
! N) `7 T: X# W; }0 k) P                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
: s3 {' R& V+ Q# x( a7 K7 {/ O                /*     %% 行列转换 */+ U- F5 l0 l% ~' p
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
. r4 K/ j% E* H7 m2 o                for (ixstart = 0; ixstart < 81000; ixstart++) {6 Z4 Z8 z7 X' X) Q
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
9 k* s/ e4 }2 ]3 C% m                                        - yiDuanShuJu_mean;7 ~, M6 [( b, L: m1 H: b
                }7 u, X; O8 ^0 b

  e! V: S9 u/ L$ f+ m+ r0 A) p4 F                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
9 O6 |, Z8 U" Q( V                ixstart = 1;" C" p  U. o5 V& I+ l6 y& w) g
                mtmp = youXiaoShuJu_QuZhiLiu[0];
' R9 n, U" Y1 k, h( }8 V/ n                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
8 w6 A& V4 x# Z+ K+ J                        ix = 2;
1 w! h/ ^7 K1 l, J                        exitg2 = false;$ g, N! V: P5 e% Z
                        while ((!exitg2) && (ix < 81001)) {
# \: }; R& `+ v' Z' P2 {- M' K                                ixstart = ix;8 Q, y1 J- P/ C1 Y
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {) l. M* z, p$ d2 ~0 {- r! n- s, Y$ A
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];( c# e4 H9 j" K2 T$ W) `$ I
                                        exitg2 = true;
7 B  G' q+ o2 c% d5 n: q6 l! U6 }0 W                                } else {: E* t* G0 \0 p% }
                                        ix++;
4 r/ l! ?, f; ~, E6 |9 h* u/ {                                }, C1 x! n1 r( o5 }: |
                        }
5 l6 ^& n: Q& X! H5 O                }+ n% }& Y) G: r7 ]7 r! [. G: I2 u
7 |0 E1 y: g* W( f0 K
                if (ixstart < 81000) {
8 A7 q6 A0 A2 j; o                        while (ixstart + 1 < 81001) {
, P% Q- I5 i4 T# c                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {9 l  Y. p) G- m0 \) Z9 }# J. {0 b; R
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
$ v% A4 J. K7 x3 O! k% i                                }0 B4 C" ?$ Q3 ^* G) D% j" y# }

* E8 l' q) h: Y, h                                ixstart++;
9 v$ q0 O; _2 Y; h0 i% [                        }5 e8 V" y# a% l
                }
1 ]. S8 J% N% Z, T; H$ H) }: F' N8 H/ ]2 X+ E8 f9 L
                ixstart = 1;4 f( {5 L- w5 ~' Y# d
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
$ l) O" |& z! C, \. d3 B                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
! q, `8 O1 ?. _9 ~+ b$ [                        ix = 2;
1 F- X+ d( T' W. p% ]                        exitg1 = false;
0 C" H# d% G& t. x3 E                        while ((!exitg1) && (ix < 81001)) {
: M9 T: h5 T6 G! O                                ixstart = ix;
5 U& Z4 I$ e. t- g8 A- z2 }8 T                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; L4 z; g  G4 J# j$ q# w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
8 ]' j$ P4 ]( J" x% p$ }                                        exitg1 = true;
! `0 _+ u7 n) y8 Q  |/ @                                } else {
& u. Z2 b+ p4 T* l+ G% t: G                                        ix++;
" Q7 Z0 n/ U; B. \+ H$ h) U                                }8 J% D; g$ N6 Q* r
                        }
# u: k! G' k& k/ M6 S                }
3 }+ w9 l  Z, g& ^& u$ [9 a
) _0 n+ C7 f6 p, y' U                if (ixstart < 81000) {+ v. }* [; W" K4 J" q
                        while (ixstart + 1 < 81001) {1 E  [2 _4 K. u& s+ L1 @
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {7 L/ f' g+ k! i& v$ S' {5 i/ o+ q% V
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
5 z. B0 a0 w+ E                                }
) _# o% `' \' W8 q2 H
% o& V2 v) ?4 D& b                                ixstart++;: x# v3 f+ M2 B5 _$ R
                        }
9 \! D  G/ v5 {% J. \. T4 |" G                }
* ?5 U2 g+ ]/ O2 A9 J7 U; Q
) m( B8 m! j) Z& X8 @                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
& N) m0 b8 a! b+ t1 g8 K* z* A                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {, [: s. \* W3 R
                        yiDuanShuJu_mean = mtmp;( n1 S9 a" ^- z6 K
                }1 f; A0 |: P8 Y/ C9 ?0 O
: A9 D4 O* A9 W% Z5 Z& a' A
                /*  找出极值 */
5 O" E& p- F$ y9 u                for (ixstart = 0; ixstart < 81000; ixstart++) {+ r1 S8 ]7 `, m( }" n2 K  ?- T" C- a5 S
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;# I* K0 ]; y9 M; \5 A; L
                }+ g' Z* R8 w( j  T) c9 Y
7 g# I8 l0 c: {/ E8 N  A
        --------------帖子字数限制------------------
/ f( T& y0 |5 d% b5 A: U7 g, U4 g}
$ d% s3 t+ V# w2 L/ ~+ t1 h
4 B# D# C! `! X( Z" w8 y4 ^' V& N' [- E( d' v5 ]

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 00:29 , Processed in 0.049336 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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