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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
# Y6 x" W  Z. P) _4 F, E+ O* x% K0 S1 K9 r, U/ i" L9 S4 T" I
各位大神:. g5 O8 I& U% t6 A$ C
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)6 N  S6 k; _0 X
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:9 w, z" q  k$ ~. D
/ w" e- w" e# j# H" b- m, `7 _
     
1 d+ `' ?+ v9 o/ W这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
/ H6 y3 d4 r4 f8 E9 {$ m1 u! U' Q7 @7 R/ P; }" e9 q: `
并没有其他线程' _& M' Z2 ^9 |4 j: {9 b
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% |, u2 `6 B  h2 `, O2 b
也说不定是和堆栈有关系。。。。。。
3 h) S: _1 R* s0 v  ]1 z请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....7 t. g; Y( Z5 I* r3 H4 H

% |" ~! y- r( a: C) P. a* \4 [, [* K

  |/ W4 \/ i' H/ i; Q/ h' j0 J我也很绝望啊,希望大神能帮帮忙,感激不尽,!
' \4 V5 K) U; j  o# g4 ?3 S* P9 `) @% x# P. p9 v
4 K' v9 O& V- ?& q$ I) a5 v; K
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
* b+ a& Z% A0 t        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) Y- N9 A3 e2 M  K
) `/ {" m. z6 b; i9 \, Y' S) Y
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
* W$ a" ~, ?4 E- B                const double data1000[1000]) {
" w7 R3 B1 u  m3 v1 i! R9 {' N9 r+ u
        int myfuck;  v* A' H, G5 @* O2 U
        double yiDuanShuJu_mean;* P4 h1 |) H! V/ A% V! a
        double yiDuanShuJu_LowMean[1000];1 J8 a7 A0 l( X
        int ixstart;; v4 b) l4 r. F$ a, n9 Z
        double dv0[1000];+ Q) |. e0 u* r3 r9 `7 w# x7 E
        comm_AGC pAGC;
