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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
* t+ ?; X6 G6 Q) {/ {; F" W( ~& f2 K- h  S( I% F8 _- ]
各位大神:* L0 ~+ u0 k& L% B0 |
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)& ]4 w! I. E- M) v
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:( b6 i  h5 C& B9 e

. n8 i5 C3 `/ S- a0 g# f& u     9 T4 H4 J4 E7 D" H. T
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。6 K0 p8 O; _4 R9 j

4 @- p$ d( U. C4 W1 G8 d5 a并没有其他线程
  B3 @5 x! Q  V反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
8 m: {& S+ Q' ~% J也说不定是和堆栈有关系。。。。。。
0 C, C- B& f8 t& V7 X1 s+ x' B! l请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数...., l& Z* r$ j6 f8 {9 d/ u$ x
8 ~" S# F. f5 V- ]8 {" X

1 i' x- C8 D4 D3 O" P! O5 S" h. j% t! L8 R' N* I, Y
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
% Z+ \) I- i$ m0 R3 L9 {
4 W, P0 P9 [: v; l& {
% }% h( v0 ?% B+ W附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
' n; V. a) t6 v  o4 T0 S& g        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
  @4 N; ?' d0 S/ B% T% H) L, Y
/ G8 K. Y6 T( J" h8 _/ R# |boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
6 u9 ]0 `9 A! E( Y+ @# ?/ n4 y! N                const double data1000[1000]) {
' G4 N+ u' L, X% Y( h! i8 G1 ]: p" x, O  ^7 u! P
        int myfuck;7 ]) ^7 o' D% `, N. A
        double yiDuanShuJu_mean;
' i: T( E1 s/ C+ i# Q+ @# e8 D        double yiDuanShuJu_LowMean[1000];% j0 ^. X3 |% l) `
        int ixstart;
