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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
- |) z1 s# K2 C% `+ l
" X, D4 X" b1 m) l7 D% [: z各位大神:
- U: ]) S) b4 z* j. S     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)- l( X, ^, w0 z8 g8 q7 ?9 z
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:* T4 C- k2 o: m6 v$ ~2 d$ a% W

+ t8 F! z, q2 [6 \( g     2 m, P# ]9 c% W, F/ o3 ]. `$ ^/ `
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。0 c4 c4 E+ Y, L
/ t5 K+ H$ S, j* z" \
并没有其他线程8 E$ X+ {) _& z, M7 @  @0 f
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。7 I) Q; Z* x: f! v2 a$ F
也说不定是和堆栈有关系。。。。。。3 ]7 K/ a$ I1 }
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....: c) m' C! Q5 n* a

9 k# B# y4 U! c) a# a. C  J( d) v& o& D
6 m' E3 F7 C' A. g$ L
我也很绝望啊,希望大神能帮帮忙,感激不尽,!/ s# J: \0 N/ z) [5 A4 c; l
5 Q, \( j& Y/ `* x

! P/ Y- c4 r6 C" h附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];4 s+ V* D/ x9 \
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。0 e. W& Y& d4 O% F  b* J9 M, B' q* t
7 F; R. |% K2 u% Y% \7 Y
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
; Y3 n% T6 G, ?3 R( I                const double data1000[1000]) {
2 ~/ h7 U* \+ N0 A8 H& o
) J+ L/ I/ `, G8 O        int myfuck;7 v; z& Y  F# X/ n0 [
        double yiDuanShuJu_mean;1 R, O0 n% |" U' f
        double yiDuanShuJu_LowMean[1000];6 q; k8 H. s0 {! L8 d
        int ixstart;
# C/ u& A+ J9 m. Q1 G        double dv0[1000];
6 @& w$ F6 E% p6 J" t3 a0 v. v        comm_AGC pAGC;
8 s" j6 ], {  V; U        comm_CarrierSynchronizer pFineFreqCompensator;; ]* R, x6 d, j4 z8 `2 h' y
        dspcodegen_FIRDecimator pRxFilter;
* I7 u$ H6 r" x( ~5 u1 O! B        comm_SymbolSynchronizer pTimingRec;
) [% M1 [/ B( P* |! V- [+ G) s        comm_PreambleDetector pPrbDet;
4 w7 Z& [' S; n5 T) W        FrameSynchronizer pFrameSync;, N0 ?; f  s3 U1 f" U1 [- N
        QPSKDataDecoder pDataDecod;, z+ H- G3 K1 j
        static double usable_left_filtfilt[81000];
2 {* M/ ]9 i) H1 ^! d. M        static double youXiaoShuJu_QuZhiLiu[81000];
3 u- f- ?7 B7 j        double mtmp;
1 ~: v: f8 O4 k. j9 T( [4 ~        int ix;4 j) Q* G# V6 ~- n( V  _, d, R. E! p* z
        boolean_T exitg2;/ o  {+ F9 n: u% w  s! u$ I
        boolean_T exitg1;1 [( D  T7 R3 i, P
        double YiZhenShuJu[800];! p% u2 g, z5 S$ l: y9 ?( Z, |
        double dv1[800];: t! Q# P9 I; a" M! t

- f- {8 n$ o, ~9 I) v, Z4 U+ k* r( n  k- r( S3 r: j, t  A
        double b_YiZhenShuJu[800];
7 E/ k) n" W6 L6 o- w" S- X- j        double I_filtfilt[800];5 J; @: e# d7 }+ ]+ d
        double Q_filtfilt[800];1 A: W/ Z2 P: K8 Y. v$ f4 A
        creal_T b_I_filtfilt[800];3 U0 `7 e3 g$ q/ R9 p
        creal_T b[800];
) v. z( s- `$ y+ J        creal_T RCRxSignal[50];
& U, T7 @9 K+ w* f        creal_T fineCompSignal[50];
& X/ `& @& G2 Y& ?3 g; o$ h% Z        double phError[50];
' A+ t7 G) v( y2 c/ U" ?: v0 L        creal_T timingRecSignal_data[28];
8 T; {: R/ k  r! i1 y        int timingRecSignal_size[1];$ C: B5 k6 k$ z/ s6 L; S/ `* a) `1 `
        double prbIdx_data[28];
4 H5 P$ k0 U; Q! u- k        int prbIdx_size[1];7 r# i( _2 L1 M
        double dtMt_data[28];
" i. L0 T& d) u5 f        int dtMt_size[1];' ^: G( E0 x  C0 u$ v0 i" h. C
        creal_T symFrame[25];
8 j$ K' p1 ^. \        boolean_T isFrameValid;2 f5 b" w; P! f7 _
        double unusedU0[3];& f8 H* s/ u" }, O' }  X

( F; ~5 B3 |9 o* x% l: ~' F4 K& ^        //调试过程中的变量
. S$ f' ^# V! ~/ I. t, V        int  enough_data;
2 A2 A. k) O) B$ l/ c8 Q4 V3 v+ ~' V. m8 L1 v7 I7 @, }8 w1 d2 C
        int enoughDataFlag;9 }' u" Q9 s2 I% s2 j4 \1 p, t
        int yiDuanShuJu_mean_int;! X4 F' Q1 ~  t( n% S% n! l4 [4 f
        int int_sum_dv0;
# \# H9 }: h' t- P- z# j        int oo;
3 d4 P$ Y- }9 V% L/ ~; ~( X" R        int ii;( I8 I- J. R8 h* T0 l% x2 m
        myfuck=10;3 r! z: D/ D2 x
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
' W; |( G5 _7 o0 z! h& Z        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
6 L- A$ `5 X7 F1 s" J8 _& s* ], x3 P' \* A+ b
        yiDuanShuJu_mean = mean(data1000);# h" u/ f, ?9 }! h  J0 H) h% w% D

6 a* n: M# G5 }6 Z# R        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;1 h! F8 G$ C$ d0 x7 m9 I. y6 m/ D
        UARTPutc('A');
2 F- T! v( T% Q% d$ w        UARTPutNum(yiDuanShuJu_mean_int);
# ?  d0 C4 G( y6 C6 b        UARTPutc('\r');4 ]( N: [2 a5 K# K7 X- `; R
        UARTPutc('\n');
& C- M8 f+ x! k4 W  D+ L. Z7 A% o8 C. ^8 r8 G
        for (ixstart = 0; ixstart < 1000; ixstart++) {
8 s4 v& X2 v- \. h" a) f                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;! R9 w' s$ R' G0 k
        }
, @. T- t0 I  ~) H1 F8 @% o; p1 _/ r6 @4 A7 `: W1 v" y# \
        power(yiDuanShuJu_LowMean, dv0);
7 _) Y. m$ c& \* O1 z" N0 y+ M$ S" F2 q" U
        int_sum_dv0 = (int) sum(dv0);
- b3 Y) r2 N1 B3 l7 K( t7 x2 j2 I% f! n2 ~6 x7 x$ b5 a% [2 Y
        UARTPutc('B');9 ?! h; m' j% |4 K1 h! |
        UARTPutNum(int_sum_dv0);! n8 O+ H" ]5 {% ~2 V. K: E: V
        UARTPutc('\r');; Y, z( L) \0 j- p$ A
        UARTPutc('\n');
0 x5 E" B/ {, ]9 m% a. T' d
0 i( d9 W& f7 E) x4 z4 R2 C: I$ j//        int compareFlag = int_sum_dv0 > 1.0E+8;
1 T* }. \/ L0 g* u8 L# Y2 x5 y" q2 ^0 F9 X, l$ T  ]
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?; K8 C7 }1 a8 [7 Y3 Y2 O( m
                UARTPutc('C');% U9 u" l  M0 W+ {& d% r
                /*  比较信号能量 */
5 \. U0 y2 O' g5 H* n8 N/ U                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */0 E' {3 U6 `" a
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
4 y9 L1 R( Z8 r: r//                for (ixstart = 0; ixstart < 1000; ixstart++) {
+ m* A: C' a9 x/ ]//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
: I+ V. S* f5 e//                                        yiDuanShuJu_LowMean[ixstart];  o7 F, H" [) P7 c! d
//                }
- h- a8 o; e' j( i//
, e) {) r/ M# q7 ?3 k//                youxiao_k++;) y; V1 n! s* M, s9 a9 P
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==) ]& A5 U4 h' [
//                        /* 感觉要取21个数,即0-20, */
. }+ h1 J5 d2 i3 G: k4 t+ o  v' Z//                        enough_data = 10;//有效是10,无效是0
7 b3 C% z" [7 d/ ^2 |8 g+ @, p//                }1 S0 A+ Y) M1 e4 t, Z
        }
  j- p! W; ~; d: A5 |# c
8 L9 n+ y$ q( h! Q( z
! v4 F' w/ j' d1 r6 e& l  @        enoughDataFlag = 100;; e: r5 a9 u* m) l: F: [
        enoughDataFlag = 1000;
7 o, l% W$ L9 `) U1 |, k2 s/ I! |        enoughDataFlag = 0x02;* v( s7 [/ @* ~
        enoughDataFlag = 200;
! d2 d+ s, f1 u  ^* c: U% Y" o) j$ ?" R
+ y3 i, Y9 r0 W: F        int myfuvk1;
+ U8 A$ d4 E, o5 a. N        myfuvk1 =11;% J" m$ C+ W/ ~3 \3 \+ o7 K
* F4 x- p+ y7 N$ k4 x0 y$ f4 Q$ p

2 @$ X4 u4 r8 {2 M# z        enough_data = 0;7 g) E4 `; c9 w3 G
( C1 i% s0 A8 B, @' f- {4 E
//        if(enough_data>50){. K; c9 p5 F2 ~( Z
//                enoughDataFlag=0x01;+ b6 }# G( t" d3 b  V
//        }else if(enough_data<50){
$ y+ c( p- O$ A3 u- T7 \: s7 A//                enoughDataFlag=0x00;//0x00还是不行
' T# [% b, @; X+ v//        }
8 B# H! {6 o: Z- d# X' k( w; P6 @! [

- U3 g" k2 V+ b, E) s        oo=10;
6 x; }% B. c3 Y9 u" s( e! J        oo = oo  <  5;
; j. a; h# @: C0 B. \8 N! q        if(oo){
* I' d9 n' g5 ^; [; c7 F$ }                ii=0;
$ D, n2 @5 @8 n+ _/ C- p        }
3 C+ m/ f% {# o0 \( `  k$ B' {, m! b1 m        if(oo  <  5){) F+ S- d4 M0 \6 M
                ii=0;, k& X/ [; C3 b0 p# T! H
        }! I* q4 T/ J" [5 c6 W) K7 N
        if(oo  >  5){# h- \2 n! U/ ]7 q  v# T; e5 {* j
                ii=0;
% f" i) [4 L/ M# ]) t" c- Z* i        }; G$ L( D5 Q! A  f

1 B+ c" A" p0 t6 M) L- ]* y  B        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
1 J9 H$ e6 b0 A; v7 E/ a: {        /*  如果数据足够才执行主程序 */$ X+ \8 ~" J! A2 }. ~# \8 W
        oo = oo  <  5;
, H# _3 e6 {5 }  r5 c; @        enoughDataFlag = enoughDataFlag  <  5;
' R: c% _1 F9 @9 D        if (enoughDataFlag  <  5) {
  i% S& j( p' \4 r9 ^4 j( @//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
6 M. V/ F, @  w. R, o7 O                AGC_AGC(&pAGC);, x9 T$ K1 c* E% ^5 P1 m/ C

  t2 t+ X3 d4 S, v7 R                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);, r+ j; J1 x+ z* t) Y4 T
                FIRDecimator_FIRDecimator(&pRxFilter);4 D6 `/ ]* p2 {+ F

) R( D% F; Y1 |! M5 p8 f- a                /* Downsampling */9 T8 L2 P) [# r; N1 c; ~
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
( e( ~# X# J& M. E7 _  V" v9 W6 p2 i8 _
                c_PreambleDetector_PreambleDete(&pPrbDet);/ U3 ?" b' h% e2 b# F

& w9 V6 K# D5 P  @3 ?% ?, t0 n                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
& e5 [0 L7 R8 X1 u9 K                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */, H- k. i8 T' y# _' ]! K
                /*     %帧数量=100 */
0 `% g7 K4 B( r+ h                pFrameSync.isInitialized = 0;+ M5 ?1 {' D7 s4 h! D0 p- q( n4 C
( b7 j, }- p1 l8 |# y4 L
                /*  [EOF] */% P" g3 W) H- X, h4 s
                /* 前导码长度是13 */( s: h* s9 ^. r2 ^% Q# R
                /*    %qpsk */
" \& x/ x* e8 I1 {8 L  ?, ?- h- s9 q                pDataDecod.isInitialized = 0;
1 }3 }2 v3 x$ ~  Y* S
& B" p. I9 y6 m; b                /*  end */
3 u0 o3 n" H5 C, a- }/ C* G                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
* V" Z4 x' ^5 c$ d3 o# v" T                /* Convert 3-dB frequency */
% F& M2 p$ {4 u5 F% H                /* Convert 3-dB frequency */8 B: u- U! E7 O7 C, G4 u3 S
                filtfilt(save_buffer, usable_left_filtfilt);- _# e. z* h  D& N% l) t
                for (ixstart = 0; ixstart < 81000; ixstart++) {
; {1 J2 p6 Q0 B                        usable_left_filtfilt[ixstart] *= 2.0;- O' X! D" U9 N4 N4 t
                }
$ J" l/ G( I( s3 Z$ Q; ~. Z$ q  `
$ c- X! H8 q, m0 {) J                /* 注意乘2,处理幅度 */1 Z% [) T& o% o+ S1 @/ g
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */! y1 |1 {$ ]$ k- J8 k  [6 ~
                /*     %% 行列转换 */3 ^. H8 Q$ X7 Q& z, E- e+ K
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
3 }9 t* `& d) n+ e& H                for (ixstart = 0; ixstart < 81000; ixstart++) {
7 W7 E& ~& b. g" ^! d                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
! z1 [( n! ?1 ?7 J  u( F                                        - yiDuanShuJu_mean;
1 ~* d4 t% r+ W* X. p+ ]                }; G# O2 I* D% s" N' x& D7 s% Q1 H

( T, D# l0 E; ?2 |                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */( R' Y& A( i& W5 ~; W2 C  w
                ixstart = 1;3 A: q" G% k8 K6 R
                mtmp = youXiaoShuJu_QuZhiLiu[0];
6 ^, m8 [9 j2 [, q, q( W7 e                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# R# E5 o* |* ?! v! x# B6 s
                        ix = 2;
$ {# U' W- k6 d4 \# d& k                        exitg2 = false;
+ i/ h' q& ]7 x                        while ((!exitg2) && (ix < 81001)) {
  S8 e5 n+ u) `9 f. {* a8 q                                ixstart = ix;) y2 G/ U2 N; ]# o+ B
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {) _+ j8 j$ b: J9 S( b
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];/ i* ?5 |: U0 Y( B" m
                                        exitg2 = true;& e( d2 W) m0 N$ @) O: Y
                                } else {3 @( J( |) ~) W2 }; D. @2 J. _
                                        ix++;) N7 t9 t9 |5 @" e5 c
                                }/ P) Q1 a7 X) U. U: E. N
                        }8 U% _1 j8 c) e$ z- f1 l+ F) x. _
                }
