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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 * V: x6 z3 z/ |  W# _2 o( Y! G! ^; b

4 p4 H- u/ x8 b3 E各位大神:
6 h, ~: T6 t( ^+ w' z+ F; e1 _  q/ h     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)" v6 L. G9 w" J1 O2 L+ g
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:! f. q* u: O+ b8 Z
2 g5 V0 d, U( d9 N1 v  v, N
     
8 s+ V% w; Y! B# Z这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。; F! U5 C1 Q& @; r' g$ B. d# X; h
. X5 S$ g: q' t% F* `' N
并没有其他线程' I0 H0 M% R. c7 P
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。; R% k4 Q; V  Y" j7 Q9 F8 m
也说不定是和堆栈有关系。。。。。。# P. P/ u0 Z5 f! X, j. @
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
. [. D! c. y, P8 \9 H
# M9 z6 H  F* G# n( O7 y! h6 A- Z: }; E+ o
5 T, s6 q1 n7 L# Z( G  x* J1 E: H" f- R
我也很绝望啊,希望大神能帮帮忙,感激不尽,!9 c: p' q4 _5 [4 R/ Y# X+ R$ D

8 G. D: Z7 Y- V  t2 z9 q' ]: g' X% X; T3 T3 u$ C# p
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
; s6 H6 L$ ~0 Q( a. o4 `        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
6 A. ?! L6 V; u3 a* h5 t; m
' k  ~* O) w& cboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC($ |$ M; B; h* q( E2 p5 [
                const double data1000[1000]) {& v# Q/ w2 q5 F  F

( ~6 z$ ]: }5 ]        int myfuck;
. A. d$ x* m! ]# V1 ~5 X3 G4 k, ?0 X3 a        double yiDuanShuJu_mean;4 V, N  G2 f& T) e5 D( |$ ~
        double yiDuanShuJu_LowMean[1000];
) y; t6 a4 p% m" Y        int ixstart;
- P# B" @+ Q' b+ j5 j        double dv0[1000];- u( c1 E5 ~+ ]+ N; j
        comm_AGC pAGC;
* B2 z6 d* @, }$ ?. P( H7 c        comm_CarrierSynchronizer pFineFreqCompensator;; w3 T1 R$ @/ R8 h, C- d- ?% J' N
        dspcodegen_FIRDecimator pRxFilter;
3 ~+ ]3 X) n1 S( X4 d/ _        comm_SymbolSynchronizer pTimingRec;
! G% f  `+ K. i! V0 @        comm_PreambleDetector pPrbDet;
" F& y+ V1 D. v2 K        FrameSynchronizer pFrameSync;8 P( o- [0 ]1 q7 |1 K* k4 n0 `% c
        QPSKDataDecoder pDataDecod;
( N! p1 L' a! C/ a        static double usable_left_filtfilt[81000];
& d$ P, i$ |2 w2 X8 ]8 P9 b        static double youXiaoShuJu_QuZhiLiu[81000];
5 T6 X) h9 p5 p' |' q! ~        double mtmp;# q8 ?7 u5 K$ f
        int ix;
  j! I6 e  ?9 _, h1 W        boolean_T exitg2;7 A- o: B  k% g3 I0 V
        boolean_T exitg1;
' R% S3 c1 z7 H, j, }' W        double YiZhenShuJu[800];( s" u1 W: o$ `8 r0 }* p
        double dv1[800];
, V! V+ N" G, B5 l7 V# `3 t3 E; i1 T' N) f6 y  s

* l- z" Y6 k2 [; @0 N! S. [( ]. I$ M        double b_YiZhenShuJu[800];
3 q' N% @8 Z5 n3 |; T        double I_filtfilt[800];
* \9 y& x- f7 O        double Q_filtfilt[800];
# N  Y  o9 l6 t4 n8 X/ e+ P        creal_T b_I_filtfilt[800];1 a+ Z# |( _0 r0 i  s
        creal_T b[800];2 c3 @* ]  _3 ^' M8 |
        creal_T RCRxSignal[50];
1 i: n9 _, K9 S& V" _        creal_T fineCompSignal[50];: ]" v0 b0 E# U: V9 }3 W
        double phError[50];
+ h5 C3 s9 V' C( ?# M        creal_T timingRecSignal_data[28];% z, p+ f9 K( E0 e2 |
        int timingRecSignal_size[1];
; c) i/ [5 n" ?! H: h        double prbIdx_data[28];
2 S4 c" ~* n7 i: p0 G9 P        int prbIdx_size[1];  U( L2 S$ i! t8 z8 H: v  o/ z
        double dtMt_data[28];
( o9 ~0 D. L7 w. T* z+ D. \  }        int dtMt_size[1];
. l) M! T# i! _( j* I, c8 l        creal_T symFrame[25];
- ?5 R- n9 x/ T* Q        boolean_T isFrameValid;
' z  _! s7 _" m, M2 @. y        double unusedU0[3];
8 B: l1 R4 I  a3 G* ~* _8 G. k- q0 ~/ C" ]  m0 R
        //调试过程中的变量
: s( J, q' c# z! U$ x5 j        int  enough_data;) L* g5 d/ _4 @
' o+ p6 _' {, N  U
        int enoughDataFlag;' M' s9 \  K4 x( O' U% p  E8 _
        int yiDuanShuJu_mean_int;
7 @; C7 c/ D4 N+ _        int int_sum_dv0;# b% v) r! x/ H" Q) a
        int oo;
2 y  S7 W; T: t2 c6 B        int ii;
' g0 |! U! K( d$ r* ~" _/ z        myfuck=10;+ |! P; W9 [7 w
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
% C) V4 l) s; }1 q! D5 ?) T        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
  a3 u! j$ J( [$ }8 [$ z8 y3 J. {1 v* Q8 r1 R: m" L& X) L
        yiDuanShuJu_mean = mean(data1000);* a+ ]8 K3 k9 v- d
6 O( z. r3 r/ r! `. P8 r7 g
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
' d1 N; e6 A7 [; z6 S        UARTPutc('A');
2 N5 i, h$ M$ L- D6 z        UARTPutNum(yiDuanShuJu_mean_int);
. a" J7 A* X/ M        UARTPutc('\r');
) x+ ^  n2 G; c/ E0 w" i        UARTPutc('\n');
+ y! K0 v. r% G4 T# S$ c; h' Q4 W9 b- T) d: c. r% r3 T
        for (ixstart = 0; ixstart < 1000; ixstart++) {  |% O* }* Z  n( Q3 \
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
* x- u2 e1 y& P3 g2 O        }
+ f/ G& r6 M! g7 Y+ z9 ]! N$ U6 x
3 h8 _) r( `* J/ I- q$ [        power(yiDuanShuJu_LowMean, dv0);
8 e/ A+ c; x' O) ^# P7 p
: \) a) ~. s7 g& w( v* v+ l; F3 c9 s        int_sum_dv0 = (int) sum(dv0);. f# V5 B- R7 B/ v- v  y9 J( B

* k4 T, I0 s; P! b        UARTPutc('B');
& u, l* i$ C0 K* m/ a( f* @        UARTPutNum(int_sum_dv0);
& d/ ?  i' V& }0 `# \8 K4 l        UARTPutc('\r');
# D, l% p; X. z' L& Z9 W% m        UARTPutc('\n');
9 u# U8 V* @: E, r
) Y4 l5 J  [9 G$ Q. V1 C//        int compareFlag = int_sum_dv0 > 1.0E+8;
9 _+ i$ m. |& l) ^! `3 ~" `, {" P4 l! u7 J/ P
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
& G9 v1 Q* T3 {0 N5 y% s) a                UARTPutc('C');
" h9 J. F6 g& [- \8 G  X                /*  比较信号能量 */
% X& d- i$ d$ N, c6 Y, ~3 e# w. u                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */  o7 w$ F5 [( R6 B& \( P
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
- Y4 m4 |; ?" s//                for (ixstart = 0; ixstart < 1000; ixstart++) {
+ `# z# ?/ D- k+ T1 Z2 r6 }, M//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =% D/ [4 p1 T' R' Y' k! u4 o* T. q
//                                        yiDuanShuJu_LowMean[ixstart];, E& W+ `& _' g- M% _
//                }+ @  ^+ [3 h5 y! ^
//7 k1 m; M. `; K& z8 G0 q
//                youxiao_k++;
+ c7 i6 x( g* l* V8 y) h//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==# l  g6 o& U" G- L( o, i+ ?& B
//                        /* 感觉要取21个数,即0-20, */# z: m8 @# G6 T1 n1 z& x
//                        enough_data = 10;//有效是10,无效是0
( n" w- T! ]  w4 W) P8 f" r//                }5 h3 h0 a2 Q' A3 m9 H% M% l# U: s* M
        }0 @& |* o! A0 T# v2 f) q% W* B: I" [3 ~
# n5 w2 \8 e2 w' G& q7 X1 w

$ V, O9 h8 R% V4 V& _2 M        enoughDataFlag = 100;
6 `' C: @( h. t; ]5 R% H" N        enoughDataFlag = 1000;
8 T- y& r1 X; f$ ?7 M        enoughDataFlag = 0x02;* u8 k# [. g# L. a  G% }: p" A
        enoughDataFlag = 200;, e% J& K3 O- r9 ^

0 x9 C; U+ H# Y! ]        int myfuvk1;
8 C1 o' T5 t4 a, Y        myfuvk1 =11;
3 L. M% u/ i% a% {" E& i  {7 ]
. d) [) Z( q9 l7 G+ m0 S5 L5 ]
8 x" X4 w% W- p! r* k% ?" Y        enough_data = 0;
. _( v) K! e# T0 ?4 N' @
" J2 s% c# m! n6 ^1 s4 ]//        if(enough_data>50){
3 e( c. K5 {5 [+ g//                enoughDataFlag=0x01;
  f2 @, B6 t1 v//        }else if(enough_data<50){
; [, y; }3 o! A  V; B  Z//                enoughDataFlag=0x00;//0x00还是不行
( }9 m7 g& n" ]& ]0 A* u) S) L//        }
+ }& J3 i4 u1 C% u2 |3 P% u5 x* ?& g/ o) [8 B

7 }0 o) u; A; R  T  I: _) p1 ?        oo=10;, D9 `9 G) q3 {: p
        oo = oo  <  5;
8 |  i( |; }1 ^7 o# k+ x& P        if(oo){
: G$ q+ p2 m! l8 Y                ii=0;
0 {! e. F7 N/ ]! _3 C        }1 v/ k( n/ N* u8 K. v
        if(oo  <  5){
8 I, E1 d3 T) }# A* f% W/ n                ii=0;
8 ?3 [/ @. q  C7 T0 b- }        }3 R/ |9 [* a0 ?: g8 R0 g
        if(oo  >  5){
" X3 @1 n( S/ W: u- d; v                ii=0;4 |" p# ~, ?& E/ a; x3 i3 Q
        }4 K8 k5 g5 Q7 x

- D3 f1 {3 H/ u' ^        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
& }7 @3 W, T3 {7 o$ |        /*  如果数据足够才执行主程序 */
& c5 w* B! w" H  z9 |' `# h# L        oo = oo  <  5;; ]8 p, a& l! P% @
        enoughDataFlag = enoughDataFlag  <  5;
# ]: {% I' L2 u7 R3 _5 Z        if (enoughDataFlag  <  5) {. k. {$ y# o# K( R0 @5 o  ~2 E
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0$ G7 z& R# n3 o- Q* w5 l- N
                AGC_AGC(&pAGC);
. [- N5 V! N3 _) n0 w# X
4 F" W! h9 [  R  d$ n3 K                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);+ i1 a+ O2 g8 ~$ I7 M
                FIRDecimator_FIRDecimator(&pRxFilter);
( A8 V+ `2 k' D, F  t/ \% [
( R1 g' P, l- M& @                /* Downsampling */
  B9 D& n9 N- o) d1 u0 E2 _- m                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
7 J* N1 ~! G& \& [" Y- o1 ~" B3 B- Y
                c_PreambleDetector_PreambleDete(&pPrbDet);
* ?" }6 I0 Z: [8 v* t' v
" p5 O* k- t/ V- s) R9 ^                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
5 F9 o. q. ?* B                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
  C  C& u  a( ^                /*     %帧数量=100 */
6 V) u) c7 w. R                pFrameSync.isInitialized = 0;
' g# k( a; s2 G' C. c7 F& v% B/ v* Z4 }, U+ `  M3 v+ x
                /*  [EOF] */
. s+ K  w3 a  G1 |: O1 J                /* 前导码长度是13 */
# j* k* Q% ]4 M                /*    %qpsk */9 n+ ]; j+ q0 ~2 j" K+ U4 y# C. z
                pDataDecod.isInitialized = 0;
, t. K) F4 S, o5 v, p/ V$ Y
3 G4 p' O4 y- S# F7 C                /*  end */* }3 n% j1 C" ~' v2 g
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
* J8 B0 u9 v7 a" m5 s0 [* W7 E, L% l                /* Convert 3-dB frequency */
" Z& M* ]$ J# B$ C3 N+ }4 x                /* Convert 3-dB frequency */
% ?8 g- ~4 I- @/ r. _: ~                filtfilt(save_buffer, usable_left_filtfilt);' k$ ~* U% p' l5 l- k& L
                for (ixstart = 0; ixstart < 81000; ixstart++) {- N, S7 _" ^& M7 [# r3 i0 [
                        usable_left_filtfilt[ixstart] *= 2.0;& O2 {; _! {5 m& z* N/ k
                }
% @6 X+ n* B* i/ c% Y, K1 {, B  A  p( C7 [9 \) B" K
                /* 注意乘2,处理幅度 */
+ z. }2 J) u  `                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
! S# X& l( O1 P, x$ I* t1 C: D                /*     %% 行列转换 */
4 f8 J0 ^; [8 }& N! W                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);. I% h6 J. j  w% C& d# @) T6 c
                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 p6 O) S4 y, G5 P2 |                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]$ w: g% B3 R2 ~: F' b3 M7 K( ]% D
                                        - yiDuanShuJu_mean;; H+ ^7 j& k  P" K* R
                }5 H* d' k4 Z; K0 f. n

6 V  b( {" N6 @) f% b5 t) g% z                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
1 H9 b- B5 b3 p0 q* M                ixstart = 1;
3 }7 ?1 ?$ Q: A0 y) ?                mtmp = youXiaoShuJu_QuZhiLiu[0];
1 p: j  j/ Q3 k- b' J* ]                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 s: w1 }& X8 O' g                        ix = 2;
9 k5 P  Y8 x9 \; k: L8 G) {$ O                        exitg2 = false;/ ]7 N! V4 h! C
                        while ((!exitg2) && (ix < 81001)) {+ q6 u& ]' J0 }9 u$ B/ I
                                ixstart = ix;
  R' q2 P3 {! V                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {8 t6 A; f/ h  i. U
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];( q- g( b0 ^9 o/ o" E" M# {# b
                                        exitg2 = true;7 o( G. X) m3 F( G% O& i
                                } else {& \; W* v( }2 r' ^- E. U
                                        ix++;
5 a  V  @* u' ^4 Q3 j                                }8 Y! n5 W. l! K& m% E
                        }
; R; {3 ~8 K. }: b" [5 S                }
0 Z/ l' f1 U$ x& x/ y: H7 w0 d6 w  G. u* S, T" W
                if (ixstart < 81000) {
, E  h. l  D6 F- S4 m: _' P7 E                        while (ixstart + 1 < 81001) {
# b9 u0 V& Y6 }                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
% R. r' |4 @* ~6 ]# {* ~                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];+ F- A, N' E/ W3 c
                                }; w- O1 }8 w- r2 O7 v4 p
# z* D/ r/ g' n7 t" }
                                ixstart++;2 r4 P8 P- f0 v' {
                        }6 c1 _/ R5 ?- g8 K4 @" {
                }  S% y: o$ n5 K- L. x$ m7 @
- n6 |* X0 w1 g+ y4 ?  k
                ixstart = 1;
8 w" V$ h* Y1 ~$ M9 p5 \; H7 P& O9 C                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
6 g' q! b( S5 k                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
+ _3 ?; i. ]7 ?' F- `/ Y4 [- y: u                        ix = 2;" n, W$ j( x/ B, p4 q
                        exitg1 = false;
4 R* h7 ~1 O- \                        while ((!exitg1) && (ix < 81001)) {$ M) E7 ^9 n3 w* Z4 `4 g
                                ixstart = ix;! o0 Z1 |: S5 c# G
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
# `1 C8 o  w0 P" l# [* \/ Y                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
) j' J  K5 Y) \( B. S                                        exitg1 = true;: W6 _: m1 M+ a
                                } else {, L- }9 q* d2 U1 m/ X3 x
                                        ix++;; U' E# o/ F& q) J, S" G
                                }
! c. y1 s7 e- p) ]' R                        }
- E" F1 C8 R/ Z9 |" k                }
  V1 W' \4 g% G+ }/ c' z6 K' w4 e( F2 X4 C" n' J
                if (ixstart < 81000) {
0 K5 t3 }" a6 B# g                        while (ixstart + 1 < 81001) {$ Y3 c% q% {. ~- y8 g
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
  i* B5 E9 t* `, x                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];+ t2 @  u1 f3 G# s
                                }) i& J% v- I" @/ Z
+ s, k  s1 N6 I% \& A
                                ixstart++;7 d& N, z: y# R: U
                        }# ^8 I  n1 l# s; ~0 e( e
                }
+ s- k: O( t& A- y$ r+ S' x0 P& e. r& l# S
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);  x7 h( T3 K4 p
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {, v) D$ }- D3 E7 d* O
                        yiDuanShuJu_mean = mtmp;
1 W) F( m1 _  K9 C# h                }
7 Z* d' B, I( L  j* m3 H: T; N3 Z" B0 I8 l3 v, `& q
                /*  找出极值 */
+ n" X, \7 z9 s6 w  Q                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ ~& p- [' A" p6 O" P8 D! v) D9 |                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;& N& n$ N3 g0 ^! j  Y6 N& B  N
                }
0 j4 a* w: Q5 @" y8 [8 W# F# F; J5 q# z
        --------------帖子字数限制------------------
5 V9 I2 ~9 m9 e" J# a1 }7 w6 G}/ _+ R- A+ z' K- R+ Z
6 |# i# O# e9 x4 m) n

, q! U$ O( W4 n" B, B& T

本帖子中包含更多资源

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

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-3 12:24 , Processed in 0.042904 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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