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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 5 M9 b5 ~9 @) }" c- j$ }  K
+ x( u9 I' I8 a9 c& l
各位大神:
$ ^7 Y, O5 O1 }! M; m     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~): ~) ~! x, ^# L) @( S
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:1 _, T7 p8 q4 Y$ M- p6 L/ o
& q' B9 L/ \( v! c, d  F7 K' _
     
1 D" P4 u; N, S2 _这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。; P9 X* [5 C7 G8 K4 S
% o( k  C, H: _  B: @- S
并没有其他线程
, i; Q# N# |* m- R# x$ g反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。5 a% D' g1 m/ X) K* D7 e
也说不定是和堆栈有关系。。。。。。3 `$ b$ v; v. A0 M
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 N. ~' |- n: P: S5 W- ]+ K$ A0 Q: L7 q9 `9 d7 i  _4 Z3 @
1 Q, t/ N6 H5 ]6 s( D
9 B4 U: u7 s4 X2 ?
我也很绝望啊,希望大神能帮帮忙,感激不尽,!) e) K; n- a) r: N- x* V
$ |6 T  ]! i; E4 ^1 a  e4 p! \. t

/ M( h' b8 o; \附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];" n2 w; w4 F! q3 H/ Q2 f5 Q7 y
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。  f/ d, b/ G, c: T

4 q4 N5 F* u3 T' T* Vboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
+ k( @) o0 c* ~7 P8 j! E                const double data1000[1000]) {
, E" E' S( U" |5 u1 U& \1 D/ {) d* a% G, |
        int myfuck;
3 |3 d  ]( `/ o  U. ]" t- S* l        double yiDuanShuJu_mean;4 m. M# h" [; `. \) ^6 V$ [' T
        double yiDuanShuJu_LowMean[1000];7 i( l3 s3 H% m+ ]" M1 z1 ?
        int ixstart;4 X7 \' N( z4 X) w. L( ?* f3 a* q: E
        double dv0[1000];
2 S) ?: k, ~( b        comm_AGC pAGC;. V% _4 ^, \/ E! \! G. z
        comm_CarrierSynchronizer pFineFreqCompensator;" D% L0 c- G+ C" m2 o) _
        dspcodegen_FIRDecimator pRxFilter;* S7 c: z- ]2 \* o2 y6 {
        comm_SymbolSynchronizer pTimingRec;$ @( P7 i. Z. }
        comm_PreambleDetector pPrbDet;
% ]! W1 a9 n3 S5 X' U; }  n        FrameSynchronizer pFrameSync;9 f$ a1 ], M6 d$ k# ^
        QPSKDataDecoder pDataDecod;2 s) Q# o) h; z) x
        static double usable_left_filtfilt[81000];0 `/ l) |$ Y' n& a5 S
        static double youXiaoShuJu_QuZhiLiu[81000];) f" X5 S9 W, d1 F8 o, _
        double mtmp;
: o- f2 q+ E; k- v7 z2 \5 m        int ix;+ F& k6 k, a! @- ^8 I
        boolean_T exitg2;
1 x& |( m1 ~3 V0 {/ j  d        boolean_T exitg1;5 X. G& G" X4 h+ [4 u9 W
        double YiZhenShuJu[800];
% I8 T+ P7 f% `* g5 f$ n1 l& K        double dv1[800];
% I# U( Z0 m* ?7 Q4 W! T" R5 Q3 Z% F5 N8 f: H1 {
6 k1 c. _7 J: [0 q5 o
        double b_YiZhenShuJu[800];
4 q3 A, ~7 U$ H! C- d$ }        double I_filtfilt[800];8 C9 L, Q* Y, P
        double Q_filtfilt[800];# }2 v! g1 I$ F1 h
        creal_T b_I_filtfilt[800];+ Q' Z1 W0 P! y+ j& }
        creal_T b[800];2 N- W- x- o1 ^' q9 b! l3 m4 e) F
        creal_T RCRxSignal[50];7 i% z: U, \( R$ a% N% U: B) |
        creal_T fineCompSignal[50];
