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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ) {) ~% n# X% O3 [% a! S
8 [: }2 }2 D0 X: ~" K) u6 k. o+ R& [
各位大神:( F3 k* v( m# _9 {
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
0 V9 O7 M% L4 h2 c5 J, A      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
2 V& ?- x  X# |* g" @7 x) |! n
$ g( c- m. b3 X8 d     
2 q" x4 B; G8 H$ a& A这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。) p% K8 X8 T2 U( M

& _4 s) J7 t: v& ]' n: I( N并没有其他线程6 U; |) i6 \- D* q$ G) [3 e
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。8 o2 e+ \4 b- I9 a1 w9 L
也说不定是和堆栈有关系。。。。。。
2 |6 P' B; J* l0 g7 k! Q  T请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
' V* ]) K5 C$ d0 B  Y. Z8 J& K/ x- S; u' K

8 T" y) J# V+ G0 H) E$ p# b0 n* W* ^4 m- D. G+ k& Y6 q
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
0 @  r8 F2 u9 \. d
$ {/ T7 K3 p3 l. s5 J
- E9 e% Z$ e4 |0 ^  L: a附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];8 w* K: i$ r7 R' I3 ^! F' l
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
/ F: e0 Y2 ^4 U' n" l7 @9 H, A  _2 Q9 @6 G# J
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(5 j3 A/ }" U2 j2 @" X0 o4 W- ?
                const double data1000[1000]) {: Y8 V, z* h1 w, g, k& u
, l) z1 i2 l. q% a2 k' a
        int myfuck;! y4 F, ~  z0 ?; t( R! Q
        double yiDuanShuJu_mean;
7 d, g# [( L& n+ r/ }/ x        double yiDuanShuJu_LowMean[1000];4 P& Q+ F1 f+ ~/ d' |( ?
        int ixstart;# f# }$ m4 D& f. c# A
        double dv0[1000];
0 y9 ?: [5 \9 o9 c) N, J        comm_AGC pAGC;
. F: O8 j1 M6 x# x; C        comm_CarrierSynchronizer pFineFreqCompensator;1 x2 n6 _$ U- {8 ?/ C# ~  E$ B
        dspcodegen_FIRDecimator pRxFilter;
* p+ {2 F7 ?2 I8 E, |9 s6 q        comm_SymbolSynchronizer pTimingRec;- w& g; Z' m; A5 \" s5 o
        comm_PreambleDetector pPrbDet;" G- p! b& U/ ~, F
        FrameSynchronizer pFrameSync;
2 c- ?) |0 e; s5 f        QPSKDataDecoder pDataDecod;8 a5 s4 I" J3 i4 b; ?" f1 ?
        static double usable_left_filtfilt[81000];7 f3 y% N% q( g) k8 X  p
        static double youXiaoShuJu_QuZhiLiu[81000];7 S) L. H' u9 G* J% b/ L" H
        double mtmp;' G" A2 A* {& V1 W, Y: M
        int ix;