& @  _: M0 \. W4 B- y. z. l        double dv0[1000];
8 X8 K4 f' u) Z7 E; ?5 D        comm_AGC pAGC;0 q+ v- _* X- R( T; x5 K4 ?
        comm_CarrierSynchronizer pFineFreqCompensator;4 L1 T4 Z9 k& ]7 D
        dspcodegen_FIRDecimator pRxFilter;, X+ t7 @1 ]; F5 l6 F% Z
        comm_SymbolSynchronizer pTimingRec;- V7 [  @. |* V
        comm_PreambleDetector pPrbDet;
$ V& i# u- u% r3 s. t" W0 G        FrameSynchronizer pFrameSync;
1 x2 F4 {2 f7 m* U        QPSKDataDecoder pDataDecod;
/ v* d* W) d4 e2 f$ Y, H/ b; {        static double usable_left_filtfilt[81000];
) q( H. V$ P& C7 G4 H. V! C        static double youXiaoShuJu_QuZhiLiu[81000];
; X! e+ C4 Z5 L5 c4 s2 ^        double mtmp;4 |. `6 q4 ^% S; W, D" \
        int ix;1 l, z: @7 a; z0 |4 g3 L
        boolean_T exitg2;& F$ U/ Y, w& p: n6 [- _
        boolean_T exitg1;
& N- ^& P, p4 c3 X        double YiZhenShuJu[800];" ?& {# Q' Z+ n4 C& k) m
        double dv1[800];
) S7 `2 W; G4 t- B9 o, i1 l3 Q( j7 j+ g+ C# r* q1 |$ z' X* ?+ _
3 m% b7 ^. h, f, P8 ^/ V7 _2 \
        double b_YiZhenShuJu[800];  X' }* R! h/ _% r- L! I( z( l
        double I_filtfilt[800];
" k% A7 G; ~$ Y1 z1 k        double Q_filtfilt[800];
: }0 w# v. m( n! h. g        creal_T b_I_filtfilt[800];
) K% F5 w2 }( }9 C' Y6 l2 u* W+ v/ K        creal_T b[800];4 L# Y( W8 K) z+ i* S* n
        creal_T RCRxSignal[50];/ {( G# u+ Z. d* g6 P+ l0 B+ r; i  J7 V
        creal_T fineCompSignal[50];/ ^/ C0 d# ]+ a4 F0 |+ w  C
        double phError[50];
! j( i4 J: S. A( c" @        creal_T timingRecSignal_data[28];( c9 l$ H; ^9 F$ [+ i: j8 Z2 [
        int timingRecSignal_size[1];- q3 |$ F9 h0 E
        double prbIdx_data[28];
2 \: g+ F6 |" h! k; i* x        int prbIdx_size[1];
: {0 G. e! W1 ?! Q' W        double dtMt_data[28];3 ]8 ^; g. F1 {0 K6 n' N+ N1 t
        int dtMt_size[1];
5 P+ s) s  M4 p# C* T' [        creal_T symFrame[25];
/ b* M3 y$ c4 q( J$ I2 B0 l9 P        boolean_T isFrameValid;
# N7 E& o! y6 i+ ^, I        double unusedU0[3];* z; s' Y6 z. y  T7 M

  k6 [% g1 T8 i: y; o- @3 w; P        //调试过程中的变量
6 U0 n6 q0 s% V+ \, ~* E! v        int  enough_data;
: V% `, a1 i- L" b( @
- g) x( J! \% ?  j3 C' s        int enoughDataFlag;0 n. O" V* n$ g! H; y6 Q
        int yiDuanShuJu_mean_int;
# `2 j9 l- Y& J4 a# |- c# W+ _        int int_sum_dv0;4 I$ q, S9 a4 H% G
        int oo;
5 e8 C! H5 X2 i7 I. V4 D  A+ s1 c7 x        int ii;
! R% ^7 M" X" M* s. a6 z& `        myfuck=10;
7 u6 {, i6 p; u. ^+ X% s; H* Q$ G        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
; U) ], l0 e& u1 k        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */, t7 L" g% X2 V" [

0 ~9 Y3 o& X- a        yiDuanShuJu_mean = mean(data1000);
4 ^& C( G; R" l0 x% }
% n' w7 w5 y8 S4 l( W( t9 w        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;$ f, j. |3 _! ~6 R# s5 n
        UARTPutc('A');
7 p0 S7 g0 L9 c9 A6 w        UARTPutNum(yiDuanShuJu_mean_int);0 x$ Z, H# m5 R  X% \" j+ f
        UARTPutc('\r');7 ?, N9 z" O% D+ a# K
        UARTPutc('\n');9 V9 P  k% Y9 c1 v0 ^1 i, i# y
3 V' y- P/ z) i' L/ U  U
        for (ixstart = 0; ixstart < 1000; ixstart++) {* Q/ d, h; B; X
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;9 ^/ I5 K  {: ~# V) A4 C
        }# D3 X+ J  N1 J. n, w3 `
" n& w$ P3 ~4 n  k1 P8 Z
        power(yiDuanShuJu_LowMean, dv0);
" S1 Q9 I: t9 v! F- H! Y2 ^3 G3 k3 r
        int_sum_dv0 = (int) sum(dv0);
( i5 y: p" _: t# k; D! r, n7 n& N2 j7 k$ a) `: b: P& C$ m0 W" M/ l" j
        UARTPutc('B');5 x/ \% A8 V) u8 f
        UARTPutNum(int_sum_dv0);
' _8 M2 \- m7 `( ~3 Q        UARTPutc('\r');# N( L6 l& R4 f' y/ ?
        UARTPutc('\n');0 r$ P5 e% ~$ T( Q/ s5 c$ W- v
8 u7 e( W4 c0 l( W" ^5 I6 d
//        int compareFlag = int_sum_dv0 > 1.0E+8;
5 j% z/ X+ f) I$ p: p: _* s, X6 ^5 U6 K9 q
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
! G8 m/ \+ p- x3 @& @                UARTPutc('C');
; h' i+ Q+ y& }0 c' l                /*  比较信号能量 */4 w: d5 I- o+ A
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
* V# N( F( m7 |//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
& Y0 D/ m$ l: Z4 w4 w6 E# @' d3 ~//                for (ixstart = 0; ixstart < 1000; ixstart++) {7 {/ u3 J* ~$ W& c7 I
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
: @. W- K% r# d" o//                                        yiDuanShuJu_LowMean[ixstart];: ?* e/ u3 `& c1 W2 f. ^
//                }
& S5 d, }4 Y8 C+ e& x9 H8 M//
! b: [; d& K! O, `9 J8 n8 M//                youxiao_k++;
6 I- o5 }( M. d& A; e% S# n4 |+ v//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==6 D7 F% d. j9 Q7 c7 j2 O! s
//                        /* 感觉要取21个数,即0-20, */
9 q& O5 N$ s! n0 Y- ^9 m//                        enough_data = 10;//有效是10,无效是0- R% }% Z) C4 B
//                }
# c: p) R8 U) g! v+ I        }
% p) D; Y* O% |1 u% L2 b0 n5 m% `
* x7 w& i  w8 ]3 L0 y4 V/ Z9 @4 E, m3 n# k4 l
        enoughDataFlag = 100;; {7 W/ o) U+ ?8 s
        enoughDataFlag = 1000;
' ?9 V- P7 Y2 d7 p        enoughDataFlag = 0x02;
/ x) _: [0 K2 d, S6 x        enoughDataFlag = 200;
! s9 U4 i% d3 V" G* w) J8 D  j8 G2 x8 k
' j! ]3 ?' D. Z* S' y* K        int myfuvk1;
0 i/ K! N0 b2 D% _) m" G6 ]        myfuvk1 =11;( e  W0 b, y, M3 [+ p
3 W. a( G8 e% R9 f

) j% i/ s9 Q6 Z9 I) B        enough_data = 0;
% A. f8 _4 K3 D. P! X" I
2 u9 J, }% L& a; `//        if(enough_data>50){
' E6 T+ I8 g3 e% i: d: k$ `, E, S4 p$ |7 J//                enoughDataFlag=0x01;. R4 [! m! M0 z  x. B5 [
//        }else if(enough_data<50){
1 U$ P' m, ]3 r" S" q& N7 R//                enoughDataFlag=0x00;//0x00还是不行. e7 y0 h% Z+ n5 j! E6 p0 H/ c" m# ?
//        }& M3 U/ x/ W6 Y( p6 t& D  ~/ J# [
3 ~3 _: f0 r3 I* G& ^+ d

# k9 n- ?( H9 n7 I        oo=10;. ^+ ~# d' c6 Q
        oo = oo  <  5;% B/ R/ `1 q$ i8 _" {' L0 ~, T
        if(oo){
& e1 X( j" }7 B2 |+ `. l                ii=0;
. h* G4 x: G; s( F% I        }/ z( ~' B! I9 S6 G  i6 x
        if(oo  <  5){
$ _8 m3 l& |& I; O5 g; Q                ii=0;
* z. C8 i* @5 m/ ?. C9 X1 T        }" J0 U/ h+ e3 }) e( b# \
        if(oo  >  5){" w$ [5 D' S# ?
                ii=0;
" P. ^4 d& g: A' o! x1 T/ f9 d        }  R9 \  |+ r" S, e7 a: o' ]

) H1 L6 c( E3 @! j! l        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
1 @9 i/ [$ k# P& j, Q" X" t3 {        /*  如果数据足够才执行主程序 */4 M' V' Z/ i. N$ a% i5 A9 a
        oo = oo  <  5;
5 C. j. q8 u6 G7 i        enoughDataFlag = enoughDataFlag  <  5;
: H; H3 n4 F- P& l% D- R9 E. V        if (enoughDataFlag  <  5) {
" K$ K3 m( R# [- _//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0: N# _1 f7 ], ?( Q; c
                AGC_AGC(&pAGC);
0 H( @! s" C2 ^% S& x# w3 a# |1 {8 g  V5 s
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);2 w/ U/ E' S- {9 J- H  L
                FIRDecimator_FIRDecimator(&pRxFilter);
! s' t3 Y3 s; O% b1 B& K) f% y- j' ?! i. Z1 k0 g
                /* Downsampling */
; C+ a  r5 S6 K7 `  e3 r& B                c_SymbolSynchronizer_SymbolSync(&pTimingRec);* r$ G4 Y1 F6 ^4 H4 \! j! ]6 n

8 R! J  c) _& U9 O% \% H8 ^                c_PreambleDetector_PreambleDete(&pPrbDet);
9 {3 d& P$ E8 \- e# u( z# W( q$ R- B4 v& D$ E
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */7 ?1 e  U8 a% A8 L
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */* D6 n5 b" F& q. t3 M% f8 C0 |
                /*     %帧数量=100 */
$ C" A1 s8 q8 U                pFrameSync.isInitialized = 0;
1 k0 h7 S4 Z0 {8 V5 ]- E5 J: b
                /*  [EOF] */, o" v7 ^' v  x/ U
                /* 前导码长度是13 */3 r7 e6 ^- y. Z0 S! D/ ~
                /*    %qpsk */% d3 e8 d  ]* Z" P: \
                pDataDecod.isInitialized = 0;
0 o1 p$ w& S) n" N7 `
: l9 Y% U1 y' F$ M$ u7 D                /*  end */! E, z# m! F( p
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */3 |1 G- a5 n" f3 [6 y3 ]) e1 S  y. M
                /* Convert 3-dB frequency */+ E& R# F4 n+ y; E9 D5 B7 B; y
                /* Convert 3-dB frequency */! k- U) ]* G5 Z! z% u
                filtfilt(save_buffer, usable_left_filtfilt);
, `- f, b: ~& _( q9 Q1 @' t                for (ixstart = 0; ixstart < 81000; ixstart++) {
( r' N: z. e/ c& Z" n                        usable_left_filtfilt[ixstart] *= 2.0;
  e3 t$ P* u- [' t8 T( Z' I                }
: X& N4 ~4 R0 z! r# h) _& p7 R% y& T7 g: f. s- Y6 H. C: j/ E5 x
                /* 注意乘2,处理幅度 */) t% s5 a9 A* {( Q
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */. o8 n' U" A) |" f! ?3 Q6 A5 n! w
                /*     %% 行列转换 */+ s0 b' D) B+ O. ~5 R
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);4 o; F  F' a0 u# n; K) P9 z
                for (ixstart = 0; ixstart < 81000; ixstart++) {
* T' _* \4 H. R8 j# Q8 H                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]! e. X3 U" d; m% W3 W9 V% N. ]
                                        - yiDuanShuJu_mean;# ]5 R' B7 l6 C; v9 w
                }6 l2 l0 r+ j7 j8 N/ ?

" v; M# C, {$ d                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */& Q, s6 C2 M; |* w. [+ Y  q
                ixstart = 1;7 y0 P& O: t& ~" ^- I2 T
                mtmp = youXiaoShuJu_QuZhiLiu[0];
9 u7 B/ Z# m. d& v0 v5 a                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# t" ]/ J  O+ m# G6 G
                        ix = 2;
2 r( C: r! X/ _2 i" [0 v& |% O                        exitg2 = false;
! Z& k  X9 P6 h( N                        while ((!exitg2) && (ix < 81001)) {
# E/ [/ Z5 p% N! \3 q# s+ E- O% t' A                                ixstart = ix;4 }2 \1 Y1 [/ s
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 J7 P8 W' [- L8 v) g9 ?& |
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
0 \' @: T: _+ M9 w                                        exitg2 = true;
% Y* W, h0 F/ a& k, x2 P1 l& @0 F                                } else {0 s# \3 ~3 {# n" h: B# e: r8 ~
                                        ix++;
9 g: u1 A/ W, o/ V! s                                }
& j0 d' A& i3 |                        }: U2 W& @8 E1 C, `; ~
                }
, H* l3 C7 i5 [: g0 @/ d9 f
3 w& L% k+ J1 ^                if (ixstart < 81000) {
) i" _* V' T; y                        while (ixstart + 1 < 81001) {
. U4 s" J. Z7 H) o! M                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
5 v9 B! I0 I" x- }- {                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
8 z! l/ c4 W) ?' E% ?% k. w                                }
# y# ^! X9 e4 ?) u  ~' j, o' ^3 a* S  T/ T
                                ixstart++;6 W: m7 X: V# j* _  Q6 R7 Y) [
                        }
* K/ W: l; Y; r1 f                }  Y4 d8 N% I/ p0 V, T
( o- u. ^4 S" h
                ixstart = 1;1 i: O7 i; E. d
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
2 l# s, d" M+ w7 ^5 ], ^$ U/ a                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( ]9 e3 |# T% Z; F4 t                        ix = 2;6 a: b# ~- f) d4 \. ]
                        exitg1 = false;
' B4 d: u. B' W: r1 s                        while ((!exitg1) && (ix < 81001)) {
* s3 g* a" m8 j" p& |                                ixstart = ix;$ l& c4 n) S) J7 ]) b4 ?; k: z+ v
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {9 ^, G; L: Y$ B8 x5 H
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
& F" E1 a8 [2 W+ S                                        exitg1 = true;" f9 d1 o7 ~3 y$ f
                                } else {' F8 t( y1 D4 p
                                        ix++;/ Q; A8 s3 K+ R2 p6 r5 O+ v
                                }; B& @+ ~$ a8 p# k; B- Z; @
                        }
