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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
7 \7 @, R* t" s/ `7 m: T! x* Q! j+ Y' ]2 @+ y5 S
各位大神:
* ]6 P$ j8 g& q/ N     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
5 k) G3 m" S; a  i5 q      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:+ U# |" Z+ ]$ U2 I- @+ Z8 S

9 U) R" c6 Z% v+ N( E: D     
; }2 H) S% D$ h- x, t4 e5 ]' S这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。7 B) p# `7 @3 V0 b/ V
0 o9 x( }( m, X- i0 S6 G
并没有其他线程
! N, U7 q" R' m& R反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。( {! g% d& a' J& y* K$ L" J" S+ F
也说不定是和堆栈有关系。。。。。。2 G* y) y& q) |$ C" j
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
) g9 \! Z  `: t" ?  @3 i- J0 {  ~2 ^. H1 S% A8 }3 m

1 d3 C, Y2 b/ G$ z  e2 g
% J% y. x  w2 U5 B2 ]9 w; Q; ]2 w我也很绝望啊,希望大神能帮帮忙,感激不尽,!
/ z5 o' V# R4 U) T# j# S- U) r) V1 j: Q5 L

8 _# J1 D6 T3 U! k: d/ O附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];3 \9 o+ B8 y1 C/ `/ U
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
* p/ c2 A$ Y% k, a; G& `
$ ?! c7 k  q! ~+ R6 cboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
/ ?6 a+ G" P& N! D3 H5 N/ r                const double data1000[1000]) {
% v) {  f; m6 f/ x* ]  N
  k) n* e8 s7 L+ c+ ~2 L: {        int myfuck;
# T& N+ K; |% _) P' L        double yiDuanShuJu_mean;' `+ T( L+ _* w. o& ]7 O
        double yiDuanShuJu_LowMean[1000];' Y* L  G% r5 y+ B) g9 X: t  U
        int ixstart;
. g/ I; Z+ Z- k0 e- U: ~/ j        double dv0[1000];* o$ C+ Z# X; z6 V9 T  v5 W
        comm_AGC pAGC;
1 G" X& k$ R6 S0 T9 o- F( `        comm_CarrierSynchronizer pFineFreqCompensator;
8 B$ Q; p3 }  ]- V7 D        dspcodegen_FIRDecimator pRxFilter;
0 ~; i: T( G8 e2 B        comm_SymbolSynchronizer pTimingRec;
3 V. P& z& r$ `' Y        comm_PreambleDetector pPrbDet;* O8 U: e1 f& M* c- u. j
        FrameSynchronizer pFrameSync;
: g  ^) S2 \% u4 i        QPSKDataDecoder pDataDecod;5 K; I- p+ g3 l
        static double usable_left_filtfilt[81000];4 M8 ]/ a) B$ E" ^* X1 R1 a
        static double youXiaoShuJu_QuZhiLiu[81000];7 t. g, D, j/ q  f
        double mtmp;: _- @6 y! X" I7 p: X
        int ix;
2 A* P7 c  g. U, S- I        boolean_T exitg2;/ [& q/ @5 R% y1 v/ R1 d  @
        boolean_T exitg1;7 U/ g4 U) z9 n9 _! @* O2 \3 _$ Q
        double YiZhenShuJu[800];1 a4 n8 H  g0 U$ y5 N
        double dv1[800];
; P: L: F2 M' ^5 `- v: B3 c7 \' O7 C; u# K4 }% f$ b" Z& ^
5 h) _  A& c. E1 q+ ?, B
        double b_YiZhenShuJu[800];
- [, w( Q0 L" I& C: o& G        double I_filtfilt[800];; i: b( }4 X& h# M4 k2 {; w
        double Q_filtfilt[800];
) l8 C. f$ j% X4 `        creal_T b_I_filtfilt[800];5 E0 g- a, F) v% f& F
        creal_T b[800];% d( |2 u+ e# K- F
        creal_T RCRxSignal[50];% t- b/ S. g. H
        creal_T fineCompSignal[50];
, y9 K! f! r% U% M        double phError[50];/ ]  Q5 g* G0 ?
        creal_T timingRecSignal_data[28];+ A& h2 c; a! P6 D8 V" R* W
        int timingRecSignal_size[1];+ l. B$ Q: x; b# N0 e' E5 W
        double prbIdx_data[28];# H/ Y4 K/ |+ B  T7 g, a' }: F
        int prbIdx_size[1];
8 k4 S( g5 ?/ ^" F/ @        double dtMt_data[28];9 M2 z7 ^/ v- g2 R5 P
        int dtMt_size[1];  j& k: ^- K/ W9 \
        creal_T symFrame[25];
$ U# R! W3 n2 b: q! G& ~, v        boolean_T isFrameValid;
4 l1 `2 P8 F* i        double unusedU0[3];
) j; h, T" E3 j  }4 k3 k% y
( F5 p0 s% y# q9 o# L! |3 X% W        //调试过程中的变量& D: W) B$ p2 X/ n
        int  enough_data;
' k$ ?9 R% m% k7 c2 E+ ?: R, |& A; h
        int enoughDataFlag;% b7 d( O, P* o; e
        int yiDuanShuJu_mean_int;  Y% t% S6 w' b5 U& }3 E& W
        int int_sum_dv0;5 _$ B3 e2 i3 ~) d
        int oo;6 w) w2 W# }6 d. e8 g! x
        int ii;1 l. ~! J  q. Q9 s4 I
        myfuck=10;
