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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
: w, i! g! a' c; ^" P, a3 Q6 V0 N; g; z3 t, _3 ~# j% f
各位大神:4 o3 p5 w; |% p( K- ?
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
2 p, F. V* T7 V& p: T: g: W& R      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
  z. E$ x" n! l& ~. d9 O/ w% g$ Q4 U9 r  v
     
! v/ R( E& Z! q0 h这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。" C0 G, |' ^1 L! O/ G7 y: A

" ]% F* C- ~$ B; S9 p/ \. v并没有其他线程
, \3 B9 f! {3 T9 H1 U% Z反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。* ]  U5 f7 @" J- r% ]" N' H
也说不定是和堆栈有关系。。。。。。7 Q" }' U% N8 b" ^& @8 d
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
* A  ^1 ]8 x- w, W* T4 _; a* e4 p2 u3 o# ?) p3 h. Z

& N4 U& j5 Y4 \- F4 ~4 A0 J/ S  T, s# `9 `, Q: ~
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
8 d' B& r/ @, |8 C" `4 @- B3 e. f4 X8 d: U9 E' J% I; \

) P  W1 G/ H6 i; ]附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
' O- i7 [0 a3 S# d        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
  u* o! [( N0 I) ^0 R# V9 X% a7 X3 J* P$ c% l' ^; q* O
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(9 G( u1 t8 T* x# O  \4 a
                const double data1000[1000]) {. k$ T/ Z  z9 f* x: d) l
: y* A) Y3 g$ |; j: S
        int myfuck;
8 ^& C8 k2 m# Z1 I( }        double yiDuanShuJu_mean;. X% C. m: `* a* }2 k2 Q6 E5 S( w  U' W% _
        double yiDuanShuJu_LowMean[1000];9 r4 L3 {) G) F  m2 H
        int ixstart;/ s) i& H! K4 U# r
        double dv0[1000];
( x2 j% {9 W+ S6 I# c9 @        comm_AGC pAGC;  k- W* I% J" a" R5 t/ {
        comm_CarrierSynchronizer pFineFreqCompensator;
* [4 R5 ~2 k6 ^5 t, m        dspcodegen_FIRDecimator pRxFilter;/ `" X$ X: Y- [. j( m' h- y
        comm_SymbolSynchronizer pTimingRec;: c, X1 H7 j' [/ x. `
        comm_PreambleDetector pPrbDet;/ Z3 Y# r9 m1 k' _) I. `5 t
        FrameSynchronizer pFrameSync;5 i4 o+ C% {# t. u" ]2 ~
        QPSKDataDecoder pDataDecod;% a  H' `) E3 {# f6 A, T& h) p
        static double usable_left_filtfilt[81000];& x! ^% o/ _5 Y- e+ ?
        static double youXiaoShuJu_QuZhiLiu[81000];
0 C! B4 h5 j) j: B        double mtmp;% \: h6 k; m# F" E$ z5 s% o
        int ix;, h/ Z# `! S1 G- o8 \5 X
        boolean_T exitg2;
8 x( P9 Z4 S0 I0 p3 L" K* E        boolean_T exitg1;
; [' F5 g  G  v        double YiZhenShuJu[800];  b" \% L3 z& l+ {+ y+ f* y. c( u
        double dv1[800];; a$ u- g, r3 B) r
/ L; f  L0 x) r( L- E6 P

1 e+ V/ z& r( {% w  {+ E& C) c        double b_YiZhenShuJu[800];* ^7 U! i0 S" t3 H
        double I_filtfilt[800];
' |9 r) B  P: N: u; E        double Q_filtfilt[800];
) C) P) T, l$ V1 v/ t        creal_T b_I_filtfilt[800];6 p' D3 {( w: @) G3 F
        creal_T b[800];5 ]9 U9 Y5 k, s7 B
        creal_T RCRxSignal[50];
( f- Z/ I7 E$ `' T2 X) K        creal_T fineCompSignal[50];
' k! k$ Z0 F9 T( {) e        double phError[50];+ u3 q) X" t, w
        creal_T timingRecSignal_data[28];" C9 l: ~) [& A5 K) s/ q
        int timingRecSignal_size[1];+ h" _& a9 V% d( V; X! w3 P
        double prbIdx_data[28];
7 j8 a' X" y  t6 J9 c8 R        int prbIdx_size[1];* }' p$ L$ Z& d# E$ p
        double dtMt_data[28];/ K3 _1 h0 m. c% G) }% p$ x
        int dtMt_size[1];4 j! B9 B5 O: N7 }0 N- @
        creal_T symFrame[25];
- d7 y+ o7 D6 j6 D/ m5 q2 d8 I# D        boolean_T isFrameValid;2 v% ^* O3 z3 k6 J
        double unusedU0[3];
5 b1 Q4 u8 b, G2 u3 Q4 G! h, `) j. _- g2 _# {) J& D
        //调试过程中的变量" ?0 ~& T8 f) X, }3 L" @" c9 X
        int  enough_data;6 y" i" @  l# K1 W3 Z
$ \3 R9 T! z; ~8 r& k- C
        int enoughDataFlag;
; ?( n/ @! U; e1 Q! I: t- ^: F        int yiDuanShuJu_mean_int;
3 _! V" l4 j- P" l' |5 N& l# v        int int_sum_dv0;
' @% I1 |3 V, I* w+ M        int oo;+ w( O& P$ o4 H& ~. w5 \- k8 l
        int ii;
0 `3 D! r2 C+ W$ h8 y- V/ x        myfuck=10;8 \+ B$ K& l" ?5 k. G. s/ R
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */& K# w$ |* l1 S/ a, w& `
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */) s2 n6 m, V" j
4 k8 B$ N/ F  v/ A7 h& F) U& I2 N
        yiDuanShuJu_mean = mean(data1000);
: Z) k1 E5 T8 Q7 @8 `: _9 `% |# R7 ^+ @( h7 v2 U0 Z! o) c
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;: m5 ?8 O# z! P$ F
        UARTPutc('A');