" ~# j# f. X- `% c# K
1 M! R! r, V5 ^4 B+ T% }' o8 a. t                if (ixstart < 81000) {: \" J) c/ ?% }2 t. |
                        while (ixstart + 1 < 81001) {+ j' B! X( K: y, I4 |
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
/ j: E+ [4 M! }4 M# Q: x5 E  ]                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];/ y' O( k' \0 ?( Y
                                }* F1 O8 i* B; `' G3 F

' d, [9 f  k0 j7 g; ]& ?# U  }                                ixstart++;
1 p7 h4 d/ j/ l                        }
- b& X5 S: C' ]) V' q  Z                }
. D% \: K! U9 _
+ j# l" l" b  C6 D/ n                ixstart = 1;
' B4 P  o/ F$ q' z9 R& H1 W$ g9 L# h                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];* x& t# f6 I, x# a+ j5 e1 j! Z
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
  Q8 h/ K, M( E' ^7 b                        ix = 2;
6 }# T, Z/ m1 q' `7 ~                        exitg1 = false;* H' b, e9 v8 i3 p) ?  F
                        while ((!exitg1) && (ix < 81001)) {
$ ?9 u- y) ?5 S                                ixstart = ix;8 G# r4 l! C4 I5 u
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
" b, L2 ]5 b7 _8 ~' Z: D" [" i                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
  L( i& o5 Z5 z                                        exitg1 = true;
, i1 y2 x& j9 k% f. T# y/ J' s                                } else {9 ^' q/ q- z, d  z
                                        ix++;
" @, u! A/ o, X' k, V+ w) }! C                                }/ ~& }- K/ n4 l9 W" G$ S! L  l
                        }
& }  C, g/ U# D& c5 |                }
  D/ t: u( R- Z  z9 V3 t% M; F+ \; z  u0 X# x2 l9 G
                if (ixstart < 81000) {
8 O! S3 y! b- S! C+ _' }                        while (ixstart + 1 < 81001) {
, |, M, n. }7 K+ ~                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
9 e/ ^# D2 h" X  H8 H                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];& T+ m- }) ^/ q; I
                                }: s' n; N& Z/ `0 p, E( D* m