: y2 ~; M0 J( @1 `: x        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */$ t0 g) ]+ f9 Z; Y' t, b! i& k. O* m
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */2 _4 |# s. k! N1 J% \
. @& {$ |" o& j& O0 l- N
        yiDuanShuJu_mean = mean(data1000);
  \7 O5 w2 E; I/ u" r% @) H
$ n& p! p8 z0 h  `1 N/ c! ~        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;1 x' C+ P. Z! [
        UARTPutc('A');+ Y. t: T2 `7 P; A* i
        UARTPutNum(yiDuanShuJu_mean_int);( F6 x' E. N! v8 G
        UARTPutc('\r');3 Z3 l9 F5 r$ `/ ]: v' d' ]4 A
        UARTPutc('\n');
: n. @8 K' A% r" S/ m( m+ I  ^9 h8 m) R, j) x# s
        for (ixstart = 0; ixstart < 1000; ixstart++) {
) i7 _$ g' @( ], S                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
9 E6 l& C( |6 R        }
! C0 `9 O4 a& ?4 a( P7 t, g# l7 R9 ?3 {3 G) ^$ A
        power(yiDuanShuJu_LowMean, dv0);
& e; k9 ^# Y" T, w! T4 Q, e2 G4 ?3 ]' u1 Y+ r6 q
        int_sum_dv0 = (int) sum(dv0);2 s# i4 t1 g0 t" m% {

( ^7 H- ~0 |; }        UARTPutc('B');! r( x* o7 I# E8 p
        UARTPutNum(int_sum_dv0);
4 {0 O5 ]  }  f1 o- m3 V        UARTPutc('\r');
% G' X0 E0 `! m5 r* d        UARTPutc('\n');
) v. ]/ n3 G. ~( P$ I4 I7 Z2 t4 C. {, m" Z5 S2 C% }( b3 P) w
//        int compareFlag = int_sum_dv0 > 1.0E+8;) W, p. o; c+ F. F# J

2 K( ]; P( S: m3 r        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?3 |9 f7 l' G/ f5 k1 ?
                UARTPutc('C');1 x& i# d2 p2 `  Z/ V
                /*  比较信号能量 */! s+ A# W) k1 K7 u5 e- t' _
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */8 Z1 c: C. q2 j' y. i
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
" G2 {) h. C" B$ N# w6 h2 o//                for (ixstart = 0; ixstart < 1000; ixstart++) {) e/ u6 B- x  W: j
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =5 G6 Q3 a* G6 |$ s2 j4 l# N
//                                        yiDuanShuJu_LowMean[ixstart];& y2 B/ Q+ ]2 X' j& [
//                }
7 C- B0 g( C: @' {) @//" C8 k% v% X% _" |; S" r5 v
//                youxiao_k++;
+ R* A* {% V9 \4 I' J- }& C4 e//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 W6 L3 T- I& y1 A
//                        /* 感觉要取21个数,即0-20, */8 {3 g% X2 I- [( w) G
//                        enough_data = 10;//有效是10,无效是0* D% V  R+ f7 \
//                }
1 c8 U8 |: x4 i        }! ^7 D# E( X0 o& m

( T4 I; b, F( ^9 m7 X* a
' K5 i; p2 x) `7 \        enoughDataFlag = 100;
' H5 y* r+ I! N4 H9 b" e        enoughDataFlag = 1000;, }% s* Z" b! ?7 `# M: j
        enoughDataFlag = 0x02;7 g% P/ d# H% d: S0 m
        enoughDataFlag = 200;
. N/ q0 R' G  ?8 U) `6 b2 e3 i- p3 U3 k& Y9 I5 B
        int myfuvk1;
' [- Y' C4 p+ ]( q! t# f1 G        myfuvk1 =11;/ I) a# |4 z0 q4 k9 X
- L- c; {. ?$ V" g$ D

9 m1 u+ D. ^& v2 H        enough_data = 0;
: _4 h! I$ q, P3 W
6 V) `1 w) n- B8 E! l& b4 r) I- c//        if(enough_data>50){
4 a  a2 t( x* U% c& w//                enoughDataFlag=0x01;1 r$ _7 B3 }. @: C& z- u
//        }else if(enough_data<50){
( B' }$ d* f! g) @//                enoughDataFlag=0x00;//0x00还是不行
1 P% N  |- e% j# m//        }
; E+ T$ c+ X# [
( ]  ~# W$ J) q/ F! n( M' `9 o( y
7 _- B3 `5 e# ?& o! B        oo=10;
- E8 X3 x- g& K- X3 P* M        oo = oo  <  5;
/ u; r* o3 S$ ?2 G, l. K- @        if(oo){
. W& w9 e) w6 S+ t5 @( f                ii=0;% I9 k3 e+ G2 e- ^5 R: g0 Q
        }/ N6 \( R7 z+ M' Y. j" i
        if(oo  <  5){; \; d- _" w9 }- d
                ii=0;+ ~3 k. t+ U, f6 w+ K
        }' N0 S2 m9 U* Q
        if(oo  >  5){
9 g3 e$ _7 L' I                ii=0;4 |7 t* P8 _' G  p+ n  Y9 c' ?( e! @
        }
0 ~- A4 {% X2 Y- P+ w" ]/ W! D( O1 Y5 l: O. P( P. T" i4 U
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
3 n$ l! {1 _! M: s5 V# H9 x' K        /*  如果数据足够才执行主程序 */9 [. j/ @- m. P" n0 G/ c: ?1 O7 O
        oo = oo  <  5;/ }; D# G  R8 Z! _
        enoughDataFlag = enoughDataFlag  <  5;6 a7 L/ b' Y8 W. H6 h3 \# {. i& G
        if (enoughDataFlag  <  5) {* W$ o" J0 d3 P% a
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是04 E" v: v3 P! B9 Y
                AGC_AGC(&pAGC);' w9 W1 K  T, U9 C
) e: S: ~3 C# M- G) m
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
. s0 _5 v1 E% Q# N                FIRDecimator_FIRDecimator(&pRxFilter);2 y1 \6 c# q, q# [6 J2 I: h& ^3 r" N
* t5 v' t+ }/ Q
                /* Downsampling */- }' t# h0 N: _" E+ i
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);' S- T% [' ~5 n$ s( d

+ d& \/ y6 Q, e0 O+ D                c_PreambleDetector_PreambleDete(&pPrbDet);2 I" F' F0 F$ y) Z7 R0 a9 A1 i2 s7 C

1 d. v7 Q; V1 @. G' Y- Z                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */3 F$ P; Z9 z) N' B, m& {1 r
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */% _  s+ K4 s* Q$ X1 q3 ^( [* O5 {
                /*     %帧数量=100 */
3 j' @- B0 A9 M* f' k                pFrameSync.isInitialized = 0;
5 c  R- H! E" _/ B9 u' @$ L( \% b( B. D. U9 V  `" @; Q
                /*  [EOF] */" h' D- x, }, @9 I5 E$ j
                /* 前导码长度是13 */, p5 L5 {7 _8 \# v
                /*    %qpsk */1 ~. G# k' R6 L5 L: ~+ X4 E
                pDataDecod.isInitialized = 0;
. a' Y% ?% _6 @/ E3 |- ?
7 y  H6 q/ i5 ]( |( Z% }                /*  end */
7 C# W2 T+ q# m0 R* v! c9 _2 c; G2 s                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
; Y, ]4 K; @) l                /* Convert 3-dB frequency */
9 y, Y; p5 ]5 w; H) ?                /* Convert 3-dB frequency */
8 a+ V5 P/ g2 T                filtfilt(save_buffer, usable_left_filtfilt);, n1 u9 j5 ]- W" H, f9 Q
                for (ixstart = 0; ixstart < 81000; ixstart++) {5 x4 I5 v) s  X# ]5 L1 N
                        usable_left_filtfilt[ixstart] *= 2.0;. x9 T5 H/ W0 |" P  G& I
                }
/ E. e" z" O5 d0 w4 C  y  E6 |- S# {2 Z7 K* c3 E5 Q) ]9 L* n
                /* 注意乘2,处理幅度 */( q5 v& k1 T( o  x$ b/ b! t0 @1 J  {
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
+ E6 |6 a2 b  A: X                /*     %% 行列转换 */
# ]9 u; B$ Z  _* j* t                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);8 l/ D+ P9 a6 C  v+ J
                for (ixstart = 0; ixstart < 81000; ixstart++) {
- J6 a0 D% F5 T                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]! G' v% S$ E1 ^2 ]/ R. d& m
                                        - yiDuanShuJu_mean;
7 i; d- U# f, S+ F2 }' \6 b4 B                }& q1 \. s4 ?# y8 {4 d. J

% ?, s/ U3 i. G: I' D2 V                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */8 W; B% d4 D: [; \7 M) t( X
                ixstart = 1;5 @' n0 o7 F* J" A8 y4 `' N' F
                mtmp = youXiaoShuJu_QuZhiLiu[0];  ]: B* c) X# o9 S% d) f
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {8 _& R% j1 y! G- E
                        ix = 2;6 v& q3 P0 E& N0 Y  u: \5 x6 j
                        exitg2 = false;
$ t3 l! Q+ i: D! |9 }* k                        while ((!exitg2) && (ix < 81001)) {
9 X0 {$ R- t, x, z2 ^3 O                                ixstart = ix;
) l  J! Y/ P' X% y                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {9 n* {# v; D+ j* e; y0 k
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];7 K0 U+ E- B+ {! i) f
                                        exitg2 = true;, ]5 q# [4 v0 c, X( T9 o/ Y
                                } else {
! E( v. }- _/ m) l# o                                        ix++;
. O7 S* W6 H$ f/ f9 g% r' t                                }* e) U- J+ d! R
                        }  e' C6 W, v; G) G! a- u
                }: s4 q6 H9 G( B/ H) U
