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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 % l; e3 U% I- G) V0 W6 X: d( n# y# m

; p( I, f; O; q, l+ }, _1 v各位大神:& I/ y& }' F: Q0 H1 g  w2 S- N
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)( \6 h" i: A1 X5 F" c
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:- r: f% q% A6 [. z4 k; J& ~) n

6 K3 u/ {4 L2 C0 g! r( x9 n9 Y% M     
+ O  M3 J, c. Y4 F+ Y8 D这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
4 J0 k: _# k% X: |  I/ {) \
0 J; S( ^) h0 E' i' x1 b. w并没有其他线程
. Q( |! Q4 O2 k+ L9 F7 r- `& Z反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% a# {# y* G4 q* M6 D
也说不定是和堆栈有关系。。。。。。
  b/ p+ G" F. b) H请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
; r  p0 h2 A; V" _- \; ~
; J" J/ `7 c4 s+ f0 i& ~* B7 R
8 F) J8 m" G5 T& n3 G( n+ o+ E' d% X; k
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
) |% y$ X( T0 ?0 Y0 `  y; W9 q- z

6 `& Z8 m; P$ ]$ W2 y% L+ s$ v附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];' Y$ b/ A) ~) [+ X3 c" S
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
2 ^7 U. p0 n5 P( F3 k$ ]2 d/ n2 N: d, W, C, s5 e
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(. d2 b; E6 ^( o' G3 g9 [: \, r
                const double data1000[1000]) {, N, A+ A8 j5 ~, g  q$ ]! D$ K

  Y; a7 ^% R" e+ o* b# c        int myfuck;( s9 g. Y* r' Z# r
        double yiDuanShuJu_mean;) L1 J5 _8 C4 z+ n
        double yiDuanShuJu_LowMean[1000];
, \. X4 o) e+ \% s        int ixstart;
# N3 Y6 [( `, A. i- _" C        double dv0[1000];4 K0 X8 q, j' ?. r7 v3 i7 @) B% q
        comm_AGC pAGC;$ Q7 H% D4 `0 [! S) m$ a- q
        comm_CarrierSynchronizer pFineFreqCompensator;9 `1 X& j" J9 ^; c1 y
        dspcodegen_FIRDecimator pRxFilter;3 f$ N; z4 q' G( O! U. H  u
        comm_SymbolSynchronizer pTimingRec;' Q$ q$ \1 j* Q" |
        comm_PreambleDetector pPrbDet;
