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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
% Q  ?' u$ i( M) k' y
2 \3 g$ c( R" A* k3 n各位大神:
7 m- \: y! q+ p6 f3 Q, l, v$ v! M     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
% r! N* p0 }( a% A% i" _% D  i      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
+ k1 S6 T; l7 @9 R8 R6 ?
+ j0 I: T, Z' W4 m( m     
4 r% b4 J  ?7 p4 o这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。# A1 D0 f# r' [. R; m+ [
3 \  P, E4 U! [: Y
并没有其他线程+ s$ P4 p0 t- Y( t$ ?2 c8 A) D+ N
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
/ [* v& ?0 b4 n: m3 e也说不定是和堆栈有关系。。。。。。, T* {$ J% e  K3 Y
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
0 p& ^, g9 l5 u' i; S5 l
9 W4 ~# D+ n8 a$ ?# D) s: i- |
2 n. X  L/ p" y3 t2 o9 `) d# Z3 V7 {9 B" b, p  \- U4 E
我也很绝望啊,希望大神能帮帮忙,感激不尽,!" N7 u% G0 _3 [" L
; u% A, J& d9 J7 k. d$ A, ]! c
; H) G% C% \! D: t2 o- k
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];3 J  z1 R5 ^/ T0 u- z& _# p
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。' Z* I9 Y2 [! \! G% U$ w

; y8 ]( N. `* w) q- gboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
8 `" [$ M6 j2 o                const double data1000[1000]) {( q2 v" r( T; Q' Y% B8 t) q
+ D/ t  D- ~" S& S' e1 w- l  D0 N
        int myfuck;+ [7 I) P* `: ~1 `& G4 a
        double yiDuanShuJu_mean;6 t: N+ C+ V+ ^7 }$ |
        double yiDuanShuJu_LowMean[1000];
2 n% K4 d  [5 W        int ixstart;8 F/ S6 r+ L9 K- m9 H: Z6 F( {2 e
        double dv0[1000];
5 i0 m, x8 w1 d1 v' u) s+ t        comm_AGC pAGC;
) z0 {  O# n5 P2 K- l1 B        comm_CarrierSynchronizer pFineFreqCompensator;! i3 G& g/ u5 ]
        dspcodegen_FIRDecimator pRxFilter;
( n' o5 R: D  S1 w7 D# b, ^& {. R        comm_SymbolSynchronizer pTimingRec;
" x5 q  V# E4 T. [0 a0 w0 L# Q        comm_PreambleDetector pPrbDet;
. ~# x0 y5 l) b        FrameSynchronizer pFrameSync;
5 F! \0 Y1 a* x* |$ D6 D7 T9 L        QPSKDataDecoder pDataDecod;0 n: ^& J  X$ n4 Z8 C' n
        static double usable_left_filtfilt[81000];
- m# ]9 Y/ T$ p) c+ x# L5 x        static double youXiaoShuJu_QuZhiLiu[81000];8 \/ f9 N; w4 ^: L
        double mtmp;- ]" S- {9 t. N9 Y4 }
        int ix;
- c( l0 h/ {( _3 A/ n        boolean_T exitg2;7 m5 j' ]$ @' G2 J
        boolean_T exitg1;
: N4 f) {( d/ M& Q1 o0 ~        double YiZhenShuJu[800];* R$ {4 K! X  Q3 E) R
        double dv1[800];- q: u5 C+ L, `7 V: P% u) ?+ S
( d7 ~  z) e7 L4 f7 Y
2 A3 x5 ~1 y6 U2 {8 t8 Q& q
        double b_YiZhenShuJu[800];" x* [3 N+ V7 r% g
        double I_filtfilt[800];
- s6 s6 `5 q- |' m1 [        double Q_filtfilt[800];
& g) L( M3 c7 s) I  Q, b        creal_T b_I_filtfilt[800];$ _. _1 h3 X- `! M
        creal_T b[800];& V* F9 d/ _1 ]) {
        creal_T RCRxSignal[50];
# Y- S. N4 M. s: C& E        creal_T fineCompSignal[50];
# v. c( y2 X* e  S        double phError[50];$ ~, m' _; z. _# n
        creal_T timingRecSignal_data[28];
; @! s2 v% I! z- F        int timingRecSignal_size[1];$ o2 v( _# C& W% u# P. e
        double prbIdx_data[28];* T8 {$ h5 y3 _8 }" e. ^
        int prbIdx_size[1];8 k: u. V; w, @. k& y0 L9 Y- ?
        double dtMt_data[28];
5 X1 e+ w: Q% ?        int dtMt_size[1];
( `: b5 p. ~& h        creal_T symFrame[25];
0 K, ]: l% g6 h0 \. _        boolean_T isFrameValid;
" g) l; i, V$ \; ~        double unusedU0[3];
1 k) u& \: v0 C( Q$ i) U2 O5 Q+ z. ]; R
        //调试过程中的变量
0 Y+ C# l* p2 O) N        int  enough_data;( H& b. }9 ^6 A! m+ s% Y  v) [" {
: u1 a  n4 s, A9 W
        int enoughDataFlag;$ ]& Z8 V% I! l) n* Q9 @# u
        int yiDuanShuJu_mean_int;
/ X# K+ K# Y0 S  c6 ~% u        int int_sum_dv0;4 U: @& }# j1 K* M: _- K4 Z  c
        int oo;
' m# w4 y1 h4 Z% u" L6 j2 h+ X        int ii;
& F- \+ v7 t4 K6 K        myfuck=10;
* w! W0 l  C- h* m3 J        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
0 ]# }# @& N% a9 Q        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */5 @$ Y: S: P' |& B
4 ~4 V, }6 @# j
        yiDuanShuJu_mean = mean(data1000);
