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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
& N4 q* ^5 m( Z7 s0 v! r5 I
2 ^) J' e( K- w, b9 ?! a各位大神:
0 M! W6 Y& s* n( O     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
$ g2 K. m! K' r/ a) ?- t+ V* T9 e      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:3 o: G" H3 Q1 R9 ]
+ K6 U3 `$ E2 T  g3 j
     0 |2 ]; K/ S3 l- D
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。* k2 e. }2 @2 T) T1 f5 m5 [
6 z8 y+ S& k" h; |
并没有其他线程
7 f+ w, @/ M; l+ \9 [% B. p# d0 ?反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。- J" h" Z  x) I+ g! B* k
也说不定是和堆栈有关系。。。。。。
+ _( H. e3 L% ~, w7 x4 m请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ p" L( u# D+ e# O

5 V5 b8 c% O- _  A' p1 x, X# k
, d* m" C( G) Q9 i9 Q1 S3 _3 R* y; E6 a' f. W4 p4 d
我也很绝望啊,希望大神能帮帮忙,感激不尽,!8 B5 Y9 p3 @  \
& |( C1 B: D6 ~7 Y% u3 K

2 b2 D9 Z! U7 A* x+ I/ s7 H附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
1 y( k. q: H! }: Y) r        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。# e7 `, U1 w: f9 i) \" t8 q

/ {9 h$ P" ^: y8 ~. ?6 Qboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(1 a/ ]0 n: e; v  ]+ @8 B" K7 v
                const double data1000[1000]) {3 Z6 N+ M/ U: c. d: @

2 {, c, h8 o& ^8 U6 s* v* U        int myfuck;; t8 r( c2 c# F% a- X0 R, m
        double yiDuanShuJu_mean;
+ Y1 O: P& O3 \4 y& I        double yiDuanShuJu_LowMean[1000];5 w3 ^2 a4 f5 s
        int ixstart;
9 [7 I  X! [& ~$ [9 A4 s        double dv0[1000];8 x4 d, L% T% Y1 h0 K7 z3 b3 g
        comm_AGC pAGC;
# A4 v$ M& `8 n# a7 V4 J8 ~4 M  \        comm_CarrierSynchronizer pFineFreqCompensator;
0 ^& q. W) R2 m! `/ g        dspcodegen_FIRDecimator pRxFilter;
9 U1 w$ w+ K  M3 W1 g        comm_SymbolSynchronizer pTimingRec;, T3 V0 q: d# D, Z
        comm_PreambleDetector pPrbDet;
: I8 |$ u% @; e- I5 g; @/ |7 `        FrameSynchronizer pFrameSync;
5 `8 f, g; K4 m, o        QPSKDataDecoder pDataDecod;) v- Y/ a! n4 n1 d+ h
        static double usable_left_filtfilt[81000];
% m! w1 i9 U$ f        static double youXiaoShuJu_QuZhiLiu[81000];# t- B, R- L) R5 K' U
        double mtmp;
8 z' h( n' L9 `% ~. I2 K7 [        int ix;1 c+ m+ T2 n) i7 F0 [- J2 ?; |) r5 r, g
        boolean_T exitg2;
% i8 q9 h' @% {$ c, ]        boolean_T exitg1;4 }( y5 f# G9 _
        double YiZhenShuJu[800];
& H" k) J( J% c" s/ O: x3 q+ r/ V- ^        double dv1[800];
  p) n! m, k% s; H0 [/ Q7 m" F  W" K, F; D, q: v/ G' L

5 B5 _8 |- l6 e- Y: u        double b_YiZhenShuJu[800];
/ Z2 w2 G6 S6 P( y        double I_filtfilt[800];
5 U$ @0 w# d& B- `        double Q_filtfilt[800];. `' i) m: U* t2 Y. H' [- f
        creal_T b_I_filtfilt[800];
2 a& t/ j& Q) k6 t7 c: ^+ x' X+ [& [        creal_T b[800];
" q/ p3 `4 U& U* T        creal_T RCRxSignal[50];& _5 U! M4 M2 h. n* [; [: f8 i
        creal_T fineCompSignal[50];' W* l7 q. u( n' `$ V, j
        double phError[50];
  V) `2 Y" |! k  ^' N+ g$ p6 f) i        creal_T timingRecSignal_data[28];4 ?# z+ D) U4 Z; [' G
        int timingRecSignal_size[1];; n) R2 V# Y. H5 \/ r
        double prbIdx_data[28];2 F. p& h: y# R; W( r: s
        int prbIdx_size[1];' U. C9 x( {1 V+ L4 ]  `# L' A
        double dtMt_data[28];8 N0 ^2 G+ \9 ~% p5 B/ B
        int dtMt_size[1];
$ R+ {. o/ i4 ^: R) W+ r) V) ?7 d        creal_T symFrame[25];$ R$ w4 U" x' Q5 _$ }6 P
        boolean_T isFrameValid;8 E) r6 g0 ]- h% c! p- E; G
        double unusedU0[3];" g8 E" p3 J: f  C

