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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 , W( d3 ]$ b9 L1 G6 z
( ~+ [" L  a9 j) Z/ n- g  h2 P
各位大神:* k- g2 c( `2 J
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
% V  g3 j& G' k: r      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
1 z% s/ K9 p  r2 N1 g& s8 \3 @% @$ ]: |
/ x9 D4 R( v  B( r9 Y1 C     + j  X5 ~0 a% ]/ @8 \: U
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
% C' e% I0 b# X. K: r' ?/ D% q9 D1 q& F' I: w) V' K. Q) q
并没有其他线程+ E- a0 E- N# ~# Q
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
+ d0 J4 `% B, V也说不定是和堆栈有关系。。。。。。
( v/ b+ ?9 Y9 |1 Z0 V请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....5 P3 N/ ?' Z( L5 l) Z7 @9 [
1 l+ C$ c# K. O* o  V

. D* h9 {3 s+ U0 B# K% p9 ^3 P9 ]& j) |' ~8 T6 g
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
  j4 r9 n. r8 |, L( i8 ~
7 a! G( v& s" z( _5 I
) U3 K! D/ z3 |1 B; _附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
; A0 B2 d, G+ k" u        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
9 x( d$ E( ?' W
; }0 v1 E& z) \" cboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(3 l/ ^0 f: X( k  j* J) W2 e
                const double data1000[1000]) {
0 g) |& j+ o7 z$ }/ U6 K# ?
. Z6 `& {6 O/ |4 x        int myfuck;! {1 R, q. }0 l  b+ B$ K* Q
        double yiDuanShuJu_mean;- q7 L" \0 @6 K
        double yiDuanShuJu_LowMean[1000];2 J: U+ q  Z% ^" Y$ W
        int ixstart;
# Q' K; M5 ~5 n* C        double dv0[1000];
0 g7 y$ C, N8 G6 I' Q        comm_AGC pAGC;5 L; A8 }7 E( w
        comm_CarrierSynchronizer pFineFreqCompensator;
! I7 i4 y9 [7 R5 j; v; n        dspcodegen_FIRDecimator pRxFilter;
" I8 Z; ^+ ?1 J1 t- X% c0 a        comm_SymbolSynchronizer pTimingRec;
6 @/ n1 P7 F0 |        comm_PreambleDetector pPrbDet;
+ D0 o8 ~4 e5 I3 w        FrameSynchronizer pFrameSync;! {1 Y% M) e: v+ O3 V3 E7 `8 Q
        QPSKDataDecoder pDataDecod;
' v, {4 f# s5 ?        static double usable_left_filtfilt[81000];& B+ D- G" d# v% E$ `8 I. G
        static double youXiaoShuJu_QuZhiLiu[81000];
% R8 ~2 I8 P  n) b) Y        double mtmp;
0 E+ Q7 g) ?8 }1 B& H2 N" K* V1 S        int ix;
7 |  M$ u2 q4 [. \& a7 t; B  @        boolean_T exitg2;$ G" g. J: ]# G0 V! I  q
        boolean_T exitg1;
5 ]% x. K; j: J3 t) d2 J- i        double YiZhenShuJu[800];
2 X: H( e4 g. a/ W* ~) H; G- R        double dv1[800];+ g# S9 P2 x) A) k4 B( `
# {  s. f7 t* J8 w, I

1 x' F0 C  I2 b1 J# O3 }4 E$ ]$ k        double b_YiZhenShuJu[800];
' L7 u; N3 e- ~# Z        double I_filtfilt[800];
8 p/ F& ?8 r5 d2 b* l        double Q_filtfilt[800];/ U* n0 o/ K. f' Y# D5 J8 Y
        creal_T b_I_filtfilt[800];
: @1 u2 _; T3 D% H' K8 q        creal_T b[800];# b% x. `' d7 b
        creal_T RCRxSignal[50];
. k; |* ?5 z; m$ d; k: s0 R        creal_T fineCompSignal[50];# j  f( F8 j$ S4 T$ u
        double phError[50];' K1 V, s0 E( k, P3 h$ n
        creal_T timingRecSignal_data[28];5 S, h. \( t' l2 N5 \
        int timingRecSignal_size[1];
. ~* L4 ^6 M# z1 r5 A" d        double prbIdx_data[28];
9 |& s" A  w& ~! D1 @# x        int prbIdx_size[1];+ I2 @" r6 V' G
        double dtMt_data[28];
& C; p" M( C+ A8 B        int dtMt_size[1];$ U, U" h6 P1 |$ n- a7 `+ R$ x
        creal_T symFrame[25];6 H# d8 Z# ]2 C) P# |( y3 M
        boolean_T isFrameValid;
* Z, L2 W; w" C& s" P        double unusedU0[3];& x. Q+ K( P; e& @% y7 `
) R+ b8 c7 l% _
        //调试过程中的变量" x' z" _. r2 C0 D# U% k1 {5 `& w
        int  enough_data;  A$ {4 ?) g( F! @6 F9 ~5 ]
  E" |$ t; ^( a) T6 R$ T
        int enoughDataFlag;
