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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
+ Q9 t: u2 z* e/ u, t. e8 V1 i4 U3 M4 b
各位大神:
9 J9 p2 H+ |+ b8 }     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
+ o, _: m' ?& ]0 d6 o      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
8 w1 O) ~& [- K' w* h: P2 l
# N% K" T3 Y/ T, t/ f     
6 v1 Q. o0 P4 K4 Y这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
) e2 ~3 ^% p. s8 ~/ r3 C6 Z
( [; `: L; u- [, k/ z) P) m* f8 ^并没有其他线程
6 `# p( V$ w; Z  B  L* X  u& ]反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
- M- m5 a1 B5 h7 K" d8 W也说不定是和堆栈有关系。。。。。。  o6 G' z' q" W/ O& A$ ]
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
$ ]- P& K* n( P; B& u6 ^& n, a# o! ?) B1 W7 P' v  p/ r
' u& D' a- O. d

: @0 }* A/ \/ x6 [我也很绝望啊,希望大神能帮帮忙,感激不尽,!8 ?- V5 T( R+ D- L1 |& {; k* A; m
4 G+ Q# B' k* Z

4 g& H3 d9 v$ d" E" H- M: H附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
& m  L2 }0 L3 g7 Q$ P        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
! W/ f- @  T7 T/ l# I- z/ ^! \- {) E, Z
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
! B" L8 v6 k/ J# E                const double data1000[1000]) {
+ y7 W; j5 }# _0 A5 V. _. x3 l$ I( m1 l0 _
        int myfuck;
3 V6 Z  T% M9 V2 X7 L        double yiDuanShuJu_mean;' y# U, }+ t) Z* Y: @* w
        double yiDuanShuJu_LowMean[1000];, V; v3 i3 i) y$ ^1 X
        int ixstart;
