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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
5 V5 I: B" s. a
  E0 y# ?1 T2 c+ [; P各位大神:7 q: i" ~+ R5 N6 a8 z6 D
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)( s9 N. ^2 r; z( H9 q1 q1 D
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
6 w% W& s3 j/ J: F
, C. M% q& q8 `     
5 o* T4 s( @# T& s# V% V7 S+ K7 u这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
! q' ]! w' S! |1 @. Q3 W; l) r/ I) C
并没有其他线程0 v8 @; J, E  X2 n$ X% j
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
' l% D4 {( a* S. v也说不定是和堆栈有关系。。。。。。
- A; P( b5 E6 u2 e$ Y请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....' }+ f& E+ R; D$ S1 x1 n: h/ t' F

9 l/ k* Z  D. T0 n' q4 Z$ n% e- w4 s9 _" u/ o
# P& N" B; d2 y" I" E
我也很绝望啊,希望大神能帮帮忙,感激不尽,!7 e  K' q- F( C5 e! E
3 P" \, {& ^$ M7 O& L; C
! b. H) f' G4 g' v, K
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
9 w0 Z& ]  |+ B9 y        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。7 G/ O8 S' ^* u) S0 y6 ^

/ W; Z6 K  D8 _% K! l2 iboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
0 \2 a% j: g$ J, U* j                const double data1000[1000]) {
, F1 I" r! v0 h3 i4 \* z3 I/ p. b9 I. Q0 c' K
        int myfuck;
' H1 R4 W' H0 }& G4 {( b3 A! I4 d  S        double yiDuanShuJu_mean;: G0 j6 t7 H- Z- a5 U' ?( a) S4 H( k1 ~8 @
        double yiDuanShuJu_LowMean[1000];- j1 s; m5 u+ l# b/ I3 {, I
        int ixstart;
9 x  c3 ]  X" [# y, ]+ B/ G        double dv0[1000];
/ m4 M6 d4 \9 G- h. M" P  R  U) h        comm_AGC pAGC;1 \7 X( Y2 K  Z' N9 O  F) K
        comm_CarrierSynchronizer pFineFreqCompensator;% v' n# a" @* h% Q- `; ~
        dspcodegen_FIRDecimator pRxFilter;9 Q: W& {% h- C; A  \& G) H3 @: e
        comm_SymbolSynchronizer pTimingRec;6 M( K% f2 a* p+ U8 b% Y
        comm_PreambleDetector pPrbDet;
& H5 y9 v& |; C3 p% L        FrameSynchronizer pFrameSync;
$ c7 ^) n  \9 T" O( |        QPSKDataDecoder pDataDecod;, `2 g4 c) E; N' o
        static double usable_left_filtfilt[81000];7 `/ @( {7 p" R' G  H
        static double youXiaoShuJu_QuZhiLiu[81000];
& r1 E5 G) b$ G. U        double mtmp;% [! ]- V& L. Z
        int ix;
0 L8 @0 d* q' f        boolean_T exitg2;
( T; T. Z5 U) T  u$ A7 u0 T        boolean_T exitg1;7 w& A2 d* @7 _( I3 \. M  u
        double YiZhenShuJu[800];) l- H, v* D) k! Z8 p
        double dv1[800];! ~2 e* i$ ?5 K) X- {; @, {* ]
. N/ d5 \+ R& c: {+ b, l3 I

  }4 g- C7 R4 u. O' t- N9 @- \        double b_YiZhenShuJu[800];# s( A1 p, z4 d9 W) P- ~* q
        double I_filtfilt[800];
  x5 k) @9 A* Z0 z1 }2 `% O! c        double Q_filtfilt[800];% w8 F+ y0 [3 s
        creal_T b_I_filtfilt[800];  R' m) ^/ P% a
        creal_T b[800];6 z6 b+ Z4 Q& v; k
        creal_T RCRxSignal[50];
6 W9 Y8 `, o' }% Q  v        creal_T fineCompSignal[50];3 E) J3 e% f8 a1 b! ?# m0 r
        double phError[50];
7 _9 ]4 O$ C6 m  d6 K        creal_T timingRecSignal_data[28];
3 K/ ^8 a* O* x" I, {# {        int timingRecSignal_size[1];+ P6 m6 r! J5 E( y' v* D* y/ y
        double prbIdx_data[28];
  [  b% y, x0 i  B% ~        int prbIdx_size[1];
) ^- Y7 Q; `! {/ D, e" ~; m' t        double dtMt_data[28];* Y6 `& F! z  r$ o: D$ ^9 ]
        int dtMt_size[1];2 _+ w8 H% N" Y5 G/ d8 s1 m# {
        creal_T symFrame[25];9 R; B% ]8 X+ A* p, }; z
        boolean_T isFrameValid;
# B. ]$ q, ]" T; a# `! b        double unusedU0[3];/ }( q- B9 m; N3 K! t- m
4 ]6 Q- i, A' ]" T5 V( F) j% R- H
        //调试过程中的变量
2 _- O+ W% h- @# {- X        int  enough_data;3 a: o5 z0 K3 p" u! Z/ l' m
- r+ R0 h8 o8 r3 M" v* v+ T0 u( K
        int enoughDataFlag;/ q: H. O' [4 y, @4 x
        int yiDuanShuJu_mean_int;
& W+ _, D. y" B% A        int int_sum_dv0;
* J  b& S, j9 C: B& S        int oo;
, f* i/ W. V- j. Y2 F/ F        int ii;# x( S( ?- T. k+ P+ [1 F
        myfuck=10;# k, }& P+ p, l. _% _. h
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
; Q" r% n+ m+ |, K7 k$ ?        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */& y9 `8 ^! m3 m' T8 X& `* W
  h1 V# M& o7 b) I
        yiDuanShuJu_mean = mean(data1000);& ~; ?' Y+ r/ f& z
; z: M' e0 [% W, H3 s( e8 \
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
6 I+ c0 \2 T$ Z        UARTPutc('A');$ @8 j# b. G/ }) _2 V
        UARTPutNum(yiDuanShuJu_mean_int);
8 V0 _  H# b- k% H# Z: C2 v        UARTPutc('\r');0 _. @, R# u0 X6 r+ a2 r8 r# S
        UARTPutc('\n');
3 F. b2 e- M& b+ o6 y2 u1 U& C/ m; \. A3 n& e4 e# |- z) c
        for (ixstart = 0; ixstart < 1000; ixstart++) {
9 E& Q& G1 t0 z                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;% [7 N) l6 g. j3 c6 h
        }
& w) f. T, o  T, }- H5 F% h+ d( q
        power(yiDuanShuJu_LowMean, dv0);) O5 z2 E, p" K