. H7 s- ?- y* J2 y0 ~9 S        int yiDuanShuJu_mean_int;
5 W5 m+ P: X8 p6 m  F        int int_sum_dv0;
; e% h7 v. f) L5 d0 E        int oo;8 M2 }+ _1 L; n$ ~# ]1 E  x& C4 W
        int ii;" |; o8 g" m1 o# a/ n+ I
        myfuck=10;
9 ~3 I' b0 |% x) B        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
- n( Z1 D7 L; q/ G        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
1 c3 S; [, f; D: S
+ M& P7 S; t4 `+ a7 n# |' A5 M        yiDuanShuJu_mean = mean(data1000);  w; i! ^) y; f$ H

( v' F: u% c8 [% `$ t9 `! W        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;* I. b& v* Q1 y4 V/ q# R4 E
        UARTPutc('A');
4 v6 v+ A) a# i$ G' _! a# p        UARTPutNum(yiDuanShuJu_mean_int);
. d9 F' b1 m: H2 j  c        UARTPutc('\r');
9 h$ \1 d$ i1 H8 U- A# ~' x6 A4 T7 y/ V        UARTPutc('\n');
& ^) x( q7 ^' @" K  D) T
8 A6 e* t8 T0 x( c: Z% S# G% l        for (ixstart = 0; ixstart < 1000; ixstart++) {
0 S( J0 u. u% a" W9 a% [                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
% M6 e: V: I1 B) i8 o2 L" W        }
0 {3 h9 ~7 F8 T1 Z2 x1 S" X
+ Z% D* g+ m* X6 ~/ O, J: r2 L* o2 d' J        power(yiDuanShuJu_LowMean, dv0);9 j4 n. X- S% s1 e

4 r. E7 z. I* j( e        int_sum_dv0 = (int) sum(dv0);
$ c$ \" n/ ?) D  {* y
( v9 j2 m) P0 D0 c9 n: B8 D3 u+ ]& a        UARTPutc('B');
9 \; }6 A& `% [' h        UARTPutNum(int_sum_dv0);
4 I  K& |1 x: B# B+ m$ {        UARTPutc('\r');) Q& E" N% j5 j
        UARTPutc('\n');
! |. t7 `! j* x, Z. C$ O9 X# f9 K
* r& Q1 T9 H& }1 z//        int compareFlag = int_sum_dv0 > 1.0E+8;
% v/ h+ I! s. E: t9 V# ?8 m& G( x' y& Q
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?# {8 Q8 N8 Q& |' l) B/ n
                UARTPutc('C');; D: t" H, q2 [5 x! t% l
                /*  比较信号能量 */6 b) m5 b# x6 o
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
' o& ]& X( l2 O//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
, L5 ~2 F; }( @& M3 C* a//                for (ixstart = 0; ixstart < 1000; ixstart++) {
% o) `& v  z1 x//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =' o5 [) V' h* Z
//                                        yiDuanShuJu_LowMean[ixstart];1 X/ R( A; f- {  a1 [; \
//                }
9 j3 R& ~  _" }( u( G//
( h; ?/ z8 _( J2 _7 c//                youxiao_k++;& I+ y* m0 O3 c
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==; h8 N( E: C+ J& P" c5 I* U
//                        /* 感觉要取21个数,即0-20, */
/ r/ _( T4 x! i6 R, x5 G3 Y//                        enough_data = 10;//有效是10,无效是0
( _3 T1 ?" O8 o, O. D' [3 G" J//                }
( ]! @: y' ]. r6 W( f8 H+ d% V* l        }
7 r4 u* l, U" T/ Z$ f) B& C; K# D7 L

9 t, l# Y2 B; v3 G9 v' \# a4 I- W# p1 T        enoughDataFlag = 100;  Y6 r% K$ K: U' k9 t" \
        enoughDataFlag = 1000;! T& c) X' G) ?+ d
        enoughDataFlag = 0x02;4 ~( H8 t3 l1 B; m1 D( a
        enoughDataFlag = 200;. k/ @: t$ c  S0 r7 A$ a( k6 Y

# X1 d& a. c7 d9 F        int myfuvk1;. V  F1 T1 c. w3 p2 `& y  R9 m. F, G
        myfuvk1 =11;
8 ]$ j9 h* q( F: c7 j, U) H
: K  I& B7 [! |' N7 C8 a1 p0 z9 y+ U& X' `, @4 O6 {# ~
        enough_data = 0;! o! ?! F! |+ g4 |% j; s% `; W

, w9 y. Y6 L4 D  \/ F! c//        if(enough_data>50){
3 V2 G( i, h, j/ G! \//                enoughDataFlag=0x01;
5 m2 X0 X2 h. K" f" {  y//        }else if(enough_data<50){
. \  @& N8 ~* L//                enoughDataFlag=0x00;//0x00还是不行
. ]3 v" C# U2 Y% X3 k" `- b8 q2 `$ ^; B//        }4 W* B2 N8 r/ B5 y
' c/ {2 e7 _& I% Q8 j+ H
1 H8 b! e% r  u& K& B4 N4 L, h2 p- S
        oo=10;$ K- L3 v, V3 Q' x2 a2 @
        oo = oo  <  5;
! E% m+ d: B8 y& V" I        if(oo){
/ l' C8 P9 G2 M$ f6 l4 @0 b                ii=0;
4 \3 p& Q: Z# D% z. l        }% k/ c/ t* W4 @% y/ ]
        if(oo  <  5){
  @+ |( G8 _  V# G) B3 c                ii=0;0 b( W& Z. I* S) W9 z8 d  x' |
        }$ H2 y# R( F7 B1 \* |
        if(oo  >  5){5 y) R# p1 g+ U
                ii=0;" F  N5 q% |2 k6 v
        }
& b/ @! X9 K+ \7 {& |4 u
- U' k/ c9 j: \0 H) A* {/ g        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */2 F4 z  Y" u# {: Z6 W; z/ m1 R
        /*  如果数据足够才执行主程序 */- c; s! s0 j4 Q) v) L" ?7 Y
        oo = oo  <  5;* j5 H" `, Y& _( J0 f
        enoughDataFlag = enoughDataFlag  <  5;
6 ]' Y5 F" u' d+ ?, d8 }        if (enoughDataFlag  <  5) {# j8 H% W2 M$ H. A
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
! u/ E5 A4 ^! o. Z; ]: c                AGC_AGC(&pAGC);
& N3 k: Q% O5 I
. }) N  j) Q& u. U5 l7 }4 p                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
$ w/ O9 I$ i% Q5 M9 p$ e                FIRDecimator_FIRDecimator(&pRxFilter);/ o7 D7 u/ \# @1 q! y- D
. @- ^+ O7 b" d! Q( n3 \
                /* Downsampling */& X& T6 ^& |' W/ B3 m1 K
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 l0 S' p& T. u: W$ O

9 I3 S( Q- k% ?( k                c_PreambleDetector_PreambleDete(&pPrbDet);& V$ _& [  P9 W9 M
& h- e4 \) y' I; u% {$ F8 b1 J
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */1 ?$ S% [7 z# t- ^" I+ L! G
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
7 l( a; _& M3 i- [9 S+ K4 }                /*     %帧数量=100 */! Q, U* U( `4 {% M1 C
                pFrameSync.isInitialized = 0;7 ]4 ^* _& [9 T- ^1 m8 {% P
) M7 c, b/ N* ?5 C% B
                /*  [EOF] */
) `) L9 x% R% u$ T/ o$ ^' ?: a                /* 前导码长度是13 */' L) s) c( X7 v5 w2 r. F
                /*    %qpsk */# f: m! x. n- U
                pDataDecod.isInitialized = 0;
  z5 T6 ?( m& x* K+ _
1 q, i$ }9 j  m* A& ^) r                /*  end */) B, {& ?% C& {" T
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */* u. E) `, ?/ m/ z7 e2 `& a
                /* Convert 3-dB frequency */
( d7 s+ H4 l4 G& U8 i                /* Convert 3-dB frequency */
8 n: O& V* x+ N/ V( o: c) c                filtfilt(save_buffer, usable_left_filtfilt);( C# R# m, n. l) X6 [6 R  k$ e
                for (ixstart = 0; ixstart < 81000; ixstart++) {9 o6 D: l6 ?1 r
                        usable_left_filtfilt[ixstart] *= 2.0;
; @+ }6 _; t0 C5 a                }! e. i% z/ g- n( X4 i" j# C
9 b  M' }2 B* E- M; w
                /* 注意乘2,处理幅度 */
% a8 q$ D. M" E                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 W' |$ l6 [) u, n                /*     %% 行列转换 */
5 ?- c+ g3 [# x( |8 `                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);9 P) Z2 b- }/ y0 `2 c' d
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# V( p1 a6 i; N                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]$ `1 S5 T/ A( \7 H8 z3 `. G
                                        - yiDuanShuJu_mean;
4 ]* J* B# Y+ X) I9 `6 j4 f                }6 N2 R7 {( R) h) x- U$ E
0 f9 b  h, p5 S: i8 W
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */$ {* M8 I8 Y5 B! V8 i
                ixstart = 1;
: [' H4 |! w) Y' V5 r. x' x                mtmp = youXiaoShuJu_QuZhiLiu[0];
' r6 E4 L9 g, |9 _- s3 A5 |) T                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
0 @3 \$ I# x9 \! }& j                        ix = 2;. M  G4 l+ b4 ]% x$ ~9 Y4 O
                        exitg2 = false;
' l( N# a. B4 F                        while ((!exitg2) && (ix < 81001)) {. `5 G4 C$ A  ^) ^
                                ixstart = ix;
9 ^8 R* {0 N; K9 X2 c" F3 Z4 t" h1 M% \                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 Q: r1 O  @% G; P; C3 h                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];, U8 C; i$ V* I1 X
                                        exitg2 = true;
4 h7 p; s2 c) g! s  F" @2 j( u6 u2 o% q                                } else {+ I- L8 S0 e; I7 g: C
                                        ix++;
! [, t' ~% T* ]3 r) d- U# q8 P                                }
, A+ `; J7 u! R* ~$ o' O+ N                        }4 l( ^7 j* d3 L  E7 |1 U) w; W
                }  L: T4 ]: O: W# U# P6 G

- J; y7 c* X# C8 E( B! |; |3 {                if (ixstart < 81000) {
* r: N  J/ y$ r  ?( z3 i                        while (ixstart + 1 < 81001) {: I/ p" E$ k4 l- G' M2 V3 Q7 R  a
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {0 L, U% k2 C! O: D! A0 _" G" R% m
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];& r6 N) c/ v% e3 b; s# }
                                }0 G: i" k1 l" n- f8 |6 j( v
8 u0 {. P/ x/ y7 z
                                ixstart++;
+ F8 [6 j* I( t8 @                        }& n5 v( W4 S+ w( d* q" p
                }' ^( a) |# ^: k* n( o3 h$ p" S1 o
% P, w- K$ W6 m% E1 E& V. M
                ixstart = 1;1 e5 P* z/ Q6 R- C& K% L8 u: G
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];! v. s9 M) T8 c9 z. y) R
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 r6 G' G/ c* @                        ix = 2;
6 M1 x$ C7 h: @1 @: j                        exitg1 = false;
1 ]- e; C) U7 f+ v- E$ P                        while ((!exitg1) && (ix < 81001)) {- @) w0 L! k9 ~6 G6 Y5 @) T
                                ixstart = ix;4 n( f" Z9 A9 b* U
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 V- a$ c. t) v5 ^
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];' S; E$ G6 T/ m8 p" A, w
                                        exitg1 = true;
6 T9 @, Z9 i: V0 G& B                                } else {. x* V2 Q% I! l% u! y
                                        ix++;
: V: g$ ?- e  ~( a9 n( E0 x                                }3 h5 N2 N9 T  H7 y& `+ E3 i% i# e+ ^0 p
                        }3 t% Z' s. |, s0 s. w
                }/ [( R% B, z# c' I/ ~6 z

& V( r; W  T( r7 m( _2 \5 v6 f                if (ixstart < 81000) {6 c% }9 y4 ^$ \7 b8 j; n3 a/ }
                        while (ixstart + 1 < 81001) {2 R& X7 A7 D0 V
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
7 k9 u! E7 ?& N0 f, n                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];! J6 q/ M, o$ l! z, c
                                }
3 T. k% t6 U% L* m! p  p; c- s2 W, t1 E
                                ixstart++;' T+ d8 Z! s+ q% L5 v& K
                        }
: G; p- ^" u. r/ f. R; i  P+ }                }
; ?( n1 T7 y! ^5 N
2 Y: }+ Y& z/ f8 G; f: f5 q, J                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
) t' z+ x! N( I# l+ d& i; U                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {. W" j, f8 O/ ?4 F4 l4 `! p
                        yiDuanShuJu_mean = mtmp;
" z0 x% ~$ n$ O$ Z9 w                }
- n8 r# L% k% I- C0 ^9 o, l4 m' d- [' Y+ {2 N
                /*  找出极值 */
* D& I( @& ?" p3 g) |                for (ixstart = 0; ixstart < 81000; ixstart++) {2 ]; Z# d: o$ ]
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;) r1 `3 j# Y+ A4 _4 c
                }
- w4 ]0 F" F; c; k' b1 O" }  n
& h$ k6 ]$ U" R' o        --------------帖子字数限制------------------
. A7 R& b, E9 ]$ D6 a" i$ Z9 n}+ p+ ~6 U1 Z! J

( W4 a2 h6 J3 {) K; \3 P, B( x( c! B! i2 C+ N: S: 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-17 21:52 , Processed in 0.048769 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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