* L9 M/ W4 K( I, W* r$ j                }
4 {6 P; d0 F/ X7 H6 a3 j
# a9 x1 Y% z  e# p& M' {$ y                if (ixstart < 81000) {$ K# Q1 T! [( D% B% _% V, |
                        while (ixstart + 1 < 81001) {
4 ~2 \) ?+ n+ E7 ?) i& d8 A6 A+ ^" |                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {& @- a( }: ?; b$ i: K9 a
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];0 @6 G$ V, {  e3 n& g
                                }
$ X! u% Y6 V) D+ L
% s; h3 `7 p6 V$ N! S6 g+ p* w                                ixstart++;
* X8 \3 ]% r# `                        }
7 g! {$ ]" _" j" L                }
6 c" r4 ]& G" \! f5 g0 d2 o2 f
8 p& k) c( ]" S2 a                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);5 J5 h! B- c& l8 L* G. N
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {  ^$ _% O1 k7 W% o1 O
                        yiDuanShuJu_mean = mtmp;
0 d: @' X( u- }3 b$ w" r' N2 G                }
: w6 c$ s; G  R: o$ t% p& i7 ^+ Z5 r4 C* ]
                /*  找出极值 */$ p4 d5 k5 e+ h5 K$ {$ @4 R) R4 I' }
                for (ixstart = 0; ixstart < 81000; ixstart++) {% X! C' A& j4 C! B+ t/ u( X) J
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;( I$ W/ x' ~* J# H* U3 a; Z1 L3 P
                }/ X( h4 W, z) R' I( c

2 A: H* Q& i" F        --------------帖子字数限制------------------
9 ]+ D0 Q! p1 L4 V3 s, P+ `}
0 p0 h9 T  X; ^  s4 B7 I+ v2 h9 `$ X

  ?0 h" I: [  z0 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 23:58 , Processed in 0.041675 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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