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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 9 u# k: f- V' @1 j5 @
' {+ |9 |4 f" e* A- ?
各位大神:
! a% S6 h. T7 D/ u1 P( W     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
2 C5 G2 a% M! L, c( ~% f4 b' e5 V8 l      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:) S7 M! V( A# o1 d5 N0 D
* a/ M3 \' |( L" A: v! H* ]
     / H) [1 }# R8 `5 o
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
: m, C  O! |+ s' d8 o0 `2 C( W% r( y$ e) k6 w
并没有其他线程. E7 F9 r9 _$ ]2 A. [+ B
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
  B  y: \! g) \! e6 m7 ^' u* j也说不定是和堆栈有关系。。。。。。
5 k, i" f4 h! P; O' e- o4 n& ^* a请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
( O5 U1 ]! z/ O( g5 p( q
1 c  Q8 I9 M  n8 \4 Z+ }: N- l6 l0 K  g' i# }8 N* `

( u4 P" R, A: H- Q. F6 D我也很绝望啊,希望大神能帮帮忙,感激不尽,!
" R* n  l. Q- V% V& i( }) G( Q' Z; `0 q: s( c. E4 D/ z. d
) v8 `9 E$ [& \: F5 I+ Z/ p
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];4 B4 ~' x- N5 T
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) X; e- w5 [% a9 A: o# i
( u/ G! {2 P! d3 g
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
7 r1 E. g  G; z' t. |# a                const double data1000[1000]) {. P" f; _' [: N! M
' k/ L5 L* @+ M8 H: }4 y4 ^
        int myfuck;* C+ `# i7 O" S; T( @& j# g
        double yiDuanShuJu_mean;5 f* y. g' K: |( `) A) k
        double yiDuanShuJu_LowMean[1000];, s' v0 E7 C; X) a' ?& @( s" F+ A
        int ixstart;
4 T- ]# B, N- g        double dv0[1000];6 g9 M0 p9 x3 ?* K. [3 l- Y
        comm_AGC pAGC;8 J# @6 A- V  ?
        comm_CarrierSynchronizer pFineFreqCompensator;
  f6 }9 E, W% S& z! E8 y        dspcodegen_FIRDecimator pRxFilter;; [2 x9 L3 U4 c1 B9 `2 z+ V
        comm_SymbolSynchronizer pTimingRec;
$ m! y, Z( L. ^- g$ A        comm_PreambleDetector pPrbDet;+ \$ c& y  I; O5 `0 \; X
        FrameSynchronizer pFrameSync;% f% D) F6 R" R. H8 A& `) ^
        QPSKDataDecoder pDataDecod;
+ C5 O& y" J, S& A        static double usable_left_filtfilt[81000];2 X! ?6 l: ^4 P' M
        static double youXiaoShuJu_QuZhiLiu[81000];6 x& ~' k1 O+ X( L- R
        double mtmp;
! Q/ |  U* G9 t  w) s, G! r) G2 {2 U7 v        int ix;/ G4 {  _' r" v) M% R2 ]& @
        boolean_T exitg2;3 b6 \; B- L& X6 F' j+ Q, d
        boolean_T exitg1;
; T% R* \3 T/ p# @* ]) B6 A0 b        double YiZhenShuJu[800];- q3 J* H  h$ [9 O" O
        double dv1[800];9 j9 ]# Q2 D4 J8 u7 p
1 |* V4 g# {0 M; p$ I
% S$ B; W# o5 J* |0 ]* A1 R- I
        double b_YiZhenShuJu[800];4 U8 R2 g4 o# r4 j& c' ^
        double I_filtfilt[800];
7 v$ w9 |, I+ m: D6 T, m) @! X        double Q_filtfilt[800];) y2 ^* D3 f$ ~  x; \/ K
        creal_T b_I_filtfilt[800];' j; ^. Q' X0 Y- b; c4 _* I
        creal_T b[800];7 l5 X2 I# V- `$ j1 U* |. ~9 a7 X
        creal_T RCRxSignal[50];1 L4 X3 w: ?: k, q
        creal_T fineCompSignal[50];
, w+ x! J  v8 U0 q  |5 _* G$ ~        double phError[50];3 V. j% @5 n! y+ k0 L9 x% ~
        creal_T timingRecSignal_data[28];
