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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 / w0 z2 P) Q$ t9 s

; W" O! V/ n) t% ?* C各位大神:! ?9 U. V0 m* d9 d) ~9 \
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
, A3 |% v8 w; ^* E      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:; T2 y$ ~  M) A

6 h7 D0 ~/ {( L3 v4 d, j0 n9 B" N# C     
5 W- ^9 z# T" G1 E3 T这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。" C. q5 g' v+ G4 s4 z) X/ S
5 Z8 O  |: |6 y: B: ?% ?* s
并没有其他线程
# N. _5 W. t0 s2 r. q反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。7 y3 D/ }$ C! ]& e: @$ `! S& X& v
也说不定是和堆栈有关系。。。。。。  V3 f0 u" a7 g, U
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
/ U0 a2 T" G- U& f* d( D* h7 R/ t0 d. x% }4 S
) f" G: }4 ~0 g" n1 g. i: x7 U* \

7 i4 p% e4 Z4 C. y" \9 F我也很绝望啊,希望大神能帮帮忙,感激不尽,!
5 |  w! k  ]) r0 k, _2 t; E) g" o+ d2 i  F9 a8 ?( P, U! P0 h: l

* R% |' M' m) O9 [% n1 f! p+ d附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];  ^# E3 A' [- M( r# ^
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
8 f$ P/ ~  m4 o9 r# R8 A3 Z/ z6 E. X2 w: Z
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(  |, u- C" i( F7 g+ X
                const double data1000[1000]) {
0 k" `+ E) v7 n) y- f
2 x6 r' I5 B5 A        int myfuck;* ~9 j" i$ D$ X* i* h
        double yiDuanShuJu_mean;
4 P/ P  }& C5 S" C' C        double yiDuanShuJu_LowMean[1000];
& r5 \  w' e2 ~, Q/ q1 S        int ixstart;5 O. b4 F3 l6 A- L2 t
        double dv0[1000];* ?5 x& \# v7 z: f% L% g6 U6 M
        comm_AGC pAGC;
% i- K% U/ ~7 ?2 |8 k. p% w        comm_CarrierSynchronizer pFineFreqCompensator;. H) _8 x: E: V# @$ B
        dspcodegen_FIRDecimator pRxFilter;' d/ v( `/ U  Q/ f% t" X5 r; O+ O
        comm_SymbolSynchronizer pTimingRec;, E% U8 z% P! v1 N" \
        comm_PreambleDetector pPrbDet;
/ I, k# [8 e9 |$ {, n& K; w        FrameSynchronizer pFrameSync;
/ U$ D' f! Z. R! c        QPSKDataDecoder pDataDecod;2 j5 a, x, L, a
        static double usable_left_filtfilt[81000];% L, D% ^. p. c" F( ]0 h1 @
        static double youXiaoShuJu_QuZhiLiu[81000];
9 h, x: A  r( y/ i        double mtmp;5 w. w5 I6 M4 K1 R8 B& v
        int ix;3 Z& v/ }5 [0 m- |2 @! k
        boolean_T exitg2;
3 }7 g; @% G9 ^6 q9 N9 A        boolean_T exitg1;+ M3 Y/ U7 B- h) Z2 M
        double YiZhenShuJu[800];& R% R: ]& a3 y& b. g2 B
        double dv1[800];
