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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 & K( o$ u2 f9 [. v, {
( F9 Q  r/ K$ B, |) E" {: k" z
各位大神:$ K9 |1 b2 ~- L+ c5 \
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~), R3 }. V5 E( \0 y' w' J
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
- L: U( p7 r# i9 v2 W4 p
$ K2 j* c; w2 g+ H/ h! w9 s     # H6 q3 N" y' F* S2 F+ q7 L
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
, v' C- V/ }) q+ |. K
) t3 D9 F- L. c5 d3 p4 n并没有其他线程8 v4 E4 h7 Y5 q. b9 f' X. K
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。7 J+ m0 S& q" z- \/ d
也说不定是和堆栈有关系。。。。。。3 y4 K% i& R) B: }1 h' ]
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..... G! u; o# T$ q# v: Y/ L, E/ L
! D+ n8 D! i2 ^3 C5 z

$ p) j" p) P1 T1 c
) `+ z4 @" {& v我也很绝望啊,希望大神能帮帮忙,感激不尽,!/ n# L" k# ~6 j' D& o

* `+ c& c: I) G2 k- X8 D1 a. w' {; w0 Q9 f7 u# ^  {1 V% N
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
" z) j  N* u$ }0 l* B/ x        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。  a) X" C  i. c; z7 G1 M

