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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 , ~( n2 I# F$ E# `. g5 \

* q2 K) c) h/ ^% F" r# L7 M各位大神:
' y/ R" b$ H. N  s2 K     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)/ L: W, e# H( m( p. M9 @* T
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
3 K. i4 h' g# m
, [( b  {' v/ g4 G     
- E! ^6 @& z" g. p6 J  x这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
/ v& ^( _2 [. n0 O2 F% {
6 ^# \3 l9 L2 \* i. L' z6 u4 Y并没有其他线程
0 p2 @; ~9 G. h" L: d8 [' E反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
+ w  S3 X5 V/ ?% n也说不定是和堆栈有关系。。。。。。  [( o5 c" y7 U, a1 q
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 S- N% T: v6 s' x3 N/ ]9 K7 {& P% \7 |1 S

3 i7 J9 e. l; `4 C) b# d5 b5 ]7 e1 F" h4 x$ S
我也很绝望啊,希望大神能帮帮忙,感激不尽,!- o% L# I, K6 v# L1 X/ e6 O

4 r; V$ F7 C: E+ _3 R, e" y' ^* Q. o4 A, }& {& l2 x
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];: I2 t6 F  P; i: H
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。$ Z' s7 x- s) o2 S0 _6 q3 m

& r9 O, L% t, W3 g1 ~boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
: V9 R. O* _& E& ?& s! k; f                const double data1000[1000]) {
! A6 H+ G! E: r& i  g
8 f/ ^" h% M3 ]: P; F. P        int myfuck;9 ^( a% I  s) b2 k3 l4 ]
        double yiDuanShuJu_mean;
/ ?- U: }! R/ T4 |: k4 _        double yiDuanShuJu_LowMean[1000];' h) b( D( X7 U. S6 s4 R
        int ixstart;- M4 s& w4 d, p3 R$ _9 p
        double dv0[1000];
7 p: e* p: `# l        comm_AGC pAGC;
& K! p) K/ G9 y        comm_CarrierSynchronizer pFineFreqCompensator;2 ]2 ~# A0 `/ {# R! n
        dspcodegen_FIRDecimator pRxFilter;
* u/ a" I# p3 p3 \        comm_SymbolSynchronizer pTimingRec;  y; z3 q$ i7 i
        comm_PreambleDetector pPrbDet;
8 S( k8 B2 l5 }  H6 L/ \7 _  K        FrameSynchronizer pFrameSync;8 b6 b( l2 |# N# Z( Y
        QPSKDataDecoder pDataDecod;9 W- |$ n' W8 v( B( ~) F: K% }
        static double usable_left_filtfilt[81000];, X0 _, p/ T1 ~8 B, M* x# L; V
        static double youXiaoShuJu_QuZhiLiu[81000];- i4 s+ z0 l- h" y
        double mtmp;# L9 F6 ]- ~/ A" @5 @8 I# `
        int ix;8 T0 P) v( b- H& t& t3 H4 G1 Y
        boolean_T exitg2;1 \7 u8 `1 |2 F: l* ^! N) i0 U3 V
        boolean_T exitg1;: {9 O' f" {2 o
        double YiZhenShuJu[800];3 m( _& O0 v: I) j  r; f5 P, @
        double dv1[800];
( o; y4 A* d# K" u; u! v3 G8 j6 X
1 P4 O. [* u  a3 d  _& w
$ J  t1 U( N' G9 G! s$ p& |- Y" s        double b_YiZhenShuJu[800];0 x5 C# z+ t5 r4 P! ^' m
        double I_filtfilt[800];
6 q* Q9 N3 K. ~8 z! U3 i7 B! X        double Q_filtfilt[800];3 F, A9 R. e* L# b  J9 \
        creal_T b_I_filtfilt[800];
' D$ u  W: `. w* ~* E* W+ q" c        creal_T b[800];- O$ f9 s% h# D# T1 p
        creal_T RCRxSignal[50];
" ?, r4 L7 r0 J5 I* o2 D/ V1 |; i3 H        creal_T fineCompSignal[50];
" z5 y; V! o& r$ c        double phError[50];
7 b- M& g$ Z0 j6 P        creal_T timingRecSignal_data[28];
$ ?$ ?5 e+ T9 I" A5 P" f' j9 c        int timingRecSignal_size[1];' z5 M6 q: q% o5 G- G+ Y
        double prbIdx_data[28];
. u" ^8 [; P. C( H/ d+ F0 X3 t: {        int prbIdx_size[1];% _( |, [, b6 f& M: I/ W
        double dtMt_data[28];5 m3 i& k7 S: e1 Q
        int dtMt_size[1];" s) V4 Z( R. l. A. \
        creal_T symFrame[25];
) D0 b* {' |. _6 {& r& s- G' l        boolean_T isFrameValid;
8 s8 d" H6 _) k' q  g2 V        double unusedU0[3];
) T$ m) f. V8 ^7 @! Z8 N# d7 q+ u1 B. ]4 [
        //调试过程中的变量
: ^# _* X$ d" t8 M# |- F7 b0 h& s        int  enough_data;
' J* s+ O3 ]5 p9 Y2 X; A9 T6 l6 p- s7 c2 w7 I4 s
        int enoughDataFlag;
: r$ _0 ^! T7 ?. T$ j$ C        int yiDuanShuJu_mean_int;- }% q, g$ x5 L
        int int_sum_dv0;8 P5 V1 Q- F4 m3 N* U6 i
        int oo;
: k9 B$ k9 h/ ^$ G        int ii;( a0 A$ W# W8 N* Q& u9 s
        myfuck=10;
1 c4 P4 G, K$ m0 c9 U" f        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
2 z! G' F, ]2 Z6 W' }+ d7 l        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */* z% O- J& z1 s6 q7 z

2 e; ~3 z7 _! C        yiDuanShuJu_mean = mean(data1000);
( {$ h5 W) ^0 |5 p! m
) `' B* {" o6 j; ]        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
1 g0 C. O9 A: R, [        UARTPutc('A');
2 E7 H% F' B( B. z' ?* A        UARTPutNum(yiDuanShuJu_mean_int);
; H4 U4 u1 }; x( W5 F8 d1 F" V        UARTPutc('\r');2 R6 Q2 ~) q. W
        UARTPutc('\n');0 d2 ~, `' w8 E" z1 d/ M2 G

$ W/ r8 P  g0 l5 u/ }3 p! \        for (ixstart = 0; ixstart < 1000; ixstart++) {# x0 N% E$ i2 L, M. p
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;+ l9 x$ J3 @$ ?" d' |$ A  K
        }8 D. A: a7 w9 n) ]
0 t! U7 |9 b9 q. \7 A
        power(yiDuanShuJu_LowMean, dv0);$ c3 k* e' q4 u' b3 D8 @7 v
$ P+ H) D8 a3 V  i  b$ o9 M5 E
        int_sum_dv0 = (int) sum(dv0);, {- i9 i( X: V1 z  @* K! d( E
) @# D2 i6 Z  I; E$ w: G6 G1 t
        UARTPutc('B');
0 h) _: C. `: j' f% k+ ^2 W6 C        UARTPutNum(int_sum_dv0);! r3 A9 |% u" M3 S$ v
        UARTPutc('\r');
3 y" G+ X8 r& ^2 a) R. E2 k        UARTPutc('\n');
. D4 H; `9 s& ~% q( ?4 y' f* s7 L: F7 k/ N% B" y* D& `' K% k
//        int compareFlag = int_sum_dv0 > 1.0E+8;
: o" M" Q1 {6 o) R5 @
, C9 T4 S$ z" Q0 \        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?; Y! z3 V2 c$ Q2 L
                UARTPutc('C');
- b% n- ^' c% @9 a$ F7 z                /*  比较信号能量 */" K$ d" }. w# B; [2 p
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */0 w2 C- g6 F' }5 [
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;* h' _) R6 Z6 E4 z
//                for (ixstart = 0; ixstart < 1000; ixstart++) {  C+ h0 P1 y/ A3 a" t, Y) Q- q
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
$ r7 z2 V* J4 y& t& `- m# ]//                                        yiDuanShuJu_LowMean[ixstart];
0 Z9 r5 J( v5 E% I* A' [//                }2 C: Y8 k8 P& V# P1 R) V
//: P  }- S' V. z. X  @1 |+ |
//                youxiao_k++;
1 d4 i) Y- r2 t% @4 |6 h; j+ j3 c//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
' A2 s7 T4 K" \$ _& S- O( C//                        /* 感觉要取21个数,即0-20, */0 |9 P1 v3 {5 f% G+ ]8 i3 a
//                        enough_data = 10;//有效是10,无效是0, L  G% V% ~) h
//                }* h- X$ P% P' f( `2 F4 \" w+ N% o
        }
6 ?. P# D5 p& Q) i, k6 Y* _8 B6 L( ?% Z' Q

6 s0 x1 W5 F* o, _" L; L/ T        enoughDataFlag = 100;
% C7 v6 u5 U$ a) E) G        enoughDataFlag = 1000;
  x! r; J) x7 c& H4 p        enoughDataFlag = 0x02;( ]. l! M8 c: p3 @! N0 g
        enoughDataFlag = 200;! e9 T7 ]5 x7 J8 T
