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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 1 X: S: r; P4 v+ z

) M$ P) U- ^% Z; F7 Y4 v" [各位大神:
. l& l* i9 i" ~  y8 d     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
" V8 `" N+ j/ ]7 }' g      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
8 r# {9 C( Q7 _8 d: H0 ~. {  _, K2 H1 W# ]3 f9 r
     
7 g! `2 @7 s( }1 t这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。- B$ ~# K5 F, i$ O! S5 |" Q4 x

( Y9 T8 k& i) u  m并没有其他线程0 Z! k( }' t- v$ P
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。: C, b6 _- s0 |6 Z
也说不定是和堆栈有关系。。。。。。# v" B5 ]  _/ _+ A
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....9 F# f- X, b# ~6 _. x# w. w3 l
) d% ?# y% J7 y$ H$ I, F. S
3 g" e4 j9 N5 v- i
6 w( ]* c! r- M9 A$ a- O) v3 O2 v
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
+ b# G! T/ B8 Y" |- i
7 K2 [$ z" S& Y# x- L( y9 Z
" U' o7 R/ ?6 X, J* A/ g2 |附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
% V" v' J3 I: ^* _. L* Y        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
/ Z9 O& Z, r& l. y* e4 I9 r( [' o+ }( l" I' O
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
5 x, z  [0 R3 f8 L, W                const double data1000[1000]) {: t# s% Q) G- Q7 Y

& q, V# u0 [! f' d" G/ `- ?1 Z        int myfuck;
4 U- o6 U' n/ Z* c        double yiDuanShuJu_mean;
9 x$ [! z7 o0 {  {        double yiDuanShuJu_LowMean[1000];
! x% v. @9 ?( Y8 _: I; P        int ixstart;
8 o1 ^, }/ s5 {" p) Q        double dv0[1000];# u3 ?1 [$ o; ?; K+ c% L
        comm_AGC pAGC;: @; j& `! }. g* A8 n' q4 O
        comm_CarrierSynchronizer pFineFreqCompensator;, W; }" p: R& K, B' o5 |4 ?+ P. l
        dspcodegen_FIRDecimator pRxFilter;+ }2 B1 `( ]) c
        comm_SymbolSynchronizer pTimingRec;& B& L6 D+ z- ?* V" C+ m
        comm_PreambleDetector pPrbDet;
  l6 `' k; N4 G$ V' a# h: H, B        FrameSynchronizer pFrameSync;
  h1 L  V7 H5 [# ^5 r6 G        QPSKDataDecoder pDataDecod;
# N( s0 o* t$ K, w' w7 P        static double usable_left_filtfilt[81000];
. p# e' k) `  e% k* j        static double youXiaoShuJu_QuZhiLiu[81000];; s# I: h& x/ ?
        double mtmp;
( k. |: o4 Z8 t1 X6 o& `        int ix;
' [8 r$ ]+ f, O        boolean_T exitg2;' x! u1 T" V) O* n
        boolean_T exitg1;
: o+ C2 R% f/ Q; L/ _9 Y        double YiZhenShuJu[800];
) X) r8 O" Q2 N        double dv1[800];4 A4 L4 m# I4 D  Q
3 h, h" W# g3 I3 }# N

) n: B+ v/ s& [& c, K& \, e        double b_YiZhenShuJu[800];
! t0 G7 Y% G6 c        double I_filtfilt[800];
- v$ J# P7 [( t8 ?! S7 y6 U9 J$ F        double Q_filtfilt[800];1 n% X* j# R3 M! T1 n! A- L
        creal_T b_I_filtfilt[800];
! g' C9 }8 y. f! L' r        creal_T b[800];
; J3 Y3 c4 l- x1 f* _$ A        creal_T RCRxSignal[50];/ b2 [5 a* t% d4 [7 X
        creal_T fineCompSignal[50];9 y5 h; E  c  z/ [
        double phError[50];8 ?% u# }! @' W
        creal_T timingRecSignal_data[28];* E% @) m# [8 G  ~; h6 x
        int timingRecSignal_size[1];/ f( m, |! ?* n. e. P  n: D% x
        double prbIdx_data[28];" }2 |7 o5 ?% v" A
        int prbIdx_size[1];
8 }4 z' p  `- `: C        double dtMt_data[28];
9 R7 Q0 E  Z( j% F% @" V* w        int dtMt_size[1];; `, K7 ]  t6 T: S
        creal_T symFrame[25];6 k, p0 h' Y+ {; d1 i/ R& i' d
        boolean_T isFrameValid;
9 K8 N. G& c# ^+ }  m# q2 Z        double unusedU0[3];
/ W2 E  E$ I4 J) D& P  b5 ]9 D0 c6 I$ l( ]6 k- |
        //调试过程中的变量
6 Q* b. w; C8 D0 y$ E) H        int  enough_data;
7 d2 E2 J  s$ Y- {& I( D( x8 f5 l5 F' J/ J* P0 P3 A. E
        int enoughDataFlag;
& a7 y$ O/ ^1 z+ t% i& w9 _        int yiDuanShuJu_mean_int;  |4 A$ `2 @4 |# z
        int int_sum_dv0;
" i1 ?! o# x# J        int oo;
) p# \% Q* L- O6 ]( D4 p8 h        int ii;- b1 v6 t4 H0 M
        myfuck=10;
. ]7 h& I. ^+ ~. `        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */, r" w9 w) b( c" n  m
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */# ]$ c2 j$ ~1 A: m3 x4 u2 q+ ^% {

. V) g$ q- g- T* k" o& d        yiDuanShuJu_mean = mean(data1000);8 E7 H( s9 F8 V) n9 Q+ m

" Y7 |) V$ l- w( A, a6 v) r% D9 M        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
8 g) I, l) m+ j        UARTPutc('A');
) ~' K0 Q, l" H6 s        UARTPutNum(yiDuanShuJu_mean_int);: z1 V5 m( h4 `+ m! C. Q- }  i; K9 a
        UARTPutc('\r');
