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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 - X: d+ N8 t) c# K  n* L# G

  ?& }! @! j/ B, ?& ?: I- s各位大神:% P! o2 ?$ @& Q" ~
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
; T1 D1 V; A/ J+ g! l      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:! n0 y; c1 d; Y

9 u* t7 f. S/ Z     
% b) x  }7 Z( S! S' g1 [这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。& i* [3 X0 E) Q1 ?9 I

) z) c" }9 Y1 V( P' |) M并没有其他线程
  c4 Y: d2 \. @; y/ C反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
, Q7 ^% u- x( _+ J; [也说不定是和堆栈有关系。。。。。。
% W  f6 S0 G3 ~+ Q0 x请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
2 }" L6 p  y; _$ U- F/ b0 Q6 A6 v* v
3 ?( e  R8 }& _; d
( u' o& e5 u! s! p5 {/ I8 ~& o
8 D. k2 y/ o3 B- ?. g- z/ }& d我也很绝望啊,希望大神能帮帮忙,感激不尽,!, Z3 j5 I$ a# K  @  m" {& x
  B. |7 I: D6 D: ~, ]

8 a9 W( R; j( w4 n, w7 o附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
# `/ D0 }! X8 r' e) b        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
% s6 z0 k7 g3 i; a1 l/ H3 ?" Z" W0 @+ z4 _1 a+ x( }
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
' t7 Q2 s/ c+ [1 J& O4 X                const double data1000[1000]) {
" t7 A8 c0 M; C' b0 f
" X$ i$ v( n0 E: U" P3 X: H        int myfuck;. K5 ~8 K0 Z  A* D) J
        double yiDuanShuJu_mean;  f) o4 [% g6 y0 s) @: x# z0 i
        double yiDuanShuJu_LowMean[1000];
7 h! Y" o4 _  S1 A* B6 H( }        int ixstart;, J( h( c2 Z! a6 O
        double dv0[1000];  _0 x9 y  Q, k6 g
        comm_AGC pAGC;/ y9 t- N: ?7 e  m
        comm_CarrierSynchronizer pFineFreqCompensator;2 H' w6 |, d1 S
        dspcodegen_FIRDecimator pRxFilter;: L! n0 ?9 b2 d  `$ p5 i7 T% g
        comm_SymbolSynchronizer pTimingRec;
8 s! d4 ?: _( H! y        comm_PreambleDetector pPrbDet;% E& H# L4 k" q0 M5 J4 y) j  `
        FrameSynchronizer pFrameSync;