* O  U' K! J0 O; ?# ?! @) C4 [        double phError[50];
! g( p% c8 e8 e0 A& U# {        creal_T timingRecSignal_data[28];2 s0 y: c, x4 u/ f
        int timingRecSignal_size[1];
. Z: \# M+ @* L        double prbIdx_data[28];
+ D2 H& `/ P$ k. l        int prbIdx_size[1];
  s" u5 b  F7 N" \1 L        double dtMt_data[28];
1 C/ N4 X6 _9 R% M. o0 ^        int dtMt_size[1];
- T) C8 V; a# u  z        creal_T symFrame[25];! D. a' ~7 K! x2 c  l
        boolean_T isFrameValid;0 _7 E; @% ^; {0 J) h2 a% q
        double unusedU0[3];; O+ u# Z% a8 e- m
( x. G. ~. t( V6 [% W
        //调试过程中的变量; s6 H( k. J0 A3 _5 ?  I7 `- G* i
        int  enough_data;5 I' C0 _8 n" y

" w  W. f3 X" [0 f0 u) y        int enoughDataFlag;
$ o9 S: E- o  k! r5 a( Q        int yiDuanShuJu_mean_int;
: f% P& G: ]/ K3 U! e4 C; F) C) t% F        int int_sum_dv0;8 v0 e. @; L$ |+ p3 l' O3 P
        int oo;0 k4 X+ q( P& Q) d( Y5 b, n; P  m
        int ii;
8 P6 x/ o4 X$ }( a        myfuck=10;
* M1 ^, c8 Z# c5 s6 e/ F: ]- ^        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */% l. ]) A0 K/ [( O4 @9 W" X
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
- }$ z7 U1 ]$ _" x  A4 g# S$ h8 _) Q
        yiDuanShuJu_mean = mean(data1000);