" n8 [' F5 F* s6 }- R        //调试过程中的变量
7 k7 i' r5 c# X, X        int  enough_data;' `  W3 J5 [# M
! ]4 U( K2 S4 X& ?
        int enoughDataFlag;3 `2 T, n9 x1 D% f7 V' A4 x2 G
        int yiDuanShuJu_mean_int;# _% b# c9 a  b- e8 h1 H2 }" `
        int int_sum_dv0;, t. t% e6 w% |+ Z0 g8 s
        int oo;
. q) E6 W& x2 |) ?; x' F# l        int ii;
( h5 N8 h1 R( ?+ l4 q( @        myfuck=10;
* z  w5 A( {$ M& z+ V, p        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */& b& ^# j- N" _+ @+ d  o- i% q* ~* G
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */1 c: f: v) [; C' ?8 n
( C- U5 @/ h1 n6 d. r! s
        yiDuanShuJu_mean = mean(data1000);7 l3 a$ P1 `& u) Y3 X& ^4 \# v

( h$ b* k9 |, ]( H. g        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;3 Y5 m. e+ w! M; v$ z7 n0 ?4 V
        UARTPutc('A');
, \+ N( t( T# `+ j        UARTPutNum(yiDuanShuJu_mean_int);
0 l" t7 c6 w* G$ F$ w8 C3 ~/ c        UARTPutc('\r');
4 @% Q" g3 a1 ^  L& Z& I2 \        UARTPutc('\n');
& w1 {# _4 _1 u# b8 D
6 y1 Q. S8 U4 a1 e( c8 ]/ t        for (ixstart = 0; ixstart < 1000; ixstart++) {1 L- A2 A* l$ v) W6 D9 w
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
" _( p6 h# x$ p/ P        }, O9 t( a1 k9 |) c/ ?. u& u
9 R4 Z, x% {9 M5 w8 f
        power(yiDuanShuJu_LowMean, dv0);
# v0 Y* v0 O/ _3 r# i. p: l) `8 m; j' c  S. V) b; T
        int_sum_dv0 = (int) sum(dv0);) r( }6 P1 v: n5 Y# {* L# k1 x
2 m$ y: E* B: }* A" m6 ^& g& C
        UARTPutc('B');1 V3 h/ T5 S1 _" ?1 K+ A' Y
        UARTPutNum(int_sum_dv0);- {$ J4 R; i3 f* z8 {, J* {
        UARTPutc('\r');0 y% `: A2 U" D' l8 A- }$ B
        UARTPutc('\n');
9 |4 [1 C/ M6 T  y
+ K+ ~' D4 Y: N; q//        int compareFlag = int_sum_dv0 > 1.0E+8;
( d& b% Y0 F3 t! T
+ e& Y9 J+ R0 o        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
6 [6 E* F5 P; F$ t7 e. D9 u                UARTPutc('C');) F( C9 L9 g3 f! Z% w& {" b
                /*  比较信号能量 */1 X8 c0 C# [) Z( J2 j2 f, z( f
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
+ E. T( D% l$ k' L# B6 \1 E4 D//                yiDuanShuJu_mean = 1000.0 * youxiao_k;/ e) x# @; w) |+ K% {1 x. k) |% u
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
+ T3 p# U+ e7 t& h. `* Q9 W//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =0 a% W6 B+ j+ h
//                                        yiDuanShuJu_LowMean[ixstart];
+ S' u9 q6 q8 s6 t5 d6 d) Z//                }
7 _& v; J9 f4 [9 H//
3 y" H2 A+ ~5 H3 z+ H//                youxiao_k++;
& m3 S1 `& M  v5 [, o//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==! E4 o: c7 a* z1 \* n
//                        /* 感觉要取21个数,即0-20, */
+ ^$ Y2 H4 `2 e+ l//                        enough_data = 10;//有效是10,无效是0
4 N; A" y% M8 r/ |- s//                }
$ e8 \2 B) i0 x7 N* \: o" T        }: w! G/ k& C( F7 ?$ ?, g

' ~' g& J/ U" F  O, l3 B+ W' m( y7 r4 `, i# _
        enoughDataFlag = 100;
1 n( O" X- h5 t. B+ S: G2 B        enoughDataFlag = 1000;
3 e, T7 g8 ?9 `        enoughDataFlag = 0x02;
' k' S' c" A* C7 Z        enoughDataFlag = 200;- w* O( j+ ]. b
- z0 N0 E1 W- |2 p! h
        int myfuvk1;
$ i8 K( t; C* z        myfuvk1 =11;
* B6 D' q& {) W, W1 U, V
( m: A0 X9 V0 X; U. U; F7 F# l! [. y5 O8 Y
        enough_data = 0;
! i9 a6 m: N5 w; O% l/ {$ F3 q5 Q3 R! p- H2 x. j
//        if(enough_data>50){
+ f& Z8 L( O& n! a9 }" t//                enoughDataFlag=0x01;6 `3 D- ?: K9 i$ M- h
//        }else if(enough_data<50){  G. P3 R( {9 ^( `
//                enoughDataFlag=0x00;//0x00还是不行" d) l4 n1 ?' p& I
//        }
* a& \( X7 g. i3 ]$ C% M% _4 q# m1 `3 V+ P( E, z3 x

8 a5 S& n: M1 X8 N9 e        oo=10;
  P5 a0 T1 C. H/ @        oo = oo  <  5;/ X/ A- A/ k* b& p; j
        if(oo){3 {1 y( C! F/ P1 O
                ii=0;# `) z! r$ N2 ~" R: U- R8 a0 M" z
        }
% n/ @: X1 N, b: s        if(oo  <  5){
9 m$ g- t; r+ }5 }, B! K                ii=0;! _9 [+ N6 l0 v. E2 R! t4 }
        }+ b: N5 o- S/ c* P9 P0 G
        if(oo  >  5){5 f" E+ Y4 T9 |5 }7 r3 }6 X- ?( ?6 P
                ii=0;
) ~  i6 V8 J0 b; n' C* B1 d: X        }
0 ^' K: {6 n5 `
' v8 M+ D) O4 Z; B6 H3 }. n        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
; r$ P* Y6 v& E& x6 k4 N# X5 Z        /*  如果数据足够才执行主程序 */
  c) T( G6 z( h7 f        oo = oo  <  5;
, e0 R: J6 A( d4 U# H4 F        enoughDataFlag = enoughDataFlag  <  5;
2 b8 w" P" ^2 }: @. c        if (enoughDataFlag  <  5) {
# c& o( l' V6 _//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
" X( N2 R: l5 u2 q                AGC_AGC(&pAGC);
( k) `& l9 F( Y" e( G  ]" u' G  f" h" _6 n& F# J
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
; X6 E- M- T5 }' L" C* k                FIRDecimator_FIRDecimator(&pRxFilter);
- @1 O/ L/ g( i
+ s. T8 J9 q* z* R& Q                /* Downsampling */
+ }7 `- U: g) D' l/ a) K/ F# a" u                c_SymbolSynchronizer_SymbolSync(&pTimingRec);: M$ C1 X: \( M
1 o2 Y0 L; w. P! G% X2 A0 F3 G
                c_PreambleDetector_PreambleDete(&pPrbDet);
; b/ s, a% h) y: B: \. b0 ?% Y8 A; [9 b( ?
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
, ^( z! r7 T3 {2 E7 Q                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */& X2 O/ a' _6 R% d( I
                /*     %帧数量=100 */& l/ f2 h0 I' |7 e2 v
                pFrameSync.isInitialized = 0;
* F2 Y5 `; p& j7 J% n' ?2 l2 ]( Y" v4 E/ B
                /*  [EOF] */1 L' _8 K$ s& E8 ]# Q
                /* 前导码长度是13 */; C8 F, }/ s( ]* b: G. k
                /*    %qpsk */% Q! I0 P4 e% ^( r
                pDataDecod.isInitialized = 0;- a/ Z7 {$ Z/ y3 Z, ?

3 R$ O7 }/ I- v( ?                /*  end *// }' `+ Q3 r7 H5 V8 S
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */3 U6 K+ r% B7 @+ \% x3 ~( g: u
                /* Convert 3-dB frequency */4 w  B4 a& G+ I
                /* Convert 3-dB frequency */
$ [: I0 |& o) |, B1 d                filtfilt(save_buffer, usable_left_filtfilt);
  Y: ~" A. E1 u                for (ixstart = 0; ixstart < 81000; ixstart++) {* z, z$ l" C2 c0 ]: q9 u9 K0 M
                        usable_left_filtfilt[ixstart] *= 2.0;- A  o$ W1 A0 k- {  p) o
                }7 m3 o1 g8 N( e( Q+ b
  v6 I+ _1 a4 f+ A( z/ d$ @
                /* 注意乘2,处理幅度 */; f6 V- A) o, L  K3 F: x
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */1 m* O) j$ w4 Q- Z1 N4 s) f
                /*     %% 行列转换 */
0 d& x2 O0 a4 }7 c( |  S                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
3 L+ I/ w2 h# L  S6 J0 f                for (ixstart = 0; ixstart < 81000; ixstart++) {. `. k: y5 ?: Q& R2 v
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]* H& j/ l* }- j; W& b: V
                                        - yiDuanShuJu_mean;5 N6 O6 V" O  b6 q. W! b, p4 p- h
                }
# Z- e/ z, h$ t8 E3 j1 H5 E! y7 v: l' s/ U
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */3 h% U+ r' l8 X" Z- }; c9 ^
                ixstart = 1;/ t# u- ^3 v# c$ X  U  {4 o/ {, _
                mtmp = youXiaoShuJu_QuZhiLiu[0];
, _: k5 u5 l( U+ I                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
$ e" E( H; F6 r+ G0 v  {                        ix = 2;
6 z8 a( g/ r" ^" y2 a9 X) _                        exitg2 = false;* L. q3 m" L5 |' e" u
                        while ((!exitg2) && (ix < 81001)) {! \7 p, y5 Z$ y' d* _) F
                                ixstart = ix;# s$ G4 X* L  W& [% \4 }
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {0 _1 P0 i2 Z$ p* V7 s. C  p
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
- _4 r7 V! O! m6 H: P/ D                                        exitg2 = true;
6 X* t, [' t( l1 n( E; Q                                } else {
: L3 c8 T9 y2 j0 i                                        ix++;$ I) i! ?( @% k! X& q. T9 x% |
                                }% Z7 N0 M$ Q5 g1 M
                        }$ m9 e# d# s! }6 y8 W0 G9 v
                }6 \5 T: `6 v7 t8 P* ~
. j: N$ Y+ Q: U! C0 v8 z; F2 ?! S- a3 B
                if (ixstart < 81000) {$ I  z" `; l9 R! l4 h- @, b. V
                        while (ixstart + 1 < 81001) {/ d6 [# q" X  o( D9 R6 I
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {& V( p4 _' S. C. w: e
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
; D4 R/ Y. M  a5 r$ P. W                                }* M) _5 q0 f$ H4 y& w9 B; l+ [

1 M# l* Q" j4 ~) P/ \5 X                                ixstart++;
+ O# ?" s4 e9 h+ O- |                        }
2 R& x, _1 f* y  s, Z7 D0 I7 E                }% r: ~7 P* k9 q% e; C
$ l$ t" g2 L* A) _! d, I
                ixstart = 1;
. x( n( ?2 f9 x" G, L% D                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];3 G- f0 O- ^7 i7 V( \6 q. L
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 Z$ H. L3 }# g
                        ix = 2;
, F3 [7 ^2 {4 e) P                        exitg1 = false;
3 v8 r0 K  V! P  r+ u                        while ((!exitg1) && (ix < 81001)) {
$ p1 Q" _1 H( `; \                                ixstart = ix;
% A, @. F; m$ T% e                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 D, n5 H( Q: `4 d                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
5 r9 f2 E# v; ~1 F                                        exitg1 = true;
% z1 k7 V* P0 G9 `3 P                                } else {
  [; r, r2 M/ Q& V$ c1 S3 T                                        ix++;0 A! t+ K. `4 n- ]8 S; g$ O
                                }0 }$ H) U- |( f- q1 J8 x0 t/ |
                        }
% p6 S) y* K9 w2 A                }' l' j* a. w7 f2 E6 C

% q7 z( r1 ?* H                if (ixstart < 81000) {
; S3 w. a% I1 |( A- i  o; }                        while (ixstart + 1 < 81001) {
4 t* A* C7 g3 ~* i( G$ J; H7 W1 t                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {0 k$ k$ U1 ^8 U6 n
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];* H; m$ |0 K7 N+ U8 d6 j2 C
                                }8 K2 a& q' d2 s6 j9 A2 L) ?
! r1 u3 }! n: \0 N
                                ixstart++;
3 J% o2 L: n2 O                        }
$ |( s! m# j1 s( f* P                }
* S  K5 ~7 @# f! g. E; i+ e2 @: s- N1 k+ l1 e2 c8 W' f
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);+ K1 |; w. j4 J5 t
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
" b, `7 U6 B5 l8 h& t                        yiDuanShuJu_mean = mtmp;
3 _) _& I" ~# w! f1 o3 [                }) t- U7 A3 q$ w* k. b% R# }
. x6 D6 q9 T1 G7 v8 w: \( i3 B
                /*  找出极值 */
5 Z7 q* q% c$ Y0 [) i9 h4 u- T  b                for (ixstart = 0; ixstart < 81000; ixstart++) {
, ~/ `! f7 |" N, M$ y& q# p                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
" v7 n4 X5 I& d( F5 u9 A, ~' s, \! ~4 x                }
9 \; b1 b& Y. ]+ ~/ z2 c# r  _& U$ x- N4 H5 i, f0 n/ r/ O9 |
        --------------帖子字数限制------------------
. W3 J% }5 A' U/ [: W2 y# F/ x}( C$ Y& a5 ^, R# s7 g1 t. u4 F0 m
7 R* w. T& J& e

0 R" I, x: E6 ^/ k9 G$ 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-19 12:38 , Processed in 0.041633 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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