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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
6 |: [8 x+ z$ X# o
. d( P9 k) _4 |' K8 n) B8 q各位大神:% ^. \; E) w/ R3 K9 A4 @
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~): B) G3 H. X# i4 I2 E! ]7 L* y6 h! J4 O
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:8 l3 k0 L: P- f/ u8 r8 E

0 _8 i- j5 u5 F4 w     6 J! O* R7 _' k9 l# j; Y/ p
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
. d6 O$ e6 L8 y8 o& x+ ?
9 f$ G$ ?) r' [( B* r( R2 X7 B并没有其他线程* b; F3 ^0 N9 b* F
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
  i. [6 Z2 ^  H( o! }  |也说不定是和堆栈有关系。。。。。。
3 x0 G1 k1 }( P4 A/ _请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
. b' L& Y/ H" K3 J) a8 y1 g
* a, Y# L$ ?& i* b3 e1 `
1 [& \, R1 M& D' @. F, z
; |2 }7 a* O# P- E我也很绝望啊,希望大神能帮帮忙,感激不尽,!
2 V9 Y  @" e3 d% `  J$ j/ P' N; T# Q1 n
" b" C5 P5 h$ f, s2 |: r7 C) r! P- O0 D% _: I$ }8 @
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];/ b' ?; c  _# L; b
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
( k5 y" B- N; l
- Z/ e! _) `9 A; k5 B! \0 }/ r; ~& lboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
' x1 ^, ?' T, I& w5 g                const double data1000[1000]) {
9 h$ X: l7 d$ R
2 k: A* N8 V4 x0 ~3 v3 B2 Z; {        int myfuck;9 K, v* }5 a" t0 H1 q5 Y4 V) b+ f
        double yiDuanShuJu_mean;
9 c) N- o+ o5 J4 F4 A, L/ P        double yiDuanShuJu_LowMean[1000];
) }$ v7 G0 y& ^9 _        int ixstart;
7 G" w, ^% o* U% {9 p        double dv0[1000];+ Q- t* H: n& ~
        comm_AGC pAGC;
8 x/ s0 a# z$ J8 h2 l$ D        comm_CarrierSynchronizer pFineFreqCompensator;) V1 k/ A- P( @: W1 |( e2 O
        dspcodegen_FIRDecimator pRxFilter;
7 e" q' u  @& j( o        comm_SymbolSynchronizer pTimingRec;
: ~" r; t) R& i, [8 q        comm_PreambleDetector pPrbDet;
  R% b; F% v5 @3 m        FrameSynchronizer pFrameSync;9 m7 O) N$ B. q, C
        QPSKDataDecoder pDataDecod;
2 p" z" C2 t: }" I5 V, E0 D        static double usable_left_filtfilt[81000];0 i4 H7 K; d3 P) Q2 d
        static double youXiaoShuJu_QuZhiLiu[81000];
2 A: L; F2 }' |" n0 A' h; w+ u        double mtmp;
" m9 c9 ^' F" @+ D        int ix;- ^  g) h  s, S1 e! s7 j7 S4 g
        boolean_T exitg2;6 Z2 e/ e; d; ]6 L" |: v! z
        boolean_T exitg1;
% t7 m, L  ^# t, Q        double YiZhenShuJu[800];) o. L! A# C6 I; o/ T; F6 D1 i
        double dv1[800];: j  m1 g3 P. V% v. [
5 q, t$ F6 c: C, h3 w
2 ]+ b& U. P8 U
        double b_YiZhenShuJu[800];
# W  j5 A; q: h* {! l9 M5 @        double I_filtfilt[800];
! g- O2 F" G- ~        double Q_filtfilt[800];; t. j+ m( H: j2 l% d* H6 r
        creal_T b_I_filtfilt[800];
6 r6 ^5 E* w' C        creal_T b[800];" {( O2 |$ b% x" f
        creal_T RCRxSignal[50];; @. ^8 U+ n0 i; N
        creal_T fineCompSignal[50];; y- {$ b* g+ r+ x1 r: G" ~% R
        double phError[50];
) Z& R: [) K! ~( }. f' y; A        creal_T timingRecSignal_data[28];
3 Y- O5 G1 S$ i2 Y6 s6 c; L4 W4 c        int timingRecSignal_size[1];
# C$ D/ [, N) P  A$ T# I9 P' k' W        double prbIdx_data[28];0 P+ J" ?8 H( X3 Q1 y# A9 K
        int prbIdx_size[1];
- C2 ^' o- t% n  Q0 H7 S$ N( J+ g        double dtMt_data[28];# o; Q* D! p" ~3 p8 b
        int dtMt_size[1];
/ h' C  c% n- X        creal_T symFrame[25];
7 B4 _8 O. ]' @1 W% T        boolean_T isFrameValid;
2 \4 u% Q/ j$ x4 A) m* N# L        double unusedU0[3];
4 E2 j' q" k9 j+ g0 Z/ Q5 O
# i8 {$ q. I6 ^4 {" }( N        //调试过程中的变量) u" I- O* O+ ]5 n
        int  enough_data;
" k, m7 g6 k0 Y9 V" i! X% y% i( P# r0 V( n  O8 a1 U
        int enoughDataFlag;
" A7 a: U) Z- n& d+ m- w        int yiDuanShuJu_mean_int;
& Q! B3 Y( H/ a# b8 r2 g$ h# H% l        int int_sum_dv0;
# b- n# t3 s( d7 m/ z        int oo;
7 [% w! b0 {8 u6 X        int ii;
* z& `: G/ x  e! R4 T  x        myfuck=10;
; F& N7 D, ]7 P; ^        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
3 Y7 Y' r. C9 ]: D/ @4 C" z        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
* N! F& @5 F  G. g0 O& P: l9 n1 R. u3 q$ J  O. n2 h5 V
        yiDuanShuJu_mean = mean(data1000);
