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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
% y# y& t$ s$ j6 S; M& D
4 X) R7 j- y7 }$ @9 Z! W- \7 ^! i各位大神:
- p! z$ |# h  Z# A7 m; [) s8 T6 E  U" `     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)% U4 [# o3 H. X* f9 U
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:+ h! j1 w/ K% B' E

9 S1 a0 P4 c. i. t8 V7 b/ u  X) P     
1 [2 N; I) {: f; }5 P2 ]% L" ^这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。: R* ^' y' h1 d4 x
- N% K: O+ a$ l5 a% o7 B
并没有其他线程
0 v/ @( f  z% Z反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
- M4 V" m( _$ b- @. U; _也说不定是和堆栈有关系。。。。。。
* E- A0 q  g8 t7 L2 B$ V/ i请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ j' b* h. X* ]& p0 d
0 Q7 d6 X3 Z8 L% T

) Q9 g& q  d: Q1 z' z" C# `0 v7 z, ?$ b
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
; q. ~$ \# q% B, n! c) r7 |2 s" g. Y9 [  j! C  }

" @2 C3 ~& b* c, f2 w* a附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
: ]' r" J* F# g7 B& ?1 _        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
* U* p) Z. a( a) G
/ k+ V+ w! H* \; tboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(1 F; M. h) |/ F! x0 D: L. _
                const double data1000[1000]) {
" K4 a5 u/ @$ d! [, l$ X
' P4 K# b- j2 _; z        int myfuck;3 M0 x/ C7 a) w5 c1 v5 k/ d
        double yiDuanShuJu_mean;
! P4 c* }2 e* x& J# O( K. \        double yiDuanShuJu_LowMean[1000];+ I/ P! T: n7 L! k; s5 ]9 |
        int ixstart;4 B& r: h8 T$ j% u2 x) V  G6 R
        double dv0[1000];  e9 `$ [, G# K/ r+ B% T( G6 ~7 P
        comm_AGC pAGC;
* R2 z* P& {: L$ u) q; Y% `        comm_CarrierSynchronizer pFineFreqCompensator;! Q# @! h: E; ~5 x( P/ g
        dspcodegen_FIRDecimator pRxFilter;* m% K% f# c7 X
        comm_SymbolSynchronizer pTimingRec;