! W  j& Y. n8 V        UARTPutc('\n');3 z! O0 \6 L) f( x9 d3 @
6 z, U6 |4 ~. Q" A8 `$ m$ I
        for (ixstart = 0; ixstart < 1000; ixstart++) {
* S+ \" m: S! v- S+ ?' j& A. A                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;) C) f0 W( d: C; `- N
        }" E. ]: U2 W$ t+ z# [

, ]4 N5 t; t5 e$ I; j        power(yiDuanShuJu_LowMean, dv0);" k# d0 \9 j% ~9 b: _4 R: I

% h' q2 v: S, Y, u/ @) K# z3 s        int_sum_dv0 = (int) sum(dv0);
5 K4 a& M( J) B. [9 M5 I2 D" P6 k
: i# [0 m5 X  m        UARTPutc('B');) E) A2 g8 E, ^6 x+ @0 A
        UARTPutNum(int_sum_dv0);
: ^7 u, Q2 X! n* b% N        UARTPutc('\r');$ H( P- t9 F# P$ x& [+ ~3 ~
        UARTPutc('\n');2 R& q1 G. U, Y; X0 n; \1 h
0 D% P# [4 j* a$ y' r% e$ d3 t
//        int compareFlag = int_sum_dv0 > 1.0E+8;
: v4 o7 X3 ]1 B: ^: Z: }: x7 @" n9 D( E7 N
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?( B& R- \+ [: u# U  h
                UARTPutc('C');
$ x6 n# D4 d5 ^1 b( m& }1 E1 C                /*  比较信号能量 */
1 @. h3 N9 e: w5 {0 q                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */4 m1 g. j' h' ]( z9 E% h" u5 _; C
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;, c  z* {4 m/ R/ {0 x$ F5 w
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
4 m/ f6 z' V+ V5 q# U. B5 ^& g//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =' _3 q$ C/ a7 }8 y/ ~+ i1 W2 z
//                                        yiDuanShuJu_LowMean[ixstart];
5 D) R0 P. u0 G//                }
0 Z( _) o1 u# r4 Z, ^( m2 b//
" r$ M, |8 S) ~* g& a//                youxiao_k++;* h! f* `9 v# i/ U3 V8 Y
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==9 P* Q* K/ G( Q$ R/ }
//                        /* 感觉要取21个数,即0-20, */% p( f1 c$ T- S& W) m
//                        enough_data = 10;//有效是10,无效是0/ V! x6 q1 M/ r5 C4 p4 L
//                }
0 c  n+ x3 M9 a        }
( R* V1 J1 Y/ G/ F, d1 n' p5 `" i" S! n; T0 n
0 W* B8 ^9 X  @" B7 Y$ c
        enoughDataFlag = 100;3 N9 G% g% F* [8 [4 x6 W1 U
        enoughDataFlag = 1000;
+ \: b! f0 e* j% ~) u- I        enoughDataFlag = 0x02;( V/ E! r  Y% V5 {) c
        enoughDataFlag = 200;
9 r4 h4 s' b, u( {
4 I& [  q8 a' \) p        int myfuvk1;" H2 z) P* [2 E2 _! b0 c' A- N5 I; I
        myfuvk1 =11;( e% k0 N8 {! [1 a( p2 l
' k; R& Q  m8 b3 T
$ U+ t9 N" Y) e, c4 _9 z( N( C
        enough_data = 0;" B3 y& m  T- `) o0 `0 j

% S$ H/ E# j8 y- ~5 ]//        if(enough_data>50){! o+ F# I- s( z0 f% e: Q7 g$ |2 b
//                enoughDataFlag=0x01;" |6 b' g$ Z! V* a) i. v; I5 A
//        }else if(enough_data<50){* W$ I" O6 O; y( r2 `; t5 I8 f
//                enoughDataFlag=0x00;//0x00还是不行
0 D# \) M7 x# d! D2 E8 d  N0 T//        }
: k9 ]8 \/ W7 y9 X+ \3 t+ T5 V8 h+ \, ~$ X9 x. V
& h! N3 E7 N  U( N9 S& n: w- v
        oo=10;
) ]7 D* g- V( }* n9 D- Z" F5 H        oo = oo  <  5;$ w: W$ i, o! ~
        if(oo){2 |( S$ S+ d- _' n! V9 E, |# _
                ii=0;
; Z; f3 b  l  a3 [" `% p$ G        }
" h, N2 ~8 |# n        if(oo  <  5){
( W; ?4 j4 `% K, |& L& U7 g0 f                ii=0;) E4 e) {- ^( A5 }8 J/ M( {
        }% L: p) l! _* e0 T+ T
        if(oo  >  5){
- q; q' h, v% J1 r( G                ii=0;
) |! p7 G+ A, i        }
) [# I$ u; c- j! x4 d# r. h7 D4 E4 ]" h
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
3 c% B: m( z$ u        /*  如果数据足够才执行主程序 */
- o$ Q% c2 W5 ~, u( \1 |  n        oo = oo  <  5;. u, s2 S$ k9 F. Z% S8 S2 s) c* f: g
        enoughDataFlag = enoughDataFlag  <  5;# x3 }. E* l: M7 K) b! Q
        if (enoughDataFlag  <  5) {- T! S/ r/ l' }
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
" W  l2 F) w( `" q. G                AGC_AGC(&pAGC);
6 ^9 Q+ m$ D- L5 \
% y) L& N! m& d- G; w& T                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
9 m$ H6 d* e; v) T5 N6 R) A                FIRDecimator_FIRDecimator(&pRxFilter);
- v2 l0 D" a5 N+ c) p
6 D' S: J/ ]8 @# b+ c                /* Downsampling *// x4 _6 L5 Z) S% y" I3 \
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);7 M1 I; I3 m" M  Q0 {
! J$ s/ K3 s2 T* l3 W
                c_PreambleDetector_PreambleDete(&pPrbDet);) a, Z. X- l9 k4 c& S& P
8 V0 S0 w' M) R( p3 P- {) j
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
1 S4 S7 ~) q; ~                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */( h+ C+ i) c0 R' a
                /*     %帧数量=100 */) M- [0 \$ p  M+ J& x  s/ f( z9 l2 p
                pFrameSync.isInitialized = 0;7 b1 D" J: _( p5 G0 f

9 D' u& c* e5 {$ n' }4 z  V, B                /*  [EOF] */5 q: Q' k) |6 ?
                /* 前导码长度是13 */0 O4 M) Q+ ?- c# n0 p# M
                /*    %qpsk */
. U# e* _8 F7 _) c                pDataDecod.isInitialized = 0;
9 ]( N6 N+ }( [& |0 U
; J; ?4 Z6 W& x. @$ o6 Z& o                /*  end */
. i9 ~( r1 Q" |3 D& X+ Z                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */0 q( X7 Y6 d' s; O3 @- P6 ]" B
                /* Convert 3-dB frequency */: L- D/ g6 ]* x8 I5 w
                /* Convert 3-dB frequency */0 f! A, `- x( R0 [% }( p
                filtfilt(save_buffer, usable_left_filtfilt);
% L  t+ l5 I, y* u                for (ixstart = 0; ixstart < 81000; ixstart++) {
( ~1 m  O0 m/ M/ S- J                        usable_left_filtfilt[ixstart] *= 2.0;( ]8 Y6 `9 `, C$ ^2 u2 ^
                }; }+ }% F/ C' Q( ~/ v2 n" I
3 u; P0 U, B- c. p: G3 c' D% |: ^
                /* 注意乘2,处理幅度 */
* v% f5 S9 e3 x! @% M8 z                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */3 W4 |/ v) T: f3 F4 G: Z$ S
                /*     %% 行列转换 */1 P/ Z4 m, A  k8 e& q8 E
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);2 M6 K2 ^* _# |; d! G  N- F
                for (ixstart = 0; ixstart < 81000; ixstart++) {2 j. y# w. \4 v. F1 h% C+ m- U! I
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]/ N1 A' I( ~" C7 @+ y
                                        - yiDuanShuJu_mean;
) F+ k7 T. u2 e" u% Z0 Y4 p                }
9 S3 m- n, q7 [+ [7 y1 |
. q) r3 d6 W2 Q                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
- e1 x' q, F8 [, e                ixstart = 1;# d5 Q+ [: g  k8 R7 N
                mtmp = youXiaoShuJu_QuZhiLiu[0];7 w) C' _1 D0 W( {. x4 P0 R) E' A
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( [. |7 i( T- u7 L                        ix = 2;; n1 L( T8 E) Y5 g; h7 N/ x- }
                        exitg2 = false;
; T- l/ ]) H6 X7 d4 G$ a                        while ((!exitg2) && (ix < 81001)) {6 ]& c; T( y' Y% p0 w9 L# |+ U3 g
                                ixstart = ix;5 p, D0 p# C# o  G3 T  o1 p
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
& W( b. v- d8 \% y* ]# s) N                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];' }1 }. [9 G" L  r# g! }  z7 f
                                        exitg2 = true;
' @/ s1 s' u2 d# B% p# E( j                                } else {
$ N8 k3 y3 e9 {. h6 w                                        ix++;
" u5 ~, d$ R& H) q# t                                }
( |+ }' P* k% C0 z& ?9 j5 l                        }3 W0 D3 i/ x, i. ?3 f
                }" c7 x$ R. X+ U3 x8 a  E, k
4 @, ~( k! t7 E! w9 ], L" y2 c" G! x
                if (ixstart < 81000) {
+ Y4 s. B! x' i5 f                        while (ixstart + 1 < 81001) {. g7 v! P9 m5 O% y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
. |4 c2 O. s  l% g  L7 J( j) W                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
2 U7 P0 z/ {5 c+ F8 p2 Q0 i/ \- X                                }
& m0 }2 Q# p% P, l8 [  D! ]) w. U
0 q  ?9 s( ?% N$ n) M2 w                                ixstart++;
, V0 {5 l$ a! n% }# a                        }
% P  d2 i5 n4 J                }
9 `3 S  E; C4 O0 ?& B2 B( j
6 o/ Y' v: c" W                ixstart = 1;" r5 i: o/ q% p  C$ x
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];6 `1 m/ R0 N& n3 E) O" k* D' ?
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {( n  T" I- n9 I, R$ y/ W
                        ix = 2;3 ^  ~# z6 [6 ^" Y3 l& r% M
                        exitg1 = false;
! X: {# M' w  c  m1 V                        while ((!exitg1) && (ix < 81001)) {/ U# S( y! e0 p5 e* B
                                ixstart = ix;
7 Z" P% S. D% b0 h% U                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {+ r4 P. Q# o( D5 B0 a' l4 L, F
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
5 K0 S; Z- V6 J; N0 h" H9 L' E                                        exitg1 = true;
' T( i0 H2 E7 v$ r& d                                } else {8 k# [& \, @2 v$ r) F" M
                                        ix++;
4 D# ?# \  g3 ^5 W0 p0 J' W4 o                                }+ C" z, U6 e! s
                        }! E& b) Q3 o" c1 O; q/ H
                }0 L4 _8 C1 X& d. h+ n; K
6 P5 ]: t& V8 {! q, G3 R2 v' R: A
                if (ixstart < 81000) {
# D2 Q# F4 ?: h! s6 i, M! t; ~                        while (ixstart + 1 < 81001) {
' n# H- _& H' A3 u0 c                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {7 _7 Q& L& W/ l- e: B
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
# |' d. s( I# q: X5 Q! j                                }. Q. _$ ]' _/ w2 _
( H9 z$ g' T  }9 Q2 M3 e) f# B
                                ixstart++;
7 l( p0 m- M) T# i                        }
* H" F: b, }$ ]/ ^' `$ A                }
# G& B) L( P- {) c5 R. ]  j& d! A7 e4 D; u
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);" y3 i+ _! R: o8 i
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {  J  C; g0 H" g2 G( x
                        yiDuanShuJu_mean = mtmp;/ X  E' Z" W8 x* M% P
                }
- p5 J( x+ P, y4 N$ V& N4 M! J: u/ r& T' G* p6 G) ]
                /*  找出极值 */
, _% R, [1 Q8 l: w                for (ixstart = 0; ixstart < 81000; ixstart++) {
. g8 \6 ^2 `* n0 ]/ K  Y                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;5 |+ R, ?! ^  f# I; J
                }
& m3 t& L4 c9 M- p  z9 b1 e" p2 O' a, O- h$ n
        --------------帖子字数限制------------------
# G1 x9 z8 }7 t: p) w! e}8 N. D6 ]% y9 w! v* i
# k1 D3 ^! e7 T% N  u" f

. U8 H: a0 L- Q& ?

本帖子中包含更多资源

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

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-5 08:21 , Processed in 0.044514 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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