6 `  u3 M, ]+ J' {, Y3 m5 A
6 y3 W( n- f5 m. i* `        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;- l2 l6 |  V2 K, P( F
        UARTPutc('A');+ s3 A+ m  H& \. b2 e  _) D% D) ~3 O7 {
        UARTPutNum(yiDuanShuJu_mean_int);
  p* R2 ]% ?' B2 ?# b* W        UARTPutc('\r');0 z8 C0 R! V' l4 T4 P/ l
        UARTPutc('\n');
3 [" `$ i, W4 B, u0 }" m4 Y, ^3 E" o
4 K8 L7 U2 P  w/ U: |$ a# O        for (ixstart = 0; ixstart < 1000; ixstart++) {( ^2 V6 m" v5 Y8 {, z1 \! j
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;. _2 p# r' Q( S
        }3 ?: O' W3 g5 z* n7 J+ |$ m6 y

# p& ^9 O! E4 q6 \        power(yiDuanShuJu_LowMean, dv0);1 m7 L  _6 r: b1 z# g. Y7 i

- p8 @4 N  i8 p  s        int_sum_dv0 = (int) sum(dv0);
0 }" w5 W- s) A, Q* A, m1 U( L" M* C% c. |$ F4 {
        UARTPutc('B');
$ A  N: o: v! q; y: I1 l0 S        UARTPutNum(int_sum_dv0);
5 s1 g' F2 @" _! A        UARTPutc('\r');
8 M, J; v4 v7 a% C        UARTPutc('\n');
( M% C' _/ A" H
8 j; G+ j) c6 e/ O//        int compareFlag = int_sum_dv0 > 1.0E+8;
6 q* t; N" x. I9 O+ T4 \$ j$ n; M* @+ \4 \
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
1 q2 C2 k  l8 F  x                UARTPutc('C');8 g% M- x0 K  L. B) G4 r5 o
                /*  比较信号能量 */
0 \* B0 Z0 Y$ M5 Q/ p                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
3 c! I# _# ]9 A- R: ^. H//                yiDuanShuJu_mean = 1000.0 * youxiao_k;( o1 u3 H: S' ~" ^, R! w# l
//                for (ixstart = 0; ixstart < 1000; ixstart++) {; w8 s6 H. h+ o
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
# Q+ C! h8 I/ g/ e//                                        yiDuanShuJu_LowMean[ixstart];
1 {) F; `- g; S5 f8 |//                }
# Q* l& l0 |% ]. M* N7 W) K. o9 E) s//+ J& }1 a. Y! v: o" T
//                youxiao_k++;7 D$ F8 C" Z  I, Z# Z5 n" c- ~
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
. n( P0 s' p  z( N& ^//                        /* 感觉要取21个数,即0-20, */$ b: ~+ V+ a5 A& k. d
//                        enough_data = 10;//有效是10,无效是0
; s5 f3 t. o+ M& {$ R/ o. c4 y//                }
' a6 B6 l- T$ u, R        }- K1 G6 Q: t+ m! P8 @
) b# n: j+ F* ^- O

5 |7 a6 ~! n* T7 S" a8 @        enoughDataFlag = 100;
" R0 ?  F3 N5 W% @* D4 T% B2 g        enoughDataFlag = 1000;' A% E5 h5 n/ B* O5 w: p
        enoughDataFlag = 0x02;
& Y7 S2 H* _3 s! e0 Q        enoughDataFlag = 200;' j8 X$ B, J7 F  H/ e

* H7 U/ a9 I% `* z        int myfuvk1;
" e  x& O- o# c        myfuvk1 =11;
2 Q; F6 C! ]6 u& g: L  ?: v8 \. I1 X) ?4 H3 P: M

