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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
1 q; S* v5 H1 e4 }$ u# ?6 |+ G  l% K* `9 _; ]* q  ~* t1 x3 [: Z$ r
各位大神:  K% z& S" f9 s. w* {$ p
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)3 G2 w" o+ x4 O" l$ ~% @1 Q
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:! z  y  B  o- C" c
! L+ S/ I. K# n
     
! t, }9 W: R3 }. h这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
  D- d1 Y: b: t4 c: Y
% B+ j1 b, ^0 E  J4 u+ i% ~并没有其他线程
) v) o' J) F; X/ `3 O1 K  {7 c% n9 X4 i反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
9 w8 L  [) E0 S' o& F5 s( b0 g0 X8 u也说不定是和堆栈有关系。。。。。。* c) A$ k/ e( g* p! o: {. j; E
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....' U5 W0 B% U9 m0 `+ a! o
( v7 i, [) a& e& w1 p" Y
8 A8 j! t* [8 L2 o) p$ p3 K
. w: n* K* U/ E, p( c& x( `: ^8 j
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
9 J5 l6 f, T& j* o
/ z. c' z* W4 `& g2 |1 r3 o% X/ m+ ^& L: r( m
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
" d! h( \# @' q9 g0 x5 R5 [        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。3 t3 j" r1 F! z
! l& ^2 \0 J4 d: T1 ^
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
* s! P: o* e4 ^+ p3 J                const double data1000[1000]) {
$ Z9 Y3 l- A2 @# q/ `  i
/ a) l$ }* K3 P: V. z        int myfuck;
" Y0 ~! L! e" x5 W3 H1 v        double yiDuanShuJu_mean;8 c+ k9 ?3 n$ e3 ]- g
        double yiDuanShuJu_LowMean[1000];
2 r8 l/ I" b* b: {0 H. Y+ y        int ixstart;+ ^- [+ p8 v- E% q  I$ E4 g
        double dv0[1000];7 S, Y. ^' ?# l1 A
        comm_AGC pAGC;
: g" N* D( t' R3 _8 }. {& P7 `/ k        comm_CarrierSynchronizer pFineFreqCompensator;0 u* \  z7 q7 }3 Z  t0 t0 }
        dspcodegen_FIRDecimator pRxFilter;
' @" l% P2 G. N5 B0 e1 P        comm_SymbolSynchronizer pTimingRec;. Q( {6 A5 w" s& N7 i
        comm_PreambleDetector pPrbDet;5 Y7 J  i* a/ Q. ^
        FrameSynchronizer pFrameSync;0 x, ]5 S% q: |; f* r. W
        QPSKDataDecoder pDataDecod;
4 a# B3 A, y' N$ n! R0 S* t        static double usable_left_filtfilt[81000];. Y  r* q/ `# m6 P& P0 v: J
        static double youXiaoShuJu_QuZhiLiu[81000];
; f0 V( @0 ?/ M+ L$ [        double mtmp;5 |( [: f- y5 V0 }  B: ]
        int ix;
" d- ~0 C4 Q* h: s$ _4 w" m        boolean_T exitg2;
) N5 E) b, B4 N; {- Y) q        boolean_T exitg1;+ s# N2 J# d& d
        double YiZhenShuJu[800];: M7 [6 M( [$ y
        double dv1[800];
) B2 M2 K# u- t  z9 q- a9 x' l) q3 b  Y; F8 f0 i# B
! B% g- U" ?' u2 r4 h; @: j- S
        double b_YiZhenShuJu[800];4 Y1 m3 i+ \: O- d1 M
        double I_filtfilt[800];; t& @5 b& j" v% ~
        double Q_filtfilt[800];* O# j5 j. d; V; d
        creal_T b_I_filtfilt[800];
* c. n) W" u* `2 X- Y  d3 H$ n4 i        creal_T b[800];
3 O" y- H0 w+ G% Y$ x3 q        creal_T RCRxSignal[50];9 {8 M! y- ~% V0 p& U8 |
        creal_T fineCompSignal[50];7 P4 _) n. [; ]* i! @  w/ ]
        double phError[50];
. p5 T6 }1 m) x: n0 ]4 u, U3 L! n        creal_T timingRecSignal_data[28];0 K3 Z8 K# _0 @; c1 \. T
        int timingRecSignal_size[1];
