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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 % r; G$ H( X% ^" L2 a' @, O5 B

  v( ~+ h1 ^7 C# @各位大神:+ e- o( t; ?& W5 p* C" H
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)4 ]1 P! [& N' U& j
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
7 K$ K, U) p% t" g/ ~. r5 t7 v: w( a$ A, p1 S- \$ f
     
  t5 q+ H+ p6 m" E4 r+ \  V这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。! ]$ u4 N+ J2 m3 y
$ C+ Y6 J0 E+ _# a7 B; t4 K
并没有其他线程
  @5 {6 x1 S' q/ n$ x+ A反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
2 t# F- D5 C0 f3 l1 k# }也说不定是和堆栈有关系。。。。。。
7 k" c$ ]' W* O! o; y请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
5 Z- I* Z& V1 b; k# K
# F7 V) E$ ^* ]( a
; i$ M2 S# Y* ^/ Z  O2 F/ c/ Q5 X2 a/ u: ^2 B3 W3 t- R1 o
我也很绝望啊,希望大神能帮帮忙,感激不尽,!& q/ t; i" p& [; Y  v
& N- c0 E6 ?- G

, o; j- u  j2 T6 m. T3 r附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];  j- z* _  p! C6 `8 O" v: P
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。; [# l! l8 a) h7 H) q* \
7 Z1 w( d& j0 a
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
% e' P& k4 p+ Z+ i+ d                const double data1000[1000]) {4 Z0 N1 S' ?# a" ^
4 _' V# U7 r# Z, {
        int myfuck;! u: W) h) }, w9 U9 R/ p2 D* l
        double yiDuanShuJu_mean;
4 {" ?/ ^& h" P8 X; `5 A8 l- |        double yiDuanShuJu_LowMean[1000];. z! a+ X  p0 d# h
        int ixstart;' c4 a2 {# ?* G; k8 u% e7 g
        double dv0[1000];
; @* s1 O" R, b        comm_AGC pAGC;
" D; h  c3 I6 ?        comm_CarrierSynchronizer pFineFreqCompensator;
8 s5 _4 k' @0 D* A* l/ F        dspcodegen_FIRDecimator pRxFilter;; ^/ p: k- F9 V
        comm_SymbolSynchronizer pTimingRec;/ J6 j4 c' f/ J# v% p! d1 q1 g
        comm_PreambleDetector pPrbDet;
% D% j1 r5 J, Y3 ^- i8 Q0 [        FrameSynchronizer pFrameSync;
$ W  `: r1 f. e3 F# ]- x' n        QPSKDataDecoder pDataDecod;
+ M  G# X. t9 j$ Q1 E        static double usable_left_filtfilt[81000];" I, k: J: L& |! n! _$ y* V2 `
        static double youXiaoShuJu_QuZhiLiu[81000];7 i8 e' _. h1 \+ \. b3 g; I5 ]# x
        double mtmp;
" s8 m; U6 I- z3 ~        int ix;' B  Y5 d: @6 [8 N1 {, f& I  w5 u
        boolean_T exitg2;
2 ~' m; ?: S9 M9 L. @) w5 `        boolean_T exitg1;' Q3 \- D* X& F
        double YiZhenShuJu[800];
6 {6 f9 P; k3 f' ]7 B3 q3 O9 O        double dv1[800];4 ?+ O5 o% s& G8 V. w

5 u. m- H. j5 Q; B5 e1 u
' p3 [& \, e& c* C: N6 R/ F2 R* S        double b_YiZhenShuJu[800];! \$ [0 `* C% x7 F) `: r
        double I_filtfilt[800];
4 O/ t4 h9 H6 }        double Q_filtfilt[800];
# Y( Q; l) e2 t: R        creal_T b_I_filtfilt[800];
4 |  b* h# C! v/ k2 L        creal_T b[800];
9 f! B  P9 a0 Q( H' p        creal_T RCRxSignal[50];
7 A. {: s. D7 K! s$ L        creal_T fineCompSignal[50];
8 Q! M7 c* V: ]9 E8 G8 c        double phError[50];
6 D5 \, ]) G$ d- R% s        creal_T timingRecSignal_data[28];1 l- u' \0 V$ @+ f  {
        int timingRecSignal_size[1];) b: c! j8 K% o5 z9 t' g9 q2 G0 X2 U
        double prbIdx_data[28];
9 D/ }4 H4 Y+ [2 Z        int prbIdx_size[1];) Q  P) T, A5 u
        double dtMt_data[28];0 b! k# u; V3 T! h% c- Z
        int dtMt_size[1];
' X5 ?1 n  P& N* ^0 [        creal_T symFrame[25];  f$ f3 y4 B) M2 o
        boolean_T isFrameValid;
