debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 . s/ l9 c! q: ]( o" p  V' W! E
  [* Z2 I7 s/ |1 i1 V
各位大神:1 K, A& X; B3 \, X' z9 a5 c
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
3 X+ m9 i% F& N- W8 I      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
, M* O- a4 G# `4 @* E6 |
& J( U5 N0 V6 I/ W- X" K     3 C* h+ u5 B. v7 {) W
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
/ @, ?1 N) b0 e+ x
9 O  X0 W, y; D. R5 F并没有其他线程
+ u  G1 f# D: h$ `2 A反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% W  U# k3 W3 \8 K6 f
也说不定是和堆栈有关系。。。。。。
, C$ u/ `; {+ d$ d  C请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
( H4 c3 @+ P3 E; O; I3 U0 G; O. H2 }, D9 X
) a/ b9 E* T- w  {; p% o

9 s4 M% k) T  [! U我也很绝望啊,希望大神能帮帮忙,感激不尽,!% b! C+ X- W1 g& r. _- S' a0 M' S' Z8 @0 N8 r

6 o% N2 N- S) D( j* Z; L8 o7 q
4 D6 Y# s5 f$ [- i* A- S9 Z2 H附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];! I. e) H+ w& Y* L* `
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
3 H/ d8 }& ~1 l6 W3 J4 P" ]8 r1 y' {, j3 r, S9 V
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(5 _( o" M. F/ c9 N9 g7 K, d/ r
                const double data1000[1000]) {
; p6 b; n7 f7 ?" v( n( Q1 Q3 x# i& U: \9 ~, J9 f9 \7 ^
        int myfuck;6 G+ b, w1 m  O0 K
        double yiDuanShuJu_mean;
: @8 c- c$ G. b: F3 i9 x8 j! y        double yiDuanShuJu_LowMean[1000];
/ ~( \7 H: w9 E" p0 s, N( w2 W        int ixstart;7 S- d3 u% ]% R2 \' [5 S; u$ W1 i
        double dv0[1000];1 S% I1 `9 i/ d: r) p
        comm_AGC pAGC;0 e1 }5 x; F& M7 Y
        comm_CarrierSynchronizer pFineFreqCompensator;* a6 B" z$ o( i
        dspcodegen_FIRDecimator pRxFilter;
: i2 t6 ?+ u% b  ~8 i; K: k6 v        comm_SymbolSynchronizer pTimingRec;
3 g' v+ H  R2 ^  U) h, B        comm_PreambleDetector pPrbDet;$ V4 m0 N6 L3 j5 S. f
        FrameSynchronizer pFrameSync;
/ w! |. Y- k, [: ^9 _/ U- Z        QPSKDataDecoder pDataDecod;
* f# O2 w: f5 f2 G' V        static double usable_left_filtfilt[81000];5 |7 c+ j3 o/ W
        static double youXiaoShuJu_QuZhiLiu[81000];" h6 j. ?0 n" p" V1 @( T! i
        double mtmp;
- {$ A( z: a, s* [1 Y: Y# s. p        int ix;
1 v/ D; _7 Z7 D+ [. y        boolean_T exitg2;
+ v( p3 p2 L4 H        boolean_T exitg1;
- L( n3 N8 g2 ^, j3 u        double YiZhenShuJu[800];
1 x9 Z2 p7 S( q" y6 I0 {( _6 {        double dv1[800];
4 ^. L# M. v2 L! I8 c$ }" u" C. ]5 |/ p  e1 d8 a
0 n# O( {" V8 T; {$ ]: h
        double b_YiZhenShuJu[800];
+ s$ Q; ~+ M  r7 C/ I0 q        double I_filtfilt[800];4 ^4 c9 ^: t5 e3 A$ L
        double Q_filtfilt[800];
0 `, p( d8 {3 v* @2 C        creal_T b_I_filtfilt[800];
) G3 ]* ]# m" ?: N; y        creal_T b[800];
1 N3 H6 c: k& ]& T( @; t: H        creal_T RCRxSignal[50];3 o# }+ w4 ~  V: L- |/ H) J/ N, U6 z
        creal_T fineCompSignal[50];
8 l, c% S1 Y( M9 m        double phError[50];
1 P, W& q0 W6 f  M' `! s        creal_T timingRecSignal_data[28];0 M3 D: m; G; q) O# U
        int timingRecSignal_size[1];
. o. Z+ T1 L$ |  Q        double prbIdx_data[28];
# p9 i% l* |; B' N        int prbIdx_size[1];
# ~9 ?$ T- L* U3 p        double dtMt_data[28];, g0 r( u7 T( T4 j
        int dtMt_size[1];4 v' l+ L( f6 ?+ t
        creal_T symFrame[25];
$ l, i8 L, r; B* j3 S        boolean_T isFrameValid;
" L% v3 g' M4 I  g. j        double unusedU0[3];
. g: [1 D+ Q/ m5 }! m7 i& L. T, ?: ]6 Z
        //调试过程中的变量
$ P0 n& G" C; b, P7 B3 m2 z        int  enough_data;
" p6 g3 Q) e* @! o+ a
, ^; Z$ d7 n7 K% ]. M        int enoughDataFlag;. M* Z: m: I0 E+ w  \' c& B( D
        int yiDuanShuJu_mean_int;- x3 ?8 v8 B; \2 `0 R& y- X0 O
        int int_sum_dv0;7 R5 W" s, W5 ?( _2 k
        int oo;
" |# @/ Q+ F3 X3 e        int ii;3 S6 S/ M: s& X
        myfuck=10;
3 o  v! x& ], t' [2 D' `6 h        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
+ R1 t4 h7 ^4 n        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
, T1 c6 p5 V- s' T9 U0 h8 h( Z. `: e/ @; \
        yiDuanShuJu_mean = mean(data1000);
1 c  W4 Q) s1 Y# W6 I) k  l4 h+ L, ]# x, e
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;- i% i- ]" i/ d+ B6 F, A$ [* v+ |8 m
        UARTPutc('A');