' s! M. L* H  a( e        comm_PreambleDetector pPrbDet;
  b( ^; }( S) R3 o5 Z/ [        FrameSynchronizer pFrameSync;
* U6 p( f# @5 w' \+ a2 d* E        QPSKDataDecoder pDataDecod;$ t; d% y) n& _" W$ \6 u1 N( C) V2 U
        static double usable_left_filtfilt[81000];
# S% g, J* a3 L# l! A/ D, X2 U        static double youXiaoShuJu_QuZhiLiu[81000];' j* m& F/ b& K* r& V, M& l! o
        double mtmp;
; t4 D( p. B# }- i        int ix;' N( _! ~/ U* q4 ]/ \
        boolean_T exitg2;
& a# N; E2 r! L& C/ a& y        boolean_T exitg1;5 l! X* T0 L& _2 _5 h: X- j2 `
        double YiZhenShuJu[800];% H$ D+ }( p& A% R7 w0 d
        double dv1[800];5 V) I( Q% k# X  a
# ]$ a8 ]# M( G2 J
( x. b1 r$ h3 p" V- ]8 S+ d# \
        double b_YiZhenShuJu[800];# O; Q+ Y8 r, O8 V
        double I_filtfilt[800];
  G" Y, B+ w3 x! k3 z* u) |        double Q_filtfilt[800];
  {: x* E8 d0 p3 o1 f, O, {        creal_T b_I_filtfilt[800];$ j  G3 F3 Q3 Q9 v1 e) W$ ]
        creal_T b[800];
3 ]2 g2 I' N; ]7 r, i        creal_T RCRxSignal[50];
' ~# a: c0 j8 e$ u3 O        creal_T fineCompSignal[50];
6 F- d3 O0 @( |0 [+ {5 [5 a        double phError[50];
3 B2 N# |- d' S2 D: a        creal_T timingRecSignal_data[28];
3 H% H, t4 [( b" f        int timingRecSignal_size[1];; I* @1 _: G. w9 v  n
        double prbIdx_data[28];
: }/ w  x9 n1 n7 I- N: ^. _' A0 F        int prbIdx_size[1];
2 ^) n. g2 a3 y$ B  \0 E0 C        double dtMt_data[28];! c6 k- F! B9 U
        int dtMt_size[1];4 U4 J% ]& ]: D# A7 K5 G8 e8 K0 V
        creal_T symFrame[25];
% g# }( v% \& T. X5 `) M" l. o        boolean_T isFrameValid;
# r% A# r! _' B1 x. W8 V1 p        double unusedU0[3];
. J7 f0 l* D2 U7 h# u3 W, x! M
  e, x2 h( z0 c. x# N% l/ c" K        //调试过程中的变量
. H% ]  O6 I1 ~. U, q: x7 p        int  enough_data;
2 W  S) o. y9 z. U7 B6 W
  P2 M7 v4 R$ Y4 S8 Y9 Z        int enoughDataFlag;
6 F- c+ `# L. ?9 z' |/ ]        int yiDuanShuJu_mean_int;6 o0 F$ d4 |( n
        int int_sum_dv0;
( Z) t& y0 r! s+ Q( I+ Z- s5 w        int oo;! D. e6 N* r! F5 B
        int ii;" s5 Y+ u" H; s; R$ b
        myfuck=10;2 c+ c5 ?& a/ k) C$ u  v
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */2 K3 u* x' }$ i; w! i
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
, r( C) }. W7 }2 \  D1 ]7 ]+ ~' P6 k* }, O9 z
        yiDuanShuJu_mean = mean(data1000);& u. _) w7 g5 E1 z2 u" S3 \2 [

% Y  ~% a' f0 L) C        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;) a" D2 S# S' K9 W  t
        UARTPutc('A');, q: ~  B2 o9 J( l
        UARTPutNum(yiDuanShuJu_mean_int);
8 Z( t9 p0 X% k        UARTPutc('\r');
8 i. k8 C6 C4 @        UARTPutc('\n');0 h1 [: M( l5 D& C4 G2 u- d: s
5 K5 o! z4 z. E/ ^2 x; t
        for (ixstart = 0; ixstart < 1000; ixstart++) {" O' m$ `# z7 e' h
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
! N- X5 g' w. i1 K        }' A9 k; f! T0 T1 k, r0 q* D$ B
5 t5 \5 L; I8 m( k
        power(yiDuanShuJu_LowMean, dv0);
+ K# N" B- g0 T' h9 [
7 A7 ^8 s/ q! b: L/ D. w        int_sum_dv0 = (int) sum(dv0);
0 i# l3 S4 K8 N- a! k' U
8 ^( |0 s+ @# l+ i        UARTPutc('B');  ~3 o6 W$ T$ o0 h) c
        UARTPutNum(int_sum_dv0);' ?0 M" r( R' q
        UARTPutc('\r');
/ A- e" P! _) m3 I1 g. c        UARTPutc('\n');
1 |$ l6 N+ U3 |8 ?# ]' }. E7 g* L8 x# f+ Q
//        int compareFlag = int_sum_dv0 > 1.0E+8;/ X+ S+ n* N8 C0 _

1 }2 Y# S7 D; k# l1 Y$ x) m        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
) s! ^0 E4 Z5 L/ R' l5 Q! a$ V( `                UARTPutc('C');# g6 r, n0 F( C8 @
                /*  比较信号能量 */
' b4 s, j% u2 G0 O: E                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
; t, v9 Z/ V& W: y//                yiDuanShuJu_mean = 1000.0 * youxiao_k;( P( x* Y; @" s' w
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* m% J6 d" ^- f- n  i//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =9 y' f; K5 c$ v" Y
//                                        yiDuanShuJu_LowMean[ixstart];+ {4 X4 n: p- q( f* @$ |
//                }
& }& @+ d" v* b//
& n" O. }  a; x2 b3 j//                youxiao_k++;( e6 J0 h  t. Y4 [
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
; |3 }0 }" n% W6 u$ \//                        /* 感觉要取21个数,即0-20, */: w! L  G. n- s' w
//                        enough_data = 10;//有效是10,无效是0
$ _" Z; P' L3 [  L( o# H) r//                }
! i! x4 q, D) Y, W        }5 ~  n9 U% L; y" O, L