6 l( t. N2 Y, Z, L9 f9 k5 [+ u        double dv0[1000];
$ w/ p# u0 Q6 {3 l: ?        comm_AGC pAGC;
' R. N# b  t. q" w        comm_CarrierSynchronizer pFineFreqCompensator;) ]% j5 E& K$ P8 y8 B4 n
        dspcodegen_FIRDecimator pRxFilter;6 {! Y, r0 D5 e
        comm_SymbolSynchronizer pTimingRec;, b- j1 \0 l! H% w5 J/ h- q) h
        comm_PreambleDetector pPrbDet;% z$ W& S& a$ k8 u4 i4 p
        FrameSynchronizer pFrameSync;
) ?4 {; ^5 ?; R7 \0 E' a/ X        QPSKDataDecoder pDataDecod;8 M" @3 ~( w2 E* _  U$ O8 J
        static double usable_left_filtfilt[81000];) Q7 U7 A. J' {/ G7 e- p& H
        static double youXiaoShuJu_QuZhiLiu[81000];
2 p- R/ |0 `  u# F  a4 P! o/ W        double mtmp;2 J$ ~" \$ L8 o% C  K% K
        int ix;
! ]" Q  Z2 B" P        boolean_T exitg2;; }" x' h2 z) d, R  N2 N2 y) f" N8 w
        boolean_T exitg1;3 I4 p; A( u# {4 K3 l* j
        double YiZhenShuJu[800];$ q/ H0 X4 D  u% K: {0 Q
        double dv1[800];
; }6 E' z  i8 F
( g) F: A, K, m8 a+ b1 w
% y* T% Y+ `. X" N5 U4 i5 E( n        double b_YiZhenShuJu[800];
2 I: z; K9 Z3 O7 a0 W        double I_filtfilt[800];. _+ [: B8 }5 \9 S' q# }8 m
        double Q_filtfilt[800];
, `( f$ A- H' F' a+ ]        creal_T b_I_filtfilt[800];! u3 ]8 u+ ~& C! Q# U1 v: E
        creal_T b[800];
; l8 c7 V5 t5 B' O1 _7 V, j        creal_T RCRxSignal[50];5 l# V- W/ y- g& \; ?- e
        creal_T fineCompSignal[50];! I2 @& D4 H& N6 ?
        double phError[50];! M! }, |8 }8 w4 a8 S+ d5 f% v) J
        creal_T timingRecSignal_data[28];
, w7 m% U& [, V6 {& N% k; K        int timingRecSignal_size[1];# f  A$ ]: [5 [1 E; T
        double prbIdx_data[28];& Z# S6 _- ^4 N1 K
        int prbIdx_size[1];
" |0 W5 j* N) y( j8 q1 O        double dtMt_data[28];
4 [& W4 A9 ]; ?: }9 n" Z        int dtMt_size[1];* C* [' N) ~$ f2 L2 S
        creal_T symFrame[25];
8 h; M0 Z7 y. N+ x! X% ^1 @        boolean_T isFrameValid;
* ?& O7 e/ t+ d/ H1 w# M        double unusedU0[3];
, ~$ U: W8 ~8 }- }( u1 \0 m% j) ~, S# u5 G# m$ f5 A  g" D. q2 H: N
        //调试过程中的变量3 c3 k  a# t5 Y, U5 h; n2 t
        int  enough_data;
% p6 D; \: y6 Q  h% l7 q2 f9 I6 C( J$ G2 ~+ Z" @% V. y5 Q
        int enoughDataFlag;
4 e1 J1 D5 s& F8 j+ c8 M        int yiDuanShuJu_mean_int;) v7 M8 ?; h% c& I
        int int_sum_dv0;7 ?' ^$ t; Y+ O4 I4 z
        int oo;3 _0 m$ S  g: I9 d- g/ d9 m# |- S
        int ii;, }, I% T+ I9 a" K. a* n
        myfuck=10;( }8 B: d1 [# m9 C; z0 q3 j4 n
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
0 [" {0 d) J+ f* a9 W9 k* a7 a+ Y        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
5 n7 O+ @+ A& H3 ~' S+ W8 ~
' U. e; [3 j* X        yiDuanShuJu_mean = mean(data1000);
8 F& {* G, F/ c( ~1 I) i. l# ?
6 U3 ^3 A! G/ }        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
: S' W: r) ~: t3 s' T        UARTPutc('A');
! I3 A9 h. K/ v4 Q; z. @' D        UARTPutNum(yiDuanShuJu_mean_int);
+ n; i: t& ]; f* f5 i* o        UARTPutc('\r');
8 @- Z& ]8 m. H9 ]  p        UARTPutc('\n');6 v. ~2 t" @# C" O9 P: H5 c) a
1 i4 g: T8 U" X# \
        for (ixstart = 0; ixstart < 1000; ixstart++) {4 P. ~1 Z/ f: L0 M- s# ]5 Z
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;  M0 h# C+ z) [, a
        }* E" z! C$ ?. {+ |1 f; x

0 ~5 h& l+ z/ \4 I* F        power(yiDuanShuJu_LowMean, dv0);, B: @/ a- \2 ?6 p

4 O, P- C9 ]; c        int_sum_dv0 = (int) sum(dv0);' m8 p1 o! r5 S- @+ r' W) T% _

( d! C8 p" V. A& C6 ^        UARTPutc('B');
* g0 K9 B4 ?5 v0 x* T6 S8 S        UARTPutNum(int_sum_dv0);0 h- Q! s# k- W: h6 l2 p# P  d
        UARTPutc('\r');$ ^7 e7 O5 }3 _- T0 a
        UARTPutc('\n');
$ M& g/ Y6 P7 x( x- Q3 V9 f( K/ Y7 V! ^7 W4 J
//        int compareFlag = int_sum_dv0 > 1.0E+8;
* ^! o( F! P: o5 U8 Q0 M
+ X& x9 D7 p/ I1 d; \1 R* _        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 P. G. l  O% n5 g2 U6 [! W
                UARTPutc('C');
- N3 [- _' y, f. Y* }% l- l                /*  比较信号能量 */- V1 r9 R' S" a1 v5 P! l
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */( b$ X, t. \" x8 n2 S
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
9 s& K+ p% s: W1 P. `) \% D//                for (ixstart = 0; ixstart < 1000; ixstart++) {
# j2 X; v# O3 ^/ y4 ]//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
' y# N9 t$ u5 P, @//                                        yiDuanShuJu_LowMean[ixstart];" T0 j$ C8 k2 p# j4 r7 ~8 }) ^( W7 M; ^7 I
//                }5 ]. I$ ~/ T4 @' L
//
# s" p" g) ^/ V  F//                youxiao_k++;5 Q7 V5 p: z5 e6 d0 M1 e  t% F
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==# }3 d1 t4 j2 i
//                        /* 感觉要取21个数,即0-20, */" v8 W) @% Q$ U6 q7 j2 f1 Z
//                        enough_data = 10;//有效是10,无效是0
/ K4 f' J5 \! Y  W) K- \//                }' g" q! f" K+ }9 U- Q5 b
        }
0 ~" I9 p" `3 O4 ^2 w! W6 a5 w( S
( t) X2 l$ {' ?# b8 J- t
7 x5 B; T1 ^' e, B* S3 N: y        enoughDataFlag = 100;" X  z. l" a) O# f8 h7 v! T
        enoughDataFlag = 1000;0 _& _# Q4 T. M% L4 o, y  h  F
        enoughDataFlag = 0x02;; Y' s0 Z9 B4 c
        enoughDataFlag = 200;) g6 M. p3 e% b( f# j

3 x+ m7 m' I: }, G; ~9 _' o        int myfuvk1;
1 C: [% Z5 X% Y% e" w7 ]- `7 q        myfuvk1 =11;2 X0 g/ }9 R" ~, g
" v0 E: ?. s( R3 X  D% ^: s
0 x# w/ j' B$ t# o
        enough_data = 0;