& ~7 V- B1 `) ]* z0 H: D3 z% l" V        double unusedU0[3];
4 R' l8 d- l9 L
4 S. T# a! [; `/ p/ I! p/ t        //调试过程中的变量
( c/ h0 z; _8 L# J9 q$ U' L+ _        int  enough_data;
3 ~) W. m1 q) [* O  j! |) [( W/ l$ L" H  e
        int enoughDataFlag;. n2 o1 v' ~" o1 P' _& O
        int yiDuanShuJu_mean_int;, k+ L# Q1 |0 H: Q. O9 A
        int int_sum_dv0;7 `4 d# X- `7 }; r- S2 x
        int oo;7 f$ W5 O# e; F% A
        int ii;
* |. A9 l' |( A1 W2 f        myfuck=10;0 e) b5 n; w, F( S
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
, z$ ^1 ]# b' G: b        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */6 H/ R3 S( C! {
- I, E0 \3 K+ {
        yiDuanShuJu_mean = mean(data1000);
' c* X! y. E7 A
, k+ Z' p5 O4 m4 W8 v        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
! z# B" z/ Y! ^9 }2 x* F        UARTPutc('A');9 o7 a- _& q" m7 v8 _
        UARTPutNum(yiDuanShuJu_mean_int);
, b. Z2 z  y$ f& [5 v        UARTPutc('\r');
1 M( W% o. F9 m& C3 @# Y        UARTPutc('\n');1 `$ p. a8 O& m# o: V3 f

2 }0 s% ^( H4 @8 J, [' D4 p        for (ixstart = 0; ixstart < 1000; ixstart++) {; O$ J) R/ R8 N, b9 U+ I9 [
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
# G" @3 W: F1 R, i        }
4 Q3 U2 S5 w3 K0 S6 k; y$ x0 Z% M2 M; b, p
        power(yiDuanShuJu_LowMean, dv0);
& `% {  `+ p/ q& t; R0 [) \* l# Q9 L$ [& K& W  Y; y6 [
        int_sum_dv0 = (int) sum(dv0);, v- J1 t8 z6 P9 ]0 T+ \+ c
& E/ v, d) }6 `+ [$ n! o
        UARTPutc('B');8 a( c" X! b6 J) H6 m
        UARTPutNum(int_sum_dv0);8 M- H' f8 G) k( A6 Z& J- {3 G
        UARTPutc('\r');2 z- R* Q6 |4 I$ r/ |- v: F; r
        UARTPutc('\n');
8 w9 ^* f) t+ k9 ?) d: z' G& Y' c3 S  \" _; x* s" g
//        int compareFlag = int_sum_dv0 > 1.0E+8;
4 c; [7 g% y6 \7 J) E/ P: ], F$ h2 j! j& i: L7 x* y
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
% d; t  H& m) w                UARTPutc('C');# `" x" [5 b7 V* T
                /*  比较信号能量 */
! @1 t& J( C/ z+ S: A                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */% I+ V5 S) D# ^* c
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
; o7 P3 k. E8 _# e//                for (ixstart = 0; ixstart < 1000; ixstart++) {, L( M) [' Y, A3 ?
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
# N$ J' y" g# O//                                        yiDuanShuJu_LowMean[ixstart];
% n* W7 U& V% q( }1 D! f+ X' A//                }
; m1 o+ u0 q1 g  {! B//5 f9 f; J0 P6 Z) a' T% a" O
//                youxiao_k++;
- F4 b8 A4 i! P) Q//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
, J9 T- h5 K$ L8 F' a! F  j; A4 c+ G//                        /* 感觉要取21个数,即0-20, */& O% b+ _, I' X& m$ o7 ]' d
//                        enough_data = 10;//有效是10,无效是03 U7 r, t# p3 B. H, w8 Q$ a9 X: ^8 }* k7 F
//                }
! C+ z7 q. A& a0 L        }: z2 b% h9 D5 }; |5 n. c% J3 E

9 S! ^  b# a# ~4 s: W% {8 V) ]1 k' v
        enoughDataFlag = 100;
0 G7 K9 N6 H$ u7 }0 w2 d        enoughDataFlag = 1000;
  g0 Q" D# C4 u6 N! |: Z( `( H        enoughDataFlag = 0x02;
4 H: @: W4 V' q# J/ S( e        enoughDataFlag = 200;
3 ^9 D3 l* _8 [3 t/ l7 _0 @, G$ T1 }9 g' o
        int myfuvk1;