4 n8 b* W% W% V/ l        FrameSynchronizer pFrameSync;
& _( R  e3 v$ h7 W4 P        QPSKDataDecoder pDataDecod;
3 W8 \7 }, a+ J        static double usable_left_filtfilt[81000];
* c' r9 {3 Q; O' A/ @( ^        static double youXiaoShuJu_QuZhiLiu[81000];( t. c+ z1 h8 \" J( _$ n0 Z1 k
        double mtmp;# a, q, f, z. _$ y
        int ix;0 t( j" P) X3 d' s
        boolean_T exitg2;0 z( t$ [! g9 m8 i4 g
        boolean_T exitg1;5 P7 m, H( V" l) S& J
        double YiZhenShuJu[800];
5 B% D0 U% C/ ^        double dv1[800];
# i8 R* \. M2 @) X1 y3 T* C/ D, S$ a: `  @/ a" \9 e+ I. y" I
3 h. w! i  e; V+ [
        double b_YiZhenShuJu[800];$ U9 m- N% n% K, a
        double I_filtfilt[800];
% v) G/ W* v! u8 a: ~        double Q_filtfilt[800];$ u$ d9 V7 D2 z
        creal_T b_I_filtfilt[800];. d( u7 a" H* }# W$ J, W
        creal_T b[800];
$ \: v5 H: T. i: H2 T        creal_T RCRxSignal[50];$ c) a) J2 V; D! H$ \
        creal_T fineCompSignal[50];
4 t3 C. V- Y- y& }6 x2 Y; U, R) \        double phError[50];% Z" w0 F0 l% B2 |- {
        creal_T timingRecSignal_data[28];. S1 [3 e% P( n0 ~
        int timingRecSignal_size[1];8 j% C5 j9 b( t, Y
        double prbIdx_data[28];; L* _" Z- Y( Q2 s% ?  c6 R
        int prbIdx_size[1];
* _, `1 L( B, R2 |+ M- A        double dtMt_data[28];
- ^. t/ u  k7 v. m! V0 x        int dtMt_size[1];2 V& n  b5 w9 K% Q0 L
        creal_T symFrame[25];
1 k/ W: Z$ q' _        boolean_T isFrameValid;' R" @6 G7 ^/ K2 K9 Y& Z
        double unusedU0[3];  B3 i, S* b' Z
& z, s( V# {" j+ S# H0 ^7 K  {4 S
        //调试过程中的变量; `6 {( c4 l0 }1 x# J
        int  enough_data;
( b" Z' c9 F& H1 c; R9 M2 {: S6 M* b+ ^- M# r+ a' u( t
        int enoughDataFlag;
* D& U' A7 r2 E! T( ]. j1 K/ w6 P        int yiDuanShuJu_mean_int;1 V) f/ ^& H: @6 D' Y
        int int_sum_dv0;
% d9 Y3 u3 ^$ c6 \- x        int oo;
7 D, n1 w% K$ y9 J        int ii;
6 v4 P" N- W# A  s7 E9 n. R; z8 t& g        myfuck=10;
& E1 a% Q4 c7 f# |) o        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
  t$ l/ {- C% h+ k, |" K! [8 L0 P        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
/ `" C  f9 O: }2 h5 Y0 Y
$ `& X$ T: V# ~0 Y- ]2 @0 Z        yiDuanShuJu_mean = mean(data1000);. e! L6 |5 Q% ^

5 Q1 L: B% y+ M0 F        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;( A% b5 I2 n& e
        UARTPutc('A');
. ]+ T* M  C2 {; B$ N        UARTPutNum(yiDuanShuJu_mean_int);
+ w' U4 R1 [; u% ?6 X        UARTPutc('\r');3 e  Z4 O) [1 T1 A" X
        UARTPutc('\n');
! D, X! F$ J  E: @* k4 ~1 b& C% T& F( y- H
        for (ixstart = 0; ixstart < 1000; ixstart++) {
  _& I; V! S% k0 y6 W                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;* k" @! ~6 ^5 w7 g7 n7 D
        }
% \/ P6 y9 s+ _+ \/ ~8 D2 B- O+ b  V- Q$ X
        power(yiDuanShuJu_LowMean, dv0);7 T3 F. V- P% O/ s

8 e6 w: i5 ]# V        int_sum_dv0 = (int) sum(dv0);+ ~7 q, M/ ^+ P" n

* X* k4 c1 O$ n' h$ l2 T3 w        UARTPutc('B');
8 N' t& z( [3 W8 n        UARTPutNum(int_sum_dv0);3 I0 c/ P8 N1 L4 ]: O% S
        UARTPutc('\r');0 \5 m- M% L* k. g
        UARTPutc('\n');
, u  j' h+ T5 F' b7 u0 @/ G9 b) V: K  B) k0 ~1 i1 z
//        int compareFlag = int_sum_dv0 > 1.0E+8;$ S) a' O: y( B2 Z9 s$ J) K

- I% Q6 q8 o% x% m8 o% U        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?" G9 j' g; T" I. u
                UARTPutc('C');2 W% Z8 T4 W: Z6 I
                /*  比较信号能量 */8 j6 L8 j& s& t9 ~* B/ V
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */: l. ~1 T# f, J. L3 s, l- P
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
; L4 f9 E3 P' Q  ^//                for (ixstart = 0; ixstart < 1000; ixstart++) {
, |2 \0 j4 [1 A# x5 J//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
% ?5 ^2 |) n) E$ V! T) P//                                        yiDuanShuJu_LowMean[ixstart];( B" c9 T, j% b& D# g( _; b4 x% O
//                }
! S6 r# p- W# Y1 U) {5 L//  @+ w  Z3 t2 h. w$ Q+ D- ~0 |
//                youxiao_k++;5 S( {# l/ m& i6 Y$ q6 R% \8 t. b
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==$ O1 m9 ?, {2 p2 l" G
//                        /* 感觉要取21个数,即0-20, */
( |7 b8 N7 g: Y2 m# ]  U( D//                        enough_data = 10;//有效是10,无效是0
! D( p6 E2 ]0 m: m0 @7 H& n6 y//                }
( L) I& g: U, \$ K8 p! g8 @3 J        }
  o  ^% \" X- W5 v5 U8 [
8 m1 ^2 r- p( c' D; H
5 z% G5 {4 e4 K) ]9 w        enoughDataFlag = 100;& ~5 m) ]) V5 F' _3 D5 e- Y( u
        enoughDataFlag = 1000;' B6 [- U$ M- u' b4 \' v2 f
        enoughDataFlag = 0x02;5 E- E& Y3 ~0 `2 s* @9 U! L
        enoughDataFlag = 200;& \+ p" g9 }7 D; B  D! M* J3 D+ v

# C- z/ A4 n- z/ ?2 s6 F        int myfuvk1;
+ A" F+ |1 j/ B, d, N3 }; s- m        myfuvk1 =11;
6 N5 L, n5 V9 @7 S* {& Z( m$ N/ U. w8 v- W; ^' Q: m" {) l

8 {9 P' j/ K* N4 P6 \        enough_data = 0;# c7 U4 |7 k* q5 P5 o# h
% L0 K7 H/ _6 f4 ^" c8 |# m6 j
//        if(enough_data>50){6 z! v+ F, _+ U2 Y0 U/ H
//                enoughDataFlag=0x01;
& x1 }( z- @# ?8 Q) T2 C0 S//        }else if(enough_data<50){8 Z5 o, D( z6 X; v0 w
//                enoughDataFlag=0x00;//0x00还是不行
; N! ]- Q3 ?% w+ r/ A/ X//        }
4 a! s& F  d& D% F- d% {. z) M) |6 s: C8 [# e. B
2 W$ @: g% i( O; H0 S3 O
        oo=10;. X+ d( D$ \1 g: n8 h
        oo = oo  <  5;
% [, l) c/ v; c3 v) c0 Q) p        if(oo){
/ k& h, U1 ^( F) a" a# \' k                ii=0;
' y* z# `, R2 ?5 J        }
" x& k3 s$ i  R& d" T        if(oo  <  5){" V2 W$ X- U+ w2 N$ a
                ii=0;
! O* p5 W4 O3 ~8 k' H        }% U9 Z& f3 f( W% n8 C) K/ O
        if(oo  >  5){
7 I& t6 K4 n  E& D                ii=0;
4 y/ J. d4 Z: @6 g; g        }
9 I( t; X# ]! l$ U8 O$ w  T7 Q- [! ~+ u7 r. x/ b* w
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */. u" r" Y  ?1 x  a' G
        /*  如果数据足够才执行主程序 */  [. ~5 Z' B$ t$ Y8 Y4 Q- L
        oo = oo  <  5;2 D# F2 a! ?* \- {4 t8 y2 d: \7 C/ X
        enoughDataFlag = enoughDataFlag  <  5;, g! C5 Y& a, j6 T3 L$ d+ v# P
        if (enoughDataFlag  <  5) {
$ u( f7 y+ ^/ |0 f//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
7 y5 i7 ?3 K) S  Z( b                AGC_AGC(&pAGC);. Y3 \4 a# A  C; {

* O9 H0 Y( C( M* J* _, n9 r                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);% @/ G( t! p# G( Z/ U4 h/ s
                FIRDecimator_FIRDecimator(&pRxFilter);1 y* x" f9 P, @0 T. `1 ~6 f

/ `- \& a# m1 }4 v; d                /* Downsampling */
6 u0 |0 C2 j  w, ]                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
. j$ v  y9 w0 D" W3 l' D! {9 d4 ~) D' c' n6 s  W! F$ I. @
                c_PreambleDetector_PreambleDete(&pPrbDet);
3 N2 y; g# v! [
) Q+ K& k; _3 e7 X                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
: I4 }$ c2 |; m6 v+ _! `                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
7 ]; L, [8 f' j5 [( [                /*     %帧数量=100 */
8 p6 Z: x7 I. P1 d: G4 P4 D, \                pFrameSync.isInitialized = 0;# D2 s& h  _( q6 T& d7 a

& J0 Z" M; b3 A+ ~" `                /*  [EOF] */* V, Q( ?. B8 [6 m" s+ k- g# T
                /* 前导码长度是13 */- _: a* |9 D1 z9 @
                /*    %qpsk */9 d' T4 {# D3 v3 }% ?) X
                pDataDecod.isInitialized = 0;! _* V% g# ?9 r5 g" D" y% z; f! Y4 O

% E  ^( ^& L8 B6 |2 N  o                /*  end */
, F* A5 w3 g+ b6 B                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) *// o4 D1 {9 Y4 X1 V0 ~& Q. B
                /* Convert 3-dB frequency */
) y9 c& g( k- }( ]7 B                /* Convert 3-dB frequency */
4 W! [, ]) |; n! ]( ]2 b) Q' V                filtfilt(save_buffer, usable_left_filtfilt);
2 m' {9 F' f2 C/ w# c                for (ixstart = 0; ixstart < 81000; ixstart++) {
1 Y# g" F0 d3 T- l! N                        usable_left_filtfilt[ixstart] *= 2.0;2 U& ]/ |! a4 [8 `. y) x. B
                }
) Z2 P8 U. S& y0 \) d
/ B- K) X8 g  P                /* 注意乘2,处理幅度 */
6 m! q) r. r) o) P; D9 h                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */) v4 D$ P# e/ Q8 e* c' ]+ X: [$ {
                /*     %% 行列转换 */! m0 f# U1 K3 E  x/ H# S
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
4 I& A" ?+ }* B  S                for (ixstart = 0; ixstart < 81000; ixstart++) {
" t( n1 u& Q7 M4 L4 g2 Q                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
% \% i0 H& m2 a3 C                                        - yiDuanShuJu_mean;
% t& f9 ~) [* P6 C# |                }1 I9 R8 V1 T4 `' q# F5 O

$ {5 {% w9 \7 C' _7 U                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
  @5 a* G4 D. ^) \3 D( O                ixstart = 1;
: n% [  F; m7 X                mtmp = youXiaoShuJu_QuZhiLiu[0];
2 @! u9 ^$ S. r7 H                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {! f! u3 w8 l0 F3 r/ p) {# I
                        ix = 2;! v% s$ O. j. @0 m% ]3 d$ v
                        exitg2 = false;4 d( X5 c% V; C) w/ d
                        while ((!exitg2) && (ix < 81001)) {" u5 h7 l! M! e0 Y
                                ixstart = ix;
& n- \- T. w" K, ~+ r9 `" z                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 b2 w% d& \0 P" W# r
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];# A; z: U7 s: @0 ]5 n" q0 O
                                        exitg2 = true;0 l0 k+ X# T1 `; Y/ B
                                } else {
' ]7 d/ g: ^' w  Z& W  B                                        ix++;
' D  a0 r! y  }" R- ^                                }
) Q! Z* u1 l2 I, b) G1 i0 n' _9 I                        }. N$ W3 B0 u8 o- O) G8 C
                }
, o6 B% X0 p( r" y1 A8 t9 @$ @) X! Q1 I% t( \1 R) O
                if (ixstart < 81000) {7 Z1 K2 T8 q* Y8 e! c
                        while (ixstart + 1 < 81001) {
! s6 F3 {& s9 W" g$ S8 O                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
9 V& F& C2 _3 \2 K  d7 f/ ?                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];3 l2 M9 A, S9 K- D* |
                                }. J$ m6 W( ~" _! k

* ~- P3 q, h- L0 \- ]% w3 F+ a                                ixstart++;
) o& a# C! \/ H( y' J                        }. |! i6 \; |  m; D2 s; H' ?: |) ]
                }0 e: Z3 l/ F. g( K0 G) P

" J7 a1 p) P% `* h% r, G1 L                ixstart = 1;: ^& G0 R0 c4 [
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
7 }) @, O9 x/ h, }* l                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( X0 t9 H( J. R4 {7 `# O                        ix = 2;% Y4 G; ^) e) O' p" o
                        exitg1 = false;
  n8 ~* U- I1 W0 O( f$ ~                        while ((!exitg1) && (ix < 81001)) {; A# ]- Y/ s" o
                                ixstart = ix;
1 j, c/ g# Q+ y& G( c                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {! d' _1 G: {$ ^# l! D9 F. F1 a
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
; q* [: W  _7 D                                        exitg1 = true;
4 v2 e$ d$ r, }3 \9 P                                } else {
, Q# X, B- L' }; `                                        ix++;
  S3 U( m% ~( u9 h; m; E1 k( p: u                                }
' J, T5 U- y9 X, X, g: ^+ ^                        }
0 S2 |$ h- W) r% a                }2 G. A- t/ M* Z+ W
& r) ?' v/ ~- E# L- p9 g
                if (ixstart < 81000) {1 t( {; g; g; L. K$ b/ `$ ?
                        while (ixstart + 1 < 81001) {& [: d9 J* x# s5 P7 \$ n  n& z* Q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
* F1 S! Y. v9 c8 M                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];5 m, a4 c& }& _+ c1 D2 \
                                }& _) E8 p6 f. Y

& }7 N0 J$ k4 W2 l) |                                ixstart++;; \+ [6 H, A# U# g. [
                        }  P) E9 p' o7 x4 U7 c
                }
. B! T: i" c$ j4 W! `& b& c
1 c4 d, i, X5 D" C4 X: J$ U1 o  P                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);5 f0 V( M7 |  k# V; H
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {9 ]4 e6 h* `8 W
                        yiDuanShuJu_mean = mtmp;  {+ T6 ]8 W* ]2 o3 f
                }( c$ s' H3 w! x/ V# U+ ?3 l
& o/ }6 @& W7 i. N& F% E! s
                /*  找出极值 */) s  i7 K2 e7 Q% g$ e
                for (ixstart = 0; ixstart < 81000; ixstart++) {0 {4 ~/ @/ e8 E: E
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;! z! z& E5 l! c0 V) p8 @
                }/ z  `7 t7 J9 X9 w8 f9 e

5 J& C5 F7 w, Z/ c4 c        --------------帖子字数限制------------------7 A" Z% [& p4 H; p6 @% I
}9 ]6 f  n$ q* d1 @# U1 G* r

: i" T5 G+ i+ X, E1 |9 R
. ]8 ], F, W+ B/ n2 U/ `. L* J

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 14:25 , Processed in 0.049447 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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