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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
& B3 m2 ^- o; F; e6 V# o9 L5 a/ ^
* I4 _. B4 O% K2 u各位大神:* g0 D2 K1 b7 T  R1 P2 k
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
6 L5 f% z! n4 l      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
4 E/ ?% f( T& t/ Y5 I! t' s. g/ z) K/ h; Y$ O; a1 z
     
1 f6 [" J: I8 U0 [' v2 }这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
* e/ X# ?- ]- A0 t% _: A3 {1 q
+ f; O: @) K  j6 u并没有其他线程8 u' U* ?9 j$ w( z( e
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。7 R4 h! P; I- e& K! I
也说不定是和堆栈有关系。。。。。。
' p( b* z3 `- ~& Y' W1 J  E请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....' o1 t9 ]/ _! m4 b% Q9 Y- W4 `3 y! D
. [3 w6 K6 @3 c
6 \* N  J5 Z' s7 s

8 q8 X& W3 X0 I- s7 ^  C* Q, @我也很绝望啊,希望大神能帮帮忙,感激不尽,!
9 T% Z& Y( V9 P/ b. D* g# C& U- n; b( d9 N$ d. D) |* o9 E+ l3 N

6 E: x+ ~! s7 R; @附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];2 Q0 e" I' \* k& E
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。* Q+ B+ H5 ~; }4 J; P' p

1 K" Y% ~& x5 A' nboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
+ u8 m1 d! A7 h9 s2 ^                const double data1000[1000]) {# k: w* N- K# X* \. Z

+ {& u: ?" d5 ]) z( b! }        int myfuck;8 \0 v- U7 H$ C! U+ w: F& P% k$ m
        double yiDuanShuJu_mean;
8 i" r6 ]& ~" ^* n( ~  _        double yiDuanShuJu_LowMean[1000];6 x! h$ i1 e( A! M  c' A# d
        int ixstart;
0 I# y+ _' S+ U4 M8 H6 |0 j5 V        double dv0[1000];
1 i/ ]0 ~7 R9 v* I" E* T; f* m5 X        comm_AGC pAGC;( i3 k! E2 T8 s0 _0 Y9 W/ U
        comm_CarrierSynchronizer pFineFreqCompensator;1 P. `# ?, t5 ?
        dspcodegen_FIRDecimator pRxFilter;+ O: w( l  T8 d/ i: B8 m; n( Q1 R. H
        comm_SymbolSynchronizer pTimingRec;' P" ^, f5 f$ L% x* O/ J
        comm_PreambleDetector pPrbDet;% s* h) y7 Z) a) k, [
        FrameSynchronizer pFrameSync;
% S7 Z" t; U- d& A; ^* U        QPSKDataDecoder pDataDecod;
* D8 v" K7 I) g% X: v        static double usable_left_filtfilt[81000];
% |; [! l2 r4 f5 |2 u( _! j        static double youXiaoShuJu_QuZhiLiu[81000];# x' y& j* d9 e
        double mtmp;% P  B& q( T( D) u3 l; N' r
        int ix;
$ p+ b8 X. v, o+ k+ F4 a        boolean_T exitg2;
+ m0 z) s+ Z) x/ k        boolean_T exitg1;7 d* _- I7 l0 l9 P% w
        double YiZhenShuJu[800];( e6 J: {  t: v+ x% L* r5 v1 [
        double dv1[800];
* b1 j0 K+ U' p$ d& Y- Y
# j+ v+ J( ]6 N" b3 `1 X! l4 E9 a* K; ^* C. s/ j# B
        double b_YiZhenShuJu[800];; D# g' p6 }) R2 R( _
        double I_filtfilt[800];% }8 I3 ~/ M* `
        double Q_filtfilt[800];: }9 Y4 B0 c6 E' B' }4 c) Z4 R
        creal_T b_I_filtfilt[800];  g- h& Y5 E8 M0 {
        creal_T b[800];
3 Z* y( P6 A  a  T+ E6 w. @- Y# [: Z4 M        creal_T RCRxSignal[50];4 m2 v3 ~( k* y1 U0 |
        creal_T fineCompSignal[50];
. m) \2 Q+ W' a# E2 E        double phError[50];2 K2 B; s0 c6 f- L/ K+ m
        creal_T timingRecSignal_data[28];. v: ?1 s7 ?( w: ^3 M1 Q6 b4 G% Q# R
        int timingRecSignal_size[1];$ ?( d2 O4 C) B  h) X* |: X
        double prbIdx_data[28];
8 C; M: U: k' ]& ?        int prbIdx_size[1];
; h4 t; f3 E1 H% {- R4 e9 m& `        double dtMt_data[28];
  s3 r0 c  P1 ~' w  Z        int dtMt_size[1];
& C( V9 D6 r/ j1 [$ l- y        creal_T symFrame[25];
/ k9 K: S- f; d" B        boolean_T isFrameValid;
; W( I2 Q  Y% r. e$ v        double unusedU0[3];
: d! ]. b" N+ i+ S  G$ W! U
! L. s5 @' R# R: f; g9 q        //调试过程中的变量
+ J) c" g+ L( ^2 o# S! M" P        int  enough_data;
  r8 p0 U1 m0 A/ e- Y$ V5 `: f# D; ]+ g( x' ]' E  A. j
        int enoughDataFlag;
  t' u3 C8 T5 _( m0 O/ |, V4 ?' X* Q        int yiDuanShuJu_mean_int;
9 w. _% w% ]3 f, U& j  Y7 H6 a8 _        int int_sum_dv0;! p3 Z/ x; B" x- h5 C2 U$ S
        int oo;
: G  b# S0 z9 Z# b( _2 E        int ii;8 R. i3 z# f7 Z: N) I2 K
        myfuck=10;6 r2 m' X+ I' r; H
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */5 y1 @# Q4 \" q
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */9 Y% K" `+ V! w! c) p4 D/ ?
2 K% G: r& {3 g$ n5 I8 |6 k7 W
        yiDuanShuJu_mean = mean(data1000);3 x# U. @8 v( [/ d

+ D. r3 x* a: @- }9 r1 O" ^2 r        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;6 S3 ^& Z- X- {
        UARTPutc('A');+ J" ^8 ]) y: Q: g! D
        UARTPutNum(yiDuanShuJu_mean_int);3 y- w2 _, E! \. y$ h, G1 J* ?4 A
        UARTPutc('\r');
$ j/ K  o9 r; d: f, n        UARTPutc('\n');
& y5 s1 j. y* D6 X" q/ g/ m9 P* B: Z/ w1 K4 g  V6 c
        for (ixstart = 0; ixstart < 1000; ixstart++) {
$ @9 T2 H3 Y, F) g3 f8 c! T                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;. h) Q1 [. W, S3 B0 X
        }% `& e* [. `  D

) N- U% u  c* U& k% h/ V- l+ p  C        power(yiDuanShuJu_LowMean, dv0);
: z6 l& D- Z* X. }, L6 j
0 B$ N: Z+ _# T3 ?* L        int_sum_dv0 = (int) sum(dv0);2 N+ u/ O; ]  o4 Y! k0 m
. b8 K5 R- P9 [, a# U- Z% |" i
        UARTPutc('B');
. n: T$ v: P( E% W  T        UARTPutNum(int_sum_dv0);
5 s# f$ D3 z9 {. W  H2 Q        UARTPutc('\r');5 l5 Q& E# D" d# \; r  o" d4 p
        UARTPutc('\n');+ B' s) R" w+ ]' E6 n& p
" `* }4 s' F0 N3 i  b7 @. E5 Z& x4 s
//        int compareFlag = int_sum_dv0 > 1.0E+8;" }5 t8 ?" \6 ]$ ~* V# b

* A: M9 u4 Q8 c' u! x6 C$ q        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?, S9 S4 `& D: Z! [% \) X7 [( T
                UARTPutc('C');1 y! h' E8 c7 A6 i: y0 |  N2 Y
                /*  比较信号能量 */1 G/ M  S5 D. s
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
8 [7 J( ]3 M; u7 e0 P//                yiDuanShuJu_mean = 1000.0 * youxiao_k;9 t! t/ L% i" W* C6 \4 Q
//                for (ixstart = 0; ixstart < 1000; ixstart++) {4 X' N7 k" w# \0 f! |/ r) B8 A
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =* s  _2 v! y4 F7 J2 D
//                                        yiDuanShuJu_LowMean[ixstart];
+ a2 h) ^. A6 I. d//                }
6 ~8 j' W) T* K//0 Z( [8 Z0 m( e$ y# {2 J7 d
//                youxiao_k++;0 a5 ]7 r$ n9 ]; B* R
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
8 f- f) S% T4 T" G# m2 H//                        /* 感觉要取21个数,即0-20, */
& F- _. M4 N4 a! \% G4 \//                        enough_data = 10;//有效是10,无效是0% V1 }! ~# a9 m! D, v
//                }; f; E8 ^( V; a- o1 j1 W4 P% ]( Y$ K: l
        }+ y" \; \0 n3 O5 J; o9 F

