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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
8 P, d3 g  A- E  G) U: k, o% S0 E' T! S7 z
各位大神:
) @4 [' F& k( `6 l2 v$ p     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)) W+ @' R, u+ q+ A" h+ k! ^
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
! t! Z$ _, Z$ r5 q, ~0 O) `. Y% s9 Z! c& @/ \( i  \2 |
     9 y* _, @- W; P  o6 l4 p
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。& Y& s; P( V" ~% w/ S: [: H

. I: B) a3 A$ y  O: d并没有其他线程" K" x4 E( D: f2 \
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。. w2 g* }9 Z( F" G; ?
也说不定是和堆栈有关系。。。。。。
3 C! r6 \- V; W2 r, W1 w* L请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....# s7 p: l3 ^9 }2 \) t8 ]% i

1 i" O! i& y' s9 J4 h8 A+ r
6 x  z- {9 F7 `% N: [, O" g# A( E  s" U+ A
我也很绝望啊,希望大神能帮帮忙,感激不尽,!. M* U8 o& ]% z6 @% j5 U$ t
2 I$ e% t/ O+ L' A" \& m

+ Y1 ^& \# w' R4 Q* Q) q( Q! m! k附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];. _$ i3 H0 F2 T$ j! N. @: O2 G
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。- ^  x- }% l  y" B: v: ~- {. u

  B* ]7 K9 R; d# Y6 Qboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(% ]* Y$ j" l1 P( L' c
                const double data1000[1000]) {
. ]2 I2 T. ~/ p% a! U
' q+ O# y. J# A3 H" l( N        int myfuck;
2 q  {/ v* q8 z9 v- D! D. k        double yiDuanShuJu_mean;
& @& e; b2 j# c6 o        double yiDuanShuJu_LowMean[1000];& l- P' O. r1 d& Z; G$ _
        int ixstart;
* a- U: c5 V- r, b        double dv0[1000];
# m3 m2 c+ j6 X% |- W        comm_AGC pAGC;/ J$ p% W1 P( q/ D( d4 i9 P+ e
        comm_CarrierSynchronizer pFineFreqCompensator;
# o: ]: V! g- n        dspcodegen_FIRDecimator pRxFilter;
. y5 g) N7 b- p. |        comm_SymbolSynchronizer pTimingRec;
( n/ s) S5 V+ [( H9 F. |/ A! G        comm_PreambleDetector pPrbDet;# `; ]& K( A$ ]0 t( s2 D& |
        FrameSynchronizer pFrameSync;( B( q5 e1 m- W7 l
        QPSKDataDecoder pDataDecod;
* [- J  D8 V  {: h        static double usable_left_filtfilt[81000];
, \2 R6 U) I/ @9 k/ J% m        static double youXiaoShuJu_QuZhiLiu[81000];
  p2 {( A  B$ x# D: n* ^        double mtmp;+ O$ s+ h3 Q+ u+ C, a; @, D8 n
        int ix;0 B: V! P( k/ U( b2 N
        boolean_T exitg2;
3 `7 i3 `, R  `3 o/ r        boolean_T exitg1;
1 _8 i+ f: q: I, J4 L        double YiZhenShuJu[800];; F5 ]& i3 Y% y5 ^* }1 t
        double dv1[800];
2 ^- o) ?# E- X  c6 F8 R
+ @7 \/ y- C+ H, y" _/ w4 A6 ~: X# E: x) h) ]& I2 o
        double b_YiZhenShuJu[800];
9 c% g$ T6 x! P; A7 R/ g        double I_filtfilt[800];* @$ k& j. }  ]. ~; C3 o3 N8 N
        double Q_filtfilt[800];
. Z7 r: V, B- W        creal_T b_I_filtfilt[800];* n& [" ?. A- [
        creal_T b[800];( V9 Q# A5 W" r4 L( q0 ]& x+ x, M7 e
        creal_T RCRxSignal[50];, _$ E: ]/ i5 M; z
        creal_T fineCompSignal[50];
7 M' L0 o/ Z- w) y9 a4 x        double phError[50];
$ {( p2 ~4 n) H: K+ U' p        creal_T timingRecSignal_data[28];
% G2 q) _6 O: l+ O4 c7 P' B        int timingRecSignal_size[1];7 S( N# |6 }  }. K% M+ l  {
        double prbIdx_data[28];. d7 T! }8 @9 {+ j) K
        int prbIdx_size[1];5 N5 U7 U$ s6 O% {  {1 `. n
        double dtMt_data[28];
2 [1 ?; |5 Z5 c. t! V7 K& v) C        int dtMt_size[1];
3 P  k# D7 ^  F% t3 ]- F1 E        creal_T symFrame[25];* v7 x/ a! G, r( v% m' R
        boolean_T isFrameValid;
! s( w- H" L+ [$ g, D4 f        double unusedU0[3];
3 {. @) z2 V1 ^, r) _+ ~+ U; p* l6 o0 l+ }& U
        //调试过程中的变量
) o  G+ c0 f2 p        int  enough_data;" b6 P% K7 N, G* V5 q5 L0 ^

# U  V' y- m# O        int enoughDataFlag;
+ ?4 J6 a& y/ A- f/ M/ A        int yiDuanShuJu_mean_int;
- ~+ k6 D7 _+ _        int int_sum_dv0;
7 m- m2 g) t! X/ P9 ?  u        int oo;. G! z: o5 l0 m" D
        int ii;
2 H9 V, g% F; V: y7 n        myfuck=10;
. L) |# O7 b/ W9 w        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
/ e$ O8 M7 o" h: P' W1 ?        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
: o& G: q7 ~( Y! v4 }* r( |. Q
( o0 v) w. G; |- L  B& d1 e( x        yiDuanShuJu_mean = mean(data1000);
1 n% V9 K  [/ v) L2 s, F# q  _! a2 z3 H3 p
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
. ^0 ^5 O5 h" V, m8 y; q        UARTPutc('A');; A3 [% o1 r( K3 [
        UARTPutNum(yiDuanShuJu_mean_int);9 G. B# }3 Z( k% }! m$ r
        UARTPutc('\r');
! d- P) R# f- J        UARTPutc('\n');) m  t( S/ n  E& n1 o8 T
; ]& X* O! S, J. e9 w. u
        for (ixstart = 0; ixstart < 1000; ixstart++) {
% G: W  P. P) I# X6 Z1 d; a                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;7 K  z/ h7 Q4 X$ w" Y
        }
  p3 Q$ G0 b3 W! l3 Q1 b0 a- A& d' {% E4 y! k/ e
        power(yiDuanShuJu_LowMean, dv0);# q" E7 f/ w$ Q
+ V! s1 X# Z  I+ X0 J
        int_sum_dv0 = (int) sum(dv0);4 _/ g" N  O/ c% Z, B& q
1 C/ a, V' O% y  P3 X# s, C; y# A" v
        UARTPutc('B');
* @% I5 ]  o; N! q9 k7 z        UARTPutNum(int_sum_dv0);& [" \! K; l9 v8 D$ g
        UARTPutc('\r');( |. f$ ]6 F" [$ L
        UARTPutc('\n');- a  s  m- j8 C6 W% Q& R# z0 s7 ?
" J2 h+ Y. w, v/ a
//        int compareFlag = int_sum_dv0 > 1.0E+8;
( s3 {1 k: ^  w- Q8 p) B+ r3 \* q" L7 d" B1 d: ~( D- ^* y
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
3 C% z2 D+ b2 {4 P. ^                UARTPutc('C');/ t7 a/ i+ Z* J/ d! i" S) Z8 _
                /*  比较信号能量 */' w" a# @+ r3 X6 l- ^( p6 S. W; Q
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */- y  {( F0 ~) k3 T- Z
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;# \$ N; D9 A$ C* H- z
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
& ]0 U: @- r$ b$ {- M' J/ F//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =) @9 t' Y+ G9 ^' y
//                                        yiDuanShuJu_LowMean[ixstart];% a, c) @4 \! Q! E1 ]
//                }( M* L; Q4 s0 X$ J" s
//
& f2 |3 s6 E! V2 s//                youxiao_k++;2 G9 U0 E, w+ E- m7 U# n
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
7 B" G# V4 V0 y  K0 c//                        /* 感觉要取21个数,即0-20, */! E' C% S" O8 T$ i
//                        enough_data = 10;//有效是10,无效是0
% z+ V% B" A& C% D9 d//                }8 s- b4 y  ?7 J- \7 u2 |, u
        }
1 V1 Z7 y4 ^  ^. e1 a* y* B
7 ^8 A* Q1 c0 L; R4 t6 B5 r* I( A  u' n' g' G! g, q# g
        enoughDataFlag = 100;
7 A( z: m4 X3 g" T        enoughDataFlag = 1000;
: r0 Q0 b# r" M7 [- ], Z8 e. C        enoughDataFlag = 0x02;+ T8 J9 w# v# `6 k+ _) e* e* u1 K
        enoughDataFlag = 200;
, P+ i9 Q1 ^1 q$ V% \( K3 X: a$ [$ n2 L' x$ e" `
        int myfuvk1;( U5 h$ ]  O: c  r
        myfuvk1 =11;7 `3 n9 M6 N$ J5 S. N# B7 {

3 S3 q3 o$ P0 T/ W
* z6 @9 t" W. |' ]8 ]- Y        enough_data = 0;+ k/ l4 ?; N$ \: V$ O0 J# ]
9 F+ ~6 i1 |! B( T9 d( ~  B8 @1 f
//        if(enough_data>50){
& s2 e9 H. a. b//                enoughDataFlag=0x01;3 `- Z: @  M7 x! {' \
//        }else if(enough_data<50){; k5 x9 o6 [" d$ B9 z
//                enoughDataFlag=0x00;//0x00还是不行, C/ m% {; O; T2 b/ b' i9 x+ W4 Q
//        }9 c+ j9 K  @- s$ o0 I: \9 E- x
; }- I4 D. t0 [0 y5 N! f. \
3 V% C1 D- X; l+ k+ P  ]
        oo=10;
: U, d) J$ T! q+ T        oo = oo  <  5;
( o2 t* c& P5 d* a8 i/ l; X# Y2 K" l        if(oo){$ g* C5 c; a/ p1 A: _3 |
                ii=0;
$ Q# f) b9 z6 a9 o6 ?        }
& Z0 q% k: ?4 g& N# @7 F6 b        if(oo  <  5){
0 I. D8 o2 P! b' p                ii=0;- ]6 t9 D8 k  p* j& n
        }
0 z1 p2 {' a! `) k$ h/ y        if(oo  >  5){( a. R) m' L/ d
                ii=0;; c7 ~4 I. t& Y
        }
5 l3 k# d( C9 d1 b- u; B
$ W$ ~8 V5 |/ [$ p, H7 G% P        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */! ~2 m/ G; h0 @' a! J5 M
        /*  如果数据足够才执行主程序 */2 a6 L* _# g" X+ A6 S' U5 {
        oo = oo  <  5;' W; R: C/ q, I" S
        enoughDataFlag = enoughDataFlag  <  5;
1 N$ i% ?. ~0 \, d" H3 |        if (enoughDataFlag  <  5) {
" r' G2 P" y! y+ u0 n2 E//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
' d0 O; |+ L/ @# T                AGC_AGC(&pAGC);
9 S& }+ A$ C7 Y! {: a$ R% c: P" ?3 y. |3 V
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
3 v& {* o* H! ?                FIRDecimator_FIRDecimator(&pRxFilter);
& F; w7 ?, z1 Z6 l7 V! g- y; h$ @3 M0 v( y  g8 _' {
                /* Downsampling */
8 x: W7 d" o. ?                c_SymbolSynchronizer_SymbolSync(&pTimingRec);8 ^7 a9 _- `  t7 ]( s

* x! O) k: c6 T6 @) M2 C                c_PreambleDetector_PreambleDete(&pPrbDet);
. T0 r9 L6 V/ q1 k6 e( V5 q8 ^5 k' H' Y! T
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */# i, W8 x( G$ X1 ?/ z7 L# }3 Z. X
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */$ @+ P2 h8 @+ T1 [2 H
                /*     %帧数量=100 */4 l8 c  A0 Q3 `/ i% Y6 y; ^" l
                pFrameSync.isInitialized = 0;
3 @* q4 C8 R) p  z. n7 Q9 W2 ^9 {9 A, d7 u
                /*  [EOF] */! H, h3 s# Z0 w3 l9 b
                /* 前导码长度是13 */
3 v2 b0 J! r- b, k# X, p& X                /*    %qpsk */
/ L0 U& Z, H9 d9 y& D) |; W- ]                pDataDecod.isInitialized = 0;. X7 J+ n& u6 V' k- I# ]* R
6 ~8 H& F& v$ S6 A( Q
                /*  end */
0 S8 [- S! L6 r2 \4 p                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */. ?  P! p& G1 l' V5 k: F
                /* Convert 3-dB frequency */7 n( m( g5 d. G3 h
                /* Convert 3-dB frequency */
7 ~2 x4 r) {* l+ J! {                filtfilt(save_buffer, usable_left_filtfilt);# o5 ]! e' G& P  Z9 G
                for (ixstart = 0; ixstart < 81000; ixstart++) {
, e; Y* m6 M. t  a5 l  o: B                        usable_left_filtfilt[ixstart] *= 2.0;
4 ], N( o, [, T8 J' U                }& T0 ^$ F0 _( g3 q
5 _+ K1 ^: p/ p
                /* 注意乘2,处理幅度 */$ U4 A" a" v* I+ V
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */: X* M' L( l8 l9 Q- `
                /*     %% 行列转换 */$ M' }& s0 S% K# P7 d
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
3 J5 B1 C' x9 {. Q                for (ixstart = 0; ixstart < 81000; ixstart++) {* x! W+ V  G4 F' h# D$ `
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
( ?3 b# }* r& V0 j1 v0 T1 `                                        - yiDuanShuJu_mean;
# D; X& y4 A" J4 K8 b5 n6 H0 q9 |                }
- |5 h- |' r+ B/ E) j
! S6 N; I) \& y/ q; w  F                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
  P0 }- N: L: J. N1 K5 `6 u' U9 j                ixstart = 1;
' l: F& O9 g$ h  E9 i                mtmp = youXiaoShuJu_QuZhiLiu[0];: ]$ g' J2 k& T2 G& O4 ?: I0 E
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. e# }1 v5 a) [9 r2 i+ p- ^
                        ix = 2;
. f  W. W8 ~) R! ?8 o                        exitg2 = false;
: {- _- I7 X7 y/ F% @1 u                        while ((!exitg2) && (ix < 81001)) {6 y; ^! f; q0 e9 F+ ?7 d/ z+ W
                                ixstart = ix;. f: y0 a; {4 i3 o
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% V1 F1 j5 M- c7 M: S4 w; `, L
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];! g) G2 H+ R# f  ?* Z
                                        exitg2 = true;
- }2 j+ a/ Y+ C5 A/ n                                } else {; a' `) `* S) j, W6 |
                                        ix++;
1 W7 _4 U+ Y5 Q, i                                }
5 m1 ]7 B# L) M  \- v: z7 ?7 W4 w                        }' Z$ l+ u' S/ b( h# e' E
                }
* }- x. U) B% j8 p$ L! a0 B' [
" v! T$ a( h, R$ Z/ R. s" _                if (ixstart < 81000) {
0 p( K+ z+ }3 N4 c+ m                        while (ixstart + 1 < 81001) {
6 G' R( ^: Y% X7 ~/ N5 C                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
8 t" _/ _9 @0 |6 l                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];: B2 e8 J; ^4 \; M& N9 P5 [! w
                                }! }% D3 H& k+ x: X, t, c0 |- T
* Q& B' L0 X6 w, `! z
                                ixstart++;
% B5 J6 R3 f" ?% ~" @                        }8 H( M  p: [7 w% j, P$ r6 ]" y
                }
; L, H! `' ], T
* Q+ e, F) F+ q+ \3 q7 l2 {                ixstart = 1;
8 B* O  F" P9 m9 L6 d! P                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];- G* D* F/ `) J, b. E$ o9 H
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
$ {  J4 s2 o! o& z# R2 }                        ix = 2;. w' q% R0 w* M
                        exitg1 = false;# z+ V8 B/ n3 o+ l
                        while ((!exitg1) && (ix < 81001)) {
( C5 o# ?" Q7 E* I: ?, c7 E  `! v                                ixstart = ix;
- _3 g  O8 u/ F6 [                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
5 W$ l  o5 F& n8 \+ m, z4 }1 D  n9 d4 Z                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
5 A. e5 ]# q2 ^0 g8 {  k! y                                        exitg1 = true;+ z8 ?7 z! {: A1 d( @3 y
                                } else {
) U5 S' J" M6 o                                        ix++;
- r  M, G! t. e& K7 ^. s. C                                }
+ Y0 m) l: R% _& v* [2 [" d                        }$ \& s9 m6 P. ~4 j7 L5 e- u) E' q
                }
2 H1 ?5 K; B) u
2 s; o0 Y: j9 Y2 ?8 w) O                if (ixstart < 81000) {2 \$ z) v1 J4 |2 q+ l- ~
                        while (ixstart + 1 < 81001) {
$ h4 l4 w# N; B/ j6 v                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {! }. p* U6 N3 R5 {4 X6 D& O
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];) y0 a7 V  E2 }" w
                                }; j- U7 p, n- Y8 h

8 r1 O# E$ O/ Q2 }7 E                                ixstart++;4 ~, T- \3 S6 ?
                        }3 |5 T# c' u: o, N$ d3 W9 d; {
                }
+ Y! {, S( Y" |/ @
" {  Q) k: d! {7 m3 p                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
6 ?9 A: ?/ y$ j                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
4 E7 L5 \6 m3 t$ L7 n                        yiDuanShuJu_mean = mtmp;
" b$ F6 \" s3 c2 W: J' S                }2 n3 @+ Q. O6 @# G3 M; t5 W

( b( h! s# I% U  u% F                /*  找出极值 */
0 p: R6 a% }4 ?3 p5 Q0 U                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 {5 m. e. q, z7 y. @# y1 U$ ?& Z& Y% ^                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
) z% c1 t8 J4 p' a3 b6 y9 v( I                }
5 o0 P; K3 }' F! B2 ]' z2 I4 I% K, f3 m' P" Z
        --------------帖子字数限制------------------: g# e; {! x. y, f# s
}( {% c) n3 a, L
5 y% N. K, V9 r. D- {9 d+ P
! }4 r3 B4 R8 a6 |6 R) i

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 08:58 , Processed in 0.045075 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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