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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 7 @  j- [; S  C) M+ E1 y# Z

+ H  q- D/ Y' e各位大神:
9 z9 k1 n4 g' R     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)) h# i' E, r, L$ \
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
6 Q! C4 e7 _" I4 S: W
' o" L+ z4 H1 P+ e     
$ ]( u, v' n: v, U2 Y这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
( `( i% e' [5 f6 j/ E8 q( q# y$ J2 ^; \# U: d* Y2 I, L% B: Q
并没有其他线程$ i) Q: V! c( z
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
' ?( Z1 f- c; Z; |" R. U( d也说不定是和堆栈有关系。。。。。。% [+ f! m/ }: G' X  v; o
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
; C# P$ c: o# ~" L9 @) k* {* n) ?7 a4 `3 k
4 u) H4 Q# _4 B, K4 j( i

2 u% W% [6 S1 ^我也很绝望啊,希望大神能帮帮忙,感激不尽,!
4 m+ @% f- G# i4 W& Z+ I$ r7 L7 h3 {# [

( Z! U  ]; O4 c5 n7 c# M, \" J/ V+ u附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
9 C" k  D, t5 X5 j9 t  ~5 n; W& `        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。! x& O4 U) F5 p3 l
/ \" U' U" z) V
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(# R* o$ b. Y5 d+ Q7 A# d# I/ F
                const double data1000[1000]) {& G! R* c; k7 q/ D5 j
% i; m* l# e* z4 y, h; |3 J, L, D4 C
        int myfuck;  ]1 d. ~3 J1 X+ M9 o9 }
        double yiDuanShuJu_mean;
! Z- w! C9 a, k% ^! J* S        double yiDuanShuJu_LowMean[1000];  d4 s8 C  K8 Y' f
        int ixstart;! Q, s0 z/ E% b' S
        double dv0[1000];$ y- x2 g  h0 J8 x/ O
        comm_AGC pAGC;' {# I* `& _* r$ Z7 i  n; D& H
        comm_CarrierSynchronizer pFineFreqCompensator;
# a( C) n% i$ k% B5 V- c        dspcodegen_FIRDecimator pRxFilter;! D0 [+ @0 b% X- [# t. E
        comm_SymbolSynchronizer pTimingRec;
3 C3 @( h4 `0 o% g. O        comm_PreambleDetector pPrbDet;$ |+ j7 E! `: N1 B$ d5 b
        FrameSynchronizer pFrameSync;3 D! Q% u) R% S! Q8 z
        QPSKDataDecoder pDataDecod;
