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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
9 [- Q, g" x: X
  Z/ P0 D/ _3 ]' r1 e+ A  L3 G各位大神:5 b' _: v" K4 W; c
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
  g* U9 v; m) [$ e8 K      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:" |+ W& M: [; F: x6 Y5 i: E

+ |6 T$ g& Z2 f$ N! Q9 P     
" ^, e* e8 I: y: \& X1 q& K4 r, ?. _这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
# ^7 Y1 h5 }9 R
* |& l4 `3 Q4 A7 {- V并没有其他线程8 u, E; [3 Z, M, A/ Y) K8 z
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
5 O& ~  T5 b( s% i( S# V也说不定是和堆栈有关系。。。。。。
" A: Y& E" s: C" |请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
2 N. {# \6 K: _- s* C' S9 b( y. _9 i. [$ _7 {
& O0 D- D1 s- f2 N8 @. A3 G+ P

! S( J: M% @/ L我也很绝望啊,希望大神能帮帮忙,感激不尽,!
* |* v$ ^1 c7 o8 H. r! F, i; [0 v3 C+ n9 N( t. b
* d: H: n: t# j1 `
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
- r: p0 F5 E, G( e0 f5 |: B% k        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) `9 b, C- E0 i9 M2 F7 e3 d

7 \% T" O2 O8 _1 V2 ], C3 dboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(& S" z& U& y7 V+ P+ S/ z7 P! }
                const double data1000[1000]) {
8 e! I* L/ K1 l( A' g3 Q( \  ^, ]. A) m& v) d- [/ d
        int myfuck;& A5 q) }% f4 S7 c1 Y, g# }6 A
        double yiDuanShuJu_mean;  J7 R* b+ N6 k
        double yiDuanShuJu_LowMean[1000];
( q, D$ i0 j# ?. A        int ixstart;7 P$ c! e8 |5 ~$ l
        double dv0[1000];& y- C$ c5 n2 D: {& U3 V, |3 i
        comm_AGC pAGC;
2 r' o! d5 ~' U' l+ r% B        comm_CarrierSynchronizer pFineFreqCompensator;+ R: D% ^/ q7 y. X
        dspcodegen_FIRDecimator pRxFilter;/ P* b& W$ ~7 a0 x2 X  r3 a" n2 N9 p
        comm_SymbolSynchronizer pTimingRec;
0 e( E  _! ]! o/ a7 L        comm_PreambleDetector pPrbDet;7 d: C& [4 ]1 m; g; \# v+ N
        FrameSynchronizer pFrameSync;& k' B! E. j( u4 f
        QPSKDataDecoder pDataDecod;
" l  p  E! J/ T! M        static double usable_left_filtfilt[81000];8 K  h" m3 z4 G6 ]& Z. P
        static double youXiaoShuJu_QuZhiLiu[81000];, {+ U* J5 T; S6 y/ }- w
        double mtmp;
) K" V" G/ B) \' c% R        int ix;% q9 B: }$ R- }
        boolean_T exitg2;
. ]7 t* d3 Q* w9 N        boolean_T exitg1;
. C, H1 S: V8 J( r, t( [        double YiZhenShuJu[800];
+ S' L+ ^% C' A) G) E9 |  Q: D  f  E        double dv1[800];) B+ e3 s- V# K3 h

, \% c( d9 K: _
4 r0 E+ U" a1 y& c! S  z5 i        double b_YiZhenShuJu[800];
. G! a$ l/ v, l" y( \1 V) d' Y        double I_filtfilt[800];
' P3 D, U, ]3 V+ y; b9 d- f        double Q_filtfilt[800];4 o9 O: q8 [4 ^* w3 F9 O4 f
        creal_T b_I_filtfilt[800];
2 |0 `9 `2 g7 o5 A        creal_T b[800];& w$ T" q! k: K+ \# V
        creal_T RCRxSignal[50];
* V: [  D8 c8 F8 W! m, u        creal_T fineCompSignal[50];) d! S: L. m  o
        double phError[50];
" j) @/ q- F/ v0 t; H9 G. V% \9 H        creal_T timingRecSignal_data[28];& c+ ]% {; F% ~/ m2 N6 E0 Y- C
        int timingRecSignal_size[1];
, ~7 L- x  f) P' A2 g        double prbIdx_data[28];# O/ m9 C2 g5 V! q: A
        int prbIdx_size[1];
( G/ w4 I$ m" I! m' d        double dtMt_data[28];' K: O# E; t8 y
        int dtMt_size[1];( z0 _% @" `* q  {
        creal_T symFrame[25];. z( f, s: h# [9 F' `8 p
        boolean_T isFrameValid;
( D* g* b. Z6 ?" {- Q) W        double unusedU0[3];+ D; e, W: l9 {" w- f5 l: `
8 Y9 D6 D! B) Y0 F3 _
        //调试过程中的变量8 \4 z0 W$ w  l$ k9 v5 y7 J/ c2 X
        int  enough_data;
( _, z  h' H! {: R1 \6 S. i, q- B0 L
        int enoughDataFlag;- W6 Z1 L" K3 c# \
        int yiDuanShuJu_mean_int;
1 |- z7 O6 V  `5 m        int int_sum_dv0;
3 Y) R. U4 l( t# u$ U; w        int oo;& c0 @  X$ ?" S/ E
        int ii;2 i4 N# q% W# }8 s
        myfuck=10;* \& }0 W" K8 ~; O
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */0 B: g0 W' f4 v" a
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
: ^9 @  z8 {7 a2 x$ }" Y* b3 b, d$ x9 _
        yiDuanShuJu_mean = mean(data1000);# d; ?$ ^+ S3 e2 n4 J
" g- |* o2 N( ?8 H3 e
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;( w  e& E. v$ S0 j& G
        UARTPutc('A');
$ Q6 t. H6 n. l4 [        UARTPutNum(yiDuanShuJu_mean_int);) X1 S4 M8 S& `7 Q, p0 }
        UARTPutc('\r');; A: s- p( I: g+ q" p) d1 N- {. u2 _
        UARTPutc('\n');/ @: G4 a& ?  n6 S* Y: V; G0 U

4 g7 j# v$ C; U+ Z- {        for (ixstart = 0; ixstart < 1000; ixstart++) {
: m! U( @+ v1 K. k& c# A# V                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
4 [* {, \( K) _. k  v) Z) Y        }" T3 Y  W" |3 v" ]: u2 ?' a

" z1 B4 s& X- h: F! O" ~0 W, Y' T# W        power(yiDuanShuJu_LowMean, dv0);
7 x$ W4 N1 x$ L
$ ?' D2 t6 P+ ~0 R  b        int_sum_dv0 = (int) sum(dv0);/ n+ ]7 l" u% b9 ~; ?

+ f/ i' F  Z/ j        UARTPutc('B');  b  a: N) n& }5 W( c
        UARTPutNum(int_sum_dv0);
+ X  w8 J7 P2 R" i& k- S. P7 X, X6 M        UARTPutc('\r');
' o+ r! _$ r7 y8 L9 F3 o4 {        UARTPutc('\n');. g3 ^+ D& ~+ n6 L$ ]5 F; @) c' G
$ _0 ?: L% G2 o& G
//        int compareFlag = int_sum_dv0 > 1.0E+8;
3 i- ?2 s) Q: o8 F: T! K, r% ?0 A$ i9 O
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?9 t  j( F) z# W0 X5 A
                UARTPutc('C');' O0 n4 a& q1 r
                /*  比较信号能量 */
, ~+ R) z/ q( m) U                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */2 H: S7 C! ?2 Y0 V8 {
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
2 {3 ^) c+ E% x: x/ l$ M9 c//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* z* l! }; u0 d* x) Y+ @8 B//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =+ @3 p# ?& r- Q
//                                        yiDuanShuJu_LowMean[ixstart];
- I* @( U) |. \: m* B, `9 X" ?//                }
" e' g( [6 Z/ A  O//
& a: C) |( {( Q* A//                youxiao_k++;+ f* O- n1 Q/ H2 c
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==0 H' e- U# o2 k. C" T" N
//                        /* 感觉要取21个数,即0-20, */4 n( k& h7 L0 R# U
//                        enough_data = 10;//有效是10,无效是0" L, ~% w+ m- D5 c
//                }
- y: k3 m* y2 n$ [        }6 ~( _* B& C  o" ^: n

: u0 i+ w+ S  a( M. P  {2 k) n3 t- E& X  i9 ^8 J. l( g
        enoughDataFlag = 100;5 F) _3 x/ u% J7 D% u
        enoughDataFlag = 1000;
/ w4 {: Q% g( k+ c- A        enoughDataFlag = 0x02;8 _- p, [& L6 O+ l: m2 |5 a
        enoughDataFlag = 200;
1 K$ V9 t' M; U  `
+ ?$ R0 o2 H! \        int myfuvk1;# i' I% c0 E- R
        myfuvk1 =11;9 e& P% m9 t9 O1 [

' w$ J8 A: b7 _; F
3 `4 u( S* D  D9 r' i% T) a/ k! L        enough_data = 0;
( t4 S, Y* e2 Z1 S+ K9 S+ ^2 e. o" w* K( J- E  V# J1 t# x
//        if(enough_data>50){
) o# E% i% D: p/ D7 T: Z5 m, Z# C7 A//                enoughDataFlag=0x01;. g5 n' Q8 I/ F# S, d
//        }else if(enough_data<50){
/ S- i2 V8 O: i; u' H//                enoughDataFlag=0x00;//0x00还是不行8 A( G  a( [5 L: Z3 e7 I
//        }
* f8 D4 t' H3 a8 u1 k1 L) r. @3 R
2 b7 q& V" L( z& P; Z, I; F$ m& X! R' x7 j! J( Z3 H: A- c+ D3 @
        oo=10;- h. e* t- L4 l8 y/ t
        oo = oo  <  5;
# l3 p5 K7 {) O% q6 @        if(oo){5 @( i) [- I! ^0 E2 N; c/ r  C# r
                ii=0;- G2 n. A* N  ]9 s; i6 F$ P
        }0 n2 b& ]( W1 ~& \/ b6 g+ A) S
        if(oo  <  5){1 v$ b' o5 j) ^
                ii=0;% b- E# _( n' h6 m- b7 m' d! j
        }
  _+ |4 k' t' v# u: I; K9 h% N        if(oo  >  5){
) Y, c# P" H" D( G                ii=0;
' b- P' N8 n, q; U( G$ Z4 C        }
# z. R; w' ~5 _7 E  W: y0 F$ J; ~/ g" ]% ^
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */& p0 Q6 d& D( u- Z/ X  i
        /*  如果数据足够才执行主程序 */
' ]( y0 r5 M' [9 T# @' h        oo = oo  <  5;
2 N& K/ ^, p: D9 n" |% b        enoughDataFlag = enoughDataFlag  <  5;
. I0 M' a" u/ f/ o+ p+ }  b        if (enoughDataFlag  <  5) {4 J3 U) y1 d+ U
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0$ W. H! b' z+ s5 m! g' F9 V
                AGC_AGC(&pAGC);' u4 t: d! }' k. c
. M) {& G* i; a' \* N8 i
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 {7 I7 b" Z, r: b
                FIRDecimator_FIRDecimator(&pRxFilter);
0 n" V5 S. n2 ^6 q" g  T; q) m# `  U+ H4 D) J1 @8 P" b5 r
                /* Downsampling */
1 @3 P* t1 s9 u; b; I                c_SymbolSynchronizer_SymbolSync(&pTimingRec);9 J( F3 g2 p3 }, U* E7 U3 Y

9 Q, h; l5 T0 y3 k4 I, [                c_PreambleDetector_PreambleDete(&pPrbDet);
7 z' k6 w, H: y5 l0 V7 f
0 w* O  {/ o6 i- m( l' O: g' o$ [/ h                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) n( i2 ~$ J. X7 a/ E' u                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */! q+ J! ^! G& J) L! R  Q
                /*     %帧数量=100 */5 i- b; a# g. f: m+ l
                pFrameSync.isInitialized = 0;
  Q+ }7 H0 G: v# A! Q% f
' y, N) u! r1 i                /*  [EOF] */
$ v8 s7 f. ^% J0 v- R" ]                /* 前导码长度是13 */
4 Y( F" D  l& ?                /*    %qpsk */
2 ]- b2 U" m5 Y& X8 b                pDataDecod.isInitialized = 0;
1 o$ l- H* M. _
$ f: Q9 P1 f; r/ B. l                /*  end */
- e& V6 {  K, h: r; w- E: g                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */6 R, X; `+ c+ W3 v
                /* Convert 3-dB frequency */
6 S/ D- X: o# Z. V: Y2 k                /* Convert 3-dB frequency */
3 I3 j7 E: j0 `. }0 ?1 l6 c: ~                filtfilt(save_buffer, usable_left_filtfilt);& ]% i1 b6 C' `+ X) U0 `
                for (ixstart = 0; ixstart < 81000; ixstart++) {. F+ U0 `; `  U* `- _
                        usable_left_filtfilt[ixstart] *= 2.0;( J7 G/ m& l5 Q/ u& x
                }
3 U$ @6 X, S! M
- u( N3 W2 F) ^6 G$ v  k9 u/ h                /* 注意乘2,处理幅度 */
' |  ^7 C: T5 r                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */# a' H: i6 b) ?- i! u# R
                /*     %% 行列转换 */  U7 c4 v" Q4 ~. f  D6 d7 m7 i; X
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
, ^7 {! b/ q  @1 g$ u- V                for (ixstart = 0; ixstart < 81000; ixstart++) {
  }( L- {; E& H" J                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
0 b/ ^/ {' i$ r                                        - yiDuanShuJu_mean;
7 N$ v) n, K) Q6 j                }
9 }( \7 \6 {  Z+ k8 b7 \' {! r! T* o
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */( H% R- N* F& x
                ixstart = 1;* B( t$ g3 n* X/ `/ B% n" h( T
                mtmp = youXiaoShuJu_QuZhiLiu[0];3 P9 j" @- t; r9 C
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, W" c. h+ D0 l2 b* u0 ]
                        ix = 2;: f8 ^' L- ]/ @
                        exitg2 = false;, G; u9 _$ ^1 Z8 e3 @' i9 t
                        while ((!exitg2) && (ix < 81001)) {
+ W: I0 F# y5 q2 _" n. M6 @5 `# e                                ixstart = ix;
, J+ m; W5 v8 ?- s' G$ O" p- d                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {3 ]# q# [5 V0 h  {2 {
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];/ n( L- [$ f0 Y! B4 q5 ?1 B
                                        exitg2 = true;% P4 t) b2 b: B
                                } else {
( j( B4 S1 U* G3 \$ U" M6 q' n3 H4 Z                                        ix++;
. ^' W: U0 |0 \( M                                }7 a8 [+ @( S& l5 |, j9 q
                        }
) B' c) _- B2 O3 u& \0 A                }4 ]7 N( Y+ e! C/ l# y, v9 R

" C- {3 p. s0 O* k: h# g                if (ixstart < 81000) {1 E: K1 v( L1 G3 W0 f$ L
                        while (ixstart + 1 < 81001) {$ H6 y! x/ s6 H, w; J
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
0 O; h. W+ t% z! o                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];6 F) m& v/ V* ?5 a
                                }
0 E; a0 S+ J! `2 E* Q& y' M- L, w5 y6 ?
                                ixstart++;
% f8 b9 F! @# e9 L" w                        }2 I( l9 b9 i5 y2 q6 j
                }6 d5 k/ }" X5 A$ v! d. t5 M

7 S3 W  ]. u5 y. ?; [6 Q& b7 c/ x                ixstart = 1;4 B0 F; l9 ~' b9 f- l/ ~  S. h
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];, S( R! o: n3 c# @9 e' P! W
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 l; T% w# b" a4 Z* u0 k
                        ix = 2;
5 f$ S( G8 ^/ x+ L( |+ U* y                        exitg1 = false;
/ r( Y. ?  B+ A5 v                        while ((!exitg1) && (ix < 81001)) {# S7 I, i) G4 |8 \7 a
                                ixstart = ix;
/ l4 d$ s7 c6 P) C- I' i0 c- y                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {& k9 a# i+ y/ }: `/ \2 n. P
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];3 s: ^; ]8 x3 L+ K/ {, O9 C
                                        exitg1 = true;( _! h! p9 g: m* Y: {" W8 e
                                } else {
/ n% h  G, E5 [  x8 T5 u8 l                                        ix++;
5 o* z0 L: c! |- Y' O2 W% U/ q                                }' b4 ^4 N* h8 X' }; E1 E8 ?
                        }
! V" T: E* Y" D3 C  w. h                }1 ^0 p4 Y0 f7 u" J
$ }6 u7 p' p! D6 m9 r" J! A
                if (ixstart < 81000) {9 K2 E; \9 K  P" g* a! Z+ n
                        while (ixstart + 1 < 81001) {6 w5 d8 t+ b# d4 Y& @$ Q  o
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
7 e( a0 b* J  o7 S$ Y- Q+ d                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];' x# p/ b$ m$ E: M- A* i( e4 L
                                }5 U( q" C( e  ]7 u# s/ I
0 l9 O( J" Q0 S$ K! M4 s
                                ixstart++;
* ]. d9 e6 w  z4 M                        }
; r8 c6 d/ Z. q+ p% t/ x                }4 h) t5 Z3 h2 A4 i0 x# Y( ~' V

6 l6 Y+ y- [8 q7 a1 ]                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);* c1 f8 i0 E5 ?& b0 n4 N- f% Q5 c
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
+ q" N: E! O: f& s' E  |" j( V, R                        yiDuanShuJu_mean = mtmp;
( p; B' d$ J! L, L$ i/ Y; x                }
7 O3 b# a, a* ]" W: H- R. H. ^* ~- F6 u. r/ q2 [
                /*  找出极值 */
2 B, @2 M4 {8 @6 U" E+ {6 a/ m                for (ixstart = 0; ixstart < 81000; ixstart++) {
- w! y2 X& z1 C9 c                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;; v+ ?* H3 Q* l& @5 {  Y0 J
                }1 X' F* Z* O1 F! H" D* D% U
! q8 K0 t1 X" Y  B9 \) B5 u4 x
        --------------帖子字数限制------------------( ?# S  q! A1 J3 i3 ?' W
}
- x: `1 N/ U7 |! T4 o& I, ~9 q! E7 `  T8 l
7 `0 S. O: K# K

本帖子中包含更多资源

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

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-25 20:46 , Processed in 0.058900 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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