4 c% k4 O( `  H7 X" @! f: m        enough_data = 0;7 h' h: b+ x8 l
2 J. d! C0 P$ ]+ b$ b9 P
//        if(enough_data>50){3 [8 f  t$ Z9 [: a# |: J
//                enoughDataFlag=0x01;
( L1 e3 g0 b1 [4 X& f//        }else if(enough_data<50){
. h# d# k6 m" n* g( U//                enoughDataFlag=0x00;//0x00还是不行% h" s! A) l- D7 @3 }! f% l
//        }
7 ^# [1 s8 a6 |1 ]: |
( J4 r- L) `& J# F! r) v) g( C2 k
. [& Z3 |5 @; {4 G6 I3 ?3 {        oo=10;  X7 G" U* `5 H
        oo = oo  <  5;
- N* V9 p0 R/ e$ ~+ F/ w8 b        if(oo){
! y5 Y& W$ f  q                ii=0;
* K% T0 r% P& W/ P! V* w- C( I2 u        }
  r+ n8 t* e7 W  {        if(oo  <  5){3 E1 E0 s0 J' F
                ii=0;0 T5 O+ i. j- ^* w- P/ U6 c, ~+ n
        }" W7 ^  T9 K/ I
        if(oo  >  5){/ m- S2 Z1 i% L
                ii=0;
) W; s7 S8 d, z        }
* Q7 X) d# ~/ z6 H$ m+ D
: F' o; G( \! q" O        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
3 S9 Y0 |# Y& b# x6 `1 p        /*  如果数据足够才执行主程序 */
% O- T* B! p3 o% F9 `% [5 L        oo = oo  <  5;
4 g" I7 H+ A8 \( G        enoughDataFlag = enoughDataFlag  <  5;! I; v% R. }) M  n
        if (enoughDataFlag  <  5) {
! x$ j) n) f9 V1 ^9 F9 k+ F//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
* D1 B: p$ v# p( J4 t                AGC_AGC(&pAGC);! W- }6 F3 b0 b

% o+ H- J3 H( ~% B* f( E+ N2 A. s: @2 ?                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
+ ^! e$ w4 v' {5 O) D8 Y& ]                FIRDecimator_FIRDecimator(&pRxFilter);! ?6 i& y+ R# c! _  h

" ?/ s% g' G2 ^2 e                /* Downsampling */
& e9 _: g& x2 L& U, v1 h: w4 ~& c5 ]                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
/ s% D: s- t2 }, e
5 @7 j* T( {( L0 W9 O1 C                c_PreambleDetector_PreambleDete(&pPrbDet);
3 |# W( g$ {, q$ F! U# R  z
& e* P8 j! n* r                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
2 N) c+ J  F- X; j                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
1 k( A8 E+ h( Z& B                /*     %帧数量=100 */8 _2 z5 ~% |+ f5 h6 S" W; W
                pFrameSync.isInitialized = 0;1 W5 t4 T. x0 s" Q  f) F
- N8 @, }1 x; o
                /*  [EOF] */
$ q! f7 c: K& d* m, \/ E                /* 前导码长度是13 */
- A, B! n+ Q7 i% W                /*    %qpsk */
$ g5 I* ?" \% _9 H" `: n6 ^                pDataDecod.isInitialized = 0;2 g# O& h, z0 l+ Y' |' o
, c+ r) `+ x' x* N3 K: e
                /*  end */
* I2 b  F6 W/ m3 ?" C' I                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */% U' L  ?8 L0 v* v+ [
                /* Convert 3-dB frequency */
" |+ [0 D' M' l2 B                /* Convert 3-dB frequency */) ~  j5 A& z* W, ]$ z
                filtfilt(save_buffer, usable_left_filtfilt);7 [5 F/ N: F2 n" B/ p1 [
                for (ixstart = 0; ixstart < 81000; ixstart++) {
8 ~$ R+ ~2 [7 w% Q                        usable_left_filtfilt[ixstart] *= 2.0;* N. A5 _- {+ Z& U
                }
5 X4 R8 p5 I6 p5 H- ?3 {# E4 e. ]
4 U1 G# i8 B( @2 ^, G* o                /* 注意乘2,处理幅度 */
' Y( [& @/ \+ T9 B                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */+ g9 w& ^+ T% J) H; ?. G
                /*     %% 行列转换 */
9 L! Q# o3 d* K7 ?7 _                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);, M0 T# K* e4 O6 @( {& p1 F
                for (ixstart = 0; ixstart < 81000; ixstart++) {  G: K+ Q% n2 h- ~- V1 n
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
; i$ C, v' }1 o: c                                        - yiDuanShuJu_mean;
3 F) o) T( u9 R; ~8 l9 j                }5 v6 K+ ]& h8 v0 {3 K
/ c1 h3 b% Y" h5 }$ w
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
. z! _3 w0 M0 u+ }. [9 }0 K                ixstart = 1;: z" U: N6 T  d8 f! B8 \& o$ B
                mtmp = youXiaoShuJu_QuZhiLiu[0];
* G+ `% N2 ]1 W' ^2 r                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {$ ^8 m+ Z+ B4 U0 P
                        ix = 2;0 q; D& D7 x0 J! Q2 N  s
                        exitg2 = false;( i. C1 u9 q  l1 n
                        while ((!exitg2) && (ix < 81001)) {# h2 |/ k. J. d  I
                                ixstart = ix;# T; l3 Y& s5 Z( `! C. V9 y
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
3 r. @% K/ M6 |1 h' p; |: }' D                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];& P# }% V+ ^8 s& M# H' c+ C
                                        exitg2 = true;. y& V7 L" i% i' ~' a2 \
                                } else {* q' g3 m. B1 a7 v# y5 E6 v
                                        ix++;: ~2 w$ P. b. c8 b; P7 n
                                }
1 y; C7 E& K* Q# k) L% L' e                        }
( y9 I% h' s7 p2 i( f                }3 o- m8 c1 K/ I! Y5 R$ d. |
# R/ q. Z* k) [) @
                if (ixstart < 81000) {
2 n6 Z) v/ @& d1 w4 h! T7 K                        while (ixstart + 1 < 81001) {
8 y& [2 |. W0 U1 m. |4 D: u                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {7 a7 q# U# U6 K6 t/ o; Z+ Y
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
* X8 Y- n" h) e5 U4 D  G" d                                }
+ e  J. {$ p9 v' s4 X
& x6 U: E! Z: N+ C! A- E                                ixstart++;  i3 O6 }( a  [/ D
                        }1 `6 a. y( z) x* n8 P
                }
! p$ x# {  R2 G* E" f
3 S! e! T$ G% b                ixstart = 1;
! M3 m4 O; p+ e" F) l                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];  d) {( N% G% A  s% l  b/ ~( y  C
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
/ ]4 t4 g5 y9 b% S9 o                        ix = 2;
% P6 i+ r* n" ^$ b  Q                        exitg1 = false;6 b; T/ W: o6 g3 s9 X4 c
                        while ((!exitg1) && (ix < 81001)) {5 E) K* k$ g% A+ |% I5 V4 ^
                                ixstart = ix;' Y! T+ o  f$ ~; v/ S1 g" @7 v5 L  _
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {5 r) u5 U: `2 O: v
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
1 w3 Z% _+ ]" S' L1 n" J+ [6 A                                        exitg1 = true;. Z' a' H$ [: x
                                } else {
9 Q) |) d, a5 K; \# r# E                                        ix++;
: p, w' t6 k5 Q+ T$ \                                }" G! \) V' S7 ]( y# @1 ?  u! z* |( \
                        }1 I1 ]5 A5 M- _) `. {
                }
4 b, O; B( ?! O  X
# R& }: W* b. E* j  L4 p( R                if (ixstart < 81000) {
3 t/ o) M6 E. G: ~  X! s5 J                        while (ixstart + 1 < 81001) {) }/ l" u4 r/ `* V2 ?; c5 i7 c9 Q
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {; I6 _$ A& }9 I; r# [
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];# ^$ l! Z6 x4 t/ _
                                }; z# }# a" c9 l