0 Q' d7 h7 d# ~/ Z& h% }        QPSKDataDecoder pDataDecod;
4 |7 @/ p+ j: w# ?        static double usable_left_filtfilt[81000];
: d* [7 W, E/ l        static double youXiaoShuJu_QuZhiLiu[81000];
0 I1 R: P4 U0 v( e/ ~9 q        double mtmp;
$ K$ D- N0 X5 S# b) H7 s1 Y7 w        int ix;2 E  Y& H3 ]  W8 z8 r4 D; Z$ N
        boolean_T exitg2;  [! n, |8 l: W* k2 O
        boolean_T exitg1;
$ N( Q' {* ]: D; w        double YiZhenShuJu[800];, F( k7 {4 f& f3 D& n
        double dv1[800];7 s: Y  T9 ?( c
" z( ?" K  w/ h) Q0 [, |. A7 ^( Q" ^
1 F% S# f9 x4 K5 d
        double b_YiZhenShuJu[800];
' l6 m. y+ H3 H& L# G  s0 O# n# F& A        double I_filtfilt[800];% x6 q2 s, b7 T8 T% }# C
        double Q_filtfilt[800];7 I/ Q, q% |5 _3 L5 X, s$ r8 z
        creal_T b_I_filtfilt[800];7 h+ f2 |% ?; \
        creal_T b[800];
9 _1 d, t" `8 I        creal_T RCRxSignal[50];
' q- S% ]1 |9 q! q; K' g        creal_T fineCompSignal[50];
) ~: B% f& |  \- u0 G6 Q7 Q8 k: `        double phError[50];
) d  `) N; w# t5 A% W$ G1 X+ d2 a% {# ]        creal_T timingRecSignal_data[28];' f+ x2 M% y& y, k* J5 H
        int timingRecSignal_size[1];
/ x: l7 Q# j( u0 a: }, R( `        double prbIdx_data[28];
8 P& H9 H% N! _* L8 l# x: ]3 ^        int prbIdx_size[1];. z9 y7 P5 q7 M* M3 U6 d% t6 |/ q2 P
        double dtMt_data[28];6 W' K. ]2 U" l% `2 l  F0 Q
        int dtMt_size[1];
* }: l  o9 N6 z. y        creal_T symFrame[25];2 p: ~/ E" ?& x6 F9 U
        boolean_T isFrameValid;" J" v5 m8 W5 ~2 M2 V; N
        double unusedU0[3];
3 V3 @; T6 A' f% o4 i5 r9 p; G, i# U# _0 y6 ?/ e
        //调试过程中的变量$ }4 J( u1 ^# T/ `) @
        int  enough_data;
) V, S. f- a$ Z' N' o: U% Z4 O: Z
. M+ d( {7 H/ x- p" Q% E$ c        int enoughDataFlag;  R: \! |( i% |1 R
        int yiDuanShuJu_mean_int;
+ j3 E5 |5 ]$ q$ n. w+ f5 A, v        int int_sum_dv0;! T6 q+ G6 q0 L7 ~5 |' L) _' N
        int oo;  c: w5 z. ~2 Z' V
        int ii;2 \! Y6 K4 _6 R
        myfuck=10;
6 {8 p3 r/ o, e. N, A( u        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */  {- t+ E% i1 m
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */" L- q  Z- X$ f" A+ h' b8 }

7 C  \* F5 Z8 o; p% f( d        yiDuanShuJu_mean = mean(data1000);
) g2 Q- a+ d& }( {: O. t/ h& Z' `0 T8 V8 N8 O0 ~! |! X4 f
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;7 K: N) P3 W$ R+ {, s
        UARTPutc('A');
/ O8 J) b2 O0 P9 P. d) E! L        UARTPutNum(yiDuanShuJu_mean_int);+ t  J! a+ p6 X! E  z. ~! b4 R
        UARTPutc('\r');# w( q2 _3 _7 |3 W+ }/ [
        UARTPutc('\n');+ E* y0 L4 q! K1 l
/ b) e, \# Q' f- _8 J& _
        for (ixstart = 0; ixstart < 1000; ixstart++) {5 T0 c2 ^3 L3 w- p3 {" b( p
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;$ {8 M! E, F; R9 V2 o$ c3 G; H1 o
        }
' \! @+ R: n( L% J. q* s4 P# j/ G5 Y' C' W% B
        power(yiDuanShuJu_LowMean, dv0);
" ~  `7 B, T9 ?' U5 j1 N6 }2 P1 q
8 c7 i8 u0 w( u2 ]+ r4 O        int_sum_dv0 = (int) sum(dv0);
1 }' _8 j' _! J' G% S/ e, ^- |! @1 t+ w* D% N% e) U" N
        UARTPutc('B');& w+ n7 [! N$ t
        UARTPutNum(int_sum_dv0);" s) u& f: X  Q3 l2 l  L8 z
        UARTPutc('\r');3 B; h% |; M, J( ^# `
        UARTPutc('\n');
. M! |) [  u' T$ j; `) D; v$ U
" g0 u2 O2 Z9 @0 s//        int compareFlag = int_sum_dv0 > 1.0E+8;3 W& [( c% e3 X
- r$ }( ~9 k7 F& n5 }( y
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
+ J% k2 }# T; Y                UARTPutc('C');
+ c3 g6 g% F1 A! ?8 c+ F                /*  比较信号能量 */$ ?( k$ C4 i- z7 D/ D2 v* d
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
$ @- r5 U# f: v  S//                yiDuanShuJu_mean = 1000.0 * youxiao_k;% H  C+ ?1 P: K7 d9 x
//                for (ixstart = 0; ixstart < 1000; ixstart++) {' X, P* N9 u# ?( s) Z
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =, o1 {5 n/ r$ g' a
//                                        yiDuanShuJu_LowMean[ixstart];
% g+ }) ?: u8 o2 i. f) d1 W//                }
+ M) n* j* }8 t" T; ?& c//
8 [7 k) e+ Z# `* S0 L$ T; l) a3 y1 G, }//                youxiao_k++;( K2 b% w8 X$ G6 F' e
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==& o! \# ?) L% ~7 X* s( O- b4 \
//                        /* 感觉要取21个数,即0-20, */- A3 p% i; I5 D. g6 v
//                        enough_data = 10;//有效是10,无效是0
! {* o, c/ a/ `3 d  y//                }) b$ g% I9 u# |. e4 K0 c  L; F
        }
* r4 l& _  q' M3 {$ x, t  |* a  \) a& W2 _/ M

7 Z9 g4 ?$ M* y$ c# f" d' Q1 v. V        enoughDataFlag = 100;
/ d8 M" V% O7 J5 i! r- F: T        enoughDataFlag = 1000;
: O- D) |3 n: J) e0 @! j7 W        enoughDataFlag = 0x02;# z% n0 @* M1 [; ^- Y
        enoughDataFlag = 200;. \7 ^7 y" T0 K$ ?% H0 ^- Y
' t8 H; C! y. w$ d& ~1 z
        int myfuvk1;
' |8 b7 a4 G3 J6 l% f) S        myfuvk1 =11;% C* x8 i3 |+ l0 B% e. ?- C

$ N5 m) }9 U  }; V+ @7 G8 u1 {, N+ n; b9 A( E' M% `1 w
        enough_data = 0;. O$ \5 x, z' {

$ G- g$ `3 F2 Y# I. M3 q. O//        if(enough_data>50){* k* ~' T# o, w; \9 b6 I+ `
//                enoughDataFlag=0x01;
3 u. Y& V( {8 t1 q//        }else if(enough_data<50){
. m, l( l6 X; [8 Q0 A, J//                enoughDataFlag=0x00;//0x00还是不行* d; O4 x3 g* I. t, {8 `) T
//        }. Z+ G+ i3 A8 o5 ^- `! t: {
1 Y; X: c3 X4 o* t  s- L
6 V8 w7 |: |- T2 _
        oo=10;
7 ]2 N( P6 c0 a4 J# S        oo = oo  <  5;: t; U, D1 Y: {+ E
        if(oo){% ?; t7 B. b" L) t* m
                ii=0;
2 \7 e' I0 [% }/ S8 M% e: _( r        }
; N. K8 d8 _( l. y        if(oo  <  5){
6 O: A. O7 \4 i& N' `8 f                ii=0;1 h, V% d' t; f% d! h; b4 C
        }) Z8 r. N( Q& U* i1 l& a
        if(oo  >  5){/ m8 w  [% h0 x. f
                ii=0;) r% s/ `/ s; M9 h8 }. Z+ a0 D
        }8 c& O. x0 s+ u' y# V' Y6 ]

# r/ Y3 W& m/ ~/ W' `2 j2 ^        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */6 V: H7 J, ^# B( O+ v  A/ s/ e; T
        /*  如果数据足够才执行主程序 */
; X3 n# [$ a( u, q' v6 ^7 z        oo = oo  <  5;5 B/ h5 I( [$ _# W- L; D
        enoughDataFlag = enoughDataFlag  <  5;) p$ Q9 {/ C5 K' \5 o' s! r( x& W
        if (enoughDataFlag  <  5) {
: A% g; t9 F7 ~1 G% m3 q1 |0 f//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0: X. ~2 h- v- r! d
                AGC_AGC(&pAGC);
; I) F9 o) P1 F" L
$ A2 _9 g, X! U9 M2 K' J9 A                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);  Q  `4 S8 l# S5 W. {$ U
                FIRDecimator_FIRDecimator(&pRxFilter);5 R# o( @" m' t, A( f" ?- W. ^
  ^$ J' l) a3 h6 F5 _$ s* A- T
                /* Downsampling */
) C& ?: b9 Q5 }; e! L                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
+ M3 {& ~( W. p* W8 ]# W
$ ^' l0 _4 h6 V& P                c_PreambleDetector_PreambleDete(&pPrbDet);
  h$ b7 i" [) ?% W# S* C: T7 [- x, c7 y  L  O: N  |4 i# g# {. S
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 *// n  y2 @1 c9 [  ^
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */& x2 }3 Y2 q! F
                /*     %帧数量=100 */8 y1 {4 u1 `, |* A3 G
                pFrameSync.isInitialized = 0;9 E9 d! E; d( V; z7 k

' z, L  P- p1 D                /*  [EOF] */
3 U# F* T; V1 M5 x  B9 H( g2 m                /* 前导码长度是13 */
6 }: m+ e* @+ H. Z7 _                /*    %qpsk */
6 T( w" a- x' I9 ]                pDataDecod.isInitialized = 0;7 t6 I9 f# Q2 K; i
0 _, a8 A  z, r: X' i: k! L$ k, J; V. a
                /*  end */) m3 A/ ]+ m; D- o. W# k6 |
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */. X* M" q$ F+ ~; a" R0 ^& t, o# z
                /* Convert 3-dB frequency */1 K/ G* X! J8 G: x) V4 q/ w( A
                /* Convert 3-dB frequency */1 [8 d" t: q0 j, V
                filtfilt(save_buffer, usable_left_filtfilt);
% d3 c& a3 Y$ Y- V                for (ixstart = 0; ixstart < 81000; ixstart++) {
( ]) K! k/ O1 q5 x* o7 J; _$ |                        usable_left_filtfilt[ixstart] *= 2.0;
5 v% L( I+ g$ P# L' T8 @+ }9 l                }
0 m' x* Y* o/ l( I) S3 n5 t
/ W* r! ~; [# W: N$ D                /* 注意乘2,处理幅度 */
, e4 e+ N5 r0 F+ \" F6 c- R                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
* k9 e* X7 ^5 J                /*     %% 行列转换 */
7 [) C6 G3 ~" ?+ o) F& d2 i& b! C2 V+ y                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);0 w" T5 X# T' u6 p7 ]& K
                for (ixstart = 0; ixstart < 81000; ixstart++) {
$ X' e& |4 x- i9 ^$ i" |7 C+ t                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' t+ L4 P$ \- t                                        - yiDuanShuJu_mean;
2 F8 Y. u  {. O                }7 g5 g% T- g% Z% U: I, D, h! e

( W6 S9 [4 r8 F6 S& L+ a                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 m0 \4 o- j! w: p: ^- g# I
                ixstart = 1;! M2 h: W6 U: w2 O
                mtmp = youXiaoShuJu_QuZhiLiu[0];
5 N. m: T; p# L1 G$ r% g                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- S4 d( ]- ~8 z: S9 U" ?. P                        ix = 2;7 q$ J+ b3 U6 V' q4 S
                        exitg2 = false;! C6 {6 ?& b' b+ Q  z
                        while ((!exitg2) && (ix < 81001)) {
5 x6 X; V4 @, \                                ixstart = ix;! e. O; e1 W0 G
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% B7 C7 `! d3 }7 X/ g( E
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
: M3 Y% h  j! P6 v* v                                        exitg2 = true;1 t" o- b; v& u# |2 A' ~; E9 f
                                } else {4 ~# y) ~  S. L+ f
                                        ix++;
- f9 C! c7 E8 I  f7 y; F- f                                }7 A2 a" D1 `1 c+ S! j; O  X
                        }
* `, y) @9 R- A- W                }/ B! Z5 K6 a- s- {0 K7 K5 s; Y
+ ^: q' G) r7 M1 J8 c8 p; \- C
                if (ixstart < 81000) {1 I# p7 j2 w5 I
                        while (ixstart + 1 < 81001) {. ]' g. u8 F0 u9 F5 p- p
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {/ _6 D6 K* d, i; S1 u4 C- E, N# g
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];& \5 N# H, p, q# |. m1 ?
                                }% f: G/ d/ J! y/ @5 ~  t

9 H6 l: p; X: A: c8 q                                ixstart++;) ^7 `$ t: j0 Y+ Q, `, g/ e5 [
                        }3 I  ]  R$ N  ^) `% C
                }4 M9 X* h  [/ X

, e+ d+ Z: ?: C4 E                ixstart = 1;
: @3 j/ b! N) B. A; D                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
! o5 L+ `$ o: M  V2 K                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. M& p$ m4 U$ Z, t" }
                        ix = 2;
5 s* @0 U. w: i  N; p4 p                        exitg1 = false;9 H9 g4 O; j/ L# G1 Y4 c
                        while ((!exitg1) && (ix < 81001)) {
: o8 U) }; N+ C9 m; R; D" J5 v- q                                ixstart = ix;
6 |: E: r! z5 N' P  f# q( r                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {: p0 f/ @* F/ f  x3 T
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];0 T/ c5 F; x1 {$ {0 D8 e, [# I
                                        exitg1 = true;
" b; a# O- m3 x                                } else {0 V* X& m0 V/ }8 n
                                        ix++;
+ q' e2 |/ {; K                                }9 K; H1 i/ e/ S6 g
                        }
' B; e1 p7 \* d. s9 {1 L, I                }
6 |' U" ~, j7 y0 X, m# i
8 m2 x5 Q8 l% n1 j. T                if (ixstart < 81000) {
. V- L3 @* [( g. M% N                        while (ixstart + 1 < 81001) {2 j5 p4 j& T! w7 I. A, p; e# m4 Z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
/ q8 r6 f4 s& ~9 k- K% @& R7 z                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( M9 g! P0 T5 U                                }$ Y, r( u/ s+ L* F8 M- S: e
* C4 N/ n- K. O: c, i
                                ixstart++;
* j( w* y! L* M+ w7 {                        }5 L) L  P8 U9 [% J
                }
: {* g  N0 E1 u
1 y& Z  ?4 r, ?6 s9 Q0 u4 B+ h                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);; S1 D) ?# F5 j+ ~4 N) Z* I
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {+ X8 n5 B+ }! n/ a; B  t+ l
                        yiDuanShuJu_mean = mtmp;1 n* u4 D; r6 v$ V8 q
                }. L6 w# D  Z! j% C2 w
# [" Z. F/ X( i! J1 l% k
                /*  找出极值 */  Z/ Y, M3 }$ s! q. b
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 k! E+ \+ g' K, Q- @                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
9 _2 F- _: n* I4 W! j' a                }
$ B) C" k, [( {! I
& G9 \9 U! c& P  k$ R2 Q- R        --------------帖子字数限制------------------
% h$ }' B0 x) [) S6 j7 V  t7 W}
% L* o+ y" L" x2 L2 t
! n  `( o+ q0 n$ C$ T: m! O. R: g- ]9 b1 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-15 05:44 , Processed in 0.042173 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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