% R; c( ?% m9 |0 [, N- L* N
        int myfuvk1;; A4 @. A' s9 J/ l
        myfuvk1 =11;
' [3 ^( y3 K- ]: J0 o8 a- d' i* A; s' o* F3 P

, ~/ U2 k4 o% u% V8 V# S% D4 j        enough_data = 0;
# o* ^4 K+ ^9 m9 m' k0 X% C8 W  z
! S( I7 i2 Y! E& D( u1 F, s//        if(enough_data>50){
0 t) j" Q* q: U4 H//                enoughDataFlag=0x01;
" l/ p7 Z/ T4 m$ z6 W  r, w4 x( {6 O//        }else if(enough_data<50){# P9 m: f/ @' [. S) B
//                enoughDataFlag=0x00;//0x00还是不行% p( H/ b9 P8 Z- K
//        }1 g7 t. |6 h( z! F9 M$ e4 b

& p& y5 R( c3 f7 h! C8 s! J" _% w/ F& N
        oo=10;9 j! b1 v! i5 o6 V, B
        oo = oo  <  5;$ w2 S/ M7 F: T  {- C4 w
        if(oo){; R# S( x! o; e) ]
                ii=0;
0 Z$ k) p+ x8 `        }2 t& S# k* l% H' j
        if(oo  <  5){
" E* ]2 |. H3 u/ p, B* S/ N9 n                ii=0;& L1 [8 m. ~, _4 J; L
        }4 m, ]) X0 X( S" O' ^* s
        if(oo  >  5){( q% K5 r' `$ s. ?3 b
                ii=0;
1 k( S# A/ R8 q* A3 h4 `+ K        }/ K7 r( v  B4 D. ]+ b
5 G% u2 K! X" {# D% u% J
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */4 y4 _! Q( P7 I9 W$ z) n) j
        /*  如果数据足够才执行主程序 */. o- ]2 r& A1 m( w5 n& n
        oo = oo  <  5;  i; x4 X5 z- [" d' I2 ~7 }, f  ~
        enoughDataFlag = enoughDataFlag  <  5;& x: o( S" q/ t" f
        if (enoughDataFlag  <  5) {+ K# C/ v- M+ X) ]; V/ N/ |' }
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0" }3 B) J2 [! H9 v
                AGC_AGC(&pAGC);
6 l, J8 g" _' H# R# O( C+ M6 i0 |  U& e& _- @3 |2 \: p
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
/ F2 u0 u# Y* t5 J                FIRDecimator_FIRDecimator(&pRxFilter);
% R0 E2 ]. ^) i4 u4 `2 M: t: Z4 x+ B' E' }$ m# I) c! Y# ?& B
                /* Downsampling */
' z$ o6 i& H0 R! J8 \  W6 ^' D                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
/ B( @% R  V! {8 ]- ?! p% w; C8 L) O
                c_PreambleDetector_PreambleDete(&pPrbDet);& p3 X: E. \' U7 L, U4 _

6 Q1 P/ B& L' F/ m  ?                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */; H: E* ^3 e4 `- Q% y! E3 e
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
( h- U$ g! v* [                /*     %帧数量=100 */& p$ N9 X( R4 M% G! C* q
                pFrameSync.isInitialized = 0;
/ |, g" i4 C' z% T+ X3 b" h
) @& \$ V+ j" P" y                /*  [EOF] */
+ s# f% A- N( l% C                /* 前导码长度是13 */
0 I$ E# k, M) j0 Z! B                /*    %qpsk */' k" y* y0 X& V  R8 i2 y
                pDataDecod.isInitialized = 0;
" X/ ]1 R  X) N) N8 C* d9 {& p8 C& z) i, b% S* q4 u
                /*  end */
% o' b* z  D$ o. r2 J' m4 p/ y                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */, a4 _8 D/ i: Y8 O6 C& {
                /* Convert 3-dB frequency */0 N, z; R$ {2 I9 V" I( [! o$ ?2 e
                /* Convert 3-dB frequency */5 F8 D* n- ~, Y! n) h
                filtfilt(save_buffer, usable_left_filtfilt);  `$ `6 N2 n9 Q+ f
                for (ixstart = 0; ixstart < 81000; ixstart++) {- b" N! ?* |% W; T: h; }( h1 U
                        usable_left_filtfilt[ixstart] *= 2.0;6 G& a* ]. ~  S6 E; ?
                }! D& `8 O2 B- R9 N7 }1 b& P' h! u+ L
* h; I6 t) b. ^
                /* 注意乘2,处理幅度 */
4 Z  B+ y' W: R. W- m2 J                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */  h5 g  i# n5 F2 p9 B! ?
                /*     %% 行列转换 */
9 ?1 E: M0 U: @- U+ P                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
6 |2 W4 f+ ^1 d1 Z$ J3 E                for (ixstart = 0; ixstart < 81000; ixstart++) {$ \9 \; S2 a: d
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
0 a2 D, B" H6 ?, X                                        - yiDuanShuJu_mean;
' }# M  }/ o9 W+ c: B8 S' s                }
2 @$ |. O5 F3 n0 {5 z- e) [, f
0 F9 b) Y+ ~. N3 w                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */  [$ c/ l. A: F
                ixstart = 1;) c9 z) X4 l5 w6 @$ l
                mtmp = youXiaoShuJu_QuZhiLiu[0];
2 C2 y  h: {  O                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& w8 e  V: d: A8 F+ r9 p: R
                        ix = 2;& q& r' x/ c) k2 Q; X& d( a
                        exitg2 = false;
# N( e" F9 A8 I8 h: t" t* G                        while ((!exitg2) && (ix < 81001)) {
3 j" k" c2 M5 V                                ixstart = ix;
6 R  @( C0 K5 {+ Z& d                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
% H9 s7 b9 d% W* a8 B                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
' b$ o$ s' g- x# V% Y                                        exitg2 = true;' K4 X( m) {' Q) P. h0 N
                                } else {2 e. j# o' i$ W+ w$ B/ G' s
                                        ix++;, g1 X0 g% A% z4 k- q' \! l6 y
                                }
7 i& ?- N0 `5 O, q) W' A# z                        }- f' q/ Y- S, l* Z4 i
                }: G% H. O  r+ K2 o( W' E# b
% Z0 e) e! u5 `
                if (ixstart < 81000) {
% p' E% `. C) i- ~' L; O                        while (ixstart + 1 < 81001) {
0 s* ?9 k, `# N4 n& a8 |                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {, w& _$ Z: _2 R3 A, @
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];; G/ i5 `3 @5 Y3 o, b! R$ D
                                }1 {* N( T" ]" U+ T9 y) z! v( {

) D/ O1 E  J+ o: ^                                ixstart++;* z  x8 P. `! B' s' v* x( T9 I
                        }! I0 H* Y0 K' ^( T& Y- H( V
                }
* j4 r; f% x6 V+ f, ~3 n5 \) Y+ a# H, p% D
                ixstart = 1;. ]& c; z5 l9 F, v
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];& }' Y/ z* A6 I
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {1 J# c. ~& a* `- y+ V* r+ y" }0 Q1 s
                        ix = 2;; V( h1 A" x6 l6 w# U. b
                        exitg1 = false;
4 U  L: t! w- ?4 G, C+ g) T                        while ((!exitg1) && (ix < 81001)) {" A1 _6 S8 M$ m  c6 h
                                ixstart = ix;
1 G; }5 |1 Z" }' d                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ d' n2 k4 {4 X* B
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];7 g2 }/ H3 O6 n6 C; J3 M0 M
                                        exitg1 = true;3 _; m  f& J0 P4 M
                                } else {
0 Z$ Y- G& {3 W% _" |                                        ix++;
& \4 z* p* ]6 \" P6 l- ]% ~! B                                }- ?9 }# p5 x9 J! ~* ~
                        }
  U& M. E: }* G% I$ D/ |. V+ D                }
$ P( ]( Q. ~& n& G) M2 v! c. `# c: c' T% |# J6 D- P9 I
                if (ixstart < 81000) {
" s) P3 Z; a1 b( ?5 [9 j                        while (ixstart + 1 < 81001) {
1 v, I5 u2 z5 C7 t2 Y* s                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {: X  k3 I, K* [( V( _8 s( P! I
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];  @, q9 k4 u/ u- |' [/ ~+ d1 p
                                }) E/ e( W! r, Y8 \
, a; W+ A# z- c$ d# m; w  S
                                ixstart++;: c% i* Z# a& R4 |) V+ G9 L
                        }
+ o* \" x* @/ |- D- s0 x' M                }# w0 |$ b. g+ |, a" v. |: F# ^
8 G( `0 [0 N1 a! `" L8 [
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
$ S0 N8 f# C( p1 m5 m% B7 r& [                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {9 T# F; x( G/ R$ {' z' M
                        yiDuanShuJu_mean = mtmp;
5 X; f5 P- K  P4 R4 c5 e" Q# p                }& }0 O& l7 A. D/ R

# \3 G- p5 A1 S( G* U                /*  找出极值 */
5 F; w) T& z3 W% F4 Q1 b3 N3 X                for (ixstart = 0; ixstart < 81000; ixstart++) {/ _, r# T2 u/ G( T( M4 Y  X4 Q) |
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
- C' \: x- s+ H3 W% z; y! b+ L                }
* S, W! ]+ K2 f2 o
! h. S  X* J+ R0 {- Z, m        --------------帖子字数限制------------------
7 f0 h5 [: N) W- F}
0 c% w3 A* w. n# m$ o& l  Q7 j4 s' g1 [9 I, U. ^. K& w
5 O# a$ z* I  C. V

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 10:44 , Processed in 0.048656 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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