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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 # L8 c$ x) T" w+ Z7 ~5 o! ]+ m& I

- K  W2 B# R* `* w% ?各位大神:
8 `; I0 a; O9 S+ l5 W     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)7 B) P: {& \/ S# }. u
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
5 v9 b& s& K% y" B+ F# z* O' F& A. e( W$ W
     2 I$ J+ b8 \. k0 z' ^) }" p
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。9 O+ E/ q7 h& [6 N% J

7 Y" F" ~8 B  N# g3 p8 @并没有其他线程
7 M9 V) F8 D! U5 o. V( {5 c, ?" E反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
4 f' Q5 y" S  c4 |* a6 i/ p8 X也说不定是和堆栈有关系。。。。。。
. }  e5 B! ^# P' k1 y4 [% w' W请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
4 j0 A3 ?, [. r1 A8 j% u
2 H$ I1 Y5 {8 {/ @: r8 ?6 P9 a6 U- g* X7 A8 ~- t1 L7 R
% D: i8 M# G3 E5 v
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
' Z3 _1 k4 [: D1 j$ n; g! s4 t% K
& N+ e7 U! i" F- a! e  k- P6 E3 `0 [( f  L# q
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
# y7 p2 v, b, M        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) m* O& E1 I& j; z$ C
; _  t* ~* m8 p: B* E. L% L
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(2 @; p. J5 ^2 \* [' x% j0 t6 W& V
                const double data1000[1000]) {5 H2 j. f3 a7 B- i7 U

: ~" {9 L3 ~9 N3 _        int myfuck;
1 A1 }5 ~$ n2 }7 n9 s: D: E' U        double yiDuanShuJu_mean;
" K- }* M0 O( n& E. t0 t2 C( g        double yiDuanShuJu_LowMean[1000];
- j( a. {' R: }5 {/ \8 n) p5 F        int ixstart;+ Y- \2 n: H/ `
        double dv0[1000];
# h# W; J$ c+ S2 l; A9 ]! v2 d: |# `        comm_AGC pAGC;
; `) B. ]4 Z" O  i. g" u        comm_CarrierSynchronizer pFineFreqCompensator;
2 v% h0 u. n9 Q. y, ^  {4 ^6 w        dspcodegen_FIRDecimator pRxFilter;0 D; g! ^* M" X% W8 I. W4 f, Y1 N
        comm_SymbolSynchronizer pTimingRec;) U( c4 Q. G4 m: y3 s
        comm_PreambleDetector pPrbDet;" J2 Z5 }6 B, \7 G( `' a% d
        FrameSynchronizer pFrameSync;, a" g, |" e0 G* a, H! d
        QPSKDataDecoder pDataDecod;
, f/ n/ y9 E1 Z* d/ ?( D7 x/ h        static double usable_left_filtfilt[81000];6 x5 |' |! w" ]% u
        static double youXiaoShuJu_QuZhiLiu[81000];
! ^  ~5 i8 U" e3 u0 Z# n+ x        double mtmp;
; {# K1 F: L/ }* W        int ix;
, \* z8 T2 A4 Y2 T) B7 F        boolean_T exitg2;- x/ |5 m" Z; s
        boolean_T exitg1;  G0 j* r/ p8 K! Q2 v. U
        double YiZhenShuJu[800];. s% U7 A! |& R' o+ D) a; a
        double dv1[800];
% [5 T  n7 u7 t& m: q: R; M4 Z- \* J( p" H& n0 Y
( n  Q* W  u9 p* B
        double b_YiZhenShuJu[800];' d" O& _: O4 w6 T) Q( d2 U- O- _
        double I_filtfilt[800];* @& \$ u3 |, s4 d9 b: h
        double Q_filtfilt[800];
7 e' ~$ j& g6 \$ t, q5 o  f        creal_T b_I_filtfilt[800];
3 `- @* I( u1 j' m5 ?* `. k        creal_T b[800];' k1 d% T" ]" I3 V; i+ D
        creal_T RCRxSignal[50];& K: L, K: j% n
        creal_T fineCompSignal[50];
! V  Z' e7 n. Y( Q3 t) y9 g! a/ n" m5 |        double phError[50];
7 O0 @5 e% H6 U        creal_T timingRecSignal_data[28];
0 `) b1 w  K  U5 f        int timingRecSignal_size[1];
9 D" w: i. w" I& i/ D; t        double prbIdx_data[28];
: z: H- \: A- B        int prbIdx_size[1];
8 |3 X+ ~* k2 ^; N# @6 T0 ~        double dtMt_data[28];" t& u) O& l" t! n; W
        int dtMt_size[1];* n0 g+ _3 B# j+ O
        creal_T symFrame[25];# {- c% O: a% u" N/ f
        boolean_T isFrameValid;
, g% |6 l5 M7 R/ u, J2 \        double unusedU0[3];
" U" F2 Z. m- @' W# U. }& ^( B; ^. ~& U
6 C+ Q# g6 N( [5 {8 @* S/ i        //调试过程中的变量8 N! `7 ^7 f7 r$ ]$ _2 N
        int  enough_data;9 K; [: M# e# X- v3 c/ h  @& k+ m

! @" {4 h, l. z  q        int enoughDataFlag;
& r4 T: l" g0 }/ Q1 u* Y0 G# R        int yiDuanShuJu_mean_int;
1 Z# B! E4 j! g, B  B        int int_sum_dv0;% E3 ~+ X4 h; @. V  A. d; K5 i
        int oo;% `, ?+ k6 c5 {1 @2 T/ x
        int ii;
1 Z  \" ~+ E' @7 U        myfuck=10;( y% V0 b1 d/ ]# M
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
. o8 [0 b5 b, t# A        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */) U/ F4 I5 P- ~6 ?

) p6 s# c. h4 g( O        yiDuanShuJu_mean = mean(data1000);
. Q- G0 v$ C8 y, L
8 U  ]6 C6 Z0 k! x6 t$ d8 g5 ^        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
7 j, u. t" W+ Z  N2 Y        UARTPutc('A');7 A9 k- E8 m( j3 c9 Q8 U$ p* q
        UARTPutNum(yiDuanShuJu_mean_int);
; L; F: p" C) Z2 a$ j, N* _, P        UARTPutc('\r');1 {6 R0 G: W. G' W! R9 `& g$ k' j
        UARTPutc('\n');' b: e! {4 M& `. W- \& y
( M3 t: z, }0 X" p! `
        for (ixstart = 0; ixstart < 1000; ixstart++) {
3 a2 H# d5 r0 `                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;/ n, H8 S0 l3 J" e- I
        }
: \) M- s. \' L3 M* A
/ f: U  X# G' o4 Y+ I        power(yiDuanShuJu_LowMean, dv0);
, J8 ^# H7 D: e  W6 g- D! a/ p' q. B- a( k3 ~6 D) }3 S6 f* }
        int_sum_dv0 = (int) sum(dv0);
/ z# R! Y: m9 X0 x- h
  |( ^' @# [3 g! V$ B& J        UARTPutc('B');* @) k; y7 g6 @' x. |7 E
        UARTPutNum(int_sum_dv0);
5 N2 y+ d5 ?1 }3 ]' f% `, L0 {) z        UARTPutc('\r');
! S! ^4 |- j( K" Y) _        UARTPutc('\n');
4 f5 \. }/ i* ]( n. G$ Y0 ^+ t* F! j1 X( F7 t4 G
//        int compareFlag = int_sum_dv0 > 1.0E+8;
( X+ l" P8 R- P5 u4 J5 d3 p  b9 ^4 a, W+ J5 m" C/ G
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
: x2 _3 P  a1 J- T7 u                UARTPutc('C');
% @- F8 `7 L  n                /*  比较信号能量 */2 B6 G! J5 C" C# N% w' ^; |7 Q
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
- ?, i3 y1 m3 I3 H6 `  }* Z//                yiDuanShuJu_mean = 1000.0 * youxiao_k;& G7 e+ v/ ~' C9 }
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
1 v/ o3 J& Z  i; u+ U4 x8 Y  l//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =2 W/ u9 k9 E4 ^6 ~5 C
//                                        yiDuanShuJu_LowMean[ixstart];4 Y- c# l# _" D/ M5 [2 L  L1 N
//                }. [& l' {2 g9 V4 y/ N6 f$ [# {
//
1 k. e8 v- h/ c) w( F& R//                youxiao_k++;
  \& ?# p7 m! v6 ]2 M* ~  q//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
+ k- m' _" p7 S8 ~6 ]$ ^# @5 O//                        /* 感觉要取21个数,即0-20, */
1 I8 i6 M$ h$ }4 F1 d//                        enough_data = 10;//有效是10,无效是0, T! A, f. Q2 ^+ P( g/ h4 C
//                }8 I% d: d7 |% C% T
        }
; |0 ^% M) S2 Y( J
' h0 L+ @8 v' y- i0 j0 W
1 a4 _, M1 P$ Q. z        enoughDataFlag = 100;( d# L2 c0 j- D
        enoughDataFlag = 1000;
; g6 i' }$ }: i) U7 h* c# O$ q) Q  e        enoughDataFlag = 0x02;
# b, j6 {1 U/ @0 T, |        enoughDataFlag = 200;
) K$ N( \5 u6 D% K! c1 p, N) }0 O
        int myfuvk1;
! {/ d5 T" V9 s/ q' Q; H0 H% l        myfuvk1 =11;
& X% u5 c! I% h! P- e; d8 v
  x/ s: o( \9 L0 @3 W% N; A0 ?& l$ X# v  b- b! {' v5 e( F
        enough_data = 0;0 n- v( S$ y( c' d8 F# A

/ z8 N4 ^2 B& x7 [0 V//        if(enough_data>50){
- O1 m3 a7 J+ L/ `9 q; T! p//                enoughDataFlag=0x01;  a% R8 i$ N% A. z+ L- F( e2 H
//        }else if(enough_data<50){) q, {! K  m1 k! R/ T
//                enoughDataFlag=0x00;//0x00还是不行
" l1 z, E- \, @. s3 b//        }; B, ]2 T; p8 S. P

. Z+ v* p# K$ ]1 K& U$ K/ w; f2 {* U5 A2 M
        oo=10;
' S0 Y1 k. o: l, x( w3 ]# u        oo = oo  <  5;
, W& }7 j6 h/ Y% P# s" F        if(oo){
% d7 w6 K$ U$ y6 @5 _/ I0 q                ii=0;8 [; J6 c+ A# C- c2 t# a- Z- o
        }5 |; s+ U0 m" A! o: l8 F
        if(oo  <  5){
5 h- x1 g7 @5 M4 K" i6 o" U                ii=0;
3 w) ?) b8 u6 t4 U: J        }
: \+ H1 F6 X% M6 K( [  _        if(oo  >  5){8 G8 O  e; C3 R  D
                ii=0;
! j% c9 e1 x$ F8 g7 C) Z        }& e! h1 M: W3 X8 o; A. k, E
0 I& w3 h6 S) i4 D: h, [. C
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
# {% |5 \& b4 w) U# F        /*  如果数据足够才执行主程序 */
' W0 ~% k1 \9 \! ?9 ]( ?- G        oo = oo  <  5;
6 W3 G  h9 K. E% `# _) H! ]        enoughDataFlag = enoughDataFlag  <  5;
7 w  L: l7 ?" b7 A2 {* j        if (enoughDataFlag  <  5) {4 K, y: ]3 \0 P4 m: o
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0$ I4 z- Z& O+ `. h0 }" u
                AGC_AGC(&pAGC);
! k& ?* Z  G: T3 Z, @2 b( b) n) U+ l, `
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
" w* t0 C/ z/ ?5 f) M; L                FIRDecimator_FIRDecimator(&pRxFilter);: y: u" O  Z/ X2 Z3 Y
& ^, ]6 a  Y# A- Y) c
                /* Downsampling */: x# z. i+ u$ {: G( z5 o) z; \
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);2 H7 K9 m. {  p( v% t3 }! v
3 l2 g" r' p) i) d7 T3 C
                c_PreambleDetector_PreambleDete(&pPrbDet);: J1 H8 l  {5 _' Q
, t( t6 }$ e. m; J
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */6 s1 a1 f- l- z: h3 z# d
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
5 R* Z; y! k9 c                /*     %帧数量=100 */
5 U  ]3 ~' C- S, {                pFrameSync.isInitialized = 0;: \5 J4 a$ W# i* j9 ]% Y
/ X0 q6 E4 P$ s  ]
                /*  [EOF] */
: U& R$ x7 ?1 t# e& [                /* 前导码长度是13 */
7 y0 Q2 a) e% d3 a: R                /*    %qpsk */- ^7 P. Y, K0 n; u6 K1 P/ k
                pDataDecod.isInitialized = 0;3 Y9 s% [; A- a5 E
2 \. j3 K! A% {! w
                /*  end */
: U$ F6 w2 E' Z                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
* x+ K- @# E, s( ]4 d* C# A                /* Convert 3-dB frequency */
) t5 g0 Z' y+ x" O; q8 ~                /* Convert 3-dB frequency */
+ M# x- \: W$ i6 e                filtfilt(save_buffer, usable_left_filtfilt);  r8 {3 ]" K, K/ W4 a& i: c6 b
                for (ixstart = 0; ixstart < 81000; ixstart++) {6 R1 z% S, q; m" U8 R
                        usable_left_filtfilt[ixstart] *= 2.0;/ P( j) b" j" n# g
                }
" I' v: p) J9 @6 z
1 Q1 s. N+ H7 q. d2 v$ Z3 O                /* 注意乘2,处理幅度 */3 e8 Y" O# n5 k  L2 M
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
7 r& {+ T  F8 H) m' _5 u" l/ _# }                /*     %% 行列转换 */
8 {( @* V. {6 |6 }: U0 }3 D                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);$ I' V0 l; y% g
                for (ixstart = 0; ixstart < 81000; ixstart++) {: n: d$ ^+ ~7 e. P% q5 t8 Q# L
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
2 V" ?. Q$ X: l" n. G5 U5 C                                        - yiDuanShuJu_mean;
  z+ N; y5 S8 }7 S1 S: I1 {) U, M                }; {8 Y  n5 E6 e( d, h

7 M+ G5 t4 ?7 N5 s# [                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
# a% X5 T/ P5 v" `: F$ w3 y                ixstart = 1;+ `7 X2 H- ^+ ?( I: v: \
                mtmp = youXiaoShuJu_QuZhiLiu[0];
. W6 z) F0 d9 z3 `9 q7 O                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {: N; C7 b* y( f' X4 Q
                        ix = 2;
/ R& I. `4 y: J1 B/ o                        exitg2 = false;
; I% n; h4 d' b( l; B) p                        while ((!exitg2) && (ix < 81001)) {7 t& l7 ~. I9 ]. }+ P1 |
                                ixstart = ix;# a( M8 g0 ?! T$ E! e
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {. P: f9 e% b; l
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];6 P: X9 k7 h! W- j7 ]6 l# H
                                        exitg2 = true;
( M; G6 A6 Z1 v. \. a" V3 i% q                                } else {
0 A* F1 J7 b- u: W2 v( d% S. ^                                        ix++;, Y; k% `" B8 u% s6 f' d9 ^# M
                                }
) o& @; K% X) `5 i* o                        }
  [$ r* ?& X4 H' W9 ?  [5 q                }
' u7 |0 E' V  h. X( ]6 l) L; z3 Q" D2 J- U6 b8 U& ^! s( x: Y
                if (ixstart < 81000) {
8 q7 b  F, F9 i/ o* A% Z6 B) w                        while (ixstart + 1 < 81001) {! D$ t* c+ o* s+ Y& K/ U
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {! S- B! S0 k# g; T0 \: {
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
7 f8 ]) B" M4 p3 ~0 l' J" \; a                                }
+ n3 }8 m' s* F2 u  V) Z- r
7 A; j4 c. Q& n0 x7 `                                ixstart++;
6 X1 U9 g0 c- i& _                        }
, w/ \6 B/ D# q& \. [                }
* P; \' T- }+ d1 Y* O
# _" J' @& y  W7 o1 Z                ixstart = 1;; R: L. F3 E, w" \$ p
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
" g0 N4 K6 v2 O7 o7 I% C' h                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
" y$ X% }8 A( p& w1 v                        ix = 2;/ |' R4 ^1 `7 y, Y" r
                        exitg1 = false;
$ V' _& P! h4 B! R* u                        while ((!exitg1) && (ix < 81001)) {
% }. ~3 i1 f  M4 r  O. K# A$ W1 C                                ixstart = ix;/ E3 o( ~; _6 Q; w
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 T. V9 W3 S7 b) @
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];+ {7 [5 X5 j# j, a; y
                                        exitg1 = true;, d' u# @4 m/ [3 J) D1 g! g. n
                                } else {, x1 g( W' V! S& i
                                        ix++;& P7 z3 U9 \! W6 C1 e% l
                                }
- i. Q+ Z/ x( F/ c1 x, u                        }! B, B4 G  Q) p$ N- P: l( {
                }
+ ?: r- L7 z5 ~6 R: V! x! e# i( A9 v! Y+ ^
                if (ixstart < 81000) {/ ]( @( p$ n: y0 v1 W0 `
                        while (ixstart + 1 < 81001) {$ ~0 S8 p5 h: ]' Q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {$ T: i" |( t$ A; k8 ~4 |6 t" w+ q: v4 t& g
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
% Q# T& V7 T- M6 E4 v                                }
) k, p% c+ E7 ^6 }& O
. E9 N' j0 e0 s2 s, U, Y0 _                                ixstart++;: ^& H$ S$ \3 ^. }. R" z8 Q
                        }- N, m6 H0 X" {  x! H
                }
2 [8 i8 a2 M, x3 e$ o
) s6 F9 b+ U  w" Z                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
8 F* h+ n/ w2 c9 n: N                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
$ {4 [* B+ v9 F" T6 i0 i                        yiDuanShuJu_mean = mtmp;1 u) r, [9 t* p5 q; D' v" k
                }1 g* O% z& n% H% v. y( Z

+ E1 k6 H2 _% O$ N) U                /*  找出极值 */
" z( l2 o5 c! r' a6 m, ?6 @- x                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 m. }8 D: J, W+ _, F& h8 B1 T$ i' M                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
" Y8 ]5 L! x: X* g                }
* O  l# ]0 u7 R, F7 A9 o: I) _# t" c5 i7 A& d
        --------------帖子字数限制------------------5 K+ R/ }# I2 p; r
}1 `& s- M' ?7 F

0 `9 N4 t* P4 B% T( m% {/ k3 l- W$ F3 `. f( g

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 15:19 , Processed in 0.045879 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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