' z# D* e1 R- m9 d( b1 I
; _1 C+ S( F4 m8 Q( v( X& q1 O; L        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
; V: m( Q- i4 k: f  K6 q* l0 V        UARTPutc('A');
( M6 X) X; D& U0 r2 ?% N        UARTPutNum(yiDuanShuJu_mean_int);
, Q- d# Z. n- G. p& b4 M* L* l) d        UARTPutc('\r');
$ I3 E* Z7 Y8 B. l, U. L        UARTPutc('\n');
( S- |0 @4 N0 J1 b2 X
: ^2 J0 w( D8 u' @1 E1 H! f5 p        for (ixstart = 0; ixstart < 1000; ixstart++) {# ]' j7 m7 y. I( @; y0 Y! l
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;2 J' G7 w2 A) `/ Z% k. w9 J
        }
4 L, w$ O% i* ]. O' D) R: x  e0 J3 \" ~5 x
        power(yiDuanShuJu_LowMean, dv0);
  z' `) R$ U% n( t( N7 A( N) B) R
        int_sum_dv0 = (int) sum(dv0);
7 H% V4 c* k. @% a9 X  n7 T7 V! T4 O& t7 r! i4 p
        UARTPutc('B');
; ]& U% g# S% p/ Q& v* B        UARTPutNum(int_sum_dv0);
6 V9 U6 a( U" f3 y# V        UARTPutc('\r');
! h& c0 d% ~* X6 g! i        UARTPutc('\n');; z, h% P, e+ B; `8 Q6 d
* o, e) C/ D; y) [/ B; Y1 H6 \9 q9 R
//        int compareFlag = int_sum_dv0 > 1.0E+8;
( p; N8 Y* Y. i$ u. o
9 y3 I( W, ~3 l3 i        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
" \/ t6 b$ @4 h                UARTPutc('C');
- h( S( O6 d- j* m% N                /*  比较信号能量 */7 {. \% A$ c3 s8 E3 u7 H( o
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */$ z+ Y/ u. O- U! c- h* f& ?
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;( @( N5 N2 C& J! }/ x0 M" ]
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
7 X! g1 _) c% J//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =! _6 W. f. _3 W) V! H7 v6 @; x
//                                        yiDuanShuJu_LowMean[ixstart];. l( K, g1 x4 U* E+ j, O/ B# T
//                }
% ~  X' o1 ~! E7 p//
$ g7 `$ ^  k3 `& p. q; o//                youxiao_k++;
( X1 n# S+ w( [! z" Y4 w2 n7 W//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==& Y/ S" Y5 o$ @; V6 n! C' {. }
//                        /* 感觉要取21个数,即0-20, */
7 Q6 ^2 ]4 a; ?; ]//                        enough_data = 10;//有效是10,无效是0
( E9 X0 U; I" u& F" C; y, I" ?//                }2 O0 @9 ~8 c9 [' o5 z, P
        }3 G& I/ z) ]; X& V
% a' C' C" ?" a
& n! P2 K' D& b2 w
        enoughDataFlag = 100;
( q& T3 B: o+ ]! b6 b- o, M& |        enoughDataFlag = 1000;3 b  ^% t% B! T
        enoughDataFlag = 0x02;
0 h, R4 K. n8 a3 a* G, w0 h  W+ [        enoughDataFlag = 200;+ k( Q! q+ h6 i% P* E: n1 k5 {8 U$ h
* i& O  n9 w7 p: P
        int myfuvk1;3 i1 o5 t2 n! R$ B- u
        myfuvk1 =11;0 R6 M- c* Y* g% r
$ {/ n+ N! P2 z9 {! O0 }
6 D$ D/ S" C( \. |/ a; u2 Z
        enough_data = 0;+ P4 {. ~, O1 Q8 z/ C+ s2 b
; w' u! S6 m9 j" O. `: N4 x
//        if(enough_data>50){
9 o6 u5 o3 E6 m1 Z# Z9 \- j- z0 T//                enoughDataFlag=0x01;3 \, L2 ^2 X- Z8 ?# X# t: F
//        }else if(enough_data<50){
; `  g& J$ T& {- U# m7 u) m//                enoughDataFlag=0x00;//0x00还是不行: a3 H: X# ]4 e. M; x  B
//        }
2 U1 j% q& \2 T7 _6 g+ |
7 y" j3 Y6 i" p+ K+ c( {( e- K6 d6 g& p$ e, e
        oo=10;' ]# j) |* }5 h
        oo = oo  <  5;
, j; {7 k; C; _" I( _. s) c2 N1 P        if(oo){2 b/ w4 c* j9 I! ?/ T6 u2 V  y
                ii=0;
7 r- L1 f6 ^0 l+ l! G        }' J3 ^: I7 T2 B- R. l8 G4 e+ g( B
        if(oo  <  5){
* ^+ p, P9 d' i) `" @                ii=0;( h6 d: x+ m% n5 O* [
        }
2 ^2 u- _- n9 _        if(oo  >  5){
4 ?1 P. g4 [6 X1 M+ l+ `" f                ii=0;
# `  z/ e8 o& O7 |9 i        }
0 A' u) F+ A& M* d9 v4 W, X/ r4 `, j# o# x
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
0 P: {. W% \$ x2 \& ]- X. A        /*  如果数据足够才执行主程序 */
. r/ P: S4 T+ o+ k        oo = oo  <  5;# c" G2 ~+ i& ?" F( w9 E
        enoughDataFlag = enoughDataFlag  <  5;
' d! t/ I% j9 I; S        if (enoughDataFlag  <  5) {$ \8 n0 v9 E/ r! t  r3 y
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
6 f4 Q/ O1 p8 T3 q                AGC_AGC(&pAGC);; B$ o/ S8 ?  Y- E# |7 N) n
$ M' ^5 k; L6 P6 C6 t' G$ v" t
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);+ t1 z: n* B: S/ F4 T7 L
                FIRDecimator_FIRDecimator(&pRxFilter);
" S) G5 j, p3 t4 K! k) n* M/ e
# H! b' `6 C2 t2 C  o! ?                /* Downsampling */
* A7 Y  A3 p- Z( H) H                c_SymbolSynchronizer_SymbolSync(&pTimingRec);! N3 p! }4 Q/ _6 d0 J0 `/ g+ R

( d" C- J# i3 r  I                c_PreambleDetector_PreambleDete(&pPrbDet);
% {2 ^8 ^# N  y3 Z$ {- y
- T( k5 @: `) `                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
# X0 E, p' f5 A1 Y                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
5 o2 b( K& {0 {! w$ F                /*     %帧数量=100 */
% G: D2 r+ W! k# k, d                pFrameSync.isInitialized = 0;
/ n8 U& p" |5 Y7 m8 I9 L7 X6 z1 \* W2 u# u* M7 {3 L2 O! p% p, l$ h
                /*  [EOF] */
% A7 a9 ~" g/ [' m, ?2 S' O                /* 前导码长度是13 */6 W) o8 j1 \* M% X( @# M. g, W
                /*    %qpsk */
6 j! x" ~: w+ [0 r7 S                pDataDecod.isInitialized = 0;* n; H- t% S- V0 e
/ Y' W% M3 T( g& a& |
                /*  end */1 |, l7 E' G. S& ?# R
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
6 Z* E' W) e* {                /* Convert 3-dB frequency */
% q  H3 j; m/ v! L: e5 J9 G                /* Convert 3-dB frequency */% U: C' `8 j1 ^0 y
                filtfilt(save_buffer, usable_left_filtfilt);
1 I0 W. L9 i5 k                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 f+ K) g# a- E  h1 z                        usable_left_filtfilt[ixstart] *= 2.0;
" l1 D  L+ r: x                }, w7 G) k2 X) Q7 \# X
( c- M* q0 f2 N  K
                /* 注意乘2,处理幅度 */
& I1 K: J) M& J4 d' j; k, P                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */% M7 f- `" g& G/ y6 n+ ?5 m
                /*     %% 行列转换 */+ h8 W% N. n" X4 y2 ?! ^
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);, @9 Y) W/ A) p7 k1 C
                for (ixstart = 0; ixstart < 81000; ixstart++) {% k+ `* H" x( J* C
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]! A3 E; T" h4 B, O  L
                                        - yiDuanShuJu_mean;. g& S. O: `2 s, N) X
                }