3 b9 G+ l8 u% N+ N; I. N$ p, b+ p        boolean_T exitg2;8 X( y+ M* ~% J% X3 U1 v/ B! ^
        boolean_T exitg1;; P% e3 s  P- c6 e
        double YiZhenShuJu[800];
1 j8 s! p/ W" ]        double dv1[800];
3 N7 h5 F; D9 M6 Y& S* L, S8 \( M
. r" W; x( p- T- |+ ]
( w) @, j1 Z7 D  ?5 _+ W        double b_YiZhenShuJu[800];4 W2 l8 }7 u4 M$ K6 R1 B/ K
        double I_filtfilt[800];
% f* [& k2 v8 R! J        double Q_filtfilt[800];: ~6 n- O, b* \! Q9 T( V
        creal_T b_I_filtfilt[800];
+ t: b% _  z/ [6 g% t        creal_T b[800];. T8 y( r7 e2 E$ s' @0 M
        creal_T RCRxSignal[50];
( q. M6 r4 f8 Z! ^        creal_T fineCompSignal[50];1 o" a# b3 C3 |: p1 d2 W( `
        double phError[50];8 ?1 W$ b2 L: C
        creal_T timingRecSignal_data[28];
# J* m" m$ w6 f8 D% d4 c        int timingRecSignal_size[1];0 W! m1 k6 Z" Q+ t) w* {
        double prbIdx_data[28];0 L7 r' |3 @+ C9 ^1 _$ N8 ^
        int prbIdx_size[1];/ n& ~8 \; J- k0 ?( r( i# L
        double dtMt_data[28];( W: _2 c6 C( D/ C
        int dtMt_size[1];5 k9 A. x4 O0 a' O
        creal_T symFrame[25];
, p% L+ F! p. X; F7 S  X2 M        boolean_T isFrameValid;
8 N3 ~- x' b& N: ^        double unusedU0[3];
* w- C+ D7 q- o2 j$ Y4 }7 D. x8 g" `/ @4 n  w
        //调试过程中的变量$ t2 _/ R2 a0 a4 G- j0 s; M5 \
        int  enough_data;
5 e* L7 R" d/ I  R/ B& ]: R
2 K, Z2 s5 e6 I( }  g' v; s        int enoughDataFlag;3 K7 a. m' d& M& R
        int yiDuanShuJu_mean_int;6 y$ D- [0 R: Z6 \/ S- {( q
        int int_sum_dv0;' ~3 X) s. a* A/ B; Z2 b
        int oo;1 l/ M5 ^. h9 a7 `& t. h5 }
        int ii;2 b4 J$ Y* X1 k$ [6 ?
        myfuck=10;
4 \6 Z9 o% o/ `6 d/ Q5 H        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */3 O0 _8 s8 D2 S& C4 f0 J1 ~' t: D
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
& g9 P& Z' Y8 T# b3 D0 M0 h% @2 D0 Y, X; ], ^  v7 |0 {- A4 M
        yiDuanShuJu_mean = mean(data1000);
- K: E" M0 c/ ~7 r0 c% F% [) m7 T$ p9 T- P) w; H8 q
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
1 j/ [9 n. w+ a8 P" s3 a        UARTPutc('A');
9 K7 e  [+ y" i3 j" K2 B+ v        UARTPutNum(yiDuanShuJu_mean_int);
/ G1 {! Z$ x3 c! x. b. B5 Z% K        UARTPutc('\r');
' O/ f. H' ^- S; S3 ?7 t& c        UARTPutc('\n');; W4 e0 [  `& E: w7 v! I

: F8 M* Q+ x  E2 D* T+ @3 k! u        for (ixstart = 0; ixstart < 1000; ixstart++) {0 X% ]0 ^# V5 C6 ?2 |. ]$ J
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;8 W9 d3 M, x- }( A% @5 ]
        }( J+ R: Q9 ?" Z' l- U8 V
" R2 p  I2 T6 c+ B9 Q1 o, ?
        power(yiDuanShuJu_LowMean, dv0);* b& \  u" i& y6 Y" D' H2 p! t
# _9 k/ g" S4 T! C2 j1 w) N
        int_sum_dv0 = (int) sum(dv0);! l5 R) y# P8 u( w  j. w( N7 {

) N% z$ U0 d7 f7 `        UARTPutc('B');
0 ?$ _! M- ^. a, v        UARTPutNum(int_sum_dv0);4 J+ y4 \1 o6 u/ \
        UARTPutc('\r');
. b+ @, R. {: n; k3 F% H1 r) K        UARTPutc('\n');
$ U9 |% w  O; X& j& f0 M; x3 V) l9 H
/ m5 e/ g4 }& C: T9 O2 Q& F" }' @" H//        int compareFlag = int_sum_dv0 > 1.0E+8;
4 I; z$ `3 @# Q3 _; _& ~/ O! h: u0 O8 V8 z; K' D7 Z! ?
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?2 Z, y) y5 i/ O+ L3 g- o
                UARTPutc('C');. [- c# V! J# F; H$ j/ h8 ?
                /*  比较信号能量 */
; s* m: A4 H/ `. s                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */! A" q7 q5 |0 U+ ]& S+ @; P
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;* R* L( Y6 ^) Z* K: U+ m# P
//                for (ixstart = 0; ixstart < 1000; ixstart++) {3 R. m) p+ o! Y& b) o2 S8 d
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
2 r9 i$ O" w9 T! {. }. ]: ~! L: g//                                        yiDuanShuJu_LowMean[ixstart];
/ g( R, ^! ]' I6 S$ H3 H; q//                }
9 b8 j: p/ J/ t- z; d% |& ]//
2 W1 @* n3 w4 l//                youxiao_k++;
  j6 j, s- B  A//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==! t: K" h1 i: _
//                        /* 感觉要取21个数,即0-20, */
1 Y; \1 o7 {$ H- y# {//                        enough_data = 10;//有效是10,无效是0
8 ?9 e$ Y( o8 R//                }9 B2 f  G) O& s3 V; v, z! T+ \
        }
* l# \5 a1 ]( D5 ^
; J; _' K$ B/ l, F& K# G. V4 o' N: t
        enoughDataFlag = 100;
" z  G- l" o( V3 M' V( }- I        enoughDataFlag = 1000;, A) T2 i0 P$ r# b
        enoughDataFlag = 0x02;
- E3 v/ n2 z! c  W$ `        enoughDataFlag = 200;
6 s$ C7 t* \1 o9 `* ?; F8 z# i2 R* V7 d6 d' Z
        int myfuvk1;
2 d: h% \3 x- Y  {1 a$ e        myfuvk1 =11;( `5 b; V0 v- ~1 z
# b6 I! F  m6 X- t1 e0 r! g
+ c! G9 q: x5 ]" X. Y( `1 {7 f: ~
        enough_data = 0;" E. _3 G7 P# ?6 c: u- I

8 f7 J7 |2 {$ p. v% n% h8 ^" ^//        if(enough_data>50){. h/ [. x% X4 t) C
//                enoughDataFlag=0x01;( {" T  P, B$ u4 U% g' Q
//        }else if(enough_data<50){
6 @9 Z3 i* M. Y: r3 r//                enoughDataFlag=0x00;//0x00还是不行
" p% J' a: W% _9 O) o, z# P//        }
- g* p' y" c0 |: b
! P3 ]2 e% b7 T2 y& R
0 f. G( e& A+ Q* B: g        oo=10;+ i1 B; N7 X6 u/ b! d
        oo = oo  <  5;
( j/ g7 U0 F( ~6 m        if(oo){
- E: \8 s2 Q4 ^$ e/ U/ @0 m5 V* J                ii=0;
- h  ^2 i0 U6 e1 x* q+ b        }) w6 n$ M5 M, I4 }& b& Z" u( ^% O
        if(oo  <  5){
" ^$ }4 {9 U9 a                ii=0;! ?  _9 S7 c: g) ?( v& a
        }
- g* I% G; W7 N; x; A0 ^5 q        if(oo  >  5){
2 u& t% U2 m+ m6 _5 V: t                ii=0;
* o) {0 t- n' m+ d0 P$ `        }
$ K! b; w! w4 k' `) Z+ e: T- g1 G3 s5 X% `
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */9 y* ]3 H% T( g4 c- x
        /*  如果数据足够才执行主程序 */. F8 z2 d' N0 ?0 ~- O0 I
        oo = oo  <  5;* U3 b: @' c& C6 ]* M0 t
        enoughDataFlag = enoughDataFlag  <  5;7 Y# W% Z6 ^7 \+ ^" L
        if (enoughDataFlag  <  5) {
- `) J5 t# M+ c6 \//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是01 @" ?. ~1 t, X7 U6 `! u; w3 v
                AGC_AGC(&pAGC);
8 `' O! r% }: y- X1 ~, d$ X/ B
7 g5 C0 ]2 S8 F/ G$ q  Q8 b5 S. A                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);. v0 o* z8 m, V2 J6 ?4 x5 {9 |: \
                FIRDecimator_FIRDecimator(&pRxFilter);
, c: k# g: b# {5 H) b  S
! E% I" l: B0 x3 z: u                /* Downsampling */
' h3 m" a9 G0 M" f# }: L0 c+ f                c_SymbolSynchronizer_SymbolSync(&pTimingRec);- z$ }* r( e, A- R) k
2 I$ [& N9 \- r6 m; S
                c_PreambleDetector_PreambleDete(&pPrbDet);' Q, H9 `$ F2 O" u0 f% W

4 \5 x, v' B0 f                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
$ m; \3 `- f) j) b2 G! f                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
  s/ ^/ h4 P& f5 Q1 _6 E" n" M# D# S                /*     %帧数量=100 */; t) `/ R) d& m: H0 T* I0 z
                pFrameSync.isInitialized = 0;
# a3 C+ U/ j! K! U% S! Y/ N) z- w1 ?" E
                /*  [EOF] */
1 F7 W6 K% }2 |* q7 B. S                /* 前导码长度是13 */4 f+ r8 u, o, Y8 n2 d; A
                /*    %qpsk */3 k& E* ~$ d  L/ F0 R/ F6 d5 t
                pDataDecod.isInitialized = 0;
& b  U' M+ j& E8 M7 B: O4 P
( y8 g; p7 K0 Z( H: i5 e% ?                /*  end */
2 h7 r/ ~' L- g  G7 A, P5 C+ ?* j                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
/ m' n7 K& f  E( p( H0 Y                /* Convert 3-dB frequency */
: I7 N4 B4 I* r& q' N) T5 g( B; p. X                /* Convert 3-dB frequency */
: z) c: n0 o& ^, I                filtfilt(save_buffer, usable_left_filtfilt);
/ z5 B3 K( [7 r/ N! }( F                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 n  `- s  [  T! D0 O+ L7 i$ Z4 \, Q                        usable_left_filtfilt[ixstart] *= 2.0;) K0 I# O4 I- W4 ?4 `
                }( R6 e% s6 r! Z) ^9 o
. z% ]3 Q) }0 f9 O7 K0 c
                /* 注意乘2,处理幅度 */
& a" C, x7 v5 w5 `4 I$ W                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */8 Y$ H8 G8 g  l1 h
                /*     %% 行列转换 */1 f' u- r: l# z: [
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
, p* c$ O9 }$ ~: z                for (ixstart = 0; ixstart < 81000; ixstart++) {
" h+ l/ ~. G3 O) t& @                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]3 v. l  O1 b+ G  f# [) `; y9 ?
                                        - yiDuanShuJu_mean;/ z# Z# O# r7 L1 J6 }6 s" Q* U- b
                }
0 s. n5 r. c3 Y! ^1 s$ p# I5 T& Y' c( |0 d8 h
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
, n! \+ n( T! O7 H' h9 q                ixstart = 1;& L. @" ]) N+ m; l/ Q4 S
                mtmp = youXiaoShuJu_QuZhiLiu[0];: }2 A9 b6 z, e9 K
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
4 O- n1 `8 [" T: P: S                        ix = 2;1 \. M$ }/ B/ m7 r6 D
                        exitg2 = false;' N! K+ [4 k/ Q1 Z
                        while ((!exitg2) && (ix < 81001)) {
0 r8 m* ?$ t8 p8 @3 m5 l* v9 i                                ixstart = ix;
2 g1 @/ Z. x1 k+ M  K8 r                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
1 `3 W7 g# u$ c8 i' j  c) h                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];2 D9 Y( z" l( Q! W+ g* g7 I, e* V
                                        exitg2 = true;! F) K2 i2 d9 t8 O& k0 t* c4 H0 r
                                } else {
; M" E' {2 C2 X/ I; y& d. z                                        ix++;
% _( \7 Q' L% P( `                                }1 G% M- e- Y4 C" I( D* G7 J  F
                        }
- b4 s9 R9 G4 T. e4 ]                }) l& {4 @$ L, W
3 K  ~' X0 b! v
                if (ixstart < 81000) {& `+ k9 Q, q* @4 D$ F
                        while (ixstart + 1 < 81001) {
, b3 h' [0 c( S% U% ]* j& K                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
: p6 k, z8 T1 `& k; l4 d, J0 ~' B                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];- N* O! g4 R0 |: m+ u
                                }6 }. _6 ^0 t7 v- d
+ l  ^7 }6 R2 t2 P2 l+ b
                                ixstart++;
4 S% t; y' w, B# [/ C, o. O* x                        }
: B. M8 g, N$ K' P' q                }
4 h5 L% t' `& z# k* }8 n- z! ^9 W* I9 F: r- n
                ixstart = 1;
$ P# P0 T/ N# ^9 Q' ?                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];$ p: V. A" C8 a, }$ B, Q9 |
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {8 u. L( U/ @2 h( p4 F% ^2 B6 \: T1 T
                        ix = 2;: W& M! s# {$ F, C: P
                        exitg1 = false;0 [8 h! G0 _% M) G4 Y" Q
                        while ((!exitg1) && (ix < 81001)) {. f& L  w1 @4 C) w" j
                                ixstart = ix;/ Z& {% @9 {3 @4 p4 {, B: P) Y: B
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; ]* Z& _+ W2 X& H7 z9 q$ [                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];- Z& y: Y& u( A' O; Y  W& S, @0 X
                                        exitg1 = true;
- I8 _2 Y" s  O3 L7 T                                } else {
0 Z! S( I5 M8 u. K9 F                                        ix++;
% {8 V4 m/ B5 H- `! t  D                                }2 N: k! k; b7 [) r
                        }
' A5 a2 {2 P2 O$ n                }# w  v* M0 k; o# l

6 D' {; k% J9 {5 k7 G                if (ixstart < 81000) {( t# E0 K) t; _8 V/ B  V
                        while (ixstart + 1 < 81001) {
8 X* H+ u+ h0 ]# s+ U% m0 q) N2 v                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
1 z4 e. L% e# P: K6 T6 [                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];2 h' r9 C: F, K% Z, V. X9 Q0 Y
                                }
" y. ^4 ]4 `- e7 i5 \0 Q* Y
7 K  [. s4 R1 \8 ]                                ixstart++;
5 G7 G5 i/ l( [3 [                        }$ T% {- \8 |' X+ @
                }
. x' J% O) ~* L% \# N7 s2 ^1 }6 w0 b0 Y4 b2 U
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
, `3 a: e) v5 X. O8 H' w% j                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
/ Q# h0 m0 }; L! h4 c7 O  t                        yiDuanShuJu_mean = mtmp;
% O, w3 l6 f; m& C                }" B) f( A! ^* u! F
! d) w) g) H9 P* S
                /*  找出极值 */
" T; `; ^$ D5 S% L$ F! M3 b2 j                for (ixstart = 0; ixstart < 81000; ixstart++) {/ J: B& f7 O% G$ g& d& E  O& o
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;/ g. U2 F( \4 B1 W: ]6 i2 f
                }
/ ]! A) \# R3 ^& O, U( {1 s) U7 |, d( h% n3 G% v1 d
        --------------帖子字数限制------------------# X% T$ w+ b+ T& Z
}
) v4 c1 P6 W: X+ G( j7 D1 r/ [$ S" w' ^, k- s8 E. \

/ ?- M! l* B- T5 M1 q' i( m

本帖子中包含更多资源

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

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-16 20:27 , Processed in 0.040533 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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