( ^1 ~5 O. {3 D! }' [' d
( x1 B. j/ ?% j# {$ Y* E8 K        enoughDataFlag = 100;; }7 Q* Z* \$ l& x3 P6 g
        enoughDataFlag = 1000;
! h" F# S* s3 E. j        enoughDataFlag = 0x02;' m. N1 R4 x& ]* X8 h
        enoughDataFlag = 200;+ T; \) l7 t  C7 i9 |4 {

" k  ]% U2 \0 t  R        int myfuvk1;
2 W" M. R/ y0 a        myfuvk1 =11;' K8 r* S) m! B/ C" {: I% n
2 E1 ~, t  O, V+ K8 V
2 }* i; x, t3 ?# }0 r
        enough_data = 0;: j0 a0 P( s5 Y5 ]% c

' W8 L0 Q. c/ Z6 ^5 m4 [//        if(enough_data>50){
% k+ d! @  c7 q//                enoughDataFlag=0x01;
1 p+ m2 \8 t. @* ^- P//        }else if(enough_data<50){; q! u) @/ S$ B2 Y( v. k
//                enoughDataFlag=0x00;//0x00还是不行
6 p% f8 }/ q2 O/ t: l8 }" F//        }! r$ ~1 N; |5 W3 J& O
% _, K9 a( K! _9 N" r' R1 y8 r
: i6 U5 T4 `6 \5 I
        oo=10;0 W4 M/ T7 V( f; P
        oo = oo  <  5;& ~' a% ^  @5 o5 t( w' w, y% ^, l
        if(oo){! c  O) c/ u  I# `: f
                ii=0;
3 x3 z7 L+ S  x: i3 R" S" C5 N        }
( Y1 X1 {0 B! Y% k( V/ S        if(oo  <  5){% {$ F- s5 ]% h8 Q7 V
                ii=0;
7 j8 i0 @# O0 Y# P! Z- o# H3 h        }
. C* g0 X' v- N/ v" ?3 L6 V4 a, ?        if(oo  >  5){
6 ?( Z2 Q' ]" x; h0 ]                ii=0;
, h" q5 w* z# P. f        }
1 n3 b! u! j* o9 h2 K- _. C9 Z5 o
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
4 O5 `+ h6 A+ S3 Q$ B        /*  如果数据足够才执行主程序 */
5 p3 ]1 l4 Q( L! Y        oo = oo  <  5;3 O6 I* r4 i& L: [- k
        enoughDataFlag = enoughDataFlag  <  5;
3 t0 w  G7 C& |# c1 h1 Z* g5 W        if (enoughDataFlag  <  5) {9 a/ |1 B1 r0 w; S1 p
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
7 `( G  }8 R, L4 {' I                AGC_AGC(&pAGC);
! @/ ~, K* c1 G6 x2 g
2 [7 l: J/ b1 T1 [3 v# K7 V                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);& u. E$ ]% W  L9 r
                FIRDecimator_FIRDecimator(&pRxFilter);
& \. J8 f; P2 Q- D5 ^
5 j8 X; d: C: L9 _                /* Downsampling */9 \- N! T( l$ L3 B0 d2 j7 n% Q' G
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);/ t5 U: P: X, k5 e. Q) q
" |. I+ J& u! i2 U! \( X
                c_PreambleDetector_PreambleDete(&pPrbDet);; B0 C8 v! k. R6 o  {* B

. n  p1 x: C# s2 H                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */- O  k! `5 Z: a" {0 j
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */9 Y* m: R6 ~! R! v. i
                /*     %帧数量=100 */' }3 l5 }/ Z( N& A+ q% i: B
                pFrameSync.isInitialized = 0;
$ p7 W) d' |" p( Q. g
0 h) i7 K) D) v$ C" `                /*  [EOF] */
( I+ |4 Y) }! M) I" J' {4 g) K                /* 前导码长度是13 */0 y0 Y4 G5 _1 j" M& g
                /*    %qpsk */
; s' h% Y2 \% y7 c# a                pDataDecod.isInitialized = 0;9 G+ e' I3 ^4 Z9 _6 z

4 o. u- f/ `" }. K8 N3 O                /*  end */
. n; M9 B8 B# G# [" _, z# k                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
7 y; E* e: S  k6 k- `: q4 I                /* Convert 3-dB frequency */
5 |9 T8 N  D) X5 w% u                /* Convert 3-dB frequency */
, d  i! }; ^7 ?/ A) t                filtfilt(save_buffer, usable_left_filtfilt);4 T, q4 o# P9 I! d' O
                for (ixstart = 0; ixstart < 81000; ixstart++) {
; |* X8 s4 _* @- Q: ^                        usable_left_filtfilt[ixstart] *= 2.0;
. T  A3 n: B$ A  m) \/ I% S                }
) [( c; a( F$ o. d( @: T; ~$ C  d
                /* 注意乘2,处理幅度 */9 _/ x$ W& ^- P/ W
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
0 Z% f' e! `! s* r+ J7 k9 F                /*     %% 行列转换 */. X' m- [) C0 l3 M
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
& R" i2 M0 }$ N: r, q                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 H. ~  u2 L( j, o' a                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
$ V* y$ V" t1 ^/ \1 g1 u                                        - yiDuanShuJu_mean;
  {$ K/ O6 j& a) N1 _5 J                }, y0 L& X' `2 k2 Z4 z
1 M7 N9 U# ?4 T8 ^6 y3 E& I
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
4 y) U( @0 [0 M7 A' ?5 [" j                ixstart = 1;
% r( t$ S) i" \2 o                mtmp = youXiaoShuJu_QuZhiLiu[0];
- f3 F! r- `) r                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {( a4 c; e* q' c* s6 x* D
                        ix = 2;
/ {/ ^' ~; P& r: g0 i                        exitg2 = false;* y5 X, T2 v3 h+ a. ?5 m; r0 |
                        while ((!exitg2) && (ix < 81001)) {
( h9 N( s/ O8 T+ l  I                                ixstart = ix;
3 [+ M' ^' l1 O                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {0 \/ }! r4 y* R$ O
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];4 L, r  g5 E$ O6 w% Z
                                        exitg2 = true;1 y" T/ B! M6 {4 l8 r- t1 J. H
                                } else {5 m0 [1 G( ]( ~, |
                                        ix++;
' i8 r* o) c- U$ N                                }( I5 F- y) ^6 J/ Q/ D
                        }
  C9 v1 ^; L+ q, A                }
9 l: w( j% m( p7 I1 ]4 L' a  ]" Y& R
                if (ixstart < 81000) {
0 O! a$ _" Z, v8 L                        while (ixstart + 1 < 81001) {5 o0 a2 |2 g9 U
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {- D7 ^' B' I% L
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];0 F  d6 |0 c1 ]: Y8 X" ]% N% w9 ^0 b( A
                                }) v  I, i) Q3 r3 {+ w, [; h; S* u
- v3 v' g& F6 s  o, m* R0 p% T
                                ixstart++;! t' B2 D/ s4 S% `/ T
                        }7 M# @( v5 h# L
                }
8 |4 R& W* y3 W! n2 U4 V5 w
% q0 g9 D$ c" ^$ y' ~6 R$ G                ixstart = 1;$ y. Y' `6 Z, H
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
/ @4 E/ f5 ~8 k% W, ?                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {* @: o6 b  s7 K5 f' i
                        ix = 2;
! r, f/ s& z+ V8 }) ]  i                        exitg1 = false;# o& W1 O1 F& S# W' X
                        while ((!exitg1) && (ix < 81001)) {  b1 Y( P' D& G2 c# X, K& G
                                ixstart = ix;
1 U) Z; q/ d0 w                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 I: |+ O( e$ h8 I3 ~; J
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];, ]+ k1 |5 X2 _" ?3 Z
                                        exitg1 = true;. n6 A1 G9 E% G0 s9 m
                                } else {! u, M6 b. J; P) w0 E
                                        ix++;, J9 ]; C! U& D+ X" Q
                                }