- T7 G  B  R; h' o4 {. `
4 w* ?: x3 p! f+ {                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
, Y+ B. z+ P" S/ m, `1 k                ixstart = 1;
) O8 L. V# C3 W: ~, b. b! k                mtmp = youXiaoShuJu_QuZhiLiu[0];
: E+ a. v0 c- U2 Z! o! ]                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 u; }# M( i/ W, G3 R8 k. e                        ix = 2;0 T/ Z0 H1 E# y* M0 R
                        exitg2 = false;
, a, J1 b2 L1 Y' B8 \9 r3 g, T5 L                        while ((!exitg2) && (ix < 81001)) {) j0 U& p. _( N7 ?& ~- L9 e) o
                                ixstart = ix;
5 \0 u7 s9 G7 a# W6 m3 x( h( G                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
! y! E, x- P/ T6 w9 M- ^                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];, h6 E, L. r0 x  u
                                        exitg2 = true;  U( _9 f4 S0 m1 B/ V0 c1 P! m
                                } else {
& C$ N! t& z0 i$ i7 [& i                                        ix++;8 g" P: G( ~, R/ N' D
                                }
/ I% I# C* t. F                        }
7 I/ C3 d4 ]2 u- u. o                }
1 w+ X- O  c5 Z7 O0 ]; s, T& I4 `3 r6 d. x% A6 ?
                if (ixstart < 81000) {
8 m4 [( H2 a" ?# T                        while (ixstart + 1 < 81001) {9 ?, v6 d! o: x9 ]2 T. r  O( e
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
  b0 }- ^4 b! r! v9 Y' v- r  S3 G                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
6 g7 V) q, N3 u6 Q" n                                }
1 E+ }5 s9 b- n1 [- A8 n! N
0 p4 }  T- K7 \" _. x                                ixstart++;
; c; I( k: [1 U                        }
1 u/ ~( y, D2 i1 N                }8 T9 ?  k  L. J% Q  R. @
) ~0 ?8 c( p6 U3 A9 t  a; e  ]6 K
                ixstart = 1;
. v& S- k1 q. D8 l/ [                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];8 R- g4 n2 e3 l4 o9 l8 |
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {' S3 `5 n- |. O: J
                        ix = 2;9 Z) M. l' u9 P( E  b
                        exitg1 = false;; l& [% r" ?6 K& ^  Z/ M) @
                        while ((!exitg1) && (ix < 81001)) {& P* X- j" ~+ K& U, ~2 ], J
                                ixstart = ix;
9 H& |/ A  F, b* T8 e                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 |- k+ C: y) d6 Q- X7 H% ^
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];* B/ E- {! y9 T: R; P
                                        exitg1 = true;
3 h& U- `& K. q! T                                } else {
, _2 D2 I! ^& L" b( x                                        ix++;6 \6 V) _9 L& K7 e- C
                                }
4 l0 Z1 N! p( Y# G                        }
, T" l2 R( ?4 Z. L! T                }
0 A6 ]5 _* j& Q" V6 y5 P! q
" u0 C8 E5 S8 a" v1 M                if (ixstart < 81000) {8 |# |" ?* H# V
                        while (ixstart + 1 < 81001) {4 c+ Z, R. O5 x! o2 `, l
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {" F2 m- _% B( D. F4 t* _# w
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
+ T) Y- D# A* s4 X- g! n                                }  L2 t# a/ S5 V" w& J' C( }8 f
' X9 @+ _* w1 Q( G
                                ixstart++;
0 m  f; O6 D; ?/ B2 u; K! _5 h1 D                        }# y& R$ a. \2 v' J- o
                }$ }# l$ j0 E: j  B

5 _% b, p2 N* B% U* m9 X3 c. h9 P. {                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
9 J9 e, F! l0 U* n" h+ `8 q                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {. {* \* v6 t  O7 u9 U
                        yiDuanShuJu_mean = mtmp;5 z/ B3 o7 i4 o
                }
( S- `, W- L) S- L8 R/ H
4 n2 O) D7 @+ ?0 F* i( q' C                /*  找出极值 *// F5 U1 I, ]8 Z& w3 W& q
                for (ixstart = 0; ixstart < 81000; ixstart++) {6 \9 o1 V- \: c4 l  b9 h
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
$ U& y7 D( M# A, O3 {                }+ s* r( H& Q- [' Z; w* S4 ^

5 Y( ]3 \& C! @' f        --------------帖子字数限制------------------
7 C# z' Q& x* t}; ~7 ^/ X' l; o/ E* y  u9 i

" b3 X* ?+ D  Y% R# `0 [
+ _5 n) k7 H( \2 S

本帖子中包含更多资源

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

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-6 20:05 , Processed in 0.042325 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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