5 j/ U! I) [0 l3 Z9 L
  j9 H1 D. y0 n6 o3 [7 F
4 o& w- P5 Q+ O6 y" a# n" Z, S2 q        double b_YiZhenShuJu[800];& o6 l" q6 N3 f  ^1 ^" I  H: B
        double I_filtfilt[800];
4 D' U& `* W1 n. N4 y! y% z        double Q_filtfilt[800];8 T+ f' G. W" }1 ~5 x
        creal_T b_I_filtfilt[800];
9 K2 ]" P) A6 G1 {        creal_T b[800];  Q' p0 h- Y. Q0 W. N
        creal_T RCRxSignal[50];" E- e! T9 X5 m' S
        creal_T fineCompSignal[50];5 A! p* H- w2 D5 Y* h" V( z
        double phError[50];: s# f7 O- N: u4 M
        creal_T timingRecSignal_data[28];/ M3 R* {: C- s. ?; b6 E0 o
        int timingRecSignal_size[1];
' @( |4 G( o2 m        double prbIdx_data[28];
) B# v8 o% P. P! T- d8 S2 y        int prbIdx_size[1];; ^- X' B! F. W0 @6 O  d
        double dtMt_data[28];
  p/ ?6 \# O; l0 B  `' o( O        int dtMt_size[1];. P: i) X; O  z) c1 k
        creal_T symFrame[25];7 h2 H2 |$ c( ?: J
        boolean_T isFrameValid;
. x3 M/ c% w8 r! G' X7 v( d% q) T        double unusedU0[3];* G1 f, K) h  ~8 f$ H5 \

- P7 E& G, q, G* m$ d% b, i* c/ b        //调试过程中的变量
3 @$ I6 e& Z0 N" E        int  enough_data;4 b7 V) ~0 e' C0 e
4 y# [! N* @3 u3 v6 w  w- j, }7 i
        int enoughDataFlag;0 l' z4 y! s/ f, x
        int yiDuanShuJu_mean_int;6 n- [8 n$ N* M- q/ ?1 c7 ?. [
        int int_sum_dv0;  W' x4 ^1 U( x
        int oo;' B3 U+ t- p7 D$ L
        int ii;
5 K  B: X- }- s2 S, \0 A. P2 j        myfuck=10;- g/ y7 o. F. J! R5 j2 h/ r
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */8 l+ W# f) g% J$ y3 P; O
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */3 {. }6 X" a7 n- N: Q3 x

& s0 s6 k# R$ X5 i$ m2 Z) U        yiDuanShuJu_mean = mean(data1000);
5 S: }# ]+ W" o. B/ R5 s  }7 v0 |9 K( o& \+ D* K
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;/ \- Y+ p/ ?# F: t1 k# X
        UARTPutc('A');. M: a( Q9 F5 ?7 ^# D" u
        UARTPutNum(yiDuanShuJu_mean_int);3 v& c6 a& T" G- |
        UARTPutc('\r');
4 l+ c' M5 F5 i) _5 s        UARTPutc('\n');
" O5 Y0 `6 x4 H: r! a/ m: s) H9 G! u+ T; \# j( o7 t0 z
        for (ixstart = 0; ixstart < 1000; ixstart++) {' Y! X, ]  o! u! l
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
; v' H1 u& I% Q3 f        }3 d  d0 w( w" m$ ~. A  j
8 v- P+ ^2 K" Z" o2 E! f" K0 z
        power(yiDuanShuJu_LowMean, dv0);
6 H+ i7 z! Z) K+ G: w$ A6 }0 y6 Y( d6 `& [9 ~
        int_sum_dv0 = (int) sum(dv0);
1 h2 |, x7 e/ n0 y) V! i( }: K
" M3 d4 G4 ?5 \6 K$ S        UARTPutc('B');
4 \8 n% ]' Q& d8 J3 `5 _        UARTPutNum(int_sum_dv0);
  [5 X1 u) O! |' s  M+ i. Y        UARTPutc('\r');: h( Z1 i6 {9 ^) H8 ?8 p7 q- Q6 T
        UARTPutc('\n');6 A4 e8 _, J4 a; b, }" Z  p* N
8 q2 }9 X$ K! O# R
//        int compareFlag = int_sum_dv0 > 1.0E+8;2 O1 N# R3 y/ g5 Q" y0 k

3 k/ V2 T" m* y* |9 D        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?" i! }3 @+ f( K: D3 i) n/ v6 A6 x! [
                UARTPutc('C');1 Q% C  V) j! a8 Z6 N$ I
                /*  比较信号能量 */: x6 {* A3 Z* \- q5 ~
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */7 u( l7 f# f% x5 ]4 r" n9 I
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
. |' u( M+ d3 D* S//                for (ixstart = 0; ixstart < 1000; ixstart++) {
! L- J8 ?9 n8 k, S; w/ e( R  `//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =/ \1 s) c$ i7 c; A
//                                        yiDuanShuJu_LowMean[ixstart];
$ D; u& E- d# W' Y2 }7 S& ^$ G, E//                }( P- S" K& f1 }3 C3 S7 @
//
7 `+ E  _5 p0 c; C: K; E+ W//                youxiao_k++;
0 m9 {5 U1 W) S- B! N, u//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==# X8 h6 Y9 n6 B5 g' b5 L2 s6 s& U& D
//                        /* 感觉要取21个数,即0-20, */
( q0 k* T0 W3 V//                        enough_data = 10;//有效是10,无效是0" `; }/ S  s8 P: d9 j# H! a6 w) ?
//                }
2 t0 j# ^) P) z5 C. ~7 r3 O( t        }
" C# }* W2 F  }. K( X+ R& O. x2 n7 S$ }+ S5 F# ^: b9 O, x8 G
, K; d" V. _% ~1 n4 q3 S
        enoughDataFlag = 100;+ P$ h; B* Q% [' v% P: j; r, N
        enoughDataFlag = 1000;
! f2 L4 y, F8 O        enoughDataFlag = 0x02;! s; Y% {& }$ L3 Y7 Z* G/ X
        enoughDataFlag = 200;  d7 \+ [1 `- @3 q& k' H) W5 _

% q  m/ y3 T* U        int myfuvk1;3 }# ~- Y4 W7 I  ?& d% L" L& G; V
        myfuvk1 =11;
- K1 n8 y. F. e% Q$ t/ K& o& ~2 C7 n, N
# l/ y3 p" t, j) a5 T) m
        enough_data = 0;. |5 n0 c3 ^6 b1 X1 g+ N% r- I) m
: A/ Y+ }7 s( v/ i5 ~3 ?- l
//        if(enough_data>50){2 t7 ~& S) U  j
//                enoughDataFlag=0x01;
* }+ V' K% o! W! N/ ?4 X- Y//        }else if(enough_data<50){
- H1 U; j: G* `; R//                enoughDataFlag=0x00;//0x00还是不行' e9 V) u3 F/ O4 z
//        }
% ]$ |8 ~+ s( Z' e/ I
0 x, \) c! M: l- i
6 u; e6 \2 C% X        oo=10;
' G* o) \, i. m: N        oo = oo  <  5;
. q: o4 o, [7 ]: P# J) T# A        if(oo){
2 t/ i' N8 z/ q* k; }6 z                ii=0;" p5 k2 `; {- j" P4 v+ h$ @9 ]; s/ d8 z
        }
! Q' @8 `% A- G& `. x        if(oo  <  5){
6 D/ W5 c. G7 V  o# u8 b2 i                ii=0;
  n. d& U8 e& b  j4 P+ N        }( T+ r6 C! B. x2 H. F
        if(oo  >  5){
2 m) ^9 X2 K5 @3 D' y                ii=0;
4 {6 Q( L3 D4 y        }
6 l  a5 C* @0 K+ h3 q7 r/ L& i+ @0 @4 m6 P1 `
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
( ^5 r% A& J) q4 J( Q5 O        /*  如果数据足够才执行主程序 */2 G$ u  D" k8 y# v! z. M
        oo = oo  <  5;
+ _# ^5 e& P1 A; B        enoughDataFlag = enoughDataFlag  <  5;" L. R3 D+ c7 }1 L1 h3 u
        if (enoughDataFlag  <  5) {9 F2 ~* B8 m, E$ C
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是07 I9 i$ e: {0 |. q- V. }% l, d
                AGC_AGC(&pAGC);
' k: g: j% Y* B0 U" k) l$ U  v! K9 y1 D4 `  |0 F. ]
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
- d7 W$ E. P( W; _8 R" Z9 W3 `                FIRDecimator_FIRDecimator(&pRxFilter);
; X6 O: t' y  N! p3 f" g: s/ m; k$ U+ x. x6 }
                /* Downsampling */
0 z" F, Y# K2 H1 F: q                c_SymbolSynchronizer_SymbolSync(&pTimingRec);9 t* s% A2 E! |
% a/ A! Z% H' w9 m# i4 p& Q* c
                c_PreambleDetector_PreambleDete(&pPrbDet);
. B9 v) v) I9 s/ j1 X* F  _8 a9 ~4 G8 `/ Z
8 {6 t# v$ P  V  ^' Q                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
; U  H( V$ }- N3 E3 k                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
* {: o' l' s% W* X$ ?/ k8 ^# h' w                /*     %帧数量=100 */
/ {7 Q; y! l0 f( S, O; k( P/ T                pFrameSync.isInitialized = 0;5 A9 J$ Y/ l+ s2 o
0 d( ^% ~  l5 W9 d4 S- t
                /*  [EOF] */. a- b0 r$ h8 U1 Z3 y+ {& d, E! R
                /* 前导码长度是13 */$ s5 Q, j; ~' K" S
                /*    %qpsk */0 Z! o7 G- B1 q8 [! X3 m2 K
                pDataDecod.isInitialized = 0;5 W2 r' |0 y7 |5 d# E/ _# f

/ l5 e, z/ d9 F* g                /*  end */
* e' `* d" t  {2 I8 o. Q                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
) i6 a4 a" q- Z; z# q" P. J; x9 E5 g* Y, P                /* Convert 3-dB frequency */7 l9 w; e2 r- W' k- q
                /* Convert 3-dB frequency */  s$ T6 j) }! N2 M- Y4 B
                filtfilt(save_buffer, usable_left_filtfilt);