; `; |: F; x5 |/ ~. B( t2 X        int timingRecSignal_size[1];" `+ u$ p( ~, a& g+ N1 }$ H& V: ?4 u# V
        double prbIdx_data[28];) i5 X% @5 e6 E4 a. \" C, r
        int prbIdx_size[1];
  _! }/ p7 C( O% X1 q8 O4 n        double dtMt_data[28];; B8 D  L# E8 W% N. J% C
        int dtMt_size[1];; v# }, K" N6 {* N. d) k
        creal_T symFrame[25];2 ?* x4 ^( ]  A, [4 \3 E
        boolean_T isFrameValid;
: H1 }" R7 K* Z5 b( e( }4 h; Y& A. A! A        double unusedU0[3];
- R5 `0 @* c! K8 P8 r( [0 o: j2 M' O# l
        //调试过程中的变量+ ^  m; a) C% e& q6 V
        int  enough_data;6 e# M% D1 B+ o8 H
$ h5 I/ G, q' G/ M6 Y
        int enoughDataFlag;
' d+ d5 p" Z& p! h+ I        int yiDuanShuJu_mean_int;, ~: r) e0 j) w, m8 ~
        int int_sum_dv0;
# h# V1 c$ X9 s  h! q; z% `        int oo;
, ]) ~) G* X5 \5 x, R! M1 L        int ii;7 e! ~/ I0 b8 \+ s0 j
        myfuck=10;% D. H5 k2 d2 M
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
# o; A! \9 E) P, E1 o- j0 L        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
, N( S  v+ J; ~5 F, K& b6 D& u) `- S' s) o3 n/ K
        yiDuanShuJu_mean = mean(data1000);
* R5 g9 _  V: ~! @+ Q" \) m( |/ r' `% D; t) ?" o
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
$ s4 e# J7 Y! }2 x) ?7 V        UARTPutc('A');
, P* D; D5 b* L' K5 e, c5 v        UARTPutNum(yiDuanShuJu_mean_int);
. p9 ]% n% x- f$ p; U5 w        UARTPutc('\r');( @. F. }3 P; x  F5 B- [
        UARTPutc('\n');- a5 S. k/ f6 X: I5 H
8 i2 o  d5 {# z2 |, B
        for (ixstart = 0; ixstart < 1000; ixstart++) {
% _" M' I# S3 V5 g3 B                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;* W* \1 Y* c# A' n
        }
6 b9 d9 Z, f3 O9 z# o* k% `$ |3 d
% k) z5 r6 a5 z5 B6 [* n        power(yiDuanShuJu_LowMean, dv0);
5 b8 t& X: U! e0 A* ?# R
) c! v! u% D9 T6 a        int_sum_dv0 = (int) sum(dv0);, K$ m6 a" X6 n( M* f; K3 c

3 k- Z' t, d' a" U& ^        UARTPutc('B');7 L' M: D# u0 s) @1 ?/ M
        UARTPutNum(int_sum_dv0);
( e( a4 r4 _* ]) {8 |5 I        UARTPutc('\r');7 O& D. _: N& n7 |. S" y
        UARTPutc('\n');
+ E: L% e  u/ [" F
" J2 n0 v3 B% Y$ {2 K//        int compareFlag = int_sum_dv0 > 1.0E+8;# r$ ?% S8 A2 j0 M
7 D6 Z# ]4 E/ W
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?" B5 B5 `4 B/ |# o6 H8 u; x& `1 q* l& l
                UARTPutc('C');
! }' D* G! t5 i( n                /*  比较信号能量 */$ C$ J1 _) Y% ]7 Z7 x  U- S' a
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */3 }5 u$ E- \3 C. ~- T: v
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;) \8 f/ Z. d. o  Q; k4 e8 P
//                for (ixstart = 0; ixstart < 1000; ixstart++) {, I3 ~3 h4 D' x3 ~, t( ]3 i
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
6 _. [- O5 M5 f//                                        yiDuanShuJu_LowMean[ixstart];4 Y+ E$ N5 _1 A. K( Z7 t9 U% C
//                }/ a, x/ s! g' X" T/ N
//
- Y3 X6 m1 ~( k& U) L  x//                youxiao_k++;
7 v7 V' y* a  m# a//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
% D* a* ?% s5 I//                        /* 感觉要取21个数,即0-20, */$ g! Y( l4 f. ^3 M! h* l! O$ C2 I
//                        enough_data = 10;//有效是10,无效是0
. \/ q2 ?/ z0 T' t* B5 E  x1 G0 n; a//                }
1 @! J" e5 b% C6 Z1 D        }
- q7 h- I8 D9 {) R9 b: @% J- S1 u/ h+ K
; m. E6 e  E1 ?; f
        enoughDataFlag = 100;
, C3 U/ c7 b1 Z( u: F3 J( J        enoughDataFlag = 1000;( E6 ]# v# v) l
        enoughDataFlag = 0x02;0 v. {2 C, g+ V) l/ G
        enoughDataFlag = 200;$ P# C7 @( K* e( i; Y

0 g3 t3 k- t5 p0 Y, K. w/ ]+ i6 }        int myfuvk1;3 m9 A/ {# [/ x5 I- V8 P
        myfuvk1 =11;& z$ v: @0 M( x! @* h
. {. A* J- p5 d  q9 V; c  w5 {

1 |4 V. R; J; B        enough_data = 0;
  P, d6 r3 P6 `5 B# q% K
  N. k# f( P2 D4 x. x4 i) k//        if(enough_data>50){* c+ ?7 s6 B' M5 O: A+ ^% ^
//                enoughDataFlag=0x01;
% z, I* U" Z  P- \* i//        }else if(enough_data<50){
  M+ m4 `* y3 `//                enoughDataFlag=0x00;//0x00还是不行% \4 Y% F- E! j1 j9 a
//        }5 E$ f5 c+ i! v; F

3 u$ _% ~3 a/ B; w4 Y+ S, X* h# S1 E( P4 V  a6 y& s) T. ?
        oo=10;
5 X7 ^, L8 A$ S) B- _6 t' C        oo = oo  <  5;6 }6 k( e3 @5 O
        if(oo){
4 [4 t4 U) u6 [5 d. ^" @8 V                ii=0;* x: u5 x% R) n
        }6 D# |4 u9 d; X9 K( [' t0 `
        if(oo  <  5){
3 Q- i6 \3 V3 [" S6 ~. K                ii=0;
( J4 A. [3 z2 o- l        }! ?3 b: B8 V/ D5 m
        if(oo  >  5){  `' k8 Q9 M' m% N% n6 _
                ii=0;
5 r2 W: ^, e2 o% r- H, [# u; [        }8 U' _/ C1 B" _% X* Y
! o) Z( h3 Y- \3 d# O
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */0 e+ f, b+ u9 g
        /*  如果数据足够才执行主程序 */6 K0 y: _- x1 z( z7 r' V
        oo = oo  <  5;
* c; u5 q; l3 K9 R        enoughDataFlag = enoughDataFlag  <  5;4 t, T8 M+ C- I4 c9 B8 o! j
        if (enoughDataFlag  <  5) {7 I# `5 K# n; d+ b
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0. h" ~2 {9 |5 |( A, w# E
                AGC_AGC(&pAGC);* R, L- W* B* k

1 }7 f& N0 Y2 Q+ W* n                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);; ^) _# o: {) h0 u6 K
                FIRDecimator_FIRDecimator(&pRxFilter);$ D+ O7 w! q6 F# i6 b) i

& j  \. E5 u' R4 i; `                /* Downsampling */) [# Y0 F: M4 D  y/ J( {
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
1 ^4 }  V& z/ j! ^8 e6 G4 L) e# E
                c_PreambleDetector_PreambleDete(&pPrbDet);
; a; S$ I# j) l4 K, c2 X+ n+ D* V% _  z8 k7 l
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
, w0 `$ U! C; y6 R                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
' V( T# H4 Z3 E7 i( ~5 A# ]                /*     %帧数量=100 */
6 B" L) N3 i% h9 ^* ?                pFrameSync.isInitialized = 0;
* o3 n6 Q/ j% r! O& ]' J; s, v; Y5 N) t) @! D
                /*  [EOF] */: V, \# p% \- u' z- K; u1 N, N
                /* 前导码长度是13 */
6 z' ?7 ]; c, ^; p                /*    %qpsk */9 O! ^# Y0 x+ z+ q+ y
                pDataDecod.isInitialized = 0;4 V% J4 l1 a- y$ `

2 f/ Y: V$ Q$ w5 \7 r                /*  end */
5 k. `& H& y7 c% U. T# s' d                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */! `+ Z! m0 }& u
                /* Convert 3-dB frequency *// m5 O- V8 W. g' c
                /* Convert 3-dB frequency */: Q# d" k5 j. `$ s* T8 B, e
                filtfilt(save_buffer, usable_left_filtfilt);6 q; K" n: R1 q' u* M1 d
                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ S3 G/ Y  |9 f  X5 Y% U                        usable_left_filtfilt[ixstart] *= 2.0;
4 I0 M* G- O5 `+ }                }
, I6 x( ]& L0 Q  s1 B* M$ S' D+ G  z# E9 A  H/ k
                /* 注意乘2,处理幅度 */
# ?; Y- G  d# u) w* R/ s- g                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
" e# r3 {( |( A                /*     %% 行列转换 */- Z( e$ V  g+ ^# T% ^) ?6 b
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);4 x" ?: ~9 T" I# U; r% h/ d
                for (ixstart = 0; ixstart < 81000; ixstart++) {
" U8 ~# x5 [7 Y; U* h                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]6 M2 o0 l' k6 {  g9 D" G
                                        - yiDuanShuJu_mean;
( d5 m% z2 ]0 C- O1 R' f                }
1 V# B5 R0 A5 ]  H* `% o2 e' M' P5 s8 v( ^' X3 j7 R, a
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */1 B) D6 k5 g/ ]2 Z: o! b" r2 }
                ixstart = 1;+ G" ~2 Q! F5 R5 V5 v
                mtmp = youXiaoShuJu_QuZhiLiu[0];
; @8 t2 R  g! F: B                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {1 q- W# k0 M$ g) d
                        ix = 2;1 k6 i4 q' H+ F
                        exitg2 = false;# O. P1 n3 t  L, @- L5 K1 e# Y7 Q0 V
                        while ((!exitg2) && (ix < 81001)) {: Q) a7 h  u; B3 W4 U% u/ }+ r: f+ L
                                ixstart = ix;: r, `: m) p% k8 g, @
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 a& g$ g: q- A0 d
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];8 V; a5 a/ I/ y
                                        exitg2 = true;
* l+ x6 Y5 Q2 `8 q/ c, Q                                } else {; A: f" C. T4 z3 Y: C3 B& N
                                        ix++;' Z) ]  _! Y- I& m4 U
                                }& w  C' N9 [3 m# j' R+ h
                        }7 ^9 B5 Q2 Q% N& h& c9 Q' e
                }