+ \3 b. B2 I: W" S" ^0 \3 `        double prbIdx_data[28];
; |; z0 ^$ e% r        int prbIdx_size[1];0 H2 b$ L3 J  k) Z+ e$ ]$ r
        double dtMt_data[28];
, A+ \, d+ l' V        int dtMt_size[1];  j( `2 C) ]6 V( n9 C" a: y$ U
        creal_T symFrame[25];1 i0 e( a) N' S; F% p
        boolean_T isFrameValid;
# L. s; e7 d6 }4 c9 s        double unusedU0[3];
" q4 C5 g! g, a0 {
$ G( k8 V0 A- Q( K  s        //调试过程中的变量4 V( ^% d' o- \/ E
        int  enough_data;
0 M, ]7 y1 {4 d. y* I
1 T* p. q& V# k4 d) @. W; v8 H        int enoughDataFlag;
8 ~! |% f) _0 W) o, ]1 Y        int yiDuanShuJu_mean_int;* ]3 l% T! f4 d
        int int_sum_dv0;
; r& P+ S6 s, ~( g7 b) g        int oo;
6 b( h: r$ h9 a        int ii;
1 `' u% H. f- ]# v2 J        myfuck=10;' k6 s4 f: y& f5 G' C' P* L
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */3 j; U3 M  ?1 P! ^8 \7 W
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
+ @( [6 R6 h4 X! C; @& L! V8 k" l0 b" h) w6 L' m
        yiDuanShuJu_mean = mean(data1000);
8 E; T4 y' e* l% W% n8 P4 U7 ~6 C' ~  }' o5 O
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;8 d5 z  p) l* o7 S
        UARTPutc('A');
" N5 ?" R9 v. P        UARTPutNum(yiDuanShuJu_mean_int);& V) C* R; f4 y$ l$ E
        UARTPutc('\r');* G9 B5 v4 `& U6 w/ @
        UARTPutc('\n');$ V5 n( A2 \# s! Y& ]
5 n0 L# b" Q+ R4 w
        for (ixstart = 0; ixstart < 1000; ixstart++) {
  H% k9 ~6 G9 p. X0 }                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;% I- W" e9 k+ t
        }
. l- @; ?4 h% h) W1 u% Q2 _/ J* }! A( @
        power(yiDuanShuJu_LowMean, dv0);! b0 G- [, t8 r% r0 C& \# A

1 W" s# n2 {; E* e$ ~) f        int_sum_dv0 = (int) sum(dv0);
* U" @9 S! ~; A" N6 X
: @# Z+ @+ r) m3 `% w0 j        UARTPutc('B');/ V+ ]( s0 e5 h) L# E: I2 I/ A' F
        UARTPutNum(int_sum_dv0);
/ C5 t7 l$ Q0 ~: b6 ~" z        UARTPutc('\r');
0 e3 l& @5 \, E8 b: b8 {6 `        UARTPutc('\n');
, \  w! `; h0 Q) z- K# @! Q$ b1 r! I7 J) J1 X. Q8 @
//        int compareFlag = int_sum_dv0 > 1.0E+8;
6 T* n+ g0 [8 B8 R" @. A
5 e' d& E: o- n$ e; D        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
" j0 y9 L5 D- [! A- t( Z                UARTPutc('C');: v2 G4 |7 V7 |: ~8 F* c) q8 @# N
                /*  比较信号能量 */
' u6 c; }2 B6 B. h" B1 M8 r9 _                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
' A8 [; h) g! t6 ]) b4 }//                yiDuanShuJu_mean = 1000.0 * youxiao_k;) u+ `2 i) V# s6 S/ C5 B$ E) C/ i
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
0 m% d! N( o* A$ K2 c# F//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =# o/ k- o' a% O0 b. S! c% I
//                                        yiDuanShuJu_LowMean[ixstart];6 O& b7 D5 u- r! K4 t
//                }! N, b1 e( n& ?8 U- w, J
//% p0 D0 B3 m$ w4 B* ~% ^* x
//                youxiao_k++;- C9 o% [+ f6 ~; f4 p- Y5 j* D
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
3 b3 ~- `* M3 D" _//                        /* 感觉要取21个数,即0-20, */( s; F+ ~& R9 {
//                        enough_data = 10;//有效是10,无效是0
) y/ P4 Y" i2 Z5 A0 Z- l4 P3 P//                }% }' C7 F) Q& j" S5 ?- x7 D& P
        }
4 J- ~' W7 _' @* @9 j$ a. N* {3 V. {* Y$ N: k2 [
0 |& Q6 x. z, h3 H* P1 i* t5 e
        enoughDataFlag = 100;, q, X" @, x8 G% }: i
        enoughDataFlag = 1000;( P# V. U/ v8 v7 }3 l8 H; |
        enoughDataFlag = 0x02;( X6 R1 p$ A% ?4 p
        enoughDataFlag = 200;/ W3 V2 K& J0 X6 @
: O& r4 O0 I& @; I0 j# y
        int myfuvk1;
+ M" g% J, t7 B        myfuvk1 =11;: t; H- B3 Z) v0 c) \7 ^
* ]: G' z) N9 ]( x5 n5 }
- o+ n8 ]5 D( O
        enough_data = 0;1 k9 D& p) E* Q+ c* d

0 ^; A$ q0 @1 v7 H0 F//        if(enough_data>50){
$ P. s+ T- F5 k* g1 F4 H' Q/ O//                enoughDataFlag=0x01;- X4 J! j* k; ^
//        }else if(enough_data<50){8 K" I/ M$ ?# o$ q! n" U
//                enoughDataFlag=0x00;//0x00还是不行
1 }, Z* L8 R) h//        }" K! E$ A0 d1 m$ M2 M$ V! H

8 @! A1 M6 Z( M; J1 [0 q) \
9 W# l3 _5 w! R$ a        oo=10;& v6 t- y: ?5 w% W4 R
        oo = oo  <  5;! y% k" v1 X3 S) d" o$ Q
        if(oo){7 z' V7 G& p8 P% d5 i; E% C. Q
                ii=0;
5 P" o2 S+ B5 m        }
/ t# S* Z5 k/ S' l. {0 K        if(oo  <  5){" W' ]4 x* A: H7 o/ Q: f2 w& n* V0 M
                ii=0;
8 U+ P$ o; E- z# w9 t+ l6 z        }
+ `2 E$ m' n2 ]: P        if(oo  >  5){9 m: A6 o  U0 u5 K
                ii=0;( R. L1 ]% v/ ~! f! K. C
        }
/ A& ]. Z7 S! w, ~+ q1 d+ U' P9 b: n0 b/ @8 X
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */7 S, k/ g: g" C# l3 d' Y
        /*  如果数据足够才执行主程序 */, E5 I! W9 ^- q6 H- Z  E( `
        oo = oo  <  5;$ V: F5 \; p4 _  r- S
        enoughDataFlag = enoughDataFlag  <  5;  @, ~& k% W* |
        if (enoughDataFlag  <  5) {
$ |( I# c- e+ t) n0 l- h//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0, l4 K" G. i* v, x# j5 x! U+ [7 }4 k9 n
                AGC_AGC(&pAGC);
% f& E) p4 V& d$ B& t+ K# D5 \/ z% r3 p) y. g8 P( @/ r
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);- K9 K9 u1 x8 M3 l7 _; O
                FIRDecimator_FIRDecimator(&pRxFilter);
3 A: a: ~0 o6 g( v1 j( O- W5 I6 d3 N* s9 u. Z
                /* Downsampling */2 s# ^6 n" q. y& q: _" d1 v1 |
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
7 q# {9 y* M1 W9 Z6 Q/ m
! a# O1 x, m* ^2 h5 t                c_PreambleDetector_PreambleDete(&pPrbDet);
& c5 r; _2 T' |# J  c9 ~5 v, @( Z0 h8 L% J9 R
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) R0 W! W$ @2 D. i' \* T                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */3 A3 I3 q9 e9 w! z* D# Q
                /*     %帧数量=100 */
4 D. ^7 C! ~3 }' _% \. r' I5 _                pFrameSync.isInitialized = 0;
% J2 {2 L& P8 a: @7 R( }9 E# [3 b4 P$ z
                /*  [EOF] */
6 Z: f) u2 Y- }! Q0 A                /* 前导码长度是13 */& [+ M6 X* o4 K& v4 h/ X" c
                /*    %qpsk */
6 N# d) s' a$ Q8 u1 H- \: f                pDataDecod.isInitialized = 0;' H5 t. Y1 P% n, Z: t- s7 w
* F% a0 V4 u, @8 z  }
                /*  end */
9 n1 H/ S% A4 Q- s6 s$ u                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */9 D3 k' L; G; c9 ^* k, v) r1 N) k2 B
                /* Convert 3-dB frequency */
( _- z4 O+ {7 f/ Z; I8 u                /* Convert 3-dB frequency */
" T- Z! b3 p) Y" Y4 m                filtfilt(save_buffer, usable_left_filtfilt);6 R* _/ v" d- n
                for (ixstart = 0; ixstart < 81000; ixstart++) {3 X; k7 D" f) s
                        usable_left_filtfilt[ixstart] *= 2.0;
* w5 s4 a7 x  _% a$ k                }
0 i" Q+ x; ^% u" V3 b3 F6 c: ]* b+ m+ M6 R
- T' @4 _4 h, o7 \* [  [                /* 注意乘2,处理幅度 */
8 u/ H4 `8 a1 B: M5 E& k. ?- Q! v                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
$ T4 e7 d% Y' T                /*     %% 行列转换 */3 i  _4 I; C% [
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
) g5 G& z! C4 |4 V0 W) m, X                for (ixstart = 0; ixstart < 81000; ixstart++) {6 [1 ~( H# a8 G6 R9 \$ _, {
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' V1 t6 Q* U1 s$ o6 d2 k' ~4 M                                        - yiDuanShuJu_mean;
% C7 Z- J$ R  S+ H                }
( ~- \- X1 @$ m: T! N+ o9 ?% S' X5 V4 p' \+ u  A
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */& ^/ L2 ?' L2 |
                ixstart = 1;( ?0 p- x9 R6 ?9 V* V- a
                mtmp = youXiaoShuJu_QuZhiLiu[0];9 j9 ^, z9 z. d7 u' q
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. F( W% B( \7 L* [9 r* v
                        ix = 2;
* L  {' `1 s+ Q' r  _! X                        exitg2 = false;* W* K" c' }8 l
                        while ((!exitg2) && (ix < 81001)) {
$ Q5 C& C7 ]& i; o8 l- V                                ixstart = ix;- l. Z# g- q; p2 `
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
2 J9 M8 v8 p. t                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];" r9 V, j+ D# N
                                        exitg2 = true;" ]$ t5 x6 @$ L5 N6 U
                                } else {+ i, u1 V7 c5 N
                                        ix++;
! C) W# P& J$ B6 d  o! L( Q4 t- |                                }
' k, J" s: B5 D                        }/ G( `1 K' F) m- z
                }" x/ S* C9 C7 F$ k9 b4 j" l4 k
2 f# _8 |. \2 M$ L' v8 G
                if (ixstart < 81000) {
: L5 g( B0 Y8 T8 B0 Y" @5 c                        while (ixstart + 1 < 81001) {
" R% |: h& L3 R                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
' q$ |, z- }" T4 v* A                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
* \4 B/ o7 x' T% D* @7 }                                }# N: W7 A" [3 E8 a# D% a# G

  w1 \7 Z  W0 [: p0 S                                ixstart++;
* [$ b8 a: h) ]% P                        }
3 f% W: f9 x3 i; I+ b- W                }
' f( I! L8 v4 S% c( H% i! D
: p" ?9 g: B: E* s" S                ixstart = 1;# R, B2 i4 Q6 u. `" r" j8 D
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];. ?! c2 V$ p3 `
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- d6 o! ~' w  E# \5 [+ z& X8 X0 j
                        ix = 2;
5 w( Y2 T+ ~$ g& G                        exitg1 = false;% ^+ p4 F) j$ }, K
                        while ((!exitg1) && (ix < 81001)) {
5 c# B# M( ^' n8 ?                                ixstart = ix;& L# l$ @$ t- k) W
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
. @% c1 b7 J! h% a' k                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
* b1 a! q& M, N; S& ]9 S+ e8 m                                        exitg1 = true;
$ N$ e5 X/ ~( I; j9 `                                } else {
5 F0 S3 R" I; s: K* v                                        ix++;7 u# h/ h3 ]- `6 X$ c3 b  G2 k+ G' S. w
                                }5 }& l3 ?# ~5 }& r" z0 w% h
                        }9 V" J% i- }, ?5 S
                }
