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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 * _3 L2 U7 Z. R: L1 c% [

- f; P) K! d  F( V6 V各位大神:
+ B0 h, @4 f# V, B+ T+ v: B     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
0 P% d/ ?/ a& [9 o. @8 {      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
8 B! p9 {& _  I- x2 P2 U7 V! T% a+ e/ o+ V# q2 |7 [
     
  K% ~0 T2 o$ z这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
2 a: W! J$ }; X$ D
& S# n8 k; \; o2 I  Q  b9 V( f3 F并没有其他线程: v% `) h3 p. T/ w6 t
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。- {. ~5 ^  K1 x6 D9 z5 d% l  S; J
也说不定是和堆栈有关系。。。。。。
& G# J8 j7 H. y' d6 m$ L- R请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....+ Z9 I; F( U4 h' Q1 r5 S8 W

. z6 n, G/ x2 N$ ]  v
0 j1 @% ?% g. F9 {7 U+ o4 v; |( S  y9 @+ r" ^8 G% @" Z
我也很绝望啊,希望大神能帮帮忙,感激不尽,!! C3 W( Y% H, D" b" g; ?. R2 O; k

2 y" `; D+ V8 \4 u5 t( |3 t' B* o# @4 |
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
& [, ~& f/ ^- U7 ~# g* P        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
5 [8 m! |) Q9 F& U! q
" V+ [& }9 B3 Rboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(/ c# ~4 B: l# V* z" b! L& G
                const double data1000[1000]) {6 K- A7 ?& j4 w8 H. m0 S

1 k4 J" h  [; A2 X5 x1 v        int myfuck;* ^2 H1 _' _  }" T1 j; O! b2 Z
        double yiDuanShuJu_mean;
3 S6 i0 u# S1 u! Q4 f        double yiDuanShuJu_LowMean[1000];
0 s+ P* G& I( W        int ixstart;
! q2 a+ K# N6 U) o. a  a        double dv0[1000];
  X! w* y* u7 ]9 R) r: x: `        comm_AGC pAGC;4 c. `- k! D! w" V; V
        comm_CarrierSynchronizer pFineFreqCompensator;
0 t& r5 O5 `) J; \/ Z        dspcodegen_FIRDecimator pRxFilter;: S3 z% \9 ?7 D0 b+ o
        comm_SymbolSynchronizer pTimingRec;
( m0 ~+ K! }. J( Q$ k        comm_PreambleDetector pPrbDet;
/ `: k1 {# e% K* e2 p        FrameSynchronizer pFrameSync;
  Z. m: v4 b8 I/ |        QPSKDataDecoder pDataDecod;! y! q8 C% v/ S; b) Y1 t/ G0 f1 V
        static double usable_left_filtfilt[81000];
8 J" j" o& B/ D0 m- P        static double youXiaoShuJu_QuZhiLiu[81000];+ h% ]7 I  {+ }! r* D" S
        double mtmp;; {5 W% K  t3 r. N
        int ix;
  T) q$ {: Z; V" B1 T        boolean_T exitg2;0 b9 b' d% l1 ^
        boolean_T exitg1;8 E2 V7 W7 J1 X- p# x( m; }7 X
        double YiZhenShuJu[800];
1 `% m/ z# j: C/ k5 n' X9 M        double dv1[800];
1 F9 M. f/ b, Y' J  ~1 s, \+ _# h/ l8 v8 b7 ^+ a% f- @/ o6 n2 I

6 G( [3 w$ J" a+ U* G6 w- U        double b_YiZhenShuJu[800];6 m7 y& q! m( k1 c2 s
        double I_filtfilt[800];" i3 X3 R: B: d; w2 L
        double Q_filtfilt[800];
& c# c+ B  a+ u( E" N        creal_T b_I_filtfilt[800];4 ?- v( V& |/ B& C: j
        creal_T b[800];- F# I& s/ u. N& |  l& G1 X- n
        creal_T RCRxSignal[50];
/ j) d4 v; `  f        creal_T fineCompSignal[50];
7 ~# U/ ?- |' R5 q4 |' `$ L* K& @        double phError[50];
0 y2 y& ~* K  E: ~        creal_T timingRecSignal_data[28];: [. H& H4 M- v1 v) i8 d9 ~
        int timingRecSignal_size[1];  I3 t+ C% {7 E1 W: I1 S
        double prbIdx_data[28];
  f$ A: i* R+ w& \4 v# t9 V5 |& h( `4 v        int prbIdx_size[1];: T/ }% Q- J7 v& f# H
        double dtMt_data[28];: k( T& M$ U6 p  g
        int dtMt_size[1];
$ T2 p! G+ {( `' V  r! s( L        creal_T symFrame[25];$ P7 x* Q/ Z6 m! ~) m  v# p1 v: w
        boolean_T isFrameValid;
1 h- l/ R8 t- ^$ l# v7 ~$ F9 l        double unusedU0[3];
& p8 |* F+ P3 o& v3 m' E* `# ]
6 ~$ E$ z, n8 Y1 e        //调试过程中的变量' Z* H5 \9 Y) h! Z5 c% o
        int  enough_data;, g2 z! b* Y/ g+ t7 B

+ I, O* m# Y9 t& y( m6 Z        int enoughDataFlag;) {7 q9 [# D0 d. E$ |6 u
        int yiDuanShuJu_mean_int;
+ f; n! `; I8 u6 }- T1 @        int int_sum_dv0;# }; g) ]1 [" J
        int oo;
4 B( h- u  z# @+ T% N/ l        int ii;( q& w8 H$ x/ H; r- Y
        myfuck=10;2 X8 ~, @2 ~' c3 o
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
& E7 ?& T6 M4 g) d% {$ v' j        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */( v+ w' E$ a* Y* L
* |& W' \* N; c! w  s8 b
        yiDuanShuJu_mean = mean(data1000);5 w( k; t; [/ Q4 Y  l% W( j% Q

1 S- }' b- ]7 A( `        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
, h' ?4 }: a) o; ^  M) w        UARTPutc('A');
# v8 |/ T7 Z8 y: g' C" h9 @" p        UARTPutNum(yiDuanShuJu_mean_int);" R, ~' a$ I! A% E) O" g1 S0 ?
        UARTPutc('\r');
; f* p8 F1 r0 a& A  z        UARTPutc('\n');
9 ~8 O  r' M5 Z) `/ {! ?
+ {* |; x' q5 r" K        for (ixstart = 0; ixstart < 1000; ixstart++) {
3 A* V6 s8 t. u: F) o                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
+ H6 o  ~& Z% y6 b0 c4 s6 L        }
* W! N3 A+ {4 C: A1 w, K
& t6 m( {- J& @: O$ k        power(yiDuanShuJu_LowMean, dv0);" v" k7 @6 c3 Y  j: }
. d/ K) E% d( U$ w1 ~; i$ q% F
        int_sum_dv0 = (int) sum(dv0);' u' G7 {/ ^7 R0 A+ Z, n
2 x3 a0 n4 r) \6 L: V
        UARTPutc('B');4 d" ]7 O" R& W7 b% T
        UARTPutNum(int_sum_dv0);
! X' @. O: {8 z. A        UARTPutc('\r');' g- Z2 W# Z# e# z' ?' k
        UARTPutc('\n');5 f, O5 k% @" F: R$ ]9 ?
+ H- S; R+ J: c1 T( N
//        int compareFlag = int_sum_dv0 > 1.0E+8;+ H4 v' ]- O! |7 ~2 J
3 ]- E8 L$ e0 \2 H4 h, A
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
$ b4 `3 j; M9 F' A                UARTPutc('C');1 c  Q8 j2 b+ k& p0 P
                /*  比较信号能量 */
  b! c1 H  j' C                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */$ G0 I8 }) ?$ T) a
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
1 l9 A5 w) g" v2 w//                for (ixstart = 0; ixstart < 1000; ixstart++) {. A. X  h1 c2 X; Z! n6 k5 E6 c" i
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =7 _% k( k$ f7 v) p9 b+ ?6 q/ d% G
//                                        yiDuanShuJu_LowMean[ixstart];
7 v1 k5 g" t3 j3 i//                }
6 a" h- Y& m+ r' E( \//
7 ]% G6 c0 |6 h+ K' i//                youxiao_k++;* u" B+ d  Y9 K3 u
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
( t. n1 V2 J$ b4 L//                        /* 感觉要取21个数,即0-20, */
" D2 k$ i& u! X//                        enough_data = 10;//有效是10,无效是0
5 W2 z/ _- r, Z: ?8 G//                }
5 s1 m& F9 U( V7 n' X7 U* V# F        }4 M2 E. g) f/ Q

5 s: p' x5 y4 G. S$ X$ g
1 p2 K3 ^2 h8 S        enoughDataFlag = 100;
& T4 T) J- a+ ]" C# Z  ^4 i1 q4 M$ J; Y        enoughDataFlag = 1000;
5 k! S* G: B2 R" [" ^; Q        enoughDataFlag = 0x02;
' s7 m3 U! |3 n( d- j( z) r4 d        enoughDataFlag = 200;
5 f- d1 q2 Y- C" K. p7 J  Y1 ^2 E2 e  q0 h; T6 p# f3 g
        int myfuvk1;/ A) l0 f- H3 {/ S* N( P& X' ]! R' i9 V7 g
        myfuvk1 =11;
3 o# W! V  o" t8 y* k- u) q- o
( G2 ~- i/ O0 p5 U. L& N; b" @: M6 v$ N3 c1 b
        enough_data = 0;
6 E+ C5 a. N8 m+ {7 U9 o1 Y) U) T" x: G' e
//        if(enough_data>50){6 b# b  W+ m7 y0 L# \3 B
//                enoughDataFlag=0x01;
6 C( E  V2 v) i8 U" H/ d# V//        }else if(enough_data<50){6 Q$ L" ]. j! B& h, D, w0 S
//                enoughDataFlag=0x00;//0x00还是不行. ]) z) I9 C# p5 {! R) @
//        }
! k1 `: Y. y7 @  _
. X: B' Y  J# @) w8 y; V9 r( r- n/ D' \7 t% r! z6 n  U
        oo=10;4 c0 L% B6 F# A
        oo = oo  <  5;0 G/ O! N  _& V8 i. ^
        if(oo){# U9 U% N/ c% P- ^
                ii=0;
8 I& b' [6 I4 w* T8 ^        }: E- X* j# T2 P5 Y8 _, b
        if(oo  <  5){
4 C$ |! m3 `( a% @  @                ii=0;
: H; Y  c! m6 s! N        }
2 K6 T5 N! d4 s: n        if(oo  >  5){6 P4 o% j* u: [1 _. J" k5 I& W( ]+ b; ]
                ii=0;. ]1 s, z2 Z; U' V/ T; h; G% q% P3 W1 w$ A
        }
$ h/ s, {# a1 ~$ V4 t) M& R& [
: }6 v3 U2 k0 D! m        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */6 n5 W) u1 e; l0 f% f& {$ g( l4 l
        /*  如果数据足够才执行主程序 */# j. G4 A7 _6 O
        oo = oo  <  5;! ?5 v: K0 V* \% m/ h# z, V
        enoughDataFlag = enoughDataFlag  <  5;
" F7 |+ b8 Z1 d- r+ F        if (enoughDataFlag  <  5) {
8 h: h4 a" s' w3 ?9 m' O//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0# k; k9 e+ O: d5 L. Z( `: t% G- U
                AGC_AGC(&pAGC);
3 e4 W! A& n9 O0 f
$ d$ Q* f/ p7 t7 c8 D. d7 x                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
+ F7 Z& ?7 t, @; A9 P2 F& b                FIRDecimator_FIRDecimator(&pRxFilter);
1 o8 }( @7 {+ x4 N- Z2 z. I1 ?& \' V2 t  h# {9 w
                /* Downsampling */
+ s. Q$ _4 f0 p                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
8 ~* n: L7 w+ Y0 {! ?2 }. |& v0 R  ^% Z( t1 X4 }4 L# a
                c_PreambleDetector_PreambleDete(&pPrbDet);
2 U$ H( J% U4 K+ p
+ q( \) x  E( L& m                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
: N3 o9 E. Q- x- `- a                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
" u! h7 a0 j1 k) G! d                /*     %帧数量=100 */1 n) \. y# c$ R1 J1 }. M3 I3 Y
                pFrameSync.isInitialized = 0;
0 @- I. a3 M  B" e5 ^0 u3 R
: p2 Y, ?5 `5 j5 K( H) o                /*  [EOF] */" M6 M  t$ K+ P6 {) L# l
                /* 前导码长度是13 */9 L1 W# ]1 I' f$ `$ l
                /*    %qpsk */
9 P# d" y3 E" f6 P                pDataDecod.isInitialized = 0;
! g/ r0 P" i; f( f, F% f2 C
6 W7 [& p5 v4 r7 e* _3 n3 u                /*  end */
+ _+ [& d, c* m9 f  n+ Z; d% a( s5 e                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
, f. j  _# ]( Y                /* Convert 3-dB frequency */
; t1 n0 {; J! f/ s                /* Convert 3-dB frequency */! e. @. J; ]) U/ F2 r3 q: W
                filtfilt(save_buffer, usable_left_filtfilt);! d0 \& o3 a/ ?! T( i. C/ h/ K# j
                for (ixstart = 0; ixstart < 81000; ixstart++) {1 S" ?7 h3 o! {$ w$ p
                        usable_left_filtfilt[ixstart] *= 2.0;
# w1 r. `. m$ d, u* P; g% E  @                }
0 W0 J8 A5 I# L: L1 l8 g) D* C! H* f' F0 D  a# h9 e7 L
                /* 注意乘2,处理幅度 */" P4 o) Q2 t" U
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */% F5 T, v7 _9 l& A
                /*     %% 行列转换 */
2 O& b3 [, q  l, c% e                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
: q& F& O: O2 m/ G# _                for (ixstart = 0; ixstart < 81000; ixstart++) {& N) k7 }. n2 ]. z
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
0 y. A3 K6 O( n. K& U# \                                        - yiDuanShuJu_mean;, G, I8 N7 l$ I  S/ _# X) R* g1 x
                }
1 d, \" Z3 i4 @1 E' n
4 E- P2 r& ?3 Z4 N/ z' }                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */! D5 j4 G( R6 l! J$ G" Z' e
                ixstart = 1;
# W; f3 l$ q' m. m                mtmp = youXiaoShuJu_QuZhiLiu[0];& l& x; c$ R' g+ i
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {! ]3 q9 s# n8 d6 w$ ~: d
                        ix = 2;
# l( [# f8 J! Q# c                        exitg2 = false;0 c8 s9 K; j5 a8 A* P
                        while ((!exitg2) && (ix < 81001)) {
! F; e1 q6 A) ]                                ixstart = ix;
+ ^6 i# s5 [5 V1 O) k% q7 c2 {                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 [$ i# k6 p1 M( l& A! r
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];4 ]; B$ {( g' R( q
                                        exitg2 = true;
+ H. l1 n# D  T* a$ O7 I) @8 f                                } else {
2 _$ O) o% _+ ]6 r: n3 R                                        ix++;/ z& M  W9 P6 O
                                }( R- a7 ~* G2 w$ j  s
                        }" o; q6 M- [; X2 ~" I
                }$ L6 R% R) I# d$ c
0 D+ _8 n0 `) |5 Z& f- |
                if (ixstart < 81000) {
9 F2 T8 ]3 y. b                        while (ixstart + 1 < 81001) {+ j. M& f/ ]3 S7 G# g
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
% v/ V( {3 s! N! ]0 f1 f; X                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
5 O7 o; O% J- d& E9 L2 n) T+ ~% d                                }
. ~* ]/ G" @+ u% _+ j" O
' R. x1 }2 a$ b, d9 _. ]0 _                                ixstart++;
) R, I0 R6 _  c1 h, m8 `# o                        }
" K. q" I  v9 o& ^                }$ i) r4 W; o6 X# r3 g

) Z" h8 @8 \$ n. O                ixstart = 1;
) q$ V' Z: s5 {9 w( m                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];8 E& e- W" t3 @4 n+ x. c2 r6 u: R0 r
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
) Y. M9 Y) e! ?6 }                        ix = 2;
: T/ k' G9 ?/ `! `+ L1 l- U                        exitg1 = false;) I+ g8 e, o! K
                        while ((!exitg1) && (ix < 81001)) {
/ Q5 _7 F, P: K" z( ~                                ixstart = ix;
2 R: j9 a+ y! B- i) ~                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
+ {: R6 M" P. ?# r+ V5 _# a                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
; t; k% K- n3 c) O$ d$ M                                        exitg1 = true;
2 m: z) v% f/ {. A8 j  E! t                                } else {  t; {$ L5 u1 }3 k! p* d
                                        ix++;
( i( G  q8 y+ Y+ f' Z1 @                                }! Z9 ?: ~. c% H. n" C
                        }
( H' D4 `$ @8 A; P6 l: i0 o                }9 p1 C7 G9 h7 u$ z

' K9 u6 d' f( P$ r  y                if (ixstart < 81000) {3 H- M1 L/ W; m/ l6 O- Z& c
                        while (ixstart + 1 < 81001) {
( `4 k0 d: E7 p2 I! r8 s                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
2 u$ m4 P! M# R$ m. h; q                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];7 e- E! M0 y3 t- b3 ^
                                }- b' e" e6 u9 c
! O5 B* @# \" u; f* A
                                ixstart++;4 l/ ]2 r+ L) |3 \2 x' P. n
                        }) `7 K9 J0 K- N* a! l, ?. O
                }
2 n, G% [2 E0 `# L, U7 R  e
) X5 n* C" w: m$ ^. j% K                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);! i" S7 |: p! s9 [1 u* J5 L5 g
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
. e$ v/ l3 v( J! F5 _                        yiDuanShuJu_mean = mtmp;
' q" r5 B" D& R: k! @0 N                }0 X& v0 q9 i' `, U/ A" ]2 S, M$ O
2 G7 E4 k4 w% Z% d, V# i
                /*  找出极值 */
- U) v6 R) f( L' A1 F9 M                for (ixstart = 0; ixstart < 81000; ixstart++) {
1 \: L- Z0 s$ P# j8 T% h% ~5 B% |2 q. i                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
9 d5 |. A9 S) e4 i                }
1 P1 Y# k5 D! ]- ]+ @" N! i- y3 R1 f7 |8 R& J( f
        --------------帖子字数限制------------------; I7 g% R! i0 ?  D3 v( F  k0 B
}9 |( O2 B8 H7 R- Y! r; m. L

* a/ z& V7 \/ q! y1 N8 o0 M  d: T7 r" G. K, A5 k

本帖子中包含更多资源

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

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-24 11:27 , Processed in 0.045024 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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