& G# F8 z7 K, }. o# [# O* R                        }' R6 |5 t% |4 T$ u- S
                }! X% K* Z" x! ~2 j# G+ F
' M7 A( a; B* x3 i/ X
                if (ixstart < 81000) {
5 Z, o0 @6 K6 M6 t  j& o                        while (ixstart + 1 < 81001) {
2 D# }5 F" S: V                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
8 h( |* U5 [+ V0 p* t( d  R                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
- @3 F+ F/ `, C3 L                                }
) F6 _: o9 ^5 y3 j
" f" D& u2 k$ P, r! Q: w                                ixstart++;
" |2 H+ X0 [# E; m* W5 l2 c                        }/ L. j! g0 }9 y1 {2 S8 O
                }
! }; Y- v8 b7 E8 N% [3 B( G% K) q# U3 L5 I7 \7 B4 |8 X
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);0 i; {' M9 N8 x& \# Z
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {$ G% c$ c. m5 r( A! s# u, B
                        yiDuanShuJu_mean = mtmp;$ p( g- ~6 R% Y- F6 }; O: q
                }0 C7 _) N/ W) _
7 \1 T) X% V, E8 B* C  _
                /*  找出极值 */
7 s8 H  E* A. _% H2 C                for (ixstart = 0; ixstart < 81000; ixstart++) {
, S6 K* Y5 ]/ U  O6 a; O                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;. z  N7 c7 }) F. p2 W
                }
* B. T- @7 y/ x
' h, _) s. O4 q8 c" |& f        --------------帖子字数限制------------------. d8 r6 @$ X. q1 i& S9 q# x
}
2 @% s" I- Q2 i# i! `0 n
3 X8 j  }( D1 m  t) A
, r4 Q* j7 W. C- M0 T

本帖子中包含更多资源

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

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-20 10:46 , Processed in 0.043878 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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