; B# L, B4 T- W        myfuvk1 =11;
/ B8 L  }3 ?5 G& f/ a
4 {2 @  x/ A& t$ {/ X' F% \# F3 B+ {0 X$ [4 Z
        enough_data = 0;, Z# o1 w  W; a6 f9 L- C
( m; W$ P6 C1 V; F3 D( m! v/ Y
//        if(enough_data>50){* k  s; d! t* S% ^5 s8 e
//                enoughDataFlag=0x01;
% H" y- O7 k7 b8 z//        }else if(enough_data<50){
, F+ r  O  `" t//                enoughDataFlag=0x00;//0x00还是不行9 V! R' P  X. M' c+ @; ^- p
//        }5 z+ p# J1 N# V
( B& q( P: ^, n/ @% s' B$ M

" K7 U; U" Z# m! v2 @: T8 [        oo=10;2 g. Y/ O. B8 O' ]6 L% Y6 m
        oo = oo  <  5;
, V- [7 H' b7 h        if(oo){
0 j5 w* Y7 T* H                ii=0;, N1 o0 U) U  k( N7 P9 i: l  f
        }. Y2 E, V6 w& M
        if(oo  <  5){" q6 Y7 T4 o& ^) o/ {6 s' _7 g
                ii=0;
$ [+ V* x% h8 T2 ]6 i) f- v        }" S8 p/ B  a' d$ Z% I. v! F- ?
        if(oo  >  5){
7 G$ _! B$ Q9 C  z3 G/ I$ C2 @                ii=0;
; Y# {- ]% K! V* i( u. a        }( H9 Z: M6 a! B! m* h
4 a9 i. x- _3 k$ S
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */$ I; W: l8 r' T) O1 z. y7 ^
        /*  如果数据足够才执行主程序 */% a% B3 e' b* ]8 h
        oo = oo  <  5;. X5 K( l( r8 ^3 i  d6 w6 [
        enoughDataFlag = enoughDataFlag  <  5;
$ V5 b$ }& Y; B+ v# _  o5 r        if (enoughDataFlag  <  5) {
' i6 Z& [- _, o8 x  Y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0- H4 U- l: L8 ?+ b1 ]
                AGC_AGC(&pAGC);
. N3 p& I5 ^1 K: }) [2 F5 Z/ y# g  `6 U6 h' H. J
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);. `7 B- m8 L; U! X  A; }
                FIRDecimator_FIRDecimator(&pRxFilter);6 [- F! _$ J  x5 q/ R8 s
& n5 {4 Z( Q) A/ L, y
                /* Downsampling */
+ p8 z. s9 X- F. q7 ]) r                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
1 p& Q3 F. ?- K0 p* Q. O6 L, }- I* _: l) S9 y
                c_PreambleDetector_PreambleDete(&pPrbDet);2 a- z9 Z2 ^- s; [) Z+ P5 A& D

+ x0 |2 b  ?1 G: y. [8 v2 |                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */' ^( E+ f, y* u
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
0 u% U# R+ \2 [                /*     %帧数量=100 */2 T! W. j9 ^& e7 F
                pFrameSync.isInitialized = 0;
, V+ S& q- n: \) p% f$ _: K8 c+ ^4 |+ _2 L2 y7 o8 B6 R& v; l1 @
                /*  [EOF] *// m8 O; k1 o$ n% Q" `( t
                /* 前导码长度是13 */
4 _; E$ q2 u: V7 @" x) o- _, R, s                /*    %qpsk */  t9 z) P7 f3 R- n6 q+ c6 w
                pDataDecod.isInitialized = 0;
) \0 v, E1 i4 [+ j
% L7 _" Q( {. T) c* _$ U- r7 G& q                /*  end */
2 v9 o  w. [2 q1 b0 @4 t( n: j                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
9 |: w& X$ V3 w& D                /* Convert 3-dB frequency */8 Y& _! W$ w5 W
                /* Convert 3-dB frequency */0 m* R+ B, l7 m6 a
                filtfilt(save_buffer, usable_left_filtfilt);7 X2 C' h1 O7 m* S% H
                for (ixstart = 0; ixstart < 81000; ixstart++) {) R) b( F7 k0 S& x7 j: f
                        usable_left_filtfilt[ixstart] *= 2.0;
4 @$ ^5 A: u. R" {0 Z                }
. J. z, b, T: s: |, [/ D: V) y6 {" T% z: U$ v/ I7 i
                /* 注意乘2,处理幅度 */& y0 d* `3 @  f
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */7 {+ s' x0 }  d5 m0 E5 x
                /*     %% 行列转换 */  R# Y% c, `8 Q; n" p( }- m
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);2 c8 @3 s" Y+ Y( a
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 D% I5 \4 y6 [5 ?6 s& y& X                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]3 y0 l- X* z9 ~2 s3 ?
                                        - yiDuanShuJu_mean;# G, d1 V8 r* k# s6 o3 o
                }
. d9 z; G8 I8 [* K1 X% `, g+ t
# p! S& H! O( v+ K; Z                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */8 l/ j. E4 y# i* Z) O: r7 c: }
                ixstart = 1;
8 t% G1 p- V5 T8 p# M& K* h/ T6 [                mtmp = youXiaoShuJu_QuZhiLiu[0];
/ K9 \2 s  B% b3 [: M8 P                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {+ B. c& _/ V9 y! I- `% _( D
                        ix = 2;; x8 Y; w& ?& @$ j/ c
                        exitg2 = false;
* L6 U/ d4 R# A( K                        while ((!exitg2) && (ix < 81001)) {
' ~. b1 o3 C! m6 L& n3 V# C1 y                                ixstart = ix;
+ H. K# q% O( R1 c/ ?  O8 v& j                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {; [5 I! }5 E9 B. i
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
" O9 t* L) W" l  l                                        exitg2 = true;
1 l! n6 G9 y9 h                                } else {
. e! M' c; P6 f4 C$ Y                                        ix++;" p1 J3 J8 |9 A5 h8 i# p
                                }2 G. d/ X- F( ^. l$ W
                        }7 U  y, q" {( Q
                }1 h$ [3 C1 F6 d2 G
9 d0 @. m" C( ~7 B7 k
                if (ixstart < 81000) {! _8 ]; G& L9 _# W# H& c) N$ ~1 Q: X
                        while (ixstart + 1 < 81001) {
. {' j0 X3 l+ \                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {( p3 r# k: o" X5 a8 H
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];2 b4 T* N$ D  a8 b4 @4 X( Q* C& R
                                }
: O/ L' u' F$ f) O' C! a
  x0 H" ]( ]( e( x/ U' f! B                                ixstart++;
; F8 c  D- U' Z                        }
% x4 j; d; V' z# S! n                }9 m8 j9 T$ e8 H" F: u1 K

7 w/ s" A' {  |& z+ q5 Q* f                ixstart = 1;
* e% W" b$ w: Z, [/ \5 f& K. h                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
4 f* x# C, Y' h+ q6 k                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
* ~5 w, M$ n6 o                        ix = 2;
; N: M1 w/ D: X( a( A& q0 y                        exitg1 = false;' f1 P, L4 a& n3 h6 n( S
                        while ((!exitg1) && (ix < 81001)) {
; a$ g& n# P3 T                                ixstart = ix;
6 @" r8 Z1 B( l( Q" R# V                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {' g% L( q7 H4 ?+ Q/ h
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];, f1 U$ {8 |: y
                                        exitg1 = true;8 Q8 d7 y/ z2 ~! t, g% J' X& W
                                } else {
% v' Y) z5 B' s                                        ix++;$ s7 d4 u/ L8 f  f! g( o/ M
                                }& h! R% ?2 r0 O, f% i4 W0 m/ N
                        }9 H- E  }# \/ I) j
                }6 J) M0 f* }! Y$ o: i

& I8 E; g5 ~' f! D" ?9 I                if (ixstart < 81000) {% a3 ~5 J4 o; V$ C2 U
                        while (ixstart + 1 < 81001) {
$ a1 p( U" @2 j) ~( c0 }                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {1 k0 h' a& h+ h8 e% }  i
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
2 r& P3 Q8 g& i: D6 O. x) Z                                }1 H! s6 ~7 B* ~& e; S9 O3 T
! G3 K7 {1 R0 i
                                ixstart++;
( d0 A; b/ V: @7 O" X- h                        }
2 S8 F8 V. \& T9 X4 u$ L, n5 ]9 ?                }/ P# g+ o& V( h4 A
. K4 u3 P: Y" u
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);! r% M* b/ }( \' F! S# e. h
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
# T; ?( o  N; T+ V3 \) I6 ?1 V: I9 \' w                        yiDuanShuJu_mean = mtmp;
' }! A/ [: l, g; A4 W                }: ~  {" U+ n  w, M* G( e. l# |' }
7 @) k7 k) @8 m; ?, o
                /*  找出极值 */
# q' q+ X: q* ]! x                for (ixstart = 0; ixstart < 81000; ixstart++) {8 k' P  Q8 B, D
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
' a$ U6 d. q; h' Z2 B( k  B: O                }! j& f8 R/ c$ W( ^% ^
+ F; H' v5 `! M5 Z
        --------------帖子字数限制------------------3 Z, Z. S  S4 ]3 Q) A8 a3 x
}
1 f+ L1 V/ c# C+ f0 z% I+ i9 F! R0 _8 K; \* R

' _0 G- `% a& K* P( n, H, g; @" P

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 14:01 , Processed in 0.046473 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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