$ L$ g7 H0 A. X- ^
        int_sum_dv0 = (int) sum(dv0);' e8 S- [! L9 ?' K: H' ]# y4 D$ \: h
: X/ O+ s" J, M5 p
        UARTPutc('B');
7 a2 N" i% S2 _9 @2 ^+ D' s        UARTPutNum(int_sum_dv0);
. @) x& B+ M( S9 x2 q. ]* k+ }        UARTPutc('\r');* L' V+ `6 ?$ q) z! Z
        UARTPutc('\n');( Z: S7 |$ N3 j5 B. T
' }/ |* d5 E( s- u; U+ `7 E
//        int compareFlag = int_sum_dv0 > 1.0E+8;) ^. s5 U* ~' k, j3 N) B

7 e2 Q1 i. Q3 O2 r# o) g        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 b6 Q1 z& W+ b& A% A* o/ \# l
                UARTPutc('C');2 O9 e7 Y) A8 D) w9 ^
                /*  比较信号能量 */" L. u+ X' }$ M  b$ N
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */, z5 t: C; V- ]! V) [7 M
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;! k1 t. l. x) C0 R  |. t) d
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
& n9 ]" u, r, y, E1 c0 m//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =5 M( n" \$ w* m. X7 S
//                                        yiDuanShuJu_LowMean[ixstart];, {+ U! {& `6 |( M% x3 p+ Q
//                }" k0 r) y* X6 Z1 [
//
  ~$ N! n$ S0 p- `! w+ @* e//                youxiao_k++;& Y- x$ l; N8 `3 c' Y3 v. H9 P
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==1 R# j, h9 x9 q1 p2 K$ h4 l* t
//                        /* 感觉要取21个数,即0-20, */
1 r5 \- s% n8 G2 W' Q//                        enough_data = 10;//有效是10,无效是0
+ |  v$ k7 b% R) t7 i9 C1 U* D. a//                }
- ~: a# J" V$ t1 t        }
8 T+ q7 G; a& L6 t) q( D5 E& o& q( E

: f+ n; k( p& G: q- {- \        enoughDataFlag = 100;
8 O" H3 i: p8 z$ E4 F( u/ Z8 S        enoughDataFlag = 1000;
# a0 f8 w  c( J        enoughDataFlag = 0x02;
# @' k1 w$ [1 G" T$ {        enoughDataFlag = 200;
  M% `: ~  ?& O) f# M$ _
# n- j7 e" ]. t) C! d4 p7 f# j        int myfuvk1;+ Y6 s" P* }  v  Y# a$ M% [
        myfuvk1 =11;
& v8 F* s1 V9 n6 u' r) C3 ]* V) u; @7 v# [* V$ F" K7 x

# q" ?6 _% a, {% ]7 h& m        enough_data = 0;
6 B  V# o/ w+ r! e& c# o* Q4 f: E' C( A" _$ u8 ]
//        if(enough_data>50){" `9 d4 a8 p5 s: d
//                enoughDataFlag=0x01;8 p! N8 Y+ l& @! Z- I9 J
//        }else if(enough_data<50){' b) O' y5 w! b# j0 V0 z0 O: S& ?# U
//                enoughDataFlag=0x00;//0x00还是不行
( z* r3 S( V5 Z' O//        }
/ G: D: [# K, L4 N; |2 H' w
" M' E3 x+ O6 {! k6 h
! U& x1 {% N) D1 Z9 `! N4 F        oo=10;$ b6 e7 O, y, {  h$ q3 I
        oo = oo  <  5;
) H- V" g5 K8 k0 p! x* e        if(oo){  O9 W7 ~- E8 M# i: G  `" _
                ii=0;3 c& S" i( E+ B! G. c1 C
        }
& j. j. d% ^- @" E' t        if(oo  <  5){
' L9 Z" \4 W4 h                ii=0;$ \7 p3 N2 y& [7 j) h5 \5 c
        }
  ?( R* n+ y- j: R' V/ P: N' j        if(oo  >  5){
$ F: X& d2 j1 m7 M& y                ii=0;, u2 a2 n9 V0 H. M% h+ s
        }
9 `2 W/ a! x  @+ p0 K% a2 c$ Y1 H! b2 P( p" t
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
$ T1 a% C! x$ g$ u        /*  如果数据足够才执行主程序 */" l3 T- e, u) q& o/ _3 Z
        oo = oo  <  5;/ W8 p/ N  n; Z8 @8 Z8 [
        enoughDataFlag = enoughDataFlag  <  5;
( R: {' |. Y" E$ |$ E( {        if (enoughDataFlag  <  5) {1 I* T# b& v0 M5 e& ^
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
8 V0 W) U9 q5 u1 A                AGC_AGC(&pAGC);
8 F0 ]9 C( Z* P$ Y+ Z" y: I
: z  t- C9 G* ^  l, [3 \                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);& w/ p8 B) z5 }2 ]+ E1 Q, `
                FIRDecimator_FIRDecimator(&pRxFilter);
8 `- u$ S# h# D& A8 H5 \7 N. u( B: b; e2 X" U- `, R
                /* Downsampling */
3 u- ^7 w$ F1 Z                c_SymbolSynchronizer_SymbolSync(&pTimingRec);% b- S/ Y" o5 `$ L

& G( o  x9 d% h# p# x4 [                c_PreambleDetector_PreambleDete(&pPrbDet);
+ |( w/ S* T. y* B$ ^& f1 }
7 \& I' D: q; c9 Z2 W* ^. O% X                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
& ]% m4 S: `' W: v" c9 q# @& k                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */$ x6 a, R" l5 ^
                /*     %帧数量=100 */
4 Z0 Q; g  ~: Y8 K                pFrameSync.isInitialized = 0;+ [9 s5 n0 [* C' D+ v4 C
: O! z7 D" ~  }! |  m
                /*  [EOF] */+ E9 {$ X+ t! V7 u' P( A
                /* 前导码长度是13 */
. f2 k* Z8 H- A7 M                /*    %qpsk */& S; b4 @9 L' @
                pDataDecod.isInitialized = 0;
+ P/ H1 Z) C( M4 I1 M% [
( S! V+ _6 c& M3 P4 X                /*  end */% S2 N9 G; I0 q9 h$ M( L1 x  H6 b
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
2 B4 i/ ?. B6 W  G                /* Convert 3-dB frequency */
2 X4 u( o% P' y2 L, u3 E/ x                /* Convert 3-dB frequency */) E9 J7 w, g- p# z9 W- l7 T
                filtfilt(save_buffer, usable_left_filtfilt);' G1 X; H# S+ N$ I5 v$ F" s6 S
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 f; }- ?- t/ c; K& P" I& E/ w' H                        usable_left_filtfilt[ixstart] *= 2.0;7 y& |  H! _& f- a) ]) b
                }& l2 Q2 V. o  ^) g. t
! o- c: i, D3 y) A7 j
                /* 注意乘2,处理幅度 *// I2 {7 T% r- h. x7 H) F0 o
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */) j# g3 F. l: j7 w8 \# K6 m0 o0 m
                /*     %% 行列转换 */
: w& @& u, r6 L, k, T                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
9 V  L) A7 g: A1 P/ y                for (ixstart = 0; ixstart < 81000; ixstart++) {
8 P  D3 q/ C- C( ^% f" I( p/ f8 p                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
5 A& t/ D" q* B% G* J! ?                                        - yiDuanShuJu_mean;' B; a' B* v4 \& Q" f6 z+ J: U
                }
6 G+ b* H/ W' ]7 _- i; d
% b+ E* q/ n6 ^8 p0 d! `                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
5 v1 \% x3 e- a% o                ixstart = 1;
( E- d& e- M! v8 S" {' o                mtmp = youXiaoShuJu_QuZhiLiu[0];
& N$ k0 p/ I  s                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {/ O7 |3 \* Y' b& k+ i7 s* n& }
                        ix = 2;6 g. o/ t2 C) g8 s
                        exitg2 = false;" f- b: ^- p1 v. U1 i. t6 j
                        while ((!exitg2) && (ix < 81001)) {
) W0 l" K3 R. X5 n% \6 C+ C: o                                ixstart = ix;
: ?" h- }5 i+ c- s' \' j. M! {                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
* N+ h% @/ W$ X. ^4 O3 x! I                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
, L+ L1 s3 {4 k                                        exitg2 = true;
, ~' l& r1 \. ~! v5 f                                } else {
  [" m8 \6 i9 ^; `5 _9 ~% S5 M+ |                                        ix++;
& a( m' }8 L8 z. z4 J/ e! G: e                                }
$ y' a1 e& D6 d. k% S; @                        }, u/ |2 c8 \$ v' s9 C$ {
                }5 T. D2 _+ q& \2 F: l3 c

( j0 R) a7 p( ?: b+ M) ?/ K5 c! @                if (ixstart < 81000) {
  _: g' w( W' S6 i1 s                        while (ixstart + 1 < 81001) {. `3 w6 H$ H( ~" P8 q' @4 i! |( r
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {9 U) M! T3 a# x
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];  l/ j" e3 \: I
                                }
$ o+ `3 u) K  M; _" W2 S# O$ A% ]% j2 _
                                ixstart++;. w$ o/ ~- j$ q( u- W; M. ~
                        }  B% K( I1 u  z$ j
                }4 ~4 |$ I+ t* B; A. G9 h

" p6 R, H# ]7 f8 `6 O5 K                ixstart = 1;
* |* j& ^, E( ~% l6 r                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
3 [2 F2 z. z: ~                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {) R& E! k; _" F% r5 J
                        ix = 2;8 S. r- r$ t0 J, n& l
                        exitg1 = false;
% E0 ]1 G3 O1 T* i                        while ((!exitg1) && (ix < 81001)) {
& O$ S: A& P/ E                                ixstart = ix;, a# O, J+ _& l5 X  i( T
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {0 e' t/ ^0 y9 X; C( h8 r+ Z  H. A
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];% T" z+ P* r  j( J4 b
                                        exitg1 = true;5 t# v2 r6 ]# F9 K: Z8 ]
                                } else {
( a8 D* M7 _; }                                        ix++;
1 I& p3 n$ X/ A0 C7 e, v* S9 V                                }
% V- H$ g7 k* Z                        }
  d/ Q5 z  K, B, S& }                }3 }) ]$ y3 G! x% R
* @0 U) t) U& K+ E; C; i3 i: M
                if (ixstart < 81000) {8 Y4 Y$ [* [4 F, m1 F: }
                        while (ixstart + 1 < 81001) {
  z. P+ c- B* I                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {; B  U: ^# w, }3 F% k+ E4 }  [
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
' F4 @9 q+ ?1 U* g( P5 y                                }
, [' O" L; I/ h3 g+ g' w) G& B; q% ?3 r. Y. W, H. y4 w+ P
                                ixstart++;1 J. @, e; \3 @( Y
                        }
  P5 @' _' v, _$ `                }/ b& p+ E/ T/ L
9 o0 T4 l. y3 _9 V5 U
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
! a6 v1 |3 w  p0 b2 ?" ]' y                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {+ V* p8 W- C% }0 K4 e8 ?
                        yiDuanShuJu_mean = mtmp;
4 P4 R  H% i9 f% w                }& d8 ]0 i$ `: l2 M0 q

' w! c$ a+ a: R% {/ T1 r2 ~8 W                /*  找出极值 */" I! \8 r2 `4 t
                for (ixstart = 0; ixstart < 81000; ixstart++) {
% w0 S/ }( b) z  G, A& d2 }                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;$ q- u/ J; w6 x' w+ n
                }- \1 D- m5 H% L" ^
9 ?! g/ A1 l. F6 y( y& U. |
        --------------帖子字数限制------------------+ s5 j# @% Y9 {! T% r, D
}8 s6 y5 e" i3 j, Q

9 Q' `. T7 ]( p( f; T5 Q# P' d: u9 Q4 B2 }8 V8 x6 \

本帖子中包含更多资源

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

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-26 21:04 , Processed in 0.042061 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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