debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
* B1 p$ y6 ~% q: a( _9 t' ~' I/ b+ P! O
各位大神:
. r6 e+ C# [% X5 ^% f4 y$ Y     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~): j2 U5 n' V; l/ ~
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
- ]- s5 H( N' ?5 F% s% J& z  H, Z; ~* M  z8 X+ v# L
     
/ |5 E8 L& R+ d6 H7 [( H- A这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
0 M$ N6 x& x+ Z( S# L6 ^: O
4 ]/ y9 A' u' z9 q. @7 o并没有其他线程
2 P, C2 @0 B' J% p反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。+ g/ x( V& l9 q8 v2 w! M- f
也说不定是和堆栈有关系。。。。。。
3 j' e/ R6 v- @! F$ x& G7 n: N请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
' k5 C) }( }/ b! }9 R
$ t" x) S2 C8 f- c1 O) d% n$ V" p' K8 U* z$ \
/ h) P3 l) A9 L# o0 @
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
+ b4 h' s* w9 X! X  g  x7 |) }- Q; Q( l! l2 p8 l; ~

! t0 o" i: h, g附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];4 C! }) C1 b* R6 S% W5 N
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。- k+ L* q, z9 x4 |7 \, Q$ Q" m

0 {% j6 W  ], {6 V; [1 }! Xboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(, |7 X- i3 M8 W. d) D5 Z
                const double data1000[1000]) {
3 v7 g! J, [* b  Q7 O- m% D
2 }/ }' c" P; q) f% t( m1 J        int myfuck;( J+ I, g- ~4 }3 q8 W2 d7 N
        double yiDuanShuJu_mean;
: w; x5 b+ v7 E% S7 {" q5 }        double yiDuanShuJu_LowMean[1000];3 {$ Z+ d2 ^, D6 W& B; m
        int ixstart;
3 F5 @& x3 O! a# _        double dv0[1000];
1 [8 o3 V5 w  p- M+ N        comm_AGC pAGC;
. }2 w% n" u) ?% U, O, n; w        comm_CarrierSynchronizer pFineFreqCompensator;
! l0 a. }1 k5 H9 R8 R7 \) R9 V        dspcodegen_FIRDecimator pRxFilter;/ j* G6 ]% s( m- Z, d; C5 @
        comm_SymbolSynchronizer pTimingRec;
' a1 o) r( r& @+ |- |2 }, ^9 ?        comm_PreambleDetector pPrbDet;; z. n- b8 s. Z
        FrameSynchronizer pFrameSync;- @) {- ~% m6 n* u  v& O
        QPSKDataDecoder pDataDecod;
8 M4 u) ^$ n% _3 }) p+ v3 O        static double usable_left_filtfilt[81000];4 P3 k# Z% \& n! u8 l
        static double youXiaoShuJu_QuZhiLiu[81000];
* v2 Y$ f$ _6 y3 W        double mtmp;% L. z9 r/ W3 D0 n' G& }$ |
        int ix;