7 k4 o" L' r: G! [" Z                for (ixstart = 0; ixstart < 81000; ixstart++) {
. R: e& [9 [3 @0 K# w                        usable_left_filtfilt[ixstart] *= 2.0;7 h# k# k0 u% Y+ r2 C
                }$ b1 p, }6 }- \
7 O' U; R! L  }7 Z0 G, U7 Y
                /* 注意乘2,处理幅度 */; V0 n6 V) |7 v4 d
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 *// o$ e  P) v* P( M8 @% i
                /*     %% 行列转换 */9 Y$ ?& O  M9 |( e6 U8 r2 `+ s
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
) g) Y% @: F) U3 [9 n% D) z% p                for (ixstart = 0; ixstart < 81000; ixstart++) {
$ l8 ?$ P0 A4 }& c1 u                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
9 P) F: H0 M% H9 @% F9 _                                        - yiDuanShuJu_mean;
# e' ?- ?! F& w, L                }* O' P6 ^& b; c, p# J. W2 O
. V: |0 L2 E/ m, I/ A4 m
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
  R- t, `8 ~7 V* P4 K" O4 x                ixstart = 1;& t" G6 \9 T0 E4 a6 |+ ], ~
                mtmp = youXiaoShuJu_QuZhiLiu[0];" @: R0 |% I7 M* ?; w0 t& h: g& [
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {  L$ Z& M7 S7 D# M, u
                        ix = 2;" |. T# f& ?1 W! s* u; O
                        exitg2 = false;
% X) F4 e2 N8 i6 C$ n% t7 k                        while ((!exitg2) && (ix < 81001)) {
4 a. k, n8 L! e                                ixstart = ix;
; r& X8 i) `* x  j1 K" h                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {& `) P) ?$ L. A6 c& G+ U
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
1 }1 m& h' V5 i( T( w                                        exitg2 = true;
. u" s0 B. g( Z! W% X                                } else {% a. f# d  D, l$ n+ n! L# j
                                        ix++;$ f3 T8 ~3 ?% z5 v9 l( B
                                }
