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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ) M( V. F" L0 [+ g" t2 i" w
! C4 S: i) U. F2 Y) `* @& P7 Q
各位大神:* I3 q6 D8 ?: e2 W& \8 p
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
  Y1 F1 e8 l3 Y/ K( }& j, u" z+ `$ {      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:6 \1 |& T' F) ]1 |
& m+ Z4 N! y  D6 O- A& ~4 h* K
     * q# }- i9 T: c& H5 ?
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。4 X1 K9 i; k* w
& q/ d5 Y* Q7 Q, [/ r, u
并没有其他线程
* ~9 X5 |! E2 t7 y# q反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。0 q/ L+ O" J5 z0 ^, \
也说不定是和堆栈有关系。。。。。。3 d% R: J/ l. f
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
* h9 ?- E, T0 {, ^7 g! b% j2 S
. Z. n8 z! u0 E$ w  c+ d5 D
9 X" N8 {* O+ U, D" J" h# J$ d% N, M6 |
我也很绝望啊,希望大神能帮帮忙,感激不尽,!/ N2 _/ B5 D( P  f
/ F) |3 c- W2 o7 n- \

$ E$ S4 q4 w7 _: H  p* _3 i附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
0 P3 l( F& e3 h. F7 j% O% q* r, l        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。  U0 S) H2 C: {

. P% C$ h6 }' W0 Bboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(8 E- F1 _+ j9 [
                const double data1000[1000]) {: w: _1 n! F% g+ m+ O" _
2 i5 S( x6 `. U4 N0 e* \
        int myfuck;
0 n7 l4 R8 j) R2 N- o+ l        double yiDuanShuJu_mean;
9 B: h6 h+ ?5 r7 Y. C: l  D        double yiDuanShuJu_LowMean[1000];+ R8 }$ s2 `- R8 z2 G0 p" T
        int ixstart;
! ^+ \' s' H; U$ N! |        double dv0[1000];
! J* o+ v  @* |1 a( t2 a* O: M/ e        comm_AGC pAGC;
' l* I0 \$ `$ `- ~        comm_CarrierSynchronizer pFineFreqCompensator;3 d& N0 o2 P* o* f  z
        dspcodegen_FIRDecimator pRxFilter;, Q# A" ]2 N, ]2 a
        comm_SymbolSynchronizer pTimingRec;
( O! i! z  H: L* r6 o3 J% B        comm_PreambleDetector pPrbDet;
# Q. g: \. V7 A; y( ]/ @6 U        FrameSynchronizer pFrameSync;9 f0 s" B9 ]0 @& R' M
        QPSKDataDecoder pDataDecod;) b* [/ T2 e, v9 m  X( z' |
        static double usable_left_filtfilt[81000];
) u  g, k: ~* n, Y- f' y# [/ t$ O        static double youXiaoShuJu_QuZhiLiu[81000];9 k6 S- S0 r! P2 d/ g( Q
        double mtmp;
# o0 i* E* j9 {6 k6 x        int ix;
5 h7 E; c0 B' G) S        boolean_T exitg2;. G( R/ Z% C( r! s
        boolean_T exitg1;
" G: @  B% s) I3 H6 v* k4 _  C        double YiZhenShuJu[800];
5 B* ]- L) v3 r        double dv1[800];
7 G  t+ ^, }* w- P
% F7 R& U, G( m' T& W5 }4 \3 J' {3 r. w0 J: }6 d( y
        double b_YiZhenShuJu[800];! a* j5 n: D+ G
        double I_filtfilt[800];
& e8 t& Z* T" h* Q$ I, {/ w. C        double Q_filtfilt[800];& {- I1 M6 q9 d
        creal_T b_I_filtfilt[800];
1 g, F. P( C8 g3 s# S4 {9 T        creal_T b[800];
& z, \& Q# V" _* {        creal_T RCRxSignal[50];. }3 k1 i8 \4 r. t6 `" p
        creal_T fineCompSignal[50];
5 X" m. [8 {# z9 K. j, J) g! E; }        double phError[50];
7 s; l' n' {/ `! ^        creal_T timingRecSignal_data[28];! L- E5 \& u$ W% p, u# L+ V
        int timingRecSignal_size[1];# |  {2 M6 S! ]& y( l5 r6 c5 C1 L
        double prbIdx_data[28];! _9 I! N1 q! Q/ P8 P# c! G
        int prbIdx_size[1];4 j0 M7 N/ `& b* N$ D6 i% O
        double dtMt_data[28];+ q7 N4 ]/ `* F1 j) d; @! g4 V
        int dtMt_size[1];
- m1 @5 T. l. |# x        creal_T symFrame[25];- [% h& x4 C( m: k1 k* K
        boolean_T isFrameValid;
; @( i; l& t# X. S, u6 w" i- g        double unusedU0[3];
8 ?$ j, s. z% w3 Q- _  E; D. {8 ~3 L
        //调试过程中的变量
/ F" z( p7 D6 o  s7 G+ k        int  enough_data;1 Q  X/ u, R6 T& D5 l+ G. r
. a6 D4 {0 X( u3 `$ I  p+ f
        int enoughDataFlag;. j/ _1 A9 w& I% _& K( l/ l1 s: ?
        int yiDuanShuJu_mean_int;% T' R- }- p8 U' `2 h) B0 O
        int int_sum_dv0;- K! K! ?* ~) M+ U% M% @$ _
        int oo;3 U" h7 ?- H( O6 H6 u# ^8 }: w0 V+ k
        int ii;+ ^, u6 I; s3 M7 V
        myfuck=10;+ x0 x$ @& L+ D& ]% l* V- K
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
/ e% Y6 c9 Y- n2 v. a        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */2 V1 n0 J9 R7 L" Y' x
  s; |- N0 x! @+ {7 O
        yiDuanShuJu_mean = mean(data1000);6 T0 L' K4 }0 t. D0 ]

0 V$ }3 f- N$ B! R        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
' D1 H2 A5 r4 D$ u        UARTPutc('A');
6 V9 C4 y1 s. Y3 X, U; A        UARTPutNum(yiDuanShuJu_mean_int);  J! d$ |+ v% G3 O; r4 W
        UARTPutc('\r');
* k$ B7 f2 Q. w, K        UARTPutc('\n');- S; V; P. L$ _& N, w& z
0 |- j( P: |( F5 y/ O
        for (ixstart = 0; ixstart < 1000; ixstart++) {
$ P: a2 K6 ^. K! W/ J6 ^9 V7 P& }( |                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
+ Y5 r6 ?  m6 M6 J        }
/ X! i/ h" f2 P7 m, G) X, Z/ l- F8 \1 H- Y8 \4 X- k% N+ }( N5 Y* Z. M
        power(yiDuanShuJu_LowMean, dv0);
0 y  P* ^, G  z& J: o2 P: `3 E7 P) f+ c8 G2 j1 V
        int_sum_dv0 = (int) sum(dv0);2 l# p# i1 F$ g9 o4 o
8 t% \1 X6 s3 Y- R, O
        UARTPutc('B');5 b5 _; _2 N4 r$ e9 _
        UARTPutNum(int_sum_dv0);, P% O* v" d8 a. H
        UARTPutc('\r');. k; I6 _* T4 z: ^
        UARTPutc('\n');! H& k, O; k  m+ {7 I5 m  P

; p0 {2 B$ v5 F: N  e' k* k3 D//        int compareFlag = int_sum_dv0 > 1.0E+8;8 A" P: t% ?5 p, m- g+ C' s
$ n% A  }8 w8 F0 k# C
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?3 l2 ~2 u0 D' `0 O0 b! d$ m
                UARTPutc('C');- }" e2 B1 m4 ?& o* j- @+ w
                /*  比较信号能量 */3 s8 a0 u- k" G" X3 {$ @
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
; _; s! |' ~. Y8 s0 S//                yiDuanShuJu_mean = 1000.0 * youxiao_k;" D- \) z( ^7 |+ V3 H2 q( F
//                for (ixstart = 0; ixstart < 1000; ixstart++) {% o! E5 x+ F, t& Z/ c
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 n# \5 k0 U. R" ?0 s" M; n, W
//                                        yiDuanShuJu_LowMean[ixstart];- E# A+ C7 J* U
//                }" c6 i5 D! b. R# R+ A$ {* w
//
  H4 V# {9 C9 J9 k/ F//                youxiao_k++;
  ]& y! [8 H# U0 E9 U; O: `//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
0 `( A5 l/ L2 y$ O! J//                        /* 感觉要取21个数,即0-20, */+ k! s2 D. l. C; x! ]* E
//                        enough_data = 10;//有效是10,无效是0. N) @8 n$ [& b' I/ m; I. X2 T
//                }% @/ h) k, Y1 C
        }+ n& d$ T8 p9 a/ B8 ?# F  c

( A4 I% y* m7 ^* @5 @( F0 |; z* c% R! X; d: U
        enoughDataFlag = 100;4 x; q2 C: W. {. e: J
        enoughDataFlag = 1000;1 ^: L; H/ A. e3 u) b
        enoughDataFlag = 0x02;
! l/ b4 Y0 T8 \        enoughDataFlag = 200;
& ~0 t# I' }% q8 B* |, f: L/ p& K8 I3 O0 E& V
        int myfuvk1;% }1 c" @3 l6 }% B# C: Z
        myfuvk1 =11;
6 g$ s5 S7 B$ u, {; e+ u0 E  ^% H2 V& _: c. {" {. j8 g

% v1 A, u# o% U7 E( X7 G; B        enough_data = 0;
  D8 a  U+ k- [  f. Y5 d2 F
' D! W: \+ _5 a2 W//        if(enough_data>50){
9 s2 s0 m/ V! `//                enoughDataFlag=0x01;
0 |1 ?1 a! ~, N* }//        }else if(enough_data<50){; c. c. _; }# S8 f0 D. Y
//                enoughDataFlag=0x00;//0x00还是不行% @2 s  L; s- A4 \- y# G% j9 d4 u
//        }
: Z) Y2 y' j1 }# l3 \' V+ \
* ^% J# s: W3 Y' I$ ?3 |0 v9 K+ S" O; {9 K5 X. B" C
        oo=10;
) z" l- I: G) n; Y/ [9 `, C        oo = oo  <  5;
' `" q7 g0 }( R0 ^, B        if(oo){, y1 t# T4 w1 z0 [4 X  [6 E! n1 F
                ii=0;7 z1 X+ w3 M6 |- l( |# i* Q3 K
        }
7 |% W+ @2 F8 Q. I' i2 R        if(oo  <  5){
3 e/ Z# E- B/ S* d9 K9 L. ^! K* w                ii=0;* e6 Z) u  l' _4 C
        }
3 S* c3 Y, L4 T+ C        if(oo  >  5){
1 M) T  I4 f* p$ w& R3 c, b                ii=0;
' v7 J' ]' D' W+ y        }
% U. y! ~0 L) N. V4 f2 C- N8 ~) I3 n# ]7 E( }3 `- p  ]4 _# w- y* k! S
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
3 n3 g3 e5 m: k        /*  如果数据足够才执行主程序 */
' q5 G. C- C( {; i; v/ ~        oo = oo  <  5;
+ A& Z9 O6 \9 [+ x        enoughDataFlag = enoughDataFlag  <  5;
! Z' V0 q) {+ q" B4 A6 t9 ~! }# f        if (enoughDataFlag  <  5) {1 R+ V) l# ^: n- q
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
% [; F1 ], R$ q. o3 J2 l                AGC_AGC(&pAGC);. k- A% `9 g$ p8 J' a9 [; m

% O. p; q( j7 ?8 b+ `                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);+ k- a  F6 [/ k. o, m
                FIRDecimator_FIRDecimator(&pRxFilter);
2 X$ |& U5 Y2 |
" s0 r/ `* I! C# I$ o. i                /* Downsampling */
  d* M9 `$ m% \% i& q; w9 x3 n! ]; y* a                c_SymbolSynchronizer_SymbolSync(&pTimingRec);1 |9 b5 H* z% z! o* }- J: u2 w
* z6 H6 Y. [$ ~: B
                c_PreambleDetector_PreambleDete(&pPrbDet);
! O* t, `3 R5 M' X+ w% ~, J; M. ?1 @2 @
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */: x2 ?5 g- d" `, S$ A- p
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */& A! A# i" W2 H' s% s
                /*     %帧数量=100 */
3 R6 F8 D0 Y( `6 C9 H                pFrameSync.isInitialized = 0;1 w" k" z  e5 E( s2 @/ \
6 c1 j5 ?# |3 t0 N! U
                /*  [EOF] */) k' ?' S' r0 a4 q9 O3 V. _# A
                /* 前导码长度是13 */* [8 p2 E& s) p9 C( }7 v/ ]5 e+ K& ^
                /*    %qpsk */
: z, n  f! u. F! ^                pDataDecod.isInitialized = 0;* L! @- d( Q, F! y% e

2 B  h  O) Z1 }                /*  end */1 K- ]. H( k0 b2 B4 {! r
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */& ~; k- A6 w2 n
                /* Convert 3-dB frequency */; w" r( E; b9 f& @4 ?0 y
                /* Convert 3-dB frequency */! s. v5 A$ |2 i  q
                filtfilt(save_buffer, usable_left_filtfilt);
: b9 V& P1 G7 d5 w                for (ixstart = 0; ixstart < 81000; ixstart++) {
) q% K4 j' [/ Z, H                        usable_left_filtfilt[ixstart] *= 2.0;0 j, H- s: P. p+ w
                }
# g1 g5 `2 h% E- ]
/ {: `3 d9 C" H                /* 注意乘2,处理幅度 */
1 C! G. [) x! F- D. X                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 m, z2 N, {3 f0 u: Z' j                /*     %% 行列转换 */# N. X$ |& w' |7 W/ ]$ @# e
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( Z) ?. a! S' ^8 y; D                for (ixstart = 0; ixstart < 81000; ixstart++) {
1 y5 u/ S+ Z: T* |# V7 C                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
5 i: c; p3 g0 e( P: @                                        - yiDuanShuJu_mean;
8 ^3 `* e( q+ U' e4 G/ Z                }& |+ q! R( X/ i$ S% z. u
* n0 k! I4 e1 a: a$ Z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */* J) j7 G# P# ^3 Y  A; T
                ixstart = 1;, ?2 b. u! C6 x% |, H4 {! f
                mtmp = youXiaoShuJu_QuZhiLiu[0];
- ]0 d: J, p' N- e, p. h                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 {6 J6 J- I+ q& f# H                        ix = 2;" K0 `) e9 l" }6 N2 m6 k
                        exitg2 = false;
# |3 }: q: Z' U4 p                        while ((!exitg2) && (ix < 81001)) {
! r: _8 _4 J* W1 r- l$ h( e! _                                ixstart = ix;
8 P  B5 i7 q7 h                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ v. O: x( S( l- b6 R                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
! X& Y* M/ Y0 R9 l) Q4 R                                        exitg2 = true;, U' m& K' p' x3 I  K7 l
                                } else {
6 C& O5 D2 c) J7 ^2 L' k                                        ix++;
& y+ C# a0 i8 v+ M4 e8 B' r                                }
! l) [4 W3 I' \) Z" \                        }
$ N" d4 y# B3 O, k. i2 E7 A                }
! c1 a0 E- M9 ]1 Z6 x9 g$ U+ k- @
                if (ixstart < 81000) {
7 O% T) f8 Z4 S2 E# D                        while (ixstart + 1 < 81001) {
3 Q  \7 }# ?; z% R" A                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
/ W) f( }) d; p+ Y: {                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];) U+ |# n, d7 f
                                }- F+ P/ s$ {, u

* ~+ n: f& Q" J, W: ^. H" O6 s3 T                                ixstart++;
* e, y( z- R7 C                        }" Z( n/ y0 E0 V5 J. u
                }4 G& N4 ~/ T( X% e! Z/ m  H/ V3 o
! _7 W4 z5 H( Y) D* `+ g
                ixstart = 1;; q7 x# ?# [6 M( ?
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
( n7 ~$ d$ ~/ }; p' J                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {$ s- w; {2 r. p! B+ c
                        ix = 2;
- }% L( n, h8 c5 D- s5 G9 I) b7 b, v                        exitg1 = false;
8 R9 d8 b/ v: L8 `% [& V% Q! ~                        while ((!exitg1) && (ix < 81001)) {
" w+ y' g/ C: O0 T9 `( N& }* S* l% s8 k                                ixstart = ix;
# _* A* d6 l; V: c. b                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ `* u6 l3 v1 _. g0 ?                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
3 w6 U8 ~5 H" K! I0 c; o% S4 r3 ?# q2 }                                        exitg1 = true;
) N' M5 D* E% E# t! ~( P                                } else {6 W0 q2 K, N4 p+ s, q  z
                                        ix++;
5 m; B- _& }% I  J                                }, z8 f: q2 a; C" @; S6 K+ d& W
                        }2 S9 m0 ~0 k! z$ l1 r1 I
                }* Q! A4 U" D- b+ Y1 Y# X4 K2 H
# @* F6 d- Y  Z2 k# i" L$ y7 G4 C
                if (ixstart < 81000) {# g8 [4 @! @) k1 n& P* @
                        while (ixstart + 1 < 81001) {
+ J1 A/ G0 y. ^& c- z                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {- u7 ^2 P6 ]6 J! L
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
, ?5 }/ W  f9 W                                }6 U0 O; [! e9 }# U6 j1 y+ ]
/ b& j* N3 ], n" p  z
                                ixstart++;
  ]# b& z  q: D( P! Q                        }) N1 M! {' v8 S7 C0 Y$ J
                }: w! |* t( [! a4 w( K
' O' V0 Q2 V$ Z$ \
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
( k8 g  L$ u* N8 A4 x                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {; ^( Z/ A& i5 u! _7 b2 {) _4 k2 f7 I
                        yiDuanShuJu_mean = mtmp;5 H$ \6 Y) _: y4 \
                }7 x1 U7 G% i+ z* q* b" ^2 q
6 |8 m6 L7 d8 e8 p' s
                /*  找出极值 */
5 V$ f0 T: M$ l( I% [                for (ixstart = 0; ixstart < 81000; ixstart++) {( t& V& D4 b+ f' b/ F
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
+ v, Q/ }' U+ x9 ^' Z6 c9 F/ ?4 g                }
( h; e. T$ P; }" d, c# x9 ~( u
3 c" Q6 b7 p5 M( f$ E& u; Z        --------------帖子字数限制------------------7 Q7 |% p3 H% V& Q( c) }& G$ z
}/ s+ c$ x$ J% G7 K3 S

9 c/ g. X8 ~' k" O
  x" b) R% m: Q- a

本帖子中包含更多资源

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

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-13 23:34 , Processed in 0.041128 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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