" |# ^/ s* V$ @/ i7 d        UARTPutNum(yiDuanShuJu_mean_int);
- s& X0 P: b  @, e% k2 H" i        UARTPutc('\r');4 ?( A" U; ]: W( q
        UARTPutc('\n');
1 }2 a6 G" L. \  t' ?$ A, r1 g. J( {; n9 b9 \: L+ i
        for (ixstart = 0; ixstart < 1000; ixstart++) {
: b! T! B7 Y% Y' b) u                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
' E9 u1 s5 z1 M6 L- c        }+ a, m2 I. N% W0 M0 u0 O
! n% T! L2 |' h3 P7 V5 s
        power(yiDuanShuJu_LowMean, dv0);% i+ Q8 r/ d2 A" x$ E' {

  }# ?3 ~/ a& G% X# A1 g; S        int_sum_dv0 = (int) sum(dv0);
4 {$ ], K. T( P: _1 J# ?# q
2 R$ ], h: H1 Z        UARTPutc('B');1 d' j- Q: M/ G' w/ P7 G0 k
        UARTPutNum(int_sum_dv0);# ]& X5 e8 i0 i# o* }. z% ^
        UARTPutc('\r');6 k- F' H% N: l
        UARTPutc('\n');
# T# f3 N' j6 V" r
# f' h) T" h  J- w+ A" T( k//        int compareFlag = int_sum_dv0 > 1.0E+8;
3 g- f0 t- h$ W0 K7 r  Z% ^$ C" T% X7 k4 Y" i/ h
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 V3 n4 N* P; m. u* _, b$ a
                UARTPutc('C');8 R% ]( z* e1 M9 a% g4 I
                /*  比较信号能量 */
! f+ [: Y& f$ s5 @- M5 J0 C# ?                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
4 d6 J: a  t2 x7 `$ M! ^; Q//                yiDuanShuJu_mean = 1000.0 * youxiao_k;" o2 K; L" @  x9 j; q4 W+ x% T
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
8 Z' l# |* ~+ A6 Y//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =4 r/ p- E! H9 s1 q5 S
//                                        yiDuanShuJu_LowMean[ixstart];
9 c+ K" ^& _8 V; q* T//                }
$ W5 r2 b1 K/ z0 T; T/ r3 d//7 h9 Z8 o% c/ \  E" n' j( z; P
//                youxiao_k++;
* T$ h5 d' T# \/ v/ K1 J; J//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
5 ?' ^/ c7 [% Y' R& g/ \: [//                        /* 感觉要取21个数,即0-20, */
4 e# q! r# k, Q. m) t% J//                        enough_data = 10;//有效是10,无效是0$ V, S* b2 X4 e2 x  I: A! \
//                }
$ f9 M. F( I" b( y2 z2 S* @7 X        }; a+ ?- |* C6 p  c. e. p2 B

# r" O% M/ @  {. s# Y8 w4 Y
; }3 P" A% F( ]        enoughDataFlag = 100;
- \: u# G2 h2 }) z        enoughDataFlag = 1000;
1 S5 C, R+ R2 N        enoughDataFlag = 0x02;
; O" d! {' L+ E* a: y  z        enoughDataFlag = 200;
$ }& o! y6 o( u: ?+ k$ r1 c) b9 \6 T( S5 E
        int myfuvk1;
3 n8 e" W4 o& k& I        myfuvk1 =11;3 o+ s1 C; X, ^8 Y

9 T1 Q( h. ?# P0 |& H3 R4 }6 t  O4 t8 a, U$ m
        enough_data = 0;
" h1 {5 }; F0 P$ p: l; F. Y* A. A
//        if(enough_data>50){# y. K) S/ s+ R( M" R" t
//                enoughDataFlag=0x01;4 `/ a  d' g+ @( c& l  r
//        }else if(enough_data<50){8 Z% r& N9 \0 k  o, f, E" j+ S3 {
//                enoughDataFlag=0x00;//0x00还是不行& ]0 D; v+ G# i9 e) q6 L  F
//        }( w, p: B7 t$ F" [( q# x

( W4 X- K: `( ~; z% ]
- D# G$ N7 K! g/ Y9 w7 @1 L. j$ ^        oo=10;+ o( u. \& t3 m% W- m: r# v1 C9 b
        oo = oo  <  5;- w& a! n- V9 L1 U1 f+ r3 G# Y
        if(oo){5 a# @7 [3 `9 b
                ii=0;
4 I6 _* I* Y" P        }4 R+ {) _) l& |: v4 t# C6 A* Y
        if(oo  <  5){$ E0 i0 [8 q- t! m2 d7 p5 A% @
                ii=0;
( N. O0 j8 f. l        }) _/ U5 n/ y8 r' F6 y, b
        if(oo  >  5){
3 Q1 ^7 H! i: Q2 P; [5 ~                ii=0;) o$ F# N$ v1 l3 d$ q- \
        }3 V5 t1 X  t: O( l# m
1 z& b. S7 w- A$ `
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) E, V- r1 d; Q" ~        /*  如果数据足够才执行主程序 */$ e: N2 {; J' Q& p# Z, V! u7 W
        oo = oo  <  5;
# Q) L9 U, d% [0 \# s) M        enoughDataFlag = enoughDataFlag  <  5;
9 p" C% L0 y1 n8 h4 f' l        if (enoughDataFlag  <  5) {
1 Q8 n) G2 j7 o$ O//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0$ A! e' O0 x7 ?1 p
                AGC_AGC(&pAGC);/ h3 E& Q, f) H' V
2 s+ @6 d6 ]$ N' I' Z
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
, E# o0 m0 b! c2 @7 v( J0 M% y                FIRDecimator_FIRDecimator(&pRxFilter);6 M1 n- D- B2 O, |! V' e  }. K

1 N* c3 F0 c3 ^9 i                /* Downsampling */0 e3 [8 l( N2 s9 P
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
# ~1 n7 p, l% w- d7 ~, J( ?
' r  ^0 C! I7 D% w& i: F, [, ?0 j) O                c_PreambleDetector_PreambleDete(&pPrbDet);
9 Z) ?6 P$ s' I7 T5 \: _7 {9 Q5 ~% E
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
" n: d. D! ?( H                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
4 ^$ [6 e3 Y9 v8 @. U  m) k                /*     %帧数量=100 */  L$ Y& b; i* E8 _" A9 N
                pFrameSync.isInitialized = 0;
7 f" X6 b- x) K4 o) [0 X& D. n6 ]; z0 P, B7 \+ k, ^
                /*  [EOF] */
, w% P$ c3 G1 M" U                /* 前导码长度是13 */, N6 _/ j3 p4 v- G9 O; o9 F% s
                /*    %qpsk */- ~/ W* ]7 k4 d1 O
                pDataDecod.isInitialized = 0;
' }( H" L9 C0 @- s+ s: \7 J
8 j* K  T$ a# G/ E5 E1 r% }                /*  end */; P# N5 s  B- u" A1 b; o3 n
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */. \: H. ~* j" B$ v$ b
                /* Convert 3-dB frequency */
% J& ^9 k% w6 l                /* Convert 3-dB frequency */. E1 l3 i: n8 v1 K, i0 I
                filtfilt(save_buffer, usable_left_filtfilt);
0 U6 R9 v3 e, w- \( w; b# b                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 e+ N: {! d! d" [  K2 P                        usable_left_filtfilt[ixstart] *= 2.0;
7 {1 w, p0 z& @                }
. c, u9 |' _& k: X1 U- \
9 o6 D9 O, Q% h' Z' z                /* 注意乘2,处理幅度 */7 `/ v! F# r6 e& R+ _2 E+ w8 l
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */  W2 Y- a2 z0 E* E
                /*     %% 行列转换 */
; F# C+ g  S! n2 p( X                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);( N3 K9 w  C7 _8 A8 p+ ~
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 m  R5 i1 `, w5 J8 u9 n                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
; x3 ^! z4 P1 R" g                                        - yiDuanShuJu_mean;( u" F9 \6 e- x, C0 m! _( Q( B$ {
                }9 W8 R+ ?9 z, a; b
- [! S  I0 A' |, o
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */( A" g, ?1 R. I& S) U
                ixstart = 1;
6 i+ I- `! A/ H0 |3 x  D                mtmp = youXiaoShuJu_QuZhiLiu[0];6 E" \. {9 |" I, z* v4 C; |7 d
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; ~/ p4 z6 Q* M! k9 U
                        ix = 2;7 Y5 ^% w0 _7 P7 o: Y" Q
                        exitg2 = false;( U  _9 _. I: n/ J* S  O6 u
                        while ((!exitg2) && (ix < 81001)) {
2 i' Z9 ^  m' U% J                                ixstart = ix;; z# ^* e7 N' U( [; A
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, g6 L+ g( _  x/ P, {: O                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];, S- I; O. F  w) n8 f
                                        exitg2 = true;2 }9 H6 L; M) |# N2 o$ D
                                } else {
: B* y; x4 o; l                                        ix++;, b* N5 `7 l' [& ]8 T) Z- i1 h3 C: M! f
                                }
+ U/ _0 \. j; `; `5 Q9 g                        }
$ b  r% q8 t( ?" y; I                }
" S0 f. t: y1 P* }7 I* K
! Z1 [$ B+ R$ z% U) x                if (ixstart < 81000) {
- ~# x) @/ u2 q- _6 y1 G  T7 ~                        while (ixstart + 1 < 81001) {$ J. K6 b7 ]4 f$ i1 f% J0 Z, Z; S+ L
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
+ A& `1 `, N  j" P6 B& x                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];- u) l( X& P( N; S) a3 O, F
                                }6 [( Q- \$ f5 R6 K0 f0 F

7 n8 e9 I3 z7 Y3 X! {1 i% F$ I                                ixstart++;
6 D+ {% L8 _2 B' s                        }! x7 K/ v7 v7 B! z
                }
4 R$ `* A  O6 C3 A$ V; a* F9 u4 t- [! |
                ixstart = 1;: o& A( w* e- }! N
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
* J: o# G! X. L" y% m5 n' e  D                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
' A2 D' K8 Z1 G* p                        ix = 2;
" V7 t  I5 l& b1 \' ^0 U                        exitg1 = false;
* |7 r# ]' K3 Z# r1 @& [8 X% W; i8 o                        while ((!exitg1) && (ix < 81001)) {
& C4 P1 Y# Z( a                                ixstart = ix;( |: ], ^6 @  M
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 G* L  Q( j1 H, R% T' ?                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
4 r' `' Z( b6 n! s: T' Z                                        exitg1 = true;( X0 P4 r) X: Q% w+ Q4 ]. v
                                } else {
6 g$ J4 X6 |, j                                        ix++;
7 q" m! u' l9 i                                }% u. X/ W2 q# \5 q, m6 ]" O' \8 G
                        }
& d0 N" S/ Z/ K  @                }
3 u) c; D# u2 Y9 G; f. q, a& b$ ?
                if (ixstart < 81000) {5 J. g' Z6 p) l6 X+ b3 f1 H8 T
                        while (ixstart + 1 < 81001) {
/ i; l/ w' g1 t" G! S                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {; X+ C% c4 W' S4 [
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];! E9 k1 c& |& z% @$ }# e
                                }( S9 w2 }( U- Y% ?

* T) ]4 c3 m3 `5 E& A4 f, J                                ixstart++;
3 Q/ N% w# v6 X/ F* d9 ~. t( N$ d                        }
1 L& P% r# ]3 A' j. \; z                }3 b9 L  N' S8 _/ \
- ~# x4 G' ~5 F/ D5 ]* ?
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);/ t. y% q9 |% Z8 g, S1 w( t
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
7 p+ C1 u( @& i* E1 k8 c                        yiDuanShuJu_mean = mtmp;
  ]# s) n; w6 T# ~9 X) h                }
8 C; \' O1 L& }, W  N% u8 D7 N& B4 t! r( g# z4 H
                /*  找出极值 */
# f' V+ j& K. {  o8 [  {% E7 B                for (ixstart = 0; ixstart < 81000; ixstart++) {: |1 M, L6 R: e) D
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
$ T2 _( W4 n" _6 S$ x                }
3 n/ w8 U  d# K8 E, `1 {
; ]1 l5 M* Q% y2 T" H% _; j% Q        --------------帖子字数限制------------------' O3 O' b5 B6 m; _
}
5 V, p. L* T' D5 Z; s/ w) x1 ?
5 ?/ C1 Y; ^. M2 c4 a( \- n/ U
( ]0 ]' W9 c# n" ]

本帖子中包含更多资源

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

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-7 06:14 , Processed in 0.042573 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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