! |( h! M4 U% c7 z7 i# |7 Y                        }2 I& j* A. a& Z5 w) W( X
                }
: s' L( C0 E. s* ~+ k7 [0 T. W" ]+ U4 D' e# T5 M: B: t' V1 [
                if (ixstart < 81000) {# ]) t9 _! L7 ^  b- h$ \0 L
                        while (ixstart + 1 < 81001) {- n' [( \$ I+ h9 O0 A# q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
3 w; K& i1 ~- |) f                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
, K$ V0 F. u6 @: ^1 o! }                                }/ N6 Z* e1 @- g, D' j0 E2 A. u

! q3 {/ {! S8 t8 {                                ixstart++;
* M7 U7 x  g0 z8 o; n+ G* [. @                        }9 [$ B5 J' E3 p8 _: M6 K1 }' S6 z, o4 B
                }* A% W6 w0 N; X' c( b
) e! ]1 c: P: Z' q
                ixstart = 1;( ^+ i6 X8 J7 V
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
1 N% x4 ~. i( R5 Q7 u, D2 ?                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {( w: z  [) x2 R, |" \$ K& ^6 H9 {
                        ix = 2;0 w) ?# z5 j9 q0 K4 K/ S# p5 f& ^
                        exitg1 = false;9 I, T/ A$ _" V# [0 a
                        while ((!exitg1) && (ix < 81001)) {
* G/ ~7 H8 T$ N* x* ~                                ixstart = ix;
! M3 K: E& O! N& [/ o                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 R) d2 n) L6 a1 s: t                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];& A$ l4 r- G- l( E- P9 h
                                        exitg1 = true;
/ H+ U" |% \! m# }3 j& U/ T                                } else {
& P+ j. I) d. |3 _- x2 v4 ]                                        ix++;
. U) V+ q7 c% p+ \                                }% o) f+ j, X2 v, k8 r& m: M
                        }