& v3 J0 \) M* h5 N                                ixstart++;
  Q3 r# o0 p0 h7 ?, j1 j" c( D                        }
  F& C0 I$ Y& [+ [6 ~- T                }  _! }7 Q6 Q5 _9 N6 T
' `; C9 x& Q: M" B0 b9 t3 o
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
1 j( @; F6 H2 s- X7 F2 ?                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {, u5 Q1 M- F# d8 l4 ?
                        yiDuanShuJu_mean = mtmp;& h+ G- _0 t) h( o% M
                }
! _, w0 y$ r2 K$ W- c6 u
, o% L& }+ R' E/ p. m/ Z. H                /*  找出极值 */
0 X1 C/ L2 Z7 J9 F& |, D% i3 I) J1 q                for (ixstart = 0; ixstart < 81000; ixstart++) {/ c. z$ L  E$ c9 Y! O+ i' @
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
+ I  [$ o8 e/ F) y+ Z0 A7 h9 r                }, ~9 X# h( A+ Y3 O3 k

+ \% `9 }& K' o/ m        --------------帖子字数限制------------------
1 z1 q; A) \7 O}$ i/ p. i2 g" D$ a- N
6 X+ f4 K! k$ e4 j

6 ?2 {4 K( d5 n& D! X! E

本帖子中包含更多资源

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

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-10 13:03 , Processed in 0.044174 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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