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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
$ @  x. N8 K% ]% @' c3 ?
( F6 A2 {. L) }2 G  A/ Y& j/ j各位大神:
: q/ x6 M( S% I' M/ d: ?5 v% @( h     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
/ k+ ~% u: `+ P/ Z3 G) ~" p9 ?* R8 s! w/ N      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:% ?1 Y6 T) J2 `. x

+ U, c/ U9 k/ P2 I/ }     , X" b0 e0 u0 ^1 m
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。1 r* g5 D6 Q  X0 D+ }% B; S6 ?; [

& y' `& L5 m+ p; `并没有其他线程6 k+ [% W5 g! g  z$ d9 U+ H
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
5 `/ a- Q7 p' B' O也说不定是和堆栈有关系。。。。。。3 b0 \+ M" ~6 Z3 x- U
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
; v( ^$ }1 K# ?& k& Z+ i4 R, \  T1 M7 }9 ^4 F, I& E; Z  F, z

! x! F; J3 o" x1 |" O0 d) H' ^0 x+ l/ x% `% F
我也很绝望啊,希望大神能帮帮忙,感激不尽,!! h0 S- w6 R* [! q7 K

0 p* l! f  T$ W/ b
! O( c% _" N" K: t, e& a0 i/ l附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
2 e+ s- K) }+ J( D& G/ p4 O7 [        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。( D* v! f- A( Q9 \& G" D* t
- V2 G' z% K) S% v$ h
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(- }. K6 Y; k4 t6 u# _
                const double data1000[1000]) {
6 j) D" ]7 M, [
0 Q9 @: O# C, X1 A: i' A" P1 s        int myfuck;- S! d! y5 I& I7 j
        double yiDuanShuJu_mean;
  S7 s3 s) T5 K% i        double yiDuanShuJu_LowMean[1000];  ^& T  j8 b, e" T" o
        int ixstart;
$ m+ F' `# f1 B6 g' z7 S        double dv0[1000];+ s3 b' n0 ^9 W5 r
        comm_AGC pAGC;, b6 R% T9 `8 }6 ]$ ^& i- M
        comm_CarrierSynchronizer pFineFreqCompensator;. b" {$ m3 C* C. C; e! M
        dspcodegen_FIRDecimator pRxFilter;+ l, \" P  j; w1 {6 ]
        comm_SymbolSynchronizer pTimingRec;  r7 e2 d4 J9 `8 \  t
        comm_PreambleDetector pPrbDet;
, S( c. _& ~# R! Z. S* b+ i5 ?; D! D        FrameSynchronizer pFrameSync;
" e. T: f! q0 `5 F& b+ a        QPSKDataDecoder pDataDecod;6 d( U4 F* W3 _+ ]9 v# p( _) h
        static double usable_left_filtfilt[81000];7 @+ W. y. ^# s3 ]/ m, [( n
        static double youXiaoShuJu_QuZhiLiu[81000];1 m; i/ d6 o" Y3 Y$ T+ j3 I) Z
        double mtmp;
2 w  p; S) v! t- m9 a) s1 ]8 e        int ix;
7 @( R& l8 `4 m        boolean_T exitg2;4 j( W: Y. d% A
        boolean_T exitg1;
! `- f! F( Y( N# y        double YiZhenShuJu[800];
1 j: @$ ]/ R. s( s6 E5 ?, E1 |, `  t0 {        double dv1[800];
, c6 f9 Q" D5 t9 c+ G4 x( J+ |* f* d% X- ]; j5 C

' m7 X) p8 P7 b1 R6 W  B        double b_YiZhenShuJu[800];
  V- y/ {6 q, P3 @: Y3 n        double I_filtfilt[800];
* U4 ]% e7 [( v4 i        double Q_filtfilt[800];* |% R% i6 e7 A2 J
        creal_T b_I_filtfilt[800];! Y. m, f' y8 v* w6 I1 R6 a+ D
        creal_T b[800];, T; v: W1 K; \. \; i
        creal_T RCRxSignal[50];
9 K# S' O, H9 l. b3 o5 x' S" R: K        creal_T fineCompSignal[50];! R# z# N7 k  s! h3 x- }
        double phError[50];/ Q$ W# S  N  x9 Q
        creal_T timingRecSignal_data[28];
7 l4 Q- N) y- J7 ~/ o7 v        int timingRecSignal_size[1];( m$ S' I6 S' O  A
        double prbIdx_data[28];( K/ @/ [* A! C# T: Y+ U
        int prbIdx_size[1];
( D2 H7 o; a5 Z  c9 t( h        double dtMt_data[28];
3 M  T. u- i+ B3 p  q  y        int dtMt_size[1];% y1 E" V1 F: u* W/ f
        creal_T symFrame[25];
& ]# |+ ?) U* h  Q7 S        boolean_T isFrameValid;3 D! C% X( P6 q8 ]) z
        double unusedU0[3];
/ K+ O: }* x: Z2 ^7 i
3 D. g3 X8 ?" z( C$ Z+ ~2 A        //调试过程中的变量6 N  Q' w6 t2 v7 w) I
        int  enough_data;$ J- [/ a. p0 D$ V( I. U
1 G) O0 r2 Z2 k! g1 f0 i0 C
        int enoughDataFlag;! j+ E& l$ P0 k3 f( }9 {
        int yiDuanShuJu_mean_int;& V# J  a/ |+ T- A& o: z
        int int_sum_dv0;( |6 e( }: J' e! m. O
        int oo;
" _  g$ \" K& a/ m% w3 m- B        int ii;* q/ P* r2 F, d/ Y& w' P$ d$ j8 F
        myfuck=10;
, n+ u, {6 r6 w$ }: G        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */; n7 |- u/ `/ S% g, n
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
: ?7 @( `. H3 h; i4 P5 z
8 N- _! z( k# ~8 Y2 K  `        yiDuanShuJu_mean = mean(data1000);! n  @( C: i1 }2 F7 n: Z' J

3 r! S0 `; X) m/ C' O* y4 `3 z9 ?1 S        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
1 F) o! [' T1 s; Z  U        UARTPutc('A');  u" w" _& Q1 [5 f$ W
        UARTPutNum(yiDuanShuJu_mean_int);
# X$ |  N  q4 {- r        UARTPutc('\r');
+ g4 D) a! z6 k        UARTPutc('\n');
3 {- F$ I) t8 y; \
3 Q: W/ ^3 C7 {; P9 L. v        for (ixstart = 0; ixstart < 1000; ixstart++) {, d8 [4 Y' F; b$ D, b9 M8 b, i# |
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
4 F2 _; r, ]% w  L5 v# _  \        }
- g1 j( q: t. `( \" u% ]" w, P' z! P9 u
        power(yiDuanShuJu_LowMean, dv0);
5 T; ~* s/ a, D+ z8 E0 a5 H0 S0 U6 P9 ^& G7 T
        int_sum_dv0 = (int) sum(dv0);) W5 L5 r$ p' X/ z' `( d/ V
' G- {5 n  @' F; d( \' Q4 c" i! {6 d
        UARTPutc('B');
0 u/ r$ K* f0 I( x        UARTPutNum(int_sum_dv0);
# `/ s! z/ O' Q) X2 k        UARTPutc('\r');* R5 Y4 _) c3 Y. x; m8 e0 s! B
        UARTPutc('\n');
& F+ G7 ^+ x9 H2 a& D
9 y* k4 D4 f3 b" P+ i$ V, O//        int compareFlag = int_sum_dv0 > 1.0E+8;
9 h1 o' D% i) H0 o! N% w' {# \/ u, J- f, b% A6 s% [) E4 q8 _$ d, J
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?, T  F7 n# y8 O
                UARTPutc('C');; E% ~) h( Y$ e: o6 `; j
                /*  比较信号能量 */6 ?6 m1 y* p3 U/ T4 h
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */# o2 t1 s. o8 W( _. [
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
. O) B' ^2 x2 s' [//                for (ixstart = 0; ixstart < 1000; ixstart++) {
( M2 f, i. b: J  m  \//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
, w# ~6 E  g/ Q, U! M# N//                                        yiDuanShuJu_LowMean[ixstart];6 y* u1 r" U  a) v9 M" i
//                }
( I) c* V0 ], n/ p' B( C# v; x# r//
! x8 ^0 B; x, c/ d6 @//                youxiao_k++;
. n8 m; @" q0 ?1 y+ v( R5 f//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==3 F+ \. q# X( j- p6 Z
//                        /* 感觉要取21个数,即0-20, */; A& }5 T6 \5 M+ {# Q6 @9 I
//                        enough_data = 10;//有效是10,无效是0
) @( F3 P! j% r9 v: m+ ?, J//                }% x7 e/ ]% ~5 l9 i' U# @% D
        }
, R; j2 T4 W4 F, R  X' Q
* Y: G, a/ X9 c$ h( U
; E, ?( w' A) N% p) W4 v        enoughDataFlag = 100;5 p2 L1 Y, }/ J* M
        enoughDataFlag = 1000;
7 h0 r# U' Q$ H; ^        enoughDataFlag = 0x02;
6 ^$ ]3 ^  m( ~- p( s        enoughDataFlag = 200;
8 Y! H; w4 L4 P  z  @- K1 s& n6 V" H/ g; p  F) q* ^( C; J
        int myfuvk1;
) a3 H" x2 n7 }9 a" {: Z) n; b        myfuvk1 =11;
! S; w( l3 u) A3 q, k5 K% N0 I; [2 N8 |5 ?% _3 J1 {# v$ A
% l- G2 D' M5 X* G3 F! R
        enough_data = 0;  v% D0 z5 c1 k$ g2 ^  e2 i

  Q* |& \4 X: a0 f, i2 Z/ Z//        if(enough_data>50){
! w* P5 S3 O1 ?5 B5 k* ~- ^( _//                enoughDataFlag=0x01;
7 V/ W* g# Q7 ]& v//        }else if(enough_data<50){
3 n7 A; O3 y0 H) Y//                enoughDataFlag=0x00;//0x00还是不行! l; o$ u8 p$ x- q0 D0 V
//        }
' B2 _) i6 a$ v& l$ Z
9 J$ f# b( z% w. b
& a# |9 c" }' o# ?4 h) C( j0 c, X        oo=10;$ Z; ~4 C8 F5 p& G. j/ L+ |
        oo = oo  <  5;% W0 j2 Y8 D3 e  b
        if(oo){# i, w% V  B5 K  X% z
                ii=0;4 }, L! l: o" q( a9 p* ^$ S
        }
% `) i/ |0 M8 d  N8 ~& `. X' `& t        if(oo  <  5){
& u, Y2 F. ~; T' o8 ?$ x9 ~* x; v                ii=0;
, w2 \) M) w2 ]: X4 ]$ s1 ?* n        }
3 U( }& O  F8 J$ Y, O, G) V        if(oo  >  5){5 z: K5 R+ W% n
                ii=0;
3 `: X, Y; X5 {        }
* x! [+ o5 I3 w1 T1 h
6 b; H. p9 T: E/ j0 {2 Z        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */8 U0 Z3 j* l6 }6 ?0 s
        /*  如果数据足够才执行主程序 */8 {- ^0 L$ u8 b$ g9 n# C! r( H
        oo = oo  <  5;
4 n5 ?! M* R6 x7 j2 i        enoughDataFlag = enoughDataFlag  <  5;
7 S+ h5 A) ^' T        if (enoughDataFlag  <  5) {
1 y- b  A! _# j% S//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
4 T: P+ t" N0 ^                AGC_AGC(&pAGC);
0 s5 |( x- m7 N: j
) y* z, N" g* ?  H* L3 ^' V1 }                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
/ ^# Y3 Z# b. Y6 ]: d7 C" f& w                FIRDecimator_FIRDecimator(&pRxFilter);
( [6 f5 j7 b6 [
. {3 S+ G4 v! y) e) m3 r  `* i! f                /* Downsampling */7 v2 x9 j% H( C* }/ l. D4 {
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
! f1 ^2 W% C5 R5 Q' q6 V- V5 q! d, m  R4 W) ~- Y
                c_PreambleDetector_PreambleDete(&pPrbDet);5 ]: f( X7 b$ o7 B( F
5 u9 S9 w" }6 H% s8 \) i
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
4 v* z9 n: B! j& T' M0 Z( Z% `# T) A0 e                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
/ b' ^2 y9 z, u6 t9 ]1 Y# P                /*     %帧数量=100 */$ D* x+ W1 n% W
                pFrameSync.isInitialized = 0;* f& i1 J! S9 u6 z# P0 s# {
5 l8 h" b: _' F. T& A
                /*  [EOF] */
  u( H& J" B* _6 i* D                /* 前导码长度是13 */
; L, |, P& }8 I  e3 O9 p                /*    %qpsk */
6 {- ?8 q9 k/ f4 S  o, `8 d                pDataDecod.isInitialized = 0;
9 j1 }- I/ W! d" }( f: Y
! a8 A: H: P) Q5 H5 \: W                /*  end */! K2 i" R) C2 |9 d% `: ~% B
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */' y9 W+ ~6 T6 u& e! h
                /* Convert 3-dB frequency */. r# S5 K5 ~% Y3 y$ y
                /* Convert 3-dB frequency */
% a+ H; M$ v8 n! P5 e8 a# q                filtfilt(save_buffer, usable_left_filtfilt);
7 X# M& I+ K- }. }                for (ixstart = 0; ixstart < 81000; ixstart++) {! K7 F) o- R1 {7 u
                        usable_left_filtfilt[ixstart] *= 2.0;+ s1 `9 g' C6 r3 N# r
                }1 S9 o9 j6 o0 S( B7 g2 H

! z3 z  v9 Q5 J7 f, e6 l4 U                /* 注意乘2,处理幅度 */8 z4 _" n4 x: d' C
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
) H! C. o! g* T                /*     %% 行列转换 */
/ A# B/ ~( k* n* S7 f4 A6 i) ^                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);# C3 U% e8 i8 L' s
                for (ixstart = 0; ixstart < 81000; ixstart++) {5 p9 B& N) z) Z5 Y, ?. {
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]5 d* Z; }2 o; q0 H. W% v9 \( J
                                        - yiDuanShuJu_mean;
3 ]; {- U  p: k& H" \                }
6 R& z; H$ U* R2 i  p, |4 B  E/ p
' n# E' O3 L( J; p3 S  I                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */0 K8 d1 p6 W( k2 H, ~" j- g
                ixstart = 1;
; N+ e7 a5 X* o                mtmp = youXiaoShuJu_QuZhiLiu[0];3 ~8 W; v% Q+ C* g
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
2 W+ z3 e0 |. e1 `# K3 m' ?; n, X                        ix = 2;
+ X4 @$ R6 p% a6 ]' S/ K5 R8 F                        exitg2 = false;
; a/ i- Y( `- m1 W$ J) u5 A                        while ((!exitg2) && (ix < 81001)) {" q+ Q8 `+ _0 _& O. a
                                ixstart = ix;
; Q: T9 v. T' w8 z: G. Z/ d' t% W                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {1 r4 Z3 p- C! X8 Z
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
' y( [! F% t  E4 v                                        exitg2 = true;/ I: F1 m2 d+ L8 K* ]: M
                                } else {
4 L$ ~5 w3 p! L" a                                        ix++;- k/ b2 _. k1 r  ^
                                }
1 w# y  R6 [2 B; t' S! e                        }
  k, P- I! R2 U4 W7 `                }
" n3 C1 U1 s/ {: G7 J4 G% I& o, g$ ?, l2 p' r
                if (ixstart < 81000) {
0 W' R7 ^1 ]0 W8 q. E: l                        while (ixstart + 1 < 81001) {3 u+ K5 W+ Q* x9 B$ b
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( h* U% h7 U, W% x1 e                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];1 o6 d- n# U; K: t& G0 Z
                                }
( {5 ]3 f* G$ R* e, X7 R* q$ {6 F3 q4 H5 u' H0 ~
                                ixstart++;: g1 d) B( J) L- G: w  H4 h: e
                        }
* x/ `, N" b) P3 A; B  x' O                }
# d+ _) |; W* `& L: ]' l
$ k- X; Z4 w4 ?6 `                ixstart = 1;) Q2 v, B/ t. g. v
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];  @2 V0 }+ g. |  |6 m
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- `$ z# d0 Y" X. a* {                        ix = 2;5 [9 g  u( c9 Z$ T: |  v
                        exitg1 = false;* R! r" O5 q( ^
                        while ((!exitg1) && (ix < 81001)) {( z, m3 L0 S( `$ N
                                ixstart = ix;
( C' B/ {" t2 H% V  W                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {. g6 `5 q# @+ l
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];* Y0 j9 r2 ~8 }- p- A  ]% P
                                        exitg1 = true;8 Q/ [: ]1 }+ O. C% _9 g
                                } else {3 m  U0 k  E7 ]" R; B" n/ v) J( i3 L( ?
                                        ix++;/ y) C. V) a. g( ^0 u
                                }
9 J2 g" E$ _( R& W6 t% S; `3 Z                        }
* P# h3 |3 D/ c. }$ T3 C( _                }
6 |4 l8 h0 ?; j- B2 f3 K6 q. z3 `# r9 m% O3 X- H4 h# g4 e( Z) F
                if (ixstart < 81000) {: T6 I$ c  u9 y: S* U
                        while (ixstart + 1 < 81001) {1 f( Y; j6 r: R) h8 `
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {& }/ d; z, {0 i
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];8 h4 U3 |. H! ?2 C
                                }
4 K; d+ V# Q+ V/ d
+ T9 U: R- z* ?                                ixstart++;
% V- H5 x7 a7 @$ M9 @                        }
. o! d& T& ?9 t- }0 H# z                }
; [! _5 q$ P0 q$ \% l+ [: \, S& n4 n' [5 V
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
* d5 N* _: n6 P( i                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {; P5 e0 R6 A3 {
                        yiDuanShuJu_mean = mtmp;
# v0 f/ v* F. x* ]                }; ^3 B9 i6 H, B

! P6 y. V- `# B/ n2 F  c9 x                /*  找出极值 */, `3 |6 x+ p5 O4 I3 T  y- Y- X
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 N; ^2 I: l" ?2 w                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
( P$ o/ @/ k. C& K' }' r                }
+ u/ \6 j8 m1 A( z1 T
" X4 R3 e  q6 l        --------------帖子字数限制------------------
0 z) N+ ?7 S+ u+ ?+ o2 r1 \}' g9 d3 g; s, ?0 ~7 B0 t9 g
- D  _- T# G4 o- s( B  z

  ^* _# x; U$ D  l0 l! t. Y

本帖子中包含更多资源

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

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-25 02:54 , Processed in 0.061218 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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