2 Z5 N( c3 i. n" N- [! D( c
5 w4 u; b7 ]+ R5 h8 j                if (ixstart < 81000) {
) M' R+ O6 }& A' W                        while (ixstart + 1 < 81001) {
0 k% G- [, k- N0 \                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
" }( y# Z/ C: C9 ~+ J                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];+ k( \1 e: A; u0 y1 v8 g# `; E
                                }
# f  W2 c7 i; @7 b& [2 `8 \$ ~5 n; e2 v( F9 L: ?
                                ixstart++;( p! V# g1 U) Q+ {. t0 c. u
                        }4 Q# M! f# v1 H4 w5 ?+ _# ~
                }
2 G- \6 D4 X' s" @
, H% Q. b, k( J6 r, Q                ixstart = 1;
  X+ E7 S0 `% ?/ N' f2 x3 |                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
; a7 I3 ~1 }* _2 m, ^9 I  f                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 X$ Y$ C2 T8 w                        ix = 2;
6 z4 Z1 r0 I6 e- e& z9 v                        exitg1 = false;
& Z+ v: q3 J! S" E1 ~( I) a* n4 I                        while ((!exitg1) && (ix < 81001)) {: J# c. r: B, }, u$ w
                                ixstart = ix;
+ v7 y8 a  R# T) s% g: O                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {# }$ p6 Z5 W8 ~2 \9 u2 g6 l9 D
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
9 |# d9 d$ q! g6 f  D  }2 d                                        exitg1 = true;( q, V: U" O0 ~/ Z7 K+ e
                                } else {
% B# X/ v$ t- q" y% Z                                        ix++;2 n4 y* g7 o* M$ f( m8 K
                                }
* P6 [7 s6 P! p                        }
3 |' `' F/ y; N5 f. ~; i$ U4 m                }
" G- n8 H) F6 n2 j  O" G% {9 N- `! y9 a" j
                if (ixstart < 81000) {5 D0 g( o7 h& Y0 e
                        while (ixstart + 1 < 81001) {
* z! K1 U4 ?+ f# W                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
% @, ~# e# S* j$ S$ {( z; v: V                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];% N8 `5 U. T% }( O; \' `) ]5 w
                                }
% m1 `9 D" N6 V: R! I$ c) L- v6 k- R( h! C4 [
                                ixstart++;
; O0 G: D$ P% V7 R. Q4 i6 S! G                        }
! |, P7 Q3 o2 m: X2 e                }) H9 [: A( h2 h8 \  t
5 n" p( T& R& Z
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
! U# a: w/ Z; p" y) O9 I                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {: F" n" V8 n8 S/ {7 o9 I
                        yiDuanShuJu_mean = mtmp;' \& X3 |4 t$ k- |
                }# j1 ]2 H- g: Z" C$ J2 |

5 d, w7 I$ O. h% ]9 {# K; t8 P                /*  找出极值 */( Z2 ~- \; K% _0 J
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 C4 n( e4 A* A; {                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
. q7 Y7 V6 `7 a1 {8 E+ k1 h2 X                }
4 q1 h( r4 P! i' v4 {" H
( V5 g* d% ]0 {* ~: M        --------------帖子字数限制------------------
  r% r# h1 @4 Q. E2 X% f: Q% \6 t! O}1 I  l# s# R; w% y/ G* i
9 p& V/ x! ~9 b5 \* ?! t7 O0 b$ A
8 H8 ]8 L4 u; ?+ [+ k) w# f

本帖子中包含更多资源

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

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-23 13:24 , Processed in 0.052114 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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