0 A/ P2 K' c0 j' o2 [+ i0 X        boolean_T exitg2;% \+ E3 ~' e! P# y
        boolean_T exitg1;
, @' X) {7 v, g; S/ k        double YiZhenShuJu[800];" {  F) h* {$ x
        double dv1[800];
0 i& B) g& m( U3 b+ e9 \$ a/ {3 v" S/ ~9 e# _8 i% T' c6 z

& S( e6 \% y, M7 D5 B) ?% F        double b_YiZhenShuJu[800];4 ]# _( h* @7 @, R/ A
        double I_filtfilt[800];
+ r) \+ a( @* N8 L2 H8 [' A        double Q_filtfilt[800];  w" V# o1 S" C* h
        creal_T b_I_filtfilt[800];
! O3 {4 j) W+ k# @* _0 ~' Y        creal_T b[800];
9 S' Q+ J6 N6 x' {9 `  v8 W# H. C        creal_T RCRxSignal[50];6 `3 c: h' e1 M, u4 W
        creal_T fineCompSignal[50];
9 {6 j$ d! ^4 C        double phError[50];2 p  J5 L& _! ~) T
        creal_T timingRecSignal_data[28];
) b) n! @: N* ]% W( V" ?1 D        int timingRecSignal_size[1];
. M- F- G* T2 r        double prbIdx_data[28];
& A# r' j' N6 ]4 X        int prbIdx_size[1];
' v/ L5 _  Y, T/ W1 F4 H: w        double dtMt_data[28];
8 D9 L2 C! U; f8 g! k' A# t8 l        int dtMt_size[1];! t* S( j$ Z6 G$ K/ Q7 |
        creal_T symFrame[25];
: {% Y4 I1 z/ G$ V- z        boolean_T isFrameValid;
7 p2 U2 f$ ?, o* P$ [        double unusedU0[3];4 d) w  H. `' ]

: q: H  f2 \: E        //调试过程中的变量% `' b; r' I6 Y0 E
        int  enough_data;
; X# F6 }- S1 o! _" R8 Z$ d
/ v5 j& Z2 M( ?        int enoughDataFlag;; N. q5 E6 N) p1 ?0 S7 ~
        int yiDuanShuJu_mean_int;2 p; z4 ?3 `- {6 P8 N7 M
        int int_sum_dv0;
/ }( p- ]0 h/ g- Q8 r3 i        int oo;
2 i; K$ N$ z) z/ B0 Q* k        int ii;
9 e9 i: H) v# B& ]6 _  u0 X; g. F        myfuck=10;
0 i* R9 S; \5 ^+ {. C        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
; S* Y+ f* n: ?4 e        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */! Z  A- F/ }; f4 ?5 j

6 G( [1 S' a+ a9 U& w+ _        yiDuanShuJu_mean = mean(data1000);
; ]% m3 e5 y4 F, Z; O+ Y, t
) b2 L0 M, v/ L  r        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
0 p4 u4 F& [4 f; J9 ]+ i        UARTPutc('A');/ x+ w, |: M( S
        UARTPutNum(yiDuanShuJu_mean_int);
, d, O9 U. ?/ v$ n0 i. [$ D; V        UARTPutc('\r');
' R" y; q# ^* i        UARTPutc('\n');
$ E4 l! e& I* D% \$ m. Q- c. P$ b/ x: L  k5 c( C
        for (ixstart = 0; ixstart < 1000; ixstart++) {3 B+ k$ m, z* k# r" W- s
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;3 f4 e' j8 m( C  I4 f* j. |2 L
        }# A% Y8 }! }$ e, Q; E
) ^2 ^% X! b1 p, ]7 P1 ?1 g
        power(yiDuanShuJu_LowMean, dv0);! i2 F' w  U2 t5 c0 [

/ x& h+ `' c$ k8 Z5 w5 F        int_sum_dv0 = (int) sum(dv0);
+ p/ |: w+ G1 R& A8 v: k' F; ]: O  r: i' T) G( d
        UARTPutc('B');
+ Z; h% Q/ @: {( `# U/ z2 q        UARTPutNum(int_sum_dv0);4 |( r3 |* @, W% U1 m6 I9 Y
        UARTPutc('\r');
6 p9 L2 _+ U8 m$ \        UARTPutc('\n');
+ j9 ?2 H5 X9 z/ T3 m7 ?1 ~0 X9 a6 l2 C+ ]" X  k
//        int compareFlag = int_sum_dv0 > 1.0E+8;
8 x3 j+ G- H4 }9 u7 G( T, O& |
% v4 F" |4 I/ r9 D# q+ v  X        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?- A6 k. t* t; l
                UARTPutc('C');
  ^. Y4 c& Y' P5 G6 l# X# M                /*  比较信号能量 */! K# Y4 a4 x5 y. o$ G4 b! ?* m: ^
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */8 V' T& C* ~1 c2 p9 l) ]+ R
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
+ ]+ l8 Z6 }, i2 L8 T* z//                for (ixstart = 0; ixstart < 1000; ixstart++) {
" p& K: ?8 @0 o1 S/ W//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
: U- i8 l- c1 U9 ?# C//                                        yiDuanShuJu_LowMean[ixstart];! j8 L4 ]* ?% Z6 `* U( h/ J# i
//                }' b7 j/ F; Q4 o! O2 y7 Q5 b9 x
//
, D. v. L2 a7 n8 r9 r9 ?2 a) d//                youxiao_k++;3 w1 p  G5 z  B& m* G: Y! G  c
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==: ]) W& P$ F, P( t3 o5 Q5 C
//                        /* 感觉要取21个数,即0-20, */6 }3 f( n" w( S* B; x
//                        enough_data = 10;//有效是10,无效是0
; `2 x# E! }) y5 M  m" g//                }
* ]9 o" R$ r0 Y  o6 y  n" O9 W$ w        }
+ O, ~9 O( r. p/ n" [$ A9 G6 J7 M6 H3 q1 k6 f

* {! q" y1 I6 s+ V6 c8 p( h$ ?  U! |        enoughDataFlag = 100;# ~( l( [" O& u0 L
        enoughDataFlag = 1000;
7 u$ @+ z  X) Q1 m4 g) r. @        enoughDataFlag = 0x02;* ^  d2 ?5 Z( G4 _- p' Y
        enoughDataFlag = 200;3 o7 x# d+ z; k, [. D2 R3 d; q

. s9 c( f- j. J+ z9 S% S        int myfuvk1;
4 R$ k$ p9 L8 H! ^  c) M2 s        myfuvk1 =11;2 d; B5 b5 o9 J+ W- K

( @. ]( p8 |) \0 Q$ c
* D; P8 P2 J% E! ]) _        enough_data = 0;- L& {4 o, P' j$ @2 k6 H
' ~) H) Z/ R2 h0 x% u2 F
//        if(enough_data>50){
  S$ T8 p2 y8 F5 W1 v: w% K- f//                enoughDataFlag=0x01;$ U+ G/ D7 n* G, b+ M9 G
//        }else if(enough_data<50){6 {; s1 r' h; @. a" ?
//                enoughDataFlag=0x00;//0x00还是不行
1 D9 M/ l+ l9 f7 `8 z" c1 f9 k//        }0 @" h' H- H# C6 J

3 o3 m$ T/ s  E; Z/ a8 Z5 Y$ j4 h* `0 k% j( e' P
        oo=10;
% P6 I6 x  W, k6 ~% U. k        oo = oo  <  5;5 y, `, M$ M/ {. S3 O
        if(oo){. H" ?3 m- O0 W
                ii=0;$ G5 p+ S# I! }
        }
! ~( B; V! k2 z        if(oo  <  5){
' T! A" y$ f% l                ii=0;6 b/ B( f+ M3 m; J! i- v
        }
, ~5 J  k2 ?& L. _! p) q        if(oo  >  5){5 X1 ?# }$ ~  z+ [
                ii=0;& L$ X* G( b9 O' K
        }( J( w0 J9 i1 t( X& c" n# ~4 a$ y3 b
) u# x$ |, {1 q- }! o1 a6 Q# U
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
7 \- s2 u7 k) h( c: Q7 b: z        /*  如果数据足够才执行主程序 */  P/ y- g( U' B0 Q- t: D( h
        oo = oo  <  5;
% O. x' f+ ?7 l- }; ~- r! o        enoughDataFlag = enoughDataFlag  <  5;; V) j( X1 ]) E$ |
        if (enoughDataFlag  <  5) {
/ g  V0 s* m8 l1 f* L//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
' J4 x) a- K' d' j3 b7 V                AGC_AGC(&pAGC);
3 m% `5 u; M9 ^' m
8 q# |* q; g' R6 Q6 p( z  g                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);2 l0 V) l% t. k! ^# m! M
                FIRDecimator_FIRDecimator(&pRxFilter);
: ]: _, E8 @& M& D
8 R: q3 Q4 v' X" m% s: q' O; C: O' z                /* Downsampling */2 }( G* ?6 A' M6 ]3 N' y
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);; }$ |& r, N1 g( L! d; ^: c6 C

# W9 b9 i6 E! ]- B% B" v                c_PreambleDetector_PreambleDete(&pPrbDet);+ S0 w$ X( W% ~% F+ T. L

9 Q0 b; f; T9 a% \4 |                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
. z5 Y5 R; M/ z, {$ p! U! i6 T                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
8 Y7 _; Z6 S8 R9 L: ^) y, J7 ?# j                /*     %帧数量=100 */% D+ Z- v, x) a: ]4 d2 a
                pFrameSync.isInitialized = 0;/ y/ v) X7 n9 o/ e/ _1 j9 i

. M& E+ F5 k" Z* `( Z2 u% ?                /*  [EOF] */
& N; e; F& L9 Q                /* 前导码长度是13 */4 N7 J8 C" F8 a! B# r8 N
                /*    %qpsk */
3 R# ]9 B# y9 j" e) t( Z                pDataDecod.isInitialized = 0;
1 ]# O. B. ]6 `2 E$ X% U
- Q: [/ T" J' J" R8 ]: Y                /*  end */
; n2 X7 b' i; C8 o& \                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */+ c$ x8 A6 H% Y. k' J# P0 O  P
                /* Convert 3-dB frequency */% J1 U. T: w0 a6 s5 L1 ?4 Q
                /* Convert 3-dB frequency */" [9 g$ l5 F) Z! w" f
                filtfilt(save_buffer, usable_left_filtfilt);
: T4 x+ v* i1 D8 B; F                for (ixstart = 0; ixstart < 81000; ixstart++) {
( X* \& d; h* [( q' Q$ N                        usable_left_filtfilt[ixstart] *= 2.0;
: \9 \* ?2 K5 |$ h5 I                }3 j4 s' R6 V6 n4 P- Y
2 ?( [$ j8 a; K
                /* 注意乘2,处理幅度 */1 i, D3 K: {3 v; r" q: M7 E
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */: N! ]/ L+ F2 d4 p! n
                /*     %% 行列转换 */3 K0 T* [( Y3 i/ q# t% H
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);( j( g8 c, d7 ^( g- p& L9 Q
                for (ixstart = 0; ixstart < 81000; ixstart++) {
$ V  _5 G0 G% v5 p                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]; j. p0 p/ v, ]5 C) S) I
                                        - yiDuanShuJu_mean;
9 C. K& s6 P" I3 h, t$ Z- P                }. D. d8 \/ f' ?& T# d

2 S6 t1 j: o7 j& M2 W& A                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */, x1 e) q* p: {7 P( e5 j2 w
                ixstart = 1;
  U8 K. J$ |& a/ |+ G! {$ d9 y- u; w                mtmp = youXiaoShuJu_QuZhiLiu[0];/ N9 `1 R7 n. r! o( T. ?
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
) T$ N) W: i5 ^5 }$ O1 E                        ix = 2;4 r  T+ e6 w- a
                        exitg2 = false;
/ T; @% J- z$ z( R. Z' l                        while ((!exitg2) && (ix < 81001)) {0 W( L/ w* d# {
                                ixstart = ix;. @! N8 S8 }# W/ R
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
, {  U+ F2 k% g9 }, |8 W* Y                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];# g, Z( Z& U+ T
                                        exitg2 = true;
; s% f) I2 l+ ?                                } else {
( Y- H7 p2 A6 a4 Y1 l                                        ix++;; f3 m- k' |; C, i' M' r/ c
                                }5 D/ W4 r1 S* I1 S6 ~
                        }
; P$ X( _* J3 A- u                }# M5 }8 |5 u' }0 ~4 q
$ Y9 b& Y8 s2 I3 ~6 D0 Y+ f; b
                if (ixstart < 81000) {
2 B" K& Z9 M- D# h4 r                        while (ixstart + 1 < 81001) {2 ^, v9 j1 W* C, T+ u$ y: C
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {6 U# z( P# V5 T: ?9 o; U; {
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
' W1 A; R* R) e) i                                }$ O6 F4 C2 J4 g% d0 i. x
/ {( j- T5 N4 m5 K* A
                                ixstart++;
/ s7 Y3 n$ V$ ]+ ]! ~" Q                        }6 y9 `2 z! `7 z9 n$ r
                }( q. _: P2 y, [& d

8 G; @6 _6 e+ |0 ~  Z/ C' Q                ixstart = 1;, \! s2 ]8 M1 I5 F$ ^# F
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];; T7 \5 ]9 K% L
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
, a5 [& L+ ?! l; S                        ix = 2;
6 F0 V6 g$ F% M* T0 g( o( s( T1 G                        exitg1 = false;
% p; B+ w4 A. M6 {; m9 ?3 r2 n8 r                        while ((!exitg1) && (ix < 81001)) {# v/ r: t% @; j3 U) ^
                                ixstart = ix;2 F+ J. F- c6 k/ N
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ u$ e8 M9 ?9 d$ e8 j. u                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];; [( J; F3 o( n0 ]8 q9 Y, r
                                        exitg1 = true;1 Z) q3 [" p! D$ u
                                } else {
7 {  Z- }% J# O" l. U( C1 o                                        ix++;9 y# b, |  W/ Q0 }+ O7 K" G
                                }# c5 _1 e1 F9 Z& X% t" t
                        }
, x/ C7 M5 [4 C                }2 J6 Z; o0 p3 R
0 D. c4 ?* q' F& W5 W) r3 p
                if (ixstart < 81000) {
* H+ Y: r' ]. c. s( G$ p+ n                        while (ixstart + 1 < 81001) {
6 P) `. t" m" H( T# K, Q- F                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
1 I+ k! N# l  ~( V4 |                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];5 t* ^( d  ~# X) Q  L8 q
                                }) }$ r8 l. R/ [5 X/ j

$ R: ^. k' U2 G+ ]1 P                                ixstart++;
% f) i4 @# ~' g6 w. Q/ n                        }
' Z8 S( [  O, b2 Z                }9 X. Q3 {8 F- I! W/ u$ u, J

1 x2 O) {* J* Q# m9 K2 E                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);& g1 y$ |/ A& F% {, p; x' s
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {" J* m# h1 D. R* `
                        yiDuanShuJu_mean = mtmp;# Z) X: A- O3 u; q
                }
2 H: i# s' J# D" |6 X6 ?1 Q3 x
9 Z& S" l$ E2 D9 v% A% ]                /*  找出极值 */
. E8 J0 n2 x1 k7 n/ {2 e0 @                for (ixstart = 0; ixstart < 81000; ixstart++) {4 U4 P- w4 s" @& T* l+ }- W7 P
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;! Q: ?7 U  t, a8 w
                }2 e, c, y5 p6 S9 j. b6 m

( G2 s+ A3 i$ t1 q/ R+ S. J; b- Y        --------------帖子字数限制------------------: R) G2 q! H! x9 k5 |1 D! i
}
6 V: N% @2 r6 j4 k
4 E4 Y" ^5 l7 Y; `& i7 v& ]# B9 F& c: K! T

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-25 01:35 , Processed in 0.048569 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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