, i, J2 K9 D* i) q  S! s! b9 F( S
. B) c% i2 \6 Q5 v" M3 _7 T$ d6 x! q        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
7 t7 S9 h) Y" e$ a8 V: E& [        UARTPutc('A');) e/ c- v5 k" ^. s
        UARTPutNum(yiDuanShuJu_mean_int);
* X" _, D/ K! p! b6 n) M7 \4 R        UARTPutc('\r');
$ I7 G/ D5 l' }* S' H        UARTPutc('\n');
4 g2 p& Z# G* f; y* l! N6 \
5 w9 }) R. O2 V7 @4 P        for (ixstart = 0; ixstart < 1000; ixstart++) {
7 y$ H8 s8 ~% V0 g                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;3 |# s- m  ^4 v0 ?3 N/ `1 ^
        }
0 P) T" w1 E3 H" [! |5 f; t4 \( z! X& c/ h4 j4 y3 G! P4 y. j9 v( F
        power(yiDuanShuJu_LowMean, dv0);7 }3 d9 q' N- P
4 L0 f. c: X3 w
        int_sum_dv0 = (int) sum(dv0);
& m$ Z3 x) E/ E3 Z( o
% |* L& W$ Q3 K        UARTPutc('B');4 w& M# X* c5 t* U8 `
        UARTPutNum(int_sum_dv0);' J7 n1 G. l' [. Y- T) D: L
        UARTPutc('\r');0 x, n. C9 N* S
        UARTPutc('\n');3 B8 U/ V1 T, k# D; G

! _4 k" ~, B1 J' c6 {$ D' I//        int compareFlag = int_sum_dv0 > 1.0E+8;
* P& D  o( p  Z* u& t7 G( v) Q! V6 l: I: j
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?9 A) D) N# D# L6 E1 P4 F9 x
                UARTPutc('C');4 u, i0 d. [! O& o/ j
                /*  比较信号能量 */4 Y9 C& @4 z0 L2 x1 ~
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */) Y4 {+ v. i: W8 l& |1 ^
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;; P' [  F5 b3 E
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
; A. i7 t: k- n9 ?- H$ [//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =9 y( s) K& l$ z6 ^+ r
//                                        yiDuanShuJu_LowMean[ixstart];- G5 I4 z  r8 I* Q/ o9 `
//                }2 V% N: ~! s8 P8 C0 F$ d
//6 D& r# ^4 G1 V/ \8 q2 V4 A
//                youxiao_k++;
# h0 E8 [. K4 U//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
: l( B2 |: @! h4 A/ E  q//                        /* 感觉要取21个数,即0-20, */
2 O$ h: j# H$ z$ i3 Q: O. Q//                        enough_data = 10;//有效是10,无效是07 L" w+ W0 J: ~  I7 E% q
//                }9 q2 [, J( l9 e# D/ M, g
        }# O4 u, q+ v' B7 T% r; U) u* z$ v
' J0 q5 ]9 Y( h: u

- p+ |4 Q, Y2 P        enoughDataFlag = 100;
+ u. r" }, b& j        enoughDataFlag = 1000;; y3 Z5 O( T( t3 W, z
        enoughDataFlag = 0x02;
2 H; w0 ?% C# E$ W        enoughDataFlag = 200;
5 q2 e, ^. E1 L5 a, _( u
1 A3 v) {% x6 j; z$ S7 D# c% e( e        int myfuvk1;) n. z/ {3 d( w1 K  W5 G
        myfuvk1 =11;" e; c! H+ q* L

, r% @/ k: D4 C5 E/ b
& R: @  a# ]. G2 P+ ~        enough_data = 0;$ G6 F! G0 X! ^2 o) L( x
) E7 v& S2 @2 t  ^
//        if(enough_data>50){
9 ]# t: w( d* y& F  b' U//                enoughDataFlag=0x01;7 o& k, b1 {- K
//        }else if(enough_data<50){, F3 B. f' T' y% \) F; U
//                enoughDataFlag=0x00;//0x00还是不行/ x8 M$ ~' G0 H* j
//        }
3 r$ w( C. K/ c0 Q
% W/ ?. @( b5 r0 k
! O6 B( S% P3 m7 n! K5 I        oo=10;, w# E0 i/ \  y
        oo = oo  <  5;
; }1 {$ v+ H! b        if(oo){
& b5 I' ~/ t, r2 \9 |                ii=0;
& \1 e* o$ ?( [/ @% J/ I% c        }
8 g( h9 z3 U9 e3 e# W' R/ ~) _4 g        if(oo  <  5){1 @2 h% s: [  |
                ii=0;, v0 v! m+ g6 K( P+ s9 C7 k
        }7 L; n) ~1 {" j: I
        if(oo  >  5){
. M* ], s+ M" i                ii=0;4 U- A3 z* U: A/ b
        }
* {  y& p! C2 _- J
. i/ u: L' m# }, N        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
5 E: X5 {6 }" f        /*  如果数据足够才执行主程序 */) K5 w, S7 }7 Y. `1 p  w7 n4 I
        oo = oo  <  5;1 A# W" t8 k- n! k! }7 D. m4 v" e
        enoughDataFlag = enoughDataFlag  <  5;
- `" `8 e/ X6 f( ^2 G        if (enoughDataFlag  <  5) {3 T  _3 a) d: `7 F! n  }# {
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
  c8 t3 I# E/ T& y/ s                AGC_AGC(&pAGC);* U0 Z* O) Y/ Q" i4 w' F7 B3 {+ j
4 I  A7 o4 Q( U) b1 a; E
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);$ o* _  f/ G' H+ U. J2 g: F1 S
                FIRDecimator_FIRDecimator(&pRxFilter);* r  N7 ^4 ]+ v7 n
& o( H9 h0 P8 |7 V9 P9 A! C
                /* Downsampling */3 d3 t- i' j- {; T3 M) o& E+ R
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
( r# K, \) j  Z+ z+ b8 z, _6 J  r1 k& S( K
                c_PreambleDetector_PreambleDete(&pPrbDet);+ l. ?. A4 q8 T! J9 A% d

% |1 o7 R' e0 n& |1 G& Q4 L+ \6 Z+ \                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */$ S0 {: P' Z4 A% |
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */7 [# u% L1 W# o- V! B. g+ j
                /*     %帧数量=100 */
" t1 f5 ]4 a  G, M" {; c/ u: |                pFrameSync.isInitialized = 0;
5 P+ m7 d, Q1 C- @4 z3 `# d) v' U
$ q0 Y$ F$ l4 G                /*  [EOF] */
9 w9 f7 q+ m. b                /* 前导码长度是13 */, ^# ]5 x: @8 n1 d3 @3 [9 C
                /*    %qpsk */
8 W/ o* C$ D& r* \# \, S                pDataDecod.isInitialized = 0;7 k& r# w* n' }8 j( `

" `! c- b! q6 p9 r- ~0 j                /*  end */, G( E7 |  c1 V. T6 A9 N) v. Z
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
( Y# F6 d) B$ a" ?                /* Convert 3-dB frequency */
, y- `; C* g! m" F0 H/ r0 E                /* Convert 3-dB frequency */
. w+ T% H8 x% x: ]                filtfilt(save_buffer, usable_left_filtfilt);
7 ~! s( P' n" l1 I                for (ixstart = 0; ixstart < 81000; ixstart++) {$ o5 C' V$ N9 ?5 t' r* Q
                        usable_left_filtfilt[ixstart] *= 2.0;
5 n& N, @2 j# X' w+ w! G2 z5 K                }; h* B- J" F) u$ y& G
0 v3 w7 n( W. u( ~* r" a& J
                /* 注意乘2,处理幅度 */
! U% M7 [: d$ O. V' i$ v                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */; T/ Z4 D- ^5 O
                /*     %% 行列转换 */
+ x  P$ _7 U" \# B                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);  r6 C2 M. n6 e! s, Z$ B4 L
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# W) \4 y7 |  a1 D                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
' p$ n% K/ V* ?# F& ]! E                                        - yiDuanShuJu_mean;
7 r  |9 A8 n( e  ?) y                }
% u! ?  ?4 X: q3 d1 o
$ P% K- E% y) J) y                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */6 w! C4 @7 D) t; Z
                ixstart = 1;! ^$ Q- Z. T! I' E. _
                mtmp = youXiaoShuJu_QuZhiLiu[0];! ?3 W& m$ [+ C" S0 E! |
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {  M6 j9 @% U0 y
                        ix = 2;4 y9 D' Z5 B( J2 I) t% z
                        exitg2 = false;
, M% ]5 N7 Z2 ?+ o                        while ((!exitg2) && (ix < 81001)) {& n  S7 R8 Z$ _3 ^; }
                                ixstart = ix;8 D+ {. J' v) ?* Y- C2 q0 t
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {( q8 o7 Q# @/ y
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];) N$ \$ k2 r! Z3 ~' T$ O- N4 D
                                        exitg2 = true;2 `) M4 U" y# H
                                } else {
) \' o" L; o0 a6 U2 T) T4 o' _                                        ix++;+ @: c; o1 M# _: F8 {' A
                                }/ ^; _  r& b- I; V3 W
                        }
6 J8 o% y& X+ w8 l* Q6 v8 F                }' W* X' B7 L9 l! T& [

4 ?9 z. A! f* g0 Y4 [5 k# v, A; G9 f                if (ixstart < 81000) {+ x7 S/ ]8 k  c$ Z, E
                        while (ixstart + 1 < 81001) {
( ?: B, b* r$ \8 f3 E                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
- N! R1 a, b- ]3 P3 T0 F                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];4 O* l, I0 B8 t8 G: N1 U8 v7 K: ]9 T, k
                                }$ n, c  q! }* z" b* {) E: g* R: K* f

# i! Q2 @8 W! T8 ~+ w                                ixstart++;
& s' G, r' I0 I" S1 W                        }
+ w1 [+ y  M' q/ F. F5 I' F4 R! x                }3 x1 ?% Y! g/ R$ l

5 [: ]# g/ u- r5 n9 M                ixstart = 1;
  q/ H8 ?% E5 _6 ~3 v; L0 _                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];% t2 X. h+ B$ o* y8 o; D& Q# G9 u9 \
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {! s3 s7 B5 E' H  \) o1 A* @
                        ix = 2;
- \0 _' L, e5 l: z  L7 F                        exitg1 = false;  a) G. k, [% z& G
                        while ((!exitg1) && (ix < 81001)) {- _3 C3 y  m/ H- V$ u# m
                                ixstart = ix;4 q; ^2 d0 S3 [! L( \- e
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; ^( F2 n# `  l( n& K+ p7 i                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
! [' N8 Q- G, \. N- N                                        exitg1 = true;
. q# o+ d+ X) r% i  [; f& K* N                                } else {5 S1 N( S) f1 O1 ^* A7 D, V
                                        ix++;
* Z$ ~& A8 l! n% u' y0 f+ q                                }
4 a: a+ W) a' m- _  C2 R; m                        }
0 Y& l' }/ s- j- O3 c                }
. E* @- n- y$ Y/ {4 {4 T6 q7 N& Z( a
                if (ixstart < 81000) {% A2 g. ^( U8 ?% R6 r3 ^' b& V
                        while (ixstart + 1 < 81001) {
" u& J1 m4 U  s, {                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
& n$ }4 U  k& g" }" ]0 ^                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( G* P& [9 Q( y6 e; R4 K: M                                }
! v& p; F. M8 @' S2 B) S
  Z: N; R9 @3 i, z5 i" t9 n                                ixstart++;
- |$ Q" X; s* r; W* r                        }
& Q/ Q. s" t) C                }
3 G  e! F4 [( X9 _: L" \. f, \; G' I% Q* j2 D+ }8 o
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);  d4 M) B. ?$ j. d/ C* {" r
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {3 J) V5 g/ x" q0 `( x
                        yiDuanShuJu_mean = mtmp;2 j# T0 L* b; U8 E6 ?0 Z
                }
$ }4 Y7 {4 a) Z6 S: y/ ^' d1 J7 D6 w" G$ \9 g/ j4 _% r  z3 F& U
                /*  找出极值 */" X$ Q1 W7 W: |' S6 p/ p. G% U$ P
                for (ixstart = 0; ixstart < 81000; ixstart++) {, U3 w! _* Q* K5 U# S: k) {
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
9 B+ U3 v7 @# q8 i4 x! k                }
, Z& |5 ^5 T! c; {- `
2 j+ I/ z& Q: g$ L( s3 K" a0 M* @        --------------帖子字数限制------------------
9 N# I  z; x1 M# i" k9 w}
3 e0 o* `; |5 i$ t8 d8 V
( m9 G' a5 e0 e( @/ l# I  _: v! a, y8 L! X

本帖子中包含更多资源

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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