/ y3 t, d9 p# U+ |/ i# W' C! _
, c% u6 G3 }, B( u  \        enoughDataFlag = 100;$ E5 N7 ~/ ?. A/ |8 @& \& L
        enoughDataFlag = 1000;
. d+ G! Q; q. k6 q8 D4 q: N5 ]        enoughDataFlag = 0x02;
0 C2 i) Q' y  g6 {0 @$ {0 i        enoughDataFlag = 200;
4 Q  w+ Z# m- J0 k5 |/ v0 ]' \! T( y1 |# ]% N
        int myfuvk1;
- Z* Y+ a8 t: i# U8 C        myfuvk1 =11;
# }  H' n' N: m, h5 i- Z! u* i) b: o8 Y2 H) Y3 R9 G5 T6 Y
+ Q4 o3 t1 d! ?) L% K  x
        enough_data = 0;7 T5 P0 `" L$ _% i6 N1 {

& F5 c, X5 R5 g4 S. @  }//        if(enough_data>50){1 w5 A4 e" m. S: d
//                enoughDataFlag=0x01;
1 Y5 V- a" Q  i- Q7 \//        }else if(enough_data<50){& W3 A* W" m: R2 S, A# J
//                enoughDataFlag=0x00;//0x00还是不行0 {2 l% q. l/ a/ g5 r' h
//        }$ n2 `, F" O5 V+ ]  ]; Y9 x$ a" w
8 k* I$ E6 _; E, E! L