' V4 ^5 t! f" @0 w        comm_CarrierSynchronizer pFineFreqCompensator;
1 W  ?7 u) G8 Y( h- N3 z3 x, Q        dspcodegen_FIRDecimator pRxFilter;
' N" r* u4 d0 }$ V& b        comm_SymbolSynchronizer pTimingRec;
( K" p2 S0 u8 v        comm_PreambleDetector pPrbDet;; e: O1 Z: B3 A  b. z9 H
        FrameSynchronizer pFrameSync;
, f; S% o* H% W! d# N' Z        QPSKDataDecoder pDataDecod;
- @/ B1 ?. |" Y! j        static double usable_left_filtfilt[81000];: W8 \+ c+ f+ r& D. `5 T1 K7 ?
        static double youXiaoShuJu_QuZhiLiu[81000];( G9 p  |: V& Q, q6 a2 o) z6 M
        double mtmp;
+ K, H$ ]" q4 F: a$ s$ k        int ix;
. E1 q! h- m. P& w! M  V# Y- f        boolean_T exitg2;
" x: J4 `% f1 @4 u% e6 w( m        boolean_T exitg1;) e9 Y; c( h" F& V# [% r4 o/ E
        double YiZhenShuJu[800];: K9 i0 g( D  i* x3 F- z
        double dv1[800];& X6 Y" [, q8 ^

+ J: F& @, I& f; }, u5 w
! M" w2 `2 f7 z4 {% q1 a! w        double b_YiZhenShuJu[800];! b. y! h6 d, ~1 M9 B
        double I_filtfilt[800];
' U% K5 A4 P" t9 D        double Q_filtfilt[800];
& b' d2 g5 A! o' [        creal_T b_I_filtfilt[800];" W1 N# u( @9 M* {1 p5 C3 r, s
        creal_T b[800];
# `) {( |8 A1 A9 I. E* m( o        creal_T RCRxSignal[50];
- @( M/ }1 {3 h) Y' y        creal_T fineCompSignal[50];
& m$ Q! p; J  q2 O% B& q. f        double phError[50];* n& O) Z0 J0 [; ~7 H3 w
        creal_T timingRecSignal_data[28];( o. o) B8 H8 a3 q1 n8 m
        int timingRecSignal_size[1];( u. e$ J" Y. I
        double prbIdx_data[28];6 T+ w9 {7 v6 b4 J
        int prbIdx_size[1];
+ F9 Q! m8 Q% ^/ U2 V" I        double dtMt_data[28];' }! t1 k9 O: a- l7 V: ]5 s
        int dtMt_size[1];
+ F4 D0 T5 ]( Y  L        creal_T symFrame[25];" B0 C, F- a3 K/ v1 O0 `9 O2 [
        boolean_T isFrameValid;
) u; Z9 t9 m; Y- U# g        double unusedU0[3];
7 Z1 B! G0 R! a" @1 B' ]1 a
$ q- Z% z! e9 c$ M- R# i% H        //调试过程中的变量9 ?, V' k( P+ ]1 S. K' p2 P8 u
        int  enough_data;
! a" \1 e) _2 }; c! ^+ m
, R4 Q$ f% C6 x$ o        int enoughDataFlag;
8 N" e/ \4 ?6 e9 i% l0 U5 {7 ?$ m        int yiDuanShuJu_mean_int;
6 C( q/ T9 |1 W' H. E0 k/ U' O3 o        int int_sum_dv0;/ g: e4 P/ |' ]* d" h+ V7 l9 U
        int oo;
4 j( h; a5 r& Y( P% r        int ii;
) ?9 w0 {5 |9 L; h) {  R5 v        myfuck=10;
% `7 \3 k: @+ r        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */; a3 \) u+ P7 @
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */' {& M1 w( H; V# j

- u6 R0 a) B7 m" M+ E% O% O        yiDuanShuJu_mean = mean(data1000);
6 u' C- u  `' ^3 r6 C/ {' X3 F6 L0 x3 _' {, I
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
4 x1 z% H3 J" n" X+ H        UARTPutc('A');
! E1 ?3 q- b2 U6 o5 ^% K# O' D  i, F3 F. Z        UARTPutNum(yiDuanShuJu_mean_int);. ?: r! v* _) ]. s8 n6 d$ m6 D2 |
        UARTPutc('\r');
- u, \: I5 Y$ ]% g, u        UARTPutc('\n');
& z  x7 ~$ W$ C4 e* B5 h+ ^
# Y, d* k( w& C8 ?- C; m        for (ixstart = 0; ixstart < 1000; ixstart++) {
5 e( b4 y4 s* p  p& \                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
( o4 c% {3 ^9 U3 e; r9 z        }
" o2 `0 C# W, z+ Q* h1 q6 C3 C: }* x/ Z% j  @
        power(yiDuanShuJu_LowMean, dv0);
. C  A' o) ]" Z) z5 r
/ x6 |3 G) l4 y/ N1 K! W: J- X  i( K        int_sum_dv0 = (int) sum(dv0);6 X5 x" `* P" @5 {

/ B  w& ~% p2 M! p: b* d        UARTPutc('B');
8 E5 U  `0 I4 O& f1 ~        UARTPutNum(int_sum_dv0);. D1 y2 j' P% S7 w! D' J
        UARTPutc('\r');. J- n2 r6 b, f) P! h: V% @
        UARTPutc('\n');
7 j+ @( |! _9 B, M# K4 O4 }1 e
( j; S1 O: C' A6 p1 x: w//        int compareFlag = int_sum_dv0 > 1.0E+8;3 Z( i) |2 f5 M8 S2 n' ]

5 [& Y1 g2 b# c- W7 Q7 i+ p+ K        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
- m! j/ ^( l$ d+ d; V' e                UARTPutc('C');
, A% b# @- [( j9 T+ R* h  a                /*  比较信号能量 */
1 Y' b- z; V8 i. J% v                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
) v5 K; j, G  X& ]* H//                yiDuanShuJu_mean = 1000.0 * youxiao_k;, x4 a5 n* z6 |1 G
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* H, v0 x3 Z$ J3 d5 c//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 z, K% O  [  E" Z& {1 Q; a
//                                        yiDuanShuJu_LowMean[ixstart];
/ ~+ k/ f1 |7 s6 J//                }0 W% j8 `* C8 U* n6 R
//
4 F" @9 J- k5 a//                youxiao_k++;
- S7 J, @* ?+ O! p//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
( [1 J- Q% M- U% h$ c1 N//                        /* 感觉要取21个数,即0-20, */
% k8 e: x* ]7 x( P0 g//                        enough_data = 10;//有效是10,无效是0" G  `2 s) W& J/ h) M8 R; X! c
//                }' }# k( P8 Y) c' b7 ~, T
        }
& C: T4 o) d4 a, k: }8 N+ f8 x7 @6 r4 c& N5 h$ d. R7 ~
1 ~5 g* }! H1 j8 n9 s
        enoughDataFlag = 100;, Q% |% |0 d: V9 B. g, g
        enoughDataFlag = 1000;
, {" E3 v/ X. K3 B        enoughDataFlag = 0x02;
: d: e* S. S0 b  P0 F2 m        enoughDataFlag = 200;2 u; r# ]* P* }7 l) Z
6 x; [* }! f/ u
        int myfuvk1;+ Y' M- H" K1 q& d/ C" y- U7 W
        myfuvk1 =11;0 r8 s6 U& D1 _# V+ c- M

3 y( B& J* Q( s/ I; z2 O
6 }( l: a7 f  }) z7 {4 X        enough_data = 0;3 R; k6 @  F5 S( K* B- A
$ y' ^5 \+ Q5 S1 ^& j5 O* U$ m2 A9 b
//        if(enough_data>50){
% [  t/ o# d: a, D( w9 G8 Z//                enoughDataFlag=0x01;
1 ]4 v9 u1 W8 H) L/ [//        }else if(enough_data<50){. }& l! d: n& y. D! n& J
//                enoughDataFlag=0x00;//0x00还是不行
: f2 q5 E8 O" K' P, m, c8 S1 }2 q//        }
5 C7 X0 o) W' _- I) ]( F2 O5 e
4 [: m" h& v$ t8 F) d5 t6 x8 Z8 q, K0 J1 ]9 [
        oo=10;1 B4 D- x0 I% v+ I" X+ m# H
        oo = oo  <  5;7 ^/ x0 {: ^' j8 x5 m: i# h& h
        if(oo){
; A, k0 {* E% D- H. ]                ii=0;4 C% ^; ^! z$ x: K, p" m
        }, Z' _+ p9 P, J2 k3 X0 @4 ?
        if(oo  <  5){
# J1 W: R5 s5 Q                ii=0;
; x/ m7 a& E5 o1 l        }6 D/ S* K( w- ?( ~
        if(oo  >  5){$ ~9 T6 ]- H8 J; J6 p" v  A3 o
                ii=0;
7 X! P9 x7 p- I: t2 g) O/ Y% _        }
. {) }% g9 f. x- Q  l. ^7 j: x+ ]7 {$ }
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
8 P. h4 [+ f; ?  \- p2 R7 |) A        /*  如果数据足够才执行主程序 */1 l9 ?, X/ v4 I. `7 W
        oo = oo  <  5;
1 ^! R( W6 F2 u  L4 L) h8 h1 r+ }        enoughDataFlag = enoughDataFlag  <  5;
' t  j8 h3 Z8 R/ S' B5 I4 F5 i        if (enoughDataFlag  <  5) {
, |1 Z5 T  F2 T  o6 \//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
7 w! P9 Z% r% ?3 U7 P7 p" Y5 Q                AGC_AGC(&pAGC);9 H3 d! {* N" v+ B  N8 Z- e/ ?, m3 C( |
$ U0 c5 |9 r) K0 ?* |  x+ v
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
" G' v" L4 n3 h. \                FIRDecimator_FIRDecimator(&pRxFilter);
9 B9 K! E3 {; M6 j- B
6 j4 D6 w" I( U' R3 M' ?/ d                /* Downsampling */2 B9 n2 Z2 f! j( g9 _  w& l3 o$ S, R* H
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);+ D  {/ ^% G2 T. e5 A8 s

4 Z5 e8 B) p- w) S8 y, K' R. P                c_PreambleDetector_PreambleDete(&pPrbDet);
1 E% _) G/ ~5 K
, z; X1 h4 C. _$ y7 J                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */* e) @( P  w$ Y! u
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */; \; p$ \7 b; j4 r) Y, d& g
                /*     %帧数量=100 */
9 s$ k7 ~4 w  l6 d) s7 ?7 W# P6 L                pFrameSync.isInitialized = 0;1 h& v; E& |. C4 V+ h$ J
7 Q: ~4 D. z9 C1 K$ R* w
                /*  [EOF] */- N& w: g4 f, ], |
                /* 前导码长度是13 */0 X3 K1 y# l" D% f* y
                /*    %qpsk */
' l$ N) G$ y' P: ^                pDataDecod.isInitialized = 0;* c7 D* E' a3 c/ O& s  i" w

' [* t4 y. F: v1 W, o                /*  end */
2 K# r8 D# g, O0 [8 l" @; U3 t                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
# k, C# ?  \5 [9 D5 ~: Z1 y                /* Convert 3-dB frequency */8 Y  [2 }! j. K, W  `) A# c
                /* Convert 3-dB frequency */
' c! n  C* M( e                filtfilt(save_buffer, usable_left_filtfilt);
3 @& X: F& r( ^; J: K9 I& T/ {                for (ixstart = 0; ixstart < 81000; ixstart++) {
2 l+ }2 s( d2 b: o. h% [                        usable_left_filtfilt[ixstart] *= 2.0;+ s$ U8 a* f9 |$ h$ K
                }
2 A+ j* d3 E2 W( B1 R2 p( P" A% z% ]4 z( ^
                /* 注意乘2,处理幅度 */& Z4 z8 f; ]6 @& u2 o6 I
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
7 H" u0 ~  D& \* l9 S7 Q                /*     %% 行列转换 */
8 w9 @4 y  n) v* F3 e1 }                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);. H4 K2 e+ O; Q
                for (ixstart = 0; ixstart < 81000; ixstart++) {& M# o6 ^6 q/ W0 ~( Z0 q
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]# n+ ]; B1 p9 f) H
                                        - yiDuanShuJu_mean;, ?! Z* O/ C4 P2 S3 T  g$ Q, S% W% O' Q
                }
( M% D  k) r$ m
( g8 q8 E4 J! k                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */; \+ M, S% k5 k# J; e* Y$ A
                ixstart = 1;
. {: B9 O4 F9 O5 h5 x9 ^                mtmp = youXiaoShuJu_QuZhiLiu[0];$ `% G' }* N. }/ @! s7 S5 M2 x
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
7 N5 C3 W* K5 I. X, ^& k5 e/ x                        ix = 2;
2 U8 k! f" i" p7 M# U6 p                        exitg2 = false;
* V- ?! v# L+ o# P                        while ((!exitg2) && (ix < 81001)) {
  M3 t/ E. u$ k/ P5 r                                ixstart = ix;
& h: ]* V- g& t; O                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 D$ D- G& K5 @6 Z
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];, u/ V& v1 t, F' n  [( ?8 _/ I: Y
                                        exitg2 = true;
$ r5 ^% g4 N& _% B0 Y$ o                                } else {
2 Z, J& ?* G3 j7 B) o5 ^- p6 w# W                                        ix++;
. u3 `7 @* }) N/ g                                }4 t( e  r1 s6 D- e% R
                        }' @1 ]# d; W+ {+ c# I; f6 t3 M
                }
, _  H- F1 S# i/ }
! n9 }  ]; @+ @; t: j; I4 m# v                if (ixstart < 81000) {
4 U' u, o: h9 F' Z  g* w                        while (ixstart + 1 < 81001) {5 [5 a5 W  t  y' b# @4 V# F+ t
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {/ ^$ P( H# F: t$ M1 ]) T) t1 R/ I
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
- E* Y9 C0 M. }  @' H                                }
; c4 C/ |3 E3 j3 ]/ T2 s9 K! i/ [# g, ^+ b# S" J, B
                                ixstart++;
( t$ N( a& g/ Z                        }7 @6 S! V* ?9 R" G
                }1 J: d6 X/ d* w' w/ v& z( H
- y) _1 }  W' v$ a2 g4 }$ j+ Z
                ixstart = 1;. J6 p& {* l& Q* J; Y
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];7 a: Q: z- _3 O
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
7 [; M7 w" A. z: u                        ix = 2;/ u  O4 X0 c5 {, r$ o
                        exitg1 = false;
' q) l/ s/ i) k- o$ J5 m) H) z                        while ((!exitg1) && (ix < 81001)) {
' \) N0 d. H  u% |) V                                ixstart = ix;
) I5 y0 v' `% d$ s" z+ H' T! r                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
* @, O, \$ w' N" q/ {! o6 @+ k                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];$ D1 p. ^. w9 X# i' _
                                        exitg1 = true;; z& x* g  T5 P+ M2 {8 a+ `8 c! Q
                                } else {9 y# t" [9 Q+ v5 _$ _; ^0 A
                                        ix++;
# b  w, a6 ?$ n+ f2 T                                }9 j* Y$ J  O7 `0 E- B
                        }
0 [$ X) S3 N( d- A                }
6 S0 n0 G4 s( E8 `/ j$ z5 C
% P$ W' X6 k* L1 G, P2 I                if (ixstart < 81000) {
7 Y" r. W# @0 x/ g% I) Z/ |                        while (ixstart + 1 < 81001) {
/ c4 @  F- Z. h, _6 @8 x                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
1 d- t, @0 c- A                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( \! W! j, [$ ?& w8 T) A8 D' k                                }" c1 t' Y- G( l

) T! `$ N" S0 Y4 ~; N                                ixstart++;8 Q% ~( r% E( k" w
                        }% @) l" J4 h* m1 _
                }
/ y+ `; y4 a* y
. c+ v( }, d' U- L" \' ~0 G+ s  \                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);0 u+ B. m$ |7 M  y* o& ~6 _; l
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {5 a3 q+ {5 r  t/ M
                        yiDuanShuJu_mean = mtmp;$ P1 b4 @9 g; M8 P' M( G
                }
) I/ d$ z1 w  D# {# C, W: H0 V- X7 [/ x4 L" u& H, `; v+ u
                /*  找出极值 */
3 ?& u) l/ ]1 T* u, O. f2 }/ ~                for (ixstart = 0; ixstart < 81000; ixstart++) {! V8 Q# X' X2 M# q6 V$ c3 ^
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
: k) x, I4 a0 j$ M! g2 Y9 J                }' u3 Z$ V6 H7 \- y( o) ^* s8 o

' x2 S: N8 |! L9 x. z        --------------帖子字数限制------------------
* y3 N* C4 \/ {}
& x: y7 V" f( j# O  v; d! {" ~8 ^' f1 n+ [: P+ E& s; N

. a2 G! f. P, V1 W( F

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 10:42 , Processed in 0.043789 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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