( l2 {/ b  k7 j# X, a6 v0 f; |$ v2 T- t
//        if(enough_data>50){
: _8 Y, E+ N$ b# Z//                enoughDataFlag=0x01;
7 P( |  [9 L" h$ b//        }else if(enough_data<50){
1 b& \4 `% j! i* K+ R$ R//                enoughDataFlag=0x00;//0x00还是不行
- A& N% }/ i; ~1 O1 z2 ~% m- x//        }
! d8 x4 n( Y3 V! n/ s  j0 A% w3 \% l$ f, {% f. Q& s

3 J# z0 w  z1 U! Z/ l6 }* W        oo=10;5 G/ t+ k; B  d5 b0 G
        oo = oo  <  5;
, o+ Q" q  r1 ~) q        if(oo){
% B6 Q7 R7 T3 t1 c3 R8 z# U0 Y                ii=0;2 X0 N/ h% N! n. Q5 l
        }
. U& a5 W' M3 {" x        if(oo  <  5){6 a: `$ m  P, M) l# f8 _% S9 w
                ii=0;" Z4 r' `3 c, j; W
        }2 `( }9 l" e9 I. n
        if(oo  >  5){5 b9 K6 W2 x. a9 M$ F, {
                ii=0;
$ V! w% W: q- l        }
  H2 w& r  o) J) x8 \& {+ s7 p7 v
: I# Z* [* a, t        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */$ X6 M9 E4 `3 [1 _. d
        /*  如果数据足够才执行主程序 */5 Y7 y8 j2 |  m+ r+ C7 z( e
        oo = oo  <  5;. h- A+ B  s3 a$ Z3 I% w" O0 e
        enoughDataFlag = enoughDataFlag  <  5;
, R8 u# T5 n. J8 L        if (enoughDataFlag  <  5) {
0 E, ^+ I5 R0 y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
; ]( H5 I; c5 R: e                AGC_AGC(&pAGC);
/ H( i' g. \1 Q3 U. v- U9 U# i0 `% [) I: s$ c6 B0 Q, ^5 n
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);* ^' Y2 K- p# c4 P: Z0 n2 G) H
                FIRDecimator_FIRDecimator(&pRxFilter);8 C* c" Y  j0 m+ m; |2 y9 {# G$ ^+ I
, \0 H/ x- ^+ H  [' r
                /* Downsampling */
2 ]7 y' N3 F% i                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
6 l  `8 S! K5 r5 m: C
7 ~, c1 d8 f% M8 V  Z                c_PreambleDetector_PreambleDete(&pPrbDet);( ]4 f- U) m1 n: v9 H
6 T$ s3 [; e; c# J( C# e
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
5 f" o! _4 F/ K5 N; a2 i$ H' P                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */+ @+ ^' z% o  b1 k, z0 i, l# O6 ]
                /*     %帧数量=100 */
- e2 w2 q7 F1 r  Q4 d2 G                pFrameSync.isInitialized = 0;
  _) f. m/ p! J+ [6 d! ~
& e* b8 b$ {' n" H% W) X. D/ l                /*  [EOF] */# k# |, P* j5 ~4 L* _
                /* 前导码长度是13 */5 N- E" O! q3 o
                /*    %qpsk */
( o8 c! z, ^1 f+ ?' }6 d0 u                pDataDecod.isInitialized = 0;
* D/ ]! g8 L* N  L7 x1 ~+ v. C3 Q, [$ G
                /*  end */
7 ^6 w0 R. D; `8 Y! i; A4 G, x                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */& h/ j& @6 s2 [" g" Z+ p4 C
                /* Convert 3-dB frequency */) S4 P6 W8 ?% e
                /* Convert 3-dB frequency */9 U4 |0 A. [$ ~5 b3 g5 A1 o$ s
                filtfilt(save_buffer, usable_left_filtfilt);$ K; u1 S6 _3 ~: z6 B% {
                for (ixstart = 0; ixstart < 81000; ixstart++) {! k3 k% s; m3 i2 L1 ?
                        usable_left_filtfilt[ixstart] *= 2.0;6 q7 e% ]; V! h
                }
( F! a5 O4 {2 B7 d- B2 H9 h: w- m; y, a  @" P
                /* 注意乘2,处理幅度 */( }* P5 |3 m: C- L
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */  _. ?# K  _2 T" ?0 H
                /*     %% 行列转换 */( [& K$ T) z# G9 R2 S/ |
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
* n( Q2 ]% [$ C1 J5 u                for (ixstart = 0; ixstart < 81000; ixstart++) {
% B5 S2 R* Y, t- s! H& v                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
! y6 @; \. C8 ^- T% z: k! p' G                                        - yiDuanShuJu_mean;
! Q) D6 p$ ?, [* I                }
/ ~2 V6 O( |. d# n2 D
; i" A4 g& u6 f1 F* w) G- L                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
7 |& v- {: G9 L, C" T; k- c                ixstart = 1;6 q0 o* A3 m( a5 `* O  v6 h
                mtmp = youXiaoShuJu_QuZhiLiu[0];
$ z2 ]+ W1 o+ o                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 h# G: n5 e: D/ T3 p                        ix = 2;+ m2 f% y: B6 Q( l% V) M, T! h
                        exitg2 = false;/ r! e. Q) d: @' N3 S' V) n  [$ R
                        while ((!exitg2) && (ix < 81001)) {& N* q' ~9 u1 W; q$ |
                                ixstart = ix;# j" B0 N. q6 l% v! J3 u
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {; Z4 C& s1 \8 Y  ]- f8 F. O
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];& N2 O! M5 z& ~) ^! t  K3 \# B
                                        exitg2 = true;9 [2 f& Q) I5 L2 |6 i6 V8 B  l$ X
                                } else {: w. l# k" x% J, o* c4 N
                                        ix++;
6 S9 |- N: Z, s( F' e                                }
: ~( v2 |+ m( O                        }) X4 Y& v; |) A; d
                }* |- S1 I" T% J3 J3 a: ^" M& g6 i

0 t* T1 x% f( V$ Y                if (ixstart < 81000) {
  Y2 n! l" r2 m6 t) v% Q                        while (ixstart + 1 < 81001) {. z" G; w2 T" L5 p% @
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
$ d4 e* I  P( i* w2 o                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
, H6 ?* k6 [; w0 M7 _                                }8 ~" M9 ]- x  w* p4 m3 S  x2 r
' j5 f& h" |$ c5 E
                                ixstart++;
- I2 Y0 P6 }& y( \                        }
" v0 x& n: h9 Q, e                }
+ y6 [$ Q8 R) v" m! D: M- @- b! h$ Q/ c# M9 y
                ixstart = 1;
0 p* ?9 z% y' h) M  T7 S* c                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];- o5 W' M, Q5 {1 U. A) Z9 A; Q  ]* V
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {# B' M$ a. m" N2 P# E
                        ix = 2;
7 _0 A& w; s. ?. J8 D2 Y                        exitg1 = false;' a. b7 ]. G; p
                        while ((!exitg1) && (ix < 81001)) {% d; R$ @' c5 J: u) ?" w
                                ixstart = ix;
2 [2 O% M$ w0 T7 H% |& s* `                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {" }8 u# ]6 j: P. g' A4 c
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];- d1 @* g1 H$ R$ N
                                        exitg1 = true;
) d! f" B1 X6 j: O5 m8 a                                } else {
. L/ o- H! ?8 G# S                                        ix++;* w. t! A) \" x' ?/ |
                                }
' j& P/ l7 g: w! U' z% s                        }
9 y" Y6 `3 S. w$ l& C/ h% O                }0 x3 t6 W1 c/ x) {
1 n% ^/ E: H: U" H$ S4 k) A2 d
                if (ixstart < 81000) {" f; _6 D* U" A/ z+ G
                        while (ixstart + 1 < 81001) {
+ M& g8 |! X. P) K# l                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {1 V# V7 f6 M( `4 s4 m% g  L
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];* v- J' K8 t8 ^) u
                                }- p, j+ X6 v% _: S  s; h- g: X

3 {& u# R8 x/ \                                ixstart++;, C& E, I" I# u
                        }
/ D8 t$ o6 a6 W4 Z' b1 e$ M2 B                }
. }5 s7 \& `- {0 k2 ~
& d9 O! Q% Y& g7 y% Z                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);( I" r$ _. R& }( j% {$ N
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {0 P3 ?% ]1 \: O1 |( w! H
                        yiDuanShuJu_mean = mtmp;. W  F- y% n" N' P- K# i0 f' y
                }4 n/ U& T8 h6 u1 N, w$ ], z

% f$ g3 H. m: e& T8 z                /*  找出极值 */
1 Q: ?. n, ~" x  J; V8 B+ x; Q                for (ixstart = 0; ixstart < 81000; ixstart++) {$ @, o- v* o( ]9 ]6 i6 f6 W
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
& s1 O3 }0 Z% N& L1 M* Y                }
# g7 U3 {1 F$ u1 o; x  b9 C% G- d  Q1 [& f" Y
        --------------帖子字数限制------------------
* V. @& N$ z+ b* D) x3 ]}
( I9 c: E+ ]: ~1 N* W0 ?1 r% G+ p+ l7 \) D) V1 I" x
& ]! m( P. T8 H6 i# u: E7 d

本帖子中包含更多资源

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

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-11 17:53 , Processed in 0.047158 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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