3 w" \" E1 r" U0 _4 E        UARTPutNum(yiDuanShuJu_mean_int);" P; H( F/ c+ Y  p
        UARTPutc('\r');# Q3 ^5 u3 b1 G' z3 Y
        UARTPutc('\n');
' y* {2 ]$ i/ f& u
3 F* y& o  |, z% v  ~        for (ixstart = 0; ixstart < 1000; ixstart++) {- Q; ]3 d& h' R% g7 v5 L
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
( }8 B! E) F/ d7 R' z2 M) I        }
% m7 F6 L; {- R
  G/ H  B, H- A+ Y) G2 M* v        power(yiDuanShuJu_LowMean, dv0);
4 D, ^0 m  T- t0 f/ P8 j' P
$ J9 M0 I4 X$ h, y        int_sum_dv0 = (int) sum(dv0);
4 L6 x, |8 G- p  h# C9 O- m
  k, F6 L9 t5 C* h        UARTPutc('B');
! ^: y) M" |2 T  o2 M( t        UARTPutNum(int_sum_dv0);
- C+ U1 ^+ G+ O8 ^2 d8 _( o- X  [        UARTPutc('\r');( D- Z8 A! n2 U. m) U$ I/ Y
        UARTPutc('\n');9 J# t1 R. y( [9 P& t# H
3 g1 T3 G$ D( s/ M; V( y+ ?7 s2 {
//        int compareFlag = int_sum_dv0 > 1.0E+8;
3 D; i. \  z! l! p
: X6 J6 r0 C0 T* D0 j9 T        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?7 r7 c3 J) Z' Y' l
                UARTPutc('C');2 }( K/ i2 y" B+ L8 {% |
                /*  比较信号能量 */( P1 E$ x' g: S5 l
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
* q: N3 @2 {/ g: G( W& N; l//                yiDuanShuJu_mean = 1000.0 * youxiao_k;4 z+ x" x3 F' d+ I
//                for (ixstart = 0; ixstart < 1000; ixstart++) {( W( K- Z5 z" D' O! K
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =8 T" J; ^+ S' K
//                                        yiDuanShuJu_LowMean[ixstart];
& E9 p2 J, F( M+ m2 p: T7 Q//                }
0 y* ^# J6 @' S" T% m1 V//
# g. M1 E4 n1 \+ x! M//                youxiao_k++;- V, Y& s" v/ y1 Z' k) Q: Z
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
; h. M, _. H  L" A; s- E//                        /* 感觉要取21个数,即0-20, */
1 c# h: c7 k6 \3 c//                        enough_data = 10;//有效是10,无效是0
4 H9 V6 y/ `; L//                }
+ U+ ?8 J' h2 S4 r  C! \1 F; {0 v  D        }
, @" x- L2 s, j; t1 o( U5 |% H& ~% C# [; P

0 F- v2 J3 Y6 T/ q' _        enoughDataFlag = 100;
) }  r2 F* {' @8 T        enoughDataFlag = 1000;
7 [4 N9 h; U7 h! G4 u/ ?" j0 {        enoughDataFlag = 0x02;
3 g$ Z/ j) O1 [0 p! r        enoughDataFlag = 200;( \9 N' x' S0 ]5 f

+ i3 Z7 [. F+ O: B* U        int myfuvk1;  J4 {0 b$ \' i: F# r5 K
        myfuvk1 =11;0 }6 [; J: g1 N& Q# P2 S
% l; H5 s  a: G$ k

* r4 i/ e* D6 S7 O6 Z        enough_data = 0;
9 L6 d% {( f! |, q1 e8 Q2 `
( b; d  l* H  f/ _  l//        if(enough_data>50){
7 k' S6 [4 [- K  Q//                enoughDataFlag=0x01;4 h$ k4 {" Z! i6 X
//        }else if(enough_data<50){# N3 L! `. F' E# r  q
//                enoughDataFlag=0x00;//0x00还是不行
7 n1 R( Q/ T, g7 W( U//        }
2 H% Z  F: s" P7 P6 P+ R8 s# R. i1 U/ @# _4 \0 G
$ i+ n5 R* ^( H* k  }. `' ]
        oo=10;
6 K. H5 z8 B# X8 n+ U/ P: U        oo = oo  <  5;
# I, [9 k4 h: {6 S2 Q  U! Y' B8 @% G        if(oo){
! z# u4 X2 n) I0 ]- Q- u, X0 z                ii=0;
) t; }' D; o/ I. }1 U  q2 o3 \        }
5 H; n; [# f7 f. g! c# L7 ^; \        if(oo  <  5){
. }: R- C2 m( C* I% c- B                ii=0;
. u; H& P+ S* p- W( V        }# S9 D1 Q1 {' X$ Y2 A( n/ x
        if(oo  >  5){
' U4 q- s( U. \" O# S                ii=0;8 q& _9 d: i4 R6 Q* B( B
        }) ~! Y5 j! E4 E( x  d9 k) y+ e" b

  X( y& q  [) d. c: K  ]        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */* K% A# g) z+ \; ?* g4 x( b3 K
        /*  如果数据足够才执行主程序 */# G1 f7 U- T9 [2 U% r
        oo = oo  <  5;5 r! B0 {( p5 Y+ t; ~' z
        enoughDataFlag = enoughDataFlag  <  5;
$ L" ?0 R9 ?. ]( l0 V4 B# y        if (enoughDataFlag  <  5) {
/ }  h$ I2 ?+ b- l; J//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0) F3 U8 {, G1 x( o* q' ]
                AGC_AGC(&pAGC);  Z: C- R; {* Q

1 i1 {$ \$ u, A* l  M* _                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
7 z% s# X2 {9 o' y! v+ J                FIRDecimator_FIRDecimator(&pRxFilter);
4 X- s# \1 S; h# k+ a- q# g7 ^2 f; O
                /* Downsampling */3 N! F" B! [% ]) ^5 |3 h
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);" E. I# C8 i0 a) H' q% U
+ M+ F* t7 H4 b' V; l' g
                c_PreambleDetector_PreambleDete(&pPrbDet);
) u6 x* i# J8 v! f& @+ W! Q% G8 \( o- i
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
2 W$ H- ^9 D6 }% K- ?                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */2 ^& `) a, R) c
                /*     %帧数量=100 */3 f, W7 W! F7 o) U
                pFrameSync.isInitialized = 0;
, u# ?: r  V5 v) W
. n/ i! Z, s5 I& m                /*  [EOF] */& }2 v  w- a3 I2 n4 ~1 y
                /* 前导码长度是13 */3 w1 t, M9 U5 H1 ?  B4 j% k3 A
                /*    %qpsk */
" I# }+ \: c( H* J1 z# m1 H7 F                pDataDecod.isInitialized = 0;+ V1 R  ~0 J4 D# G$ d
4 _  h* U" i4 U, ^' \
                /*  end */' @. Q: C+ c8 w) w2 ]
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */5 y1 U7 d' B5 h. P2 e
                /* Convert 3-dB frequency */9 ^, N, r4 O3 i- n* }3 n4 h
                /* Convert 3-dB frequency */6 M! C! \9 I& d! K9 ]8 @5 m
                filtfilt(save_buffer, usable_left_filtfilt);1 q3 ~1 W* _! D5 {
                for (ixstart = 0; ixstart < 81000; ixstart++) {
4 m; q2 z8 G- [                        usable_left_filtfilt[ixstart] *= 2.0;
& S/ w3 a9 y/ g# k                }5 Q/ h+ b% o* q" D* k" }

6 {5 e# y* \0 F4 E0 [                /* 注意乘2,处理幅度 */- x+ [; q0 b. ~0 p* e# ^
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */# T5 [+ _# F8 |. b) f* w5 G9 B
                /*     %% 行列转换 */
' d7 e! B% a, d% ~& ~  e/ ]7 V1 W                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
& Q' K; r6 M/ ^8 L7 S( W" a( h$ R                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 n6 T1 R& s2 M7 J  y' C$ v                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
/ m8 j  |1 w* O# q8 d8 R: x- R                                        - yiDuanShuJu_mean;* W  b7 D# R- q0 x) j) ~! y
                }
4 m' u$ a4 P7 i1 J: L- ~1 B& D* l6 S
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */- ^* m6 H+ V, l6 h7 p
                ixstart = 1;/ }+ n3 g$ F: o0 t) E  |; O
                mtmp = youXiaoShuJu_QuZhiLiu[0];
, G' e* ^7 K4 G# `' e- V4 Y9 ]! {                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& J( [2 _2 Z' l. }
                        ix = 2;
, C- n6 A9 o6 U- o                        exitg2 = false;
/ I7 n- ]( I# }                        while ((!exitg2) && (ix < 81001)) {8 V: i! O2 E+ k
                                ixstart = ix;) E* C5 u4 A3 F; `. b* m
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 b) L+ _2 u  j5 N0 H& r0 s" x7 n
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];/ {; x5 H" S4 k
                                        exitg2 = true;% B# P5 x. T0 I, J/ Q6 F
                                } else {
$ t0 J1 }. w" @7 C8 n7 |                                        ix++;
& l7 Y: m; i  H! N                                }
5 K* ^2 A; I6 k4 @) d                        }
" k9 \" r; h& v                }
& j# B- N- c  O" f! \1 i* a4 F$ H" F$ M3 B. B4 O
                if (ixstart < 81000) {& |0 V4 ~- p1 s6 V/ I* U" h
                        while (ixstart + 1 < 81001) {
+ Q* ~- H, n! }" n& m8 O                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {( F, K% V+ v* `5 @# `- c
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];! Y; a2 f5 [0 J5 i2 V9 \' U
                                }
  u; S3 @9 [. W) o5 z& p0 F7 h2 z: m' q
                                ixstart++;
( T4 G0 e3 H3 L4 P1 C                        }
5 k( i, {3 D6 L8 I  ~( {/ D( f                }
2 [, a4 R9 k! G% d7 G9 A1 a& x( A9 d% X( g8 V: n- X6 B" ]/ r
                ixstart = 1;, h( R9 s, S* \1 [$ Y; L: v1 i
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];: }; z( K4 |2 Z  ~
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; P$ C6 T) B5 K+ N* P$ m7 \3 K5 S
                        ix = 2;
2 |1 L' L( |9 ]: v                        exitg1 = false;, R8 x8 c5 G) G) y: I/ m- b% F
                        while ((!exitg1) && (ix < 81001)) {
! L) p7 n8 K8 i# Z3 B5 {                                ixstart = ix;& _. A6 K- U; c" c( y8 W! f
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, Q' E- P" m+ `$ ~. z                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];  q' t6 a  I5 G& O: u
                                        exitg1 = true;. ]$ x% W% V& h
                                } else {. e, k& }* G9 i2 M* }' L' a8 ?
                                        ix++;* G/ A$ s3 z- J# S( t
                                }
. m1 K% i  c! `- f  S, _: O                        }
) n1 m% M& j, h: K6 U- E- v" E, ~4 g                }3 J' B4 O; ~) u, g" u# ]2 F

* h- I" z' ^9 c8 B- P/ \3 l                if (ixstart < 81000) {1 i( f6 g) W9 K' l
                        while (ixstart + 1 < 81001) {
) C) f" _* t+ _! H7 P# A! Z3 p                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {3 l$ W! r8 F+ z7 |3 Y( x7 {
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
. }2 E& v' o/ S3 Z                                }7 S5 m6 Y; U) k, V
7 I# U8 v' W( F0 k1 x4 ?7 ~
                                ixstart++;
! d; L% ?9 I- H                        }
' H# w' Q0 S! z6 }0 s2 r                }
! t* Y9 c& s8 o+ ^5 y( U/ U& R
+ r# O' j# x. j                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);; w3 Z& x8 a7 y5 C) `1 \4 o6 ~
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {7 C5 N+ {( q' h4 t3 w5 E3 @% K7 O
                        yiDuanShuJu_mean = mtmp;+ M. a; a* l- I! u1 a8 g1 Z
                }8 x* m$ d1 o  Q* W( V

: ~$ J8 l& ]7 l1 h- A( X                /*  找出极值 */
9 W0 U* X; I5 o$ |; H1 M# T9 [; i                for (ixstart = 0; ixstart < 81000; ixstart++) {- K" O9 ?, S- }: h2 q
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;( k/ o- |$ j/ J+ }! h  P
                }2 L3 A$ t' j) M& U5 Y. y' C( K/ k  \
% [" ^" R, @- I+ q) a) x
        --------------帖子字数限制------------------
, t+ u+ v1 _, |}9 R% ~3 b3 \: X. v+ {6 [! y
/ {9 l7 K4 I4 \( a' m  f$ e! w

) z6 N$ |4 f! ~$ C" i, k8 _

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-30 23:35 , Processed in 0.047725 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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