. z" t2 q- H# ~0 aboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
. f. b! U6 a, S! _! {+ r& E                const double data1000[1000]) {3 Q( e# b: g# }6 K2 ]" a
5 i: A7 w/ v& z
        int myfuck;
& J6 y  i6 X" D        double yiDuanShuJu_mean;
( W; w6 ~+ P: l7 J        double yiDuanShuJu_LowMean[1000];
  c) Y0 X  f! d, ~# l0 L  a        int ixstart;
; C. `8 z. A/ t  {- W        double dv0[1000];
; `" ?- [1 Q% a% o4 ^0 e- J        comm_AGC pAGC;
; t' w4 s+ Y! V1 v0 K        comm_CarrierSynchronizer pFineFreqCompensator;/ `; W) N# ~0 j3 s- N! u
        dspcodegen_FIRDecimator pRxFilter;# [0 S; b: z( }$ t$ ?8 p7 y7 o9 _
        comm_SymbolSynchronizer pTimingRec;
% p% s4 m! ~; n( G, D# m        comm_PreambleDetector pPrbDet;
9 T7 S& m7 v" W% a        FrameSynchronizer pFrameSync;
" I* {; k; g1 Y# `7 R/ Z; i        QPSKDataDecoder pDataDecod;
$ y: `  f4 ]  O3 v) O/ M: o0 x        static double usable_left_filtfilt[81000];
* O* F6 t& p+ K8 V5 y, G        static double youXiaoShuJu_QuZhiLiu[81000];
/ Q5 Y7 V" {. X& @/ h, P        double mtmp;* N" \8 U" s: ?+ P5 d
        int ix;9 p, k1 t" g1 t* z+ V( K
        boolean_T exitg2;
$ X: {1 A# }0 X. Z2 g        boolean_T exitg1;
! K; Y/ K( b8 ]5 O( Q# v/ [$ N$ s        double YiZhenShuJu[800];/ v- _6 {( }  s  a5 S
        double dv1[800];
7 F. T2 f, @: }) d, [1 y
2 p! V0 o  H$ C( b
2 E' ]# E6 Y* k2 I" P        double b_YiZhenShuJu[800];& X* u! ~$ Y8 k! O
        double I_filtfilt[800];( g2 Y; B5 D* q( a# B+ @5 N
        double Q_filtfilt[800];
: n- j) t' h: X        creal_T b_I_filtfilt[800];2 V7 z* D+ Q4 M3 n: G# l
        creal_T b[800];& a% H2 O; U/ c- ~7 a2 K- O$ W
        creal_T RCRxSignal[50];
2 _, C+ U! y. Z3 ~, U, T# o4 T! @$ w        creal_T fineCompSignal[50];
% F+ r, J& M' Q! d, O# d        double phError[50];
9 P7 F4 G9 K4 n) f8 j        creal_T timingRecSignal_data[28];% G3 g3 B) v  J% m. R+ v- t
        int timingRecSignal_size[1];
" A6 j3 T" K. H4 `, M# P: W5 N: o        double prbIdx_data[28];
+ R# F3 y* l" o        int prbIdx_size[1];3 b  Z# n+ e- E) K/ h7 ^; N
        double dtMt_data[28];
8 `. r4 S/ O3 @+ G! R: V2 u        int dtMt_size[1];
. f  o1 m( R. N& M        creal_T symFrame[25];: H2 n" I- Q$ V% V4 p5 w
        boolean_T isFrameValid;" U4 p6 Q% z0 ^, U3 {
        double unusedU0[3];
6 C0 Z7 M  Q2 j  X6 N% w' `  X* B  R# a/ t, a% p) y. h
        //调试过程中的变量% p1 D  x7 j  P. c
        int  enough_data;2 X$ v8 v  _; @$ Q# U1 a0 w
! K6 }* G. V$ B5 \9 w0 M
        int enoughDataFlag;( F1 P8 }$ J; r. d" q
        int yiDuanShuJu_mean_int;
3 R  @5 r! {7 o4 ?+ p" S' b        int int_sum_dv0;5 Q- k( x5 G* e6 m" j# y9 T
        int oo;
9 W+ L, z0 x1 R/ j* G! {        int ii;. S9 v& f) g. z: N% p5 H
        myfuck=10;
0 M4 u+ Q/ U' @( I4 X' T  q' G2 g3 l+ M        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */* t, H& J* L9 T4 f0 m
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */* H1 M' f8 t4 a) x/ @4 g- ]
  @6 I" S: e0 g; H! I1 h  \
        yiDuanShuJu_mean = mean(data1000);9 E9 o; d$ [4 {8 `5 f
0 V% v' g1 Z. Q3 _: y% _  ^
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;6 |8 y. q" Y1 @7 r% X1 x: z
        UARTPutc('A');8 e9 w% W8 b6 A9 `$ c2 D: Z; @
        UARTPutNum(yiDuanShuJu_mean_int);) b0 C+ J: Y3 x
        UARTPutc('\r');
9 C0 e. X# ?- ^. l/ g* s/ m        UARTPutc('\n');
( r" d2 K- V; Z4 R( K) s1 S3 |* k# U# H& F/ W. _1 |
        for (ixstart = 0; ixstart < 1000; ixstart++) {
9 ^1 n4 z: [5 e6 W' t) \* L                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
8 N9 z1 D& e$ Z9 ?( f        }/ j: r7 M) e, w, c+ O$ e
4 C! N2 @4 ]. N. M2 \4 l: x
        power(yiDuanShuJu_LowMean, dv0);+ z0 e! i% z" v+ G$ h, j
- [7 d+ M/ |( P0 y5 ^2 ?% x
        int_sum_dv0 = (int) sum(dv0);
; V, ~. J7 }# i" u# m! h* K9 V, U5 P. S0 _; D
        UARTPutc('B');; d1 o9 c/ Z) b) `7 [" X, I' a$ H
        UARTPutNum(int_sum_dv0);
0 ?9 j1 p8 I% ]  R* K' X2 J- h0 j        UARTPutc('\r');' M: p% x0 C* j. J( h1 k4 U3 l
        UARTPutc('\n');% n) p9 N/ o: [5 u  R
9 j4 I2 r) p' W* z- i! P
//        int compareFlag = int_sum_dv0 > 1.0E+8;6 l3 r1 N4 b( d5 q4 n5 c

  o/ B3 r$ C1 U2 o2 Q* w+ f        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?" q  J/ D% k# J. C$ M, K, P
                UARTPutc('C');/ u  F) p0 n) }1 O. ~
                /*  比较信号能量 */
" d7 z5 d: n% b                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
+ p) I# b, P1 H* A" B% ^1 m7 v* V/ e//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
9 s6 M' G8 U+ @0 K" k//                for (ixstart = 0; ixstart < 1000; ixstart++) {
; i. ?& w2 j# U6 T: ]//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
1 k3 q" P3 t5 F+ O' G% u//                                        yiDuanShuJu_LowMean[ixstart];5 K% Q1 u0 m9 R
//                }) U  M$ f. X) }
//
. O: J+ \0 M* `6 ]//                youxiao_k++;
1 F. @( l5 V7 ^8 E6 Y0 d* b//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==1 B; v% o: q/ O- D/ W5 ?2 P1 R
//                        /* 感觉要取21个数,即0-20, */
1 @- V! S- v! G8 Y9 h8 Z//                        enough_data = 10;//有效是10,无效是04 s0 q, F, V; r2 [1 U. K
//                }) v- v& I4 V6 N3 Z
        }
: y- W2 W5 V( G5 ^$ J# I# ]) M  p: W$ T& E/ Y' ~! C  E. u

- p7 v: r2 V: }" J/ G        enoughDataFlag = 100;
7 Q, q3 ~1 S. c/ G        enoughDataFlag = 1000;+ o0 k; c3 J5 j+ n: k6 f
        enoughDataFlag = 0x02;! q% ]2 w3 v$ V; P$ c
        enoughDataFlag = 200;5 \  s9 Y- M. ]
  S  N7 Y$ D: {# b! o, ^* i
        int myfuvk1;
' V* p* i: F7 ?3 h        myfuvk1 =11;
8 I. N2 r- u# T. Z7 q4 I+ V) `3 m. s5 a/ Z1 d* G

: h1 N* n5 e; M" G+ q& |% R        enough_data = 0;5 P8 i5 G: u. u
: V5 A  I, Y8 R1 C4 Y- z$ X$ J4 b; N
//        if(enough_data>50){( @" @$ K4 K& O5 ]* x; p
//                enoughDataFlag=0x01;
+ D! r& G* ^/ y  [9 ~//        }else if(enough_data<50){, c$ M" I/ P! l
//                enoughDataFlag=0x00;//0x00还是不行1 p% \) K3 I$ x3 _, x
//        }
( g1 w# \( [# m. A6 |; `2 R& R, i! V* Q& [
4 [8 o$ ^3 |" @. C8 g0 t. T
        oo=10;
/ k1 S! i: N7 T4 `        oo = oo  <  5;0 m& d$ h- [( |
        if(oo){) ]9 ^9 G1 `+ T% V6 X; W4 \1 l/ y
                ii=0;
( C0 P0 a) Q7 U3 v: {0 ~        }
! M8 L5 F4 ^6 y3 m- r0 h9 z: a        if(oo  <  5){
* b% X# \4 e: i/ @3 r/ Z                ii=0;9 s( W. Z' _6 ^" V5 Q' j
        }1 f  X# q8 g) l' A- g$ Q; W0 y
        if(oo  >  5){/ [1 I4 |0 s% B/ o" w! G
                ii=0;+ ~& Y' f3 m" a
        }9 W! `6 R9 D# C7 k% M
! I) O4 l5 m" t# @5 E, h
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) v; o2 J4 S9 t( P" ]        /*  如果数据足够才执行主程序 */
: r2 C$ }6 W5 U3 f8 ~! Y% b        oo = oo  <  5;$ n, C* M9 q1 x9 H2 @5 Y' d
        enoughDataFlag = enoughDataFlag  <  5;
3 T1 W! g1 i$ J) {9 Z. j        if (enoughDataFlag  <  5) {
8 r1 i; S' Y+ ^7 s//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0) l  [% m  p# O4 `7 N
                AGC_AGC(&pAGC);6 X0 B$ V% u/ ]8 I9 P. V
7 q0 h; Q6 X6 x  h  {
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
" n9 b0 }0 H; H1 `0 B* U: |                FIRDecimator_FIRDecimator(&pRxFilter);
) }) A1 I+ h+ R0 Q* U  X1 b; T! N  u9 u# a( m" A" d% Z' {! N: K
                /* Downsampling */
, I: d# e" \9 p. |/ F: O% J9 O. t                c_SymbolSynchronizer_SymbolSync(&pTimingRec);( ]0 {0 w. Y' Y9 k7 m9 p8 s: a; U
( K7 G' T% V8 A2 _
                c_PreambleDetector_PreambleDete(&pPrbDet);! H2 B$ j4 l# M8 c, q7 S# {
. T4 ^. q! o# e- h
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
' Y# K" t* h+ f# u                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
  B; g2 O4 [; A8 S/ n* d                /*     %帧数量=100 */
) c; L' m8 q1 O8 S2 G                pFrameSync.isInitialized = 0;
& u* O/ J( V0 F/ P  J3 Y
$ Z7 w" y3 w0 h/ A, R3 o. W- G/ e                /*  [EOF] */
% G. f6 c. R; m8 k: g  Y: q                /* 前导码长度是13 */: x. {0 v2 V, R+ M) b( C9 h0 C
                /*    %qpsk */
+ G0 Q9 }( F" x) ?" }$ @                pDataDecod.isInitialized = 0;
) v/ i; F( w; S2 }; i$ v
5 _! p: y  F+ k( w8 ^0 K                /*  end */7 o) b2 F. V: H0 r
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
. o; [$ \  w. F                /* Convert 3-dB frequency */+ }1 `; M% r6 u' |
                /* Convert 3-dB frequency */
1 P0 t; z8 c; ^: q% f. V- `* W                filtfilt(save_buffer, usable_left_filtfilt);% z7 Z! X" V3 W& k7 W
                for (ixstart = 0; ixstart < 81000; ixstart++) {' ^% m6 n- o- X1 k. r0 D
                        usable_left_filtfilt[ixstart] *= 2.0;
9 H( x5 A+ C8 T% Y9 `                }' f2 Z5 T8 |: B! v  T. h
, v# B: i& }" j# m0 X
                /* 注意乘2,处理幅度 */
1 J- P+ Z2 E/ ?) l; k3 E% a                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */0 ]" X' }( U; e3 A
                /*     %% 行列转换 */
6 n( E2 C! h  H4 I& B7 X, x+ p                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
6 S6 a7 R  _  D                for (ixstart = 0; ixstart < 81000; ixstart++) {
  e! L: q7 }! n8 e7 Z                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
3 @) t1 }3 \9 j0 R                                        - yiDuanShuJu_mean;
% A$ z* n# C/ [( ^6 }                }  ~' E: j) y. d) `- K# t* f
: }% z2 V$ {8 U( }# t6 s2 B' C; C
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
8 O2 k5 O- A% o/ j( G/ t! Y                ixstart = 1;
8 L+ l4 e8 u8 h$ l* k                mtmp = youXiaoShuJu_QuZhiLiu[0];
) v" A. Y2 c  j% m" u3 U" f" c4 h8 c                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
) e1 }. P7 c- W* J                        ix = 2;
1 u* x# S5 s- O( M                        exitg2 = false;
# a" l+ C6 r3 m4 P2 G                        while ((!exitg2) && (ix < 81001)) {
/ |, t) U5 a( f! l& h/ u& K                                ixstart = ix;" A( e+ N) ^5 z$ D: w4 h; s
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {; o, e: S" Z) j$ w' k6 v+ o8 W
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];3 U& g0 R. e2 z# o
                                        exitg2 = true;& P0 l" a0 n- {( T; B2 k
                                } else {2 T  X) y7 h" d
                                        ix++;
9 B+ x/ Z! [* @2 |; F6 L$ |/ h: |                                }
1 [7 R/ j5 `: O                        }
" y) ~, y$ ~, J- O) _                }
; X- k1 g+ A' [: k9 A; a8 C' @
- {" N7 t# o" D" M6 ^! a) H& F8 y                if (ixstart < 81000) {, k! a6 {4 w0 G- b3 _  S
                        while (ixstart + 1 < 81001) {
2 R" ^" `$ h3 G( }                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {. T/ j7 h( O4 [. J$ t
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
2 ~3 X% s9 y& Z2 Y* W2 ^. g                                }7 _7 S  U+ g$ z& H& l
/ L; W' y' q: Y$ X
                                ixstart++;
9 c  w9 Y1 r( F) n6 I: A0 P2 _: |                        }
( s2 O6 ^) v2 }" E                }$ W2 g" D# q+ N2 h( h3 E

2 o% h( a/ V5 r) ?+ z+ ^                ixstart = 1;; Y# g; W% ?) C! O9 C8 i1 V$ f
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
& m% S$ h  T  Z# z. M8 c/ X3 T% b                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# [3 @1 O  U, }2 E% p* ]4 Q8 }, P
                        ix = 2;3 P4 h$ s" O! ?  _
                        exitg1 = false;
2 }: i4 v! `0 D7 M  _. d6 ?7 u* U. c+ l                        while ((!exitg1) && (ix < 81001)) {0 d9 `1 t3 a' f, d) K
                                ixstart = ix;
3 d/ H! t. u! S# B- X7 i3 W                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 [4 B  c+ o  V& h+ b                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
3 t6 L# u9 w$ _* {2 Q1 k( R; r, i) |                                        exitg1 = true;" w8 y" ^8 k! x3 x+ i6 Y5 k  R+ o
                                } else {" D, T0 a) a1 n+ q6 N# ^/ s0 [
                                        ix++;( w7 m/ x9 `( \. L/ W* O
                                }5 Y' i/ z' V7 S9 B4 z9 N, z/ x
                        }) {8 ^9 H) p% i) m7 A* r- |
                }
/ f+ d* D' A' W6 s6 J6 [& g$ n9 h0 i/ q; Y( L
                if (ixstart < 81000) {8 e. @, B4 t2 y6 _
                        while (ixstart + 1 < 81001) {$ ?/ f. T! l4 U( G- ?( K, `2 {2 M* }& F
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
6 i, E% n/ L' A1 z; j                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
' \6 s5 {* z7 I1 p* q0 Y) H                                }
0 R( j$ v3 L7 n, i# {: b
+ C! z" D  L$ q                                ixstart++;
: r! x9 b- K0 Z/ \5 P) U                        }  Z; a2 z+ s% }! u' c& t
                }4 V- a" P& J' C  v

6 ]; @# e# p: Z% |: x" D2 w                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);& K. ~$ L/ M5 P# j* R/ q! _( p
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {6 {' y% G$ B8 X5 B  c6 P  ~! _
                        yiDuanShuJu_mean = mtmp;
( X( E( f$ ?0 ^+ Y) r3 ?, O                }
& j9 F% c# W; C5 t" O+ T) o1 m% M2 s/ X9 ]3 C  V
                /*  找出极值 */0 f$ s3 F8 g! S- P, `7 e
                for (ixstart = 0; ixstart < 81000; ixstart++) {- x. e* K6 }+ ~
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;0 u! u6 W& ~6 n1 B/ G
                }
* M1 e# q( j+ _6 d+ l
+ ~; s8 Z5 p9 V& ]        --------------帖子字数限制------------------
4 D! P( C7 C( b}4 G. K# f9 C* |9 f! E

; l& r* U# A, `
4 B6 \$ [/ \: S

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 22:08 , Processed in 0.043706 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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