1 R" o" j- H8 b" d4 F3 c
                if (ixstart < 81000) {
/ v7 F, d$ \8 E. j  P+ v                        while (ixstart + 1 < 81001) {! B/ d0 ~% Q8 ?& J
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {) A1 S6 g- B9 ?( j; n' G4 f( c/ Q
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];! f0 b2 m9 m" o( b
                                }: A9 D1 O' T7 i4 e! d

9 k. n9 _: D5 A+ `                                ixstart++;
' b- P* O3 b3 G' P, K                        }
9 F, r  Q: w0 P3 O) D                }
( l/ h! c, f# g* P+ @0 r
' T2 q) ]9 ^6 g7 v/ R                ixstart = 1;9 a$ e) c1 z- `7 c, O
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
' A" y% r; }% o( [9 n5 f& m                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
7 o) {- x2 J& n  B) ], R2 \                        ix = 2;) o! }: @7 D# m; L9 g, U8 L
                        exitg1 = false;, k% @) E4 U7 f( X6 U
                        while ((!exitg1) && (ix < 81001)) {% D0 ]+ n, `1 f5 ]: z5 j% y  m$ r
                                ixstart = ix;3 g& X8 O1 p: r
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% l+ N; v6 j' p$ d
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];7 K! c- H1 ~* a! F; ^$ u# u
                                        exitg1 = true;
% M3 a9 n; t5 T3 g" U; [                                } else {
0 |* X# ?3 F6 y- O, P! t                                        ix++;( X( q$ M3 @. Z& \1 v% u
                                }4 C* c" ]. ~. C1 _
                        }
3 z# _1 ?# K7 ^                }
( \$ x6 P+ T, O2 T3 z0 ?# t: W! I& Y% O; \8 s7 a3 k: P
                if (ixstart < 81000) {% c1 u, l  r$ I5 D# ?' [2 N) `
                        while (ixstart + 1 < 81001) {
( a1 ~0 h( X  s                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {6 g8 I! P0 ]+ O+ z; C
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
, Y4 S9 \# Z5 u) b                                }
3 }" _$ C/ z7 D2 O! S5 f# {* o3 i9 h$ t6 c: p4 [
                                ixstart++;
( p% [7 b! Q/ c5 }; h+ A                        }0 E9 q5 v3 T: \0 C# S' k5 b* f
                }
. L$ V( |/ z1 n8 l  i: m; k7 z! _, i' r( `  O7 y; C
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);0 y3 D, J8 `1 k# f- g* z
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {0 b* v5 P$ S+ z* e2 o* ~( T. N
                        yiDuanShuJu_mean = mtmp;% a/ |) E: p, N- |8 T' r
                }3 B6 Z7 |3 F! g) B4 \- S
3 i# R5 [" o6 Z
                /*  找出极值 */. o, s* G, K1 y( H$ h
                for (ixstart = 0; ixstart < 81000; ixstart++) {
: i& }0 n1 S" R2 o) {                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;: j  P  d! l/ p; W3 }& a
                }3 x/ X  f+ O4 M! w. D+ B; C
- M9 D4 d( r3 ?! P. t
        --------------帖子字数限制------------------
# M  c" Y+ U  P. h, D1 o% X) D, ]}. [# {/ s$ m; F" c0 h6 V& j; r
7 P" s4 U% Q; P! O2 x  l: t2 m8 p
. F$ ?/ _# }+ a

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 19:45 , Processed in 0.066197 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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