/ U0 n+ l. X/ o8 ~; ]                }
4 C- v1 H9 e4 P* n. Y3 }, `0 o9 j2 W$ {
                if (ixstart < 81000) {
+ t/ w  E1 F5 g( M: l$ H                        while (ixstart + 1 < 81001) {' L" `. `8 P0 z$ q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {# P/ c* h- _1 X) \/ d6 |
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];2 ]! m- ~0 J; ?' ?& X6 m6 G
                                }" F( J4 b$ [# H+ S7 K
8 F5 v1 Q7 i+ P9 I) M
                                ixstart++;
3 h7 l: y4 R! ?# U: g! K4 S                        }, B! d$ P/ {: r6 q1 Z
                }' M7 o% e6 @" E8 k, r1 d
% f, z7 V) s. k
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);. E0 ?: o" \) R7 C4 c& Y+ X
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {4 I* b7 \3 D% n( V3 C& [/ G; B
                        yiDuanShuJu_mean = mtmp;, L5 d2 Z, \; I' D0 m( w1 z
                }
0 C4 {. j3 O2 \1 ?' O; c5 g0 c- V- Z" ~" R
                /*  找出极值 */
& }# \2 [* k" f' M* Y$ g. q                for (ixstart = 0; ixstart < 81000; ixstart++) {
( D9 o. a& e# m; R" J  M0 l                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;& ?  S$ ?6 N" y
                }) ?7 V; T# {, e. i. X/ J

+ Y+ v! G7 U2 B3 U8 ~" c        --------------帖子字数限制------------------& q" b% V" c2 u# L: f
}
" R/ Q4 J( ^% j1 c1 ^# i- @6 c! W- x1 b0 I7 T

* N( N. M( N& \  Q; n1 B

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 12:37 , Processed in 0.042705 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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