0 a2 E% U: }$ m; T& f3 A: G" k) e
: t8 \% x! X) J% W' @                if (ixstart < 81000) {6 Q4 H2 ]. B: H" [9 n( Q' W& j
                        while (ixstart + 1 < 81001) {/ \- h& Q  f" }1 s& x
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {# r* [) ~1 i) K
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
+ L8 f( Z5 f- t) c/ n) n. t                                }
' @$ W* U  J5 q# J2 l# D0 |! u. Y, |5 r) w4 e$ J
                                ixstart++;3 }7 F" g) q' e
                        }
1 e7 u" ?7 Q; r9 N, |' `2 {& u1 |                }
6 P" i1 s! Y* u# l* s% L% ]+ L" C4 z$ i6 c' o
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);  z2 C  u( d+ n
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
% D/ ^( V6 Z0 V' E, ?, C$ S/ V                        yiDuanShuJu_mean = mtmp;" H0 H; G& ^" _, k+ B$ o2 Z
                }
  }" _0 d+ m) I1 v9 @7 R
# q0 u/ r3 z: I/ Y                /*  找出极值 */3 l/ V! j. N# `+ B6 f
                for (ixstart = 0; ixstart < 81000; ixstart++) {
. h( W7 D1 E3 Z4 y$ X                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;) F: o" E" S/ @8 b9 M+ {
                }0 X5 w- l+ f! o/ z: w: t

) f/ C7 A6 @1 i+ ~        --------------帖子字数限制------------------* }8 o: s3 j  J9 |- a; U( G
}3 \: C! l7 r' e( N1 R) D4 C/ R
7 I2 g. y: C/ y# f

% }" i. a/ x) T

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-1 04:58 , Processed in 0.049233 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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