: A# D, |: |2 r                                ixstart++;& ~, E' n- ~3 D3 G/ `4 W
                        }) b, C- p: b9 B4 M/ @/ c  I1 h
                }9 K$ z2 v2 t8 V( v. |+ d
6 L6 l% K: H8 X# N
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
3 c9 K3 [( w: A1 d                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {( U- M3 y( }/ \2 Y1 ]( {) m
                        yiDuanShuJu_mean = mtmp;  _2 J- {. L( X0 w: G% Z) a
                }
# u+ e) y! v  J6 z# ~
! b- y) J& l  L8 K4 O  h                /*  找出极值 */
% ], C$ E& `, F                for (ixstart = 0; ixstart < 81000; ixstart++) {
4 S4 r/ ]% ]6 H: @7 O& h5 b                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
# `0 c5 K, }" S+ T( N  M1 \                }/ E9 g6 h" Q6 Z% y& F
0 H/ g" L0 m) K; u4 g$ k/ R7 U- y
        --------------帖子字数限制------------------
; v1 ?( ^/ f4 L" S9 x" Q6 p}  h' F3 S: ?. b9 I9 b) K3 [% ~
1 Z( X5 B  V5 o8 G
* s# {$ S- Q. h+ N7 y) p

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 23:35 , Processed in 0.041949 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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