5 [/ h+ k. {5 E% a' s        oo=10;2 d2 @7 R9 j/ _+ i1 k
        oo = oo  <  5;$ d0 [) m$ S' K
        if(oo){9 ^1 j" u. u% s6 `
                ii=0;8 I8 K' O0 o7 k. L$ I2 N
        }' y; x9 H1 D8 V, h  k
        if(oo  <  5){
* H/ {0 M  N2 `; u  S. h( X- l                ii=0;
0 z! `2 k7 F& v' [. }        }
  |5 y3 V# ~# r% x  J        if(oo  >  5){
; O3 {' J" d$ P5 F                ii=0;1 x" ~/ Y$ y  T8 D( @8 P  B
        }
# L7 ^8 j8 y9 q" X+ R, q0 ~* ]; t0 M; v) @; ^/ ~. |
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */  O1 \4 C/ Q" ^0 t3 W
        /*  如果数据足够才执行主程序 */( O) u' N8 v+ c; z8 b8 x
        oo = oo  <  5;
: _/ [, V- w0 L' F) L( }        enoughDataFlag = enoughDataFlag  <  5;, c1 M- J& `% I# q4 y/ j
        if (enoughDataFlag  <  5) {8 A5 I1 ?3 T( I1 n$ [, _$ i
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是02 y' D% b& Q, Z5 b
                AGC_AGC(&pAGC);
1 n: _8 k& _, k) z  K* g  n# ?; H
5 X$ V% o3 b, g+ p! Q, E2 w( Q                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);/ U4 n: A$ O2 W6 O
                FIRDecimator_FIRDecimator(&pRxFilter);
7 n$ W. Q2 A, B5 a. ]$ n& o) V. m7 T
                /* Downsampling */! q! b# P% H# `/ d( I
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
1 R7 B: ]6 P' J  K5 `$ a8 M% e) O  k3 A# W/ I8 L1 j* d( Z
                c_PreambleDetector_PreambleDete(&pPrbDet);
4 h! n) I8 A: h+ N) h; M
  D. ?+ p" W" V5 ~+ _                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */  Z/ V' T  u. h" D, S- I
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
" K6 A9 e3 K- s3 W; _  K7 A                /*     %帧数量=100 */5 n5 x' O6 R- Z0 O' u+ ?1 T
                pFrameSync.isInitialized = 0;
& w% `: }' b6 O, R% o* y2 |# F5 `  |: ?
                /*  [EOF] */7 B2 }1 s! v' Z  }0 A2 D; _
                /* 前导码长度是13 */7 j* l% x1 t, ^% p8 p6 k3 c% i' t( n
                /*    %qpsk */; s' ~, g$ x7 p+ r" {. \3 c( M
                pDataDecod.isInitialized = 0;7 p0 D' }0 W# l3 y% T* |/ ^

0 U+ \( }" f; n/ y1 s: y/ Y7 C* a" v2 O                /*  end */$ ?1 \4 V% Q& o$ C# @- @; ~  ~
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */, o5 l* v( x2 w1 L( n9 ?- b$ i
                /* Convert 3-dB frequency */
8 {8 Z. }- P6 E; b  A! u                /* Convert 3-dB frequency */, |+ o: @) F" y! w# ^
                filtfilt(save_buffer, usable_left_filtfilt);& f2 d/ {/ t0 i2 A& s- T
                for (ixstart = 0; ixstart < 81000; ixstart++) {' c9 a4 J7 c& o. P1 w
                        usable_left_filtfilt[ixstart] *= 2.0;
: u# ^; J) M* O6 K4 d                }1 a% m+ T* z3 H# U. A
) G! X+ q0 v( V) F( u
                /* 注意乘2,处理幅度 */( m  g) `6 h$ [$ P
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
+ I$ _$ Z: D' l+ [$ ^  t4 O                /*     %% 行列转换 */
$ t6 Z# V8 L" m: r5 Y                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
7 t/ P, y/ e# @/ @/ G0 W5 d+ y                for (ixstart = 0; ixstart < 81000; ixstart++) {9 P0 ^, C" w0 D% _$ X* h1 _. z
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]& X, R* f$ M' H4 y$ W5 B$ h
                                        - yiDuanShuJu_mean;& H% e# L$ `' C4 N$ r3 Y
                }
% H6 l# D, b0 R* J( M
, N: b' Q: g# c/ w, s8 S                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 G6 ?) _- |; f$ Y
                ixstart = 1;
. x& o0 Y+ r8 a# m8 |# u                mtmp = youXiaoShuJu_QuZhiLiu[0];
# H: \2 R& `4 ~; n) P" b$ ^( x: }                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
$ L! D6 T/ q& A" o# z% S+ a                        ix = 2;" C) c1 w4 t" d) h1 n" q
                        exitg2 = false;
/ ~, @5 a$ A: @( R                        while ((!exitg2) && (ix < 81001)) {
2 M- R* G$ y3 N& T) U5 X) Q( ?                                ixstart = ix;
$ |4 ~& G  ?% W$ c4 q' @                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
1 y7 m/ Y) N% j7 ?                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
8 |7 d& x2 O0 [  N% b) w, T                                        exitg2 = true;
5 P! i6 ]' o0 X0 E                                } else {
0 H6 G' R. V( x% B! m3 w3 G$ i                                        ix++;4 B" _* c! \2 G- o" C9 o5 L
                                }" N& ^! y1 F. B  h+ b1 ]' `$ s( d
                        }3 B! V! f+ y4 b5 a+ w8 F
                }3 c: H9 o& y1 m. C