$ H! I4 N6 \5 t$ {# E* U- W        static double usable_left_filtfilt[81000];
- ?! B  ~3 ?' z+ _% p8 ~! V6 h) Y        static double youXiaoShuJu_QuZhiLiu[81000];
, P! H  E/ v  ~0 F. @% V# |+ L        double mtmp;
, g: E2 i" v$ z1 e( l  R2 y        int ix;
# Y! s- a: \$ J- t9 m  U' q        boolean_T exitg2;
. S3 R6 u3 B( N6 `        boolean_T exitg1;( ]% d" A4 O; v* N
        double YiZhenShuJu[800];
  u+ g5 {2 f5 @$ ~5 \  e        double dv1[800];! _3 i9 M7 h" D8 R: z) E, s
. @, m5 O7 Y5 A+ ~

% x5 V! }- E  H        double b_YiZhenShuJu[800];
9 A, t; K% }1 @        double I_filtfilt[800];- F# S6 R# C2 n
        double Q_filtfilt[800];( h& N# t: J! H$ `
        creal_T b_I_filtfilt[800];
) H& u' A2 e/ l+ ~        creal_T b[800];' s( @$ P' ~2 t9 g
        creal_T RCRxSignal[50];
: L* C7 b2 W, k/ R        creal_T fineCompSignal[50];
/ ?2 C2 X" Y% l; D  s6 q0 Z! w        double phError[50];
6 ]4 d% |( {7 y, m7 [9 `+ D/ v        creal_T timingRecSignal_data[28];' ?3 ?7 D$ p' V" j9 F
        int timingRecSignal_size[1];; A$ E' k. T* q9 V% d' U# n
        double prbIdx_data[28];1 e0 c* }9 d' C- C/ w" j. p
        int prbIdx_size[1];
2 S# W- G3 x: J3 [/ S% _; s' w& c        double dtMt_data[28];
5 Y# p' y# [7 O" Z, F        int dtMt_size[1];; f7 f4 q2 i. g: X
        creal_T symFrame[25];# g4 \. N- ~9 h) f. C( N
        boolean_T isFrameValid;
1 I7 I6 ~4 z1 x; X; P: Q. y        double unusedU0[3];( O7 r3 p" Q* I# G/ \$ k) W  |

& c) t0 t& p% }, K. `        //调试过程中的变量1 ?8 e, J1 h6 Z' d: l) }. [; U) Z
        int  enough_data;$ s5 A2 z  J# O1 _/ N

, B) B% [' ]4 m4 _' v. @/ ?        int enoughDataFlag;
  C1 I, q# \0 U3 z9 M8 ~6 \        int yiDuanShuJu_mean_int;$ X9 {% Z8 N" b: r+ g+ u% Z! R" m
        int int_sum_dv0;# r% O" B. V3 a4 _
        int oo;+ y3 P. p4 q( Z) G
        int ii;
" H  v6 U( a% s$ w( [        myfuck=10;
. @" L; k$ z& D9 E7 g' n; o; Q        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
9 r  k" c8 ^  O. d5 |+ \7 N+ R2 o        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
0 _- l2 Z# T* u+ I. e1 q3 J/ k9 }! h  ^. ?
        yiDuanShuJu_mean = mean(data1000);
) g5 @0 e! B9 y! u) A# ]1 K' w$ ]
7 s% I7 ?! H6 c9 u4 K0 E1 X2 Q        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
$ T, v8 F, C& P4 f0 g        UARTPutc('A');
1 {2 p0 a& ~$ w1 C        UARTPutNum(yiDuanShuJu_mean_int);$ S" c- N# {/ I, S
        UARTPutc('\r');, y6 G0 p$ W  t( Z* M; A. V* }
        UARTPutc('\n');3 M8 X' f. @+ D2 i: W

6 U. U- f) y9 E) ^4 s. `/ A: S) n        for (ixstart = 0; ixstart < 1000; ixstart++) {, t4 G' P. u$ F' c7 R: M
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;; O8 T. s( p& h# V
        }7 T" l5 E  C1 [$ @" G8 m! n9 n

6 s+ u! r$ H6 [/ J8 y        power(yiDuanShuJu_LowMean, dv0);
# I& t; s3 W8 O2 r& d
3 ], a- F: t5 P8 i3 q        int_sum_dv0 = (int) sum(dv0);8 z$ H2 X/ H1 J; P" J" j

$ i1 G6 C4 n1 y  O- d" K+ L        UARTPutc('B');
0 X. X& c; D5 P" t        UARTPutNum(int_sum_dv0);
% K8 Z$ v3 u& L% l        UARTPutc('\r');
; b' `  e/ e5 c, J        UARTPutc('\n');
( R  W0 {( m2 X$ V) q$ r9 |1 t4 s& U0 O7 W7 p1 m9 u+ I0 G
//        int compareFlag = int_sum_dv0 > 1.0E+8;- h8 k1 {$ K! ?, v# B& K6 V. U

: p& D6 n8 e" Y$ _- `$ p        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
' e! a$ k$ Y0 ?: N- w3 }                UARTPutc('C');1 U7 m1 z! ~8 l' f5 a$ w" i5 x
                /*  比较信号能量 *// F3 O& H+ V5 I
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
" h3 Z' G% l) T. y: E# ]( c5 _//                yiDuanShuJu_mean = 1000.0 * youxiao_k;7 j" o7 @# x- F' r* D1 }  R
//                for (ixstart = 0; ixstart < 1000; ixstart++) {) ^" L) R( z2 C8 X- t0 W; w$ ]
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
' I, P# ?) D6 l: w+ m2 _//                                        yiDuanShuJu_LowMean[ixstart];
% S0 Q8 t  v4 A- z% h* }3 p//                }
! |9 k; N2 g$ f3 W, e//4 w9 P' P: }7 B2 s  C8 I  D
//                youxiao_k++;& U2 l; L6 r6 q5 _' b  a; c* f
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
9 o* l- ~0 ?. B: `) f* ^0 I: n, G//                        /* 感觉要取21个数,即0-20, */
( Z' ^, b$ N: q; d$ J/ G//                        enough_data = 10;//有效是10,无效是0
1 g2 R" Y& O8 M7 S/ |//                }
7 x7 t5 l! c2 V/ S8 q! u+ Z8 J        }
  }6 W6 L: H& I3 N
; G7 h! {1 n3 R/ E7 ]
( F3 h+ f6 T  u5 ]8 R. a        enoughDataFlag = 100;
" ~) B8 Z/ T. m8 a! D+ f        enoughDataFlag = 1000;- L3 T# f9 }! t' b9 u5 |& l
        enoughDataFlag = 0x02;, |# W7 n# l9 r5 I
        enoughDataFlag = 200;
4 w9 k7 N% M* o- e1 Z
3 ?; \7 f8 S# k4 D4 [: S" P7 R        int myfuvk1;
4 L( X6 e/ W) Y4 P' w8 P1 e$ p        myfuvk1 =11;
  ?" {" r8 ?  V% H) g( z. o2 z3 A  m% m$ e. e, B3 ^
9 c8 g' O$ e# ]- ?, V/ m6 o
        enough_data = 0;
( Q5 r5 [! ?# D+ u- Z
& s5 W- |  g" e( |6 O; h! e//        if(enough_data>50){
$ t6 d5 d2 h: \* Z% W* P//                enoughDataFlag=0x01;
5 `; D3 n1 Y1 B$ I4 a0 x1 {7 i' I1 s//        }else if(enough_data<50){% k6 ]5 W9 g, W
//                enoughDataFlag=0x00;//0x00还是不行
! V( _! X' Y% E" V- ~4 M  E% z//        }
/ }! I3 J- v- ~" ]% |0 O$ r3 W' e' ^1 F; _3 H

) a; Z, g4 ~% S; u2 Q7 n7 O1 ?        oo=10;
* u& \$ V( j0 N' |4 h: F. `, z; J        oo = oo  <  5;
% w2 Y( w2 j& B+ [; W        if(oo){
/ N  b8 |. A  M% c# K$ p- W( `) T                ii=0;' n% K* K$ R* m: m9 F! c9 p
        }" {, W% l. m& e& C
        if(oo  <  5){
7 x5 n. P' l! O( i- M# }                ii=0;% _5 {9 `. {8 O
        }
& O3 Q8 G' x% X( K& w2 A, _        if(oo  >  5){9 B$ u' j3 T- I4 s! O% j: z4 W
                ii=0;& u+ g2 n9 w# w; T8 u
        }0 x. v+ f6 N! |8 e9 n
( l; C/ ], W/ b7 v' R: T
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */+ u/ r, U$ l1 q' c
        /*  如果数据足够才执行主程序 */
8 c: P7 i+ p3 V4 f+ ~9 m        oo = oo  <  5;
' J0 S4 D  S; o( M* ]        enoughDataFlag = enoughDataFlag  <  5;7 r, L- r/ }1 o7 o9 G& k7 z5 I. Y, O
        if (enoughDataFlag  <  5) {
# O- w+ X9 ^4 {* u# O0 p1 Q//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0" V. s# }  i4 y0 L
                AGC_AGC(&pAGC);
8 x/ [2 M9 t: K' m0 w' t- M! U: a+ L/ z2 j  u7 d( f$ o
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);' G7 P. x5 {2 g2 f
                FIRDecimator_FIRDecimator(&pRxFilter);
6 u, m& r/ O4 p2 J, b) a* n9 B: D0 ^+ n& g2 P0 e0 k0 u7 O
                /* Downsampling */
- g/ |4 v! d0 ~4 D                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
4 q, r8 d# x5 }. v- B7 Z  ~/ J* d, C4 t3 l" |9 U1 j3 X3 `
                c_PreambleDetector_PreambleDete(&pPrbDet);, a0 V7 n3 Q: y) p/ `

% T: s4 M" s; _6 M3 f' T- n5 `                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
" B% H. V9 f8 x0 e3 o' p                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
4 o8 N- Y' n6 y+ x: D3 t( `                /*     %帧数量=100 */
) h  P5 c7 ?4 H8 {: I                pFrameSync.isInitialized = 0;1 Q2 G0 e% v. n+ |- u. N: |+ I
; {8 s" i! q' a
                /*  [EOF] */! G6 H3 \- n! }+ \4 K2 W
                /* 前导码长度是13 */" t. ]; E: Q3 Z9 \
                /*    %qpsk *// F7 m5 Z& F& e$ b4 w8 ~( ]
                pDataDecod.isInitialized = 0;7 w9 [+ X+ Y# l- o* d$ b
! F- Y! `0 S0 Z
                /*  end */2 n. c" z3 z/ e9 V% p1 ]( Q3 R5 Z
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
/ I- W: T+ Q$ x; ~0 u, x                /* Convert 3-dB frequency */- {6 Q+ I4 P6 u( z+ c: F; {
                /* Convert 3-dB frequency */
" s+ r3 B% \! N: o* {- z! |7 N/ j3 x1 P                filtfilt(save_buffer, usable_left_filtfilt);
) F  E3 a! L9 [! j                for (ixstart = 0; ixstart < 81000; ixstart++) {3 ^$ X% S- J, e. z& p0 @; N- H; b
                        usable_left_filtfilt[ixstart] *= 2.0;4 S! Y0 P. e3 O$ g
                }
/ B# S' m4 b, G4 o
! r+ K8 J0 Y3 G                /* 注意乘2,处理幅度 */  F9 M( A* r* F6 @, A. q/ o
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
7 Z9 ]* k+ J, }7 u/ U' Y                /*     %% 行列转换 */, q/ b+ B& |! j2 ~  ^/ ]" H
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);; R! e0 T, A  g! z4 s" {; \% J
                for (ixstart = 0; ixstart < 81000; ixstart++) {
% J8 T7 N! I# u" H                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]* I6 |6 u9 Z. a5 ]
                                        - yiDuanShuJu_mean;/ R8 p" z+ v9 K3 G
                }+ U; ?% h( S3 ?/ h; t; n

: U( d/ f+ _: P( m                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */0 d4 D* s9 U( ]8 m3 f+ @
                ixstart = 1;
4 q6 O6 M" x/ M7 n  u% v4 n5 U                mtmp = youXiaoShuJu_QuZhiLiu[0];. |- D( _8 r3 C2 {" b2 ~
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
1 J; d- D8 c" k6 M. t* X                        ix = 2;
# h! m0 b: p( ]                        exitg2 = false;0 y" q! N! j5 G+ b0 J2 [/ K' x
                        while ((!exitg2) && (ix < 81001)) {3 A2 x0 n& |$ c- c, w
                                ixstart = ix;: P- g8 @" b1 B6 c6 z  R
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
7 B/ _$ Y' I8 y                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];' t% g- h! `5 o
                                        exitg2 = true;3 J6 z% `7 W" c* d% |, R. e6 C8 X
                                } else {
/ A( z  B& o8 ?2 E+ `                                        ix++;9 U3 \8 V2 |  x: M7 J
                                }/ P* Y3 k- s  e1 d9 W
                        }
( b4 j6 l7 D4 V                }7 L: i- @3 d+ p$ L; z

% w9 U7 x* [* _, c                if (ixstart < 81000) {
( O5 i+ U. z0 ?% a                        while (ixstart + 1 < 81001) {) `4 q/ G- v$ ]7 D9 x  i5 Z$ V
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {9 K. p* b+ h$ }5 r* g- T* q4 f
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
$ ~$ {9 E4 ^8 H                                }
, ~% x, w- ~, u* C$ f6 ^2 P8 v
                                ixstart++;
% B& l; e# A& v                        }
. R4 E. C8 z+ C( Z2 V$ Z                }
) X! G0 F$ B+ {9 J* z/ b4 j' R. n; f
                ixstart = 1;' X" U0 [  l2 B* Y! e
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
- M- b' z5 _& I: K                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# s5 g- |" H/ Z  U  i  l' B
                        ix = 2;% y4 Q$ W/ i1 ]# @4 y% R
                        exitg1 = false;* T; j' m4 L% X% m+ e9 U
                        while ((!exitg1) && (ix < 81001)) {$ y( ^/ X) b6 r7 m$ u' `( u3 v4 c! k
                                ixstart = ix;7 C7 o, b; c+ \, `( z
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {, i# I: ]$ N7 ?: j
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];7 t0 y/ k! Z+ `5 V
                                        exitg1 = true;2 _, V$ \2 W5 C3 t  c8 y" Y  E
                                } else {2 Q& Q+ d4 y& o# I5 U0 X7 o# {5 ?
                                        ix++;7 Q; N% H: |* b1 d
                                }
7 z6 E( d3 K5 W  c# n. I0 F+ r                        }
- a# u# ~7 G& a2 S! y! c                }
5 m8 t- b0 O0 ~0 H  F* s% B& o* B- |% A$ N4 X0 s4 ]( L6 Q
                if (ixstart < 81000) {
# l/ p* T1 Q" J# I! S                        while (ixstart + 1 < 81001) {- D7 j$ |# O) G/ Z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
3 Q* c& g. q3 I/ @9 ^! U                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];1 I/ A) T( Y- I
                                }6 S( f0 O3 p1 j9 m7 O
) Z/ W  f$ H3 D. C/ p; ?" I
                                ixstart++;
- g# j& i" ?6 g! e9 d                        }. C1 O* }: H& e# L- ^! ]
                }5 j* c8 w4 r' d3 v0 G. e1 n( I9 W

" N/ l$ Y4 K! u, L                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);3 o6 W7 H& z1 g0 D# }$ @4 h( `- ]
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
% i' b: ?" @) k9 z6 r$ e. G                        yiDuanShuJu_mean = mtmp;4 \. i- Q1 P0 |+ `& \
                }
! W) V0 {! R: _2 F7 T
, B8 X0 d, h( w& v  k" v                /*  找出极值 */
' F0 n" V- y0 y, h                for (ixstart = 0; ixstart < 81000; ixstart++) {
# n" O1 a- }! l1 x  K                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;" T# |* \: T; v" ^' o8 {
                }1 [2 M5 e6 W7 V
: A* a4 j$ g" y9 F0 S
        --------------帖子字数限制------------------
% C8 j# n4 \8 v}
' D2 @! H! ~5 ~; H/ }) {# P
3 A" }) ]/ N- W3 T; f; W4 y1 J" t. l! s, a7 d4 \+ W* z4 F. B

本帖子中包含更多资源

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

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 17:18 , Processed in 0.042557 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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