8 ?9 F- Z) }: W3 h                if (ixstart < 81000) {" P2 D' p0 k2 M  O" g
                        while (ixstart + 1 < 81001) {
4 ]' ^  ?- m6 ^3 z                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {$ C) }8 {; w( A, f1 M& g3 S9 A. e
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
- C; l& Y( H( k. u1 M: ]' @% d                                }. a" _' ^( j) U; o( B: Z8 n
* H' }0 V: H& H$ v1 {/ o8 V
                                ixstart++;
& o8 m  `8 P( Y' C# q* M                        }
8 Q6 c- \' }0 a& i3 _                }6 C5 p" V, @( ]8 M& U
4 O4 b  _( i: [5 c' j2 P
                ixstart = 1;
" U5 v# n0 K5 k# ?                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];: N+ J* E$ s# c6 O
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
2 j7 o$ e. O3 D8 N5 ?8 f                        ix = 2;- P. E" r. d# ~9 j1 F
                        exitg1 = false;
" W. n/ R0 K8 j" e' H' U# D                        while ((!exitg1) && (ix < 81001)) {; o6 j3 k; y7 J( D, ]7 v) s9 `
                                ixstart = ix;
! ], O% Q" h  F8 y5 {8 s                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& h$ r# x: u' i  {' B                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
9 I% P$ P8 T' ^                                        exitg1 = true;! t: d# w: H6 N8 s! D0 h& Y, s# p
                                } else {
" A- z8 ~" M2 i4 v4 l. M7 h                                        ix++;
! \( i! ]- x8 N! s4 F8 J7 n; H                                }
- j5 V; ?# o9 U! `                        }" O" u1 |! p! [' o
                }4 d) |# J. Y. W' f% J

1 l' h" ~& A1 q1 X$ ~1 v                if (ixstart < 81000) {. B% }) w% f2 H( h
                        while (ixstart + 1 < 81001) {
. H# u* v* Z! {- S' r, K                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
. M- D' x1 G+ `7 K' ~( `                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
; I3 U! \" r* q& T                                }
  n) U1 d+ r6 ]. N0 |3 _
5 r9 \/ D# [! h9 \! @0 o- S                                ixstart++;! q# U3 d: e* q5 f) j
                        }
* ^6 k  L3 a# N! s                }
" T- C0 m% y1 c! W9 M- q# R, u6 ?; e" o) ^% p' t
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);' T" @% }) q2 M7 L, y7 v9 Y: ~
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
- G6 \3 v7 _1 k: u+ a                        yiDuanShuJu_mean = mtmp;
! a9 f$ X" A! N6 C                }! i2 q, W; ?1 {% r3 ]

( Z  x( j7 z3 |. T( _! _" z$ a! o                /*  找出极值 */& ~- J: x: s7 F
                for (ixstart = 0; ixstart < 81000; ixstart++) {$ r* F/ x9 E) S9 P+ F+ e6 e
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
; Z+ w% U5 a( T& s                }
' I" h9 T+ r3 m0 R5 {& J% m) V$ g7 t* i! E8 A' u+ W! ?) o
        --------------帖子字数限制------------------  N$ z  q; h8 ~6 _6 X' s' E" O
}
$ n2 H$ l4 r+ |) W' l( l4 ]4 {( x; T$ R+ C4 r

- ], l" R5 J8 F) t# r

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 14:22 , Processed in 0.039937 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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