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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
% J* ]& f7 U  ]& Q) f8 r3 o8 }7 A$ B) G! S& @& q
各位大神:0 V. [  z$ i5 v- N
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~); _/ x' o; A. s! p9 f1 m2 s  [* {6 s: ~
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:1 D$ p8 R' q/ @
* Q" `1 K2 e* W7 h2 [  c6 w" D
     
4 r" P$ I( t, s. D这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
0 H* h- W6 K* w( L% r1 r% q
3 D4 Z2 K5 A; u5 ?. w并没有其他线程
" {- Y2 A! J9 i5 K$ F$ m反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
" q! F7 O: Q5 f$ {; H1 K7 h5 @5 `也说不定是和堆栈有关系。。。。。。
' f' \8 c8 J3 Y1 j* O0 }! ?请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....4 e- k# a4 I. i/ L0 g
) w6 ?8 e/ z! g) t
4 {! b& E0 g, s+ \
+ o0 o+ i! ?) v9 n& J& j
我也很绝望啊,希望大神能帮帮忙,感激不尽,!8 D  Q( [6 y+ j' V) V2 h' x+ ^# v, x

0 d! o3 L; ~: |$ v' t" }7 M2 v8 [1 Z5 ~7 {
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];7 {2 N+ N3 q7 W
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。1 o7 g3 x6 ?5 b! C! m. N: Y& A
- T# t( I; I2 a
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(' P7 O3 q% [+ _& x4 p7 K
                const double data1000[1000]) {0 |+ y+ T- M- V  b8 T$ X8 N; B

# p+ a8 n1 K) C8 P; d4 k/ L        int myfuck;4 R- g) K/ ~1 @  y- \2 W2 r+ K
        double yiDuanShuJu_mean;  z9 X9 Y2 ?- b8 r& G( _+ q
        double yiDuanShuJu_LowMean[1000];
3 c3 b7 R2 w/ X- O$ X$ {        int ixstart;* E* n7 Q. C$ Y( x- G' M2 Q% e
        double dv0[1000];& x8 V2 u2 H* `2 d" s# n
        comm_AGC pAGC;
$ h( {% M( y1 i- W$ s0 }; z' p' c        comm_CarrierSynchronizer pFineFreqCompensator;
- e" _" w7 [4 c  c* A        dspcodegen_FIRDecimator pRxFilter;
  x* \9 Y- T6 |2 v        comm_SymbolSynchronizer pTimingRec;, t7 u: K: U/ L) X9 t( H4 S
        comm_PreambleDetector pPrbDet;
. C2 p; ?' ^+ U        FrameSynchronizer pFrameSync;
: D, ]& U8 {7 C2 d9 L        QPSKDataDecoder pDataDecod;
# y/ K. m* e9 J) t        static double usable_left_filtfilt[81000];
2 f3 M1 h& W  B+ K0 O+ F2 R# N        static double youXiaoShuJu_QuZhiLiu[81000];
! C4 P5 E$ T1 i: i7 U        double mtmp;' w4 z9 Z) l9 k6 M2 A
        int ix;
7 g4 ^& y7 k) q: m1 n5 a        boolean_T exitg2;; n  ], b$ Q  M/ G6 U- Y
        boolean_T exitg1;
, x, o9 n& I! a4 V) f+ U        double YiZhenShuJu[800];& h  W  ~6 ]4 I5 ^( t( B
        double dv1[800];2 o+ J/ B/ P9 }

! e5 ~# H( G2 E* ^7 B
+ D% F- E' d/ B) Z        double b_YiZhenShuJu[800];! K% `7 y/ t: H6 `& T, K  C* }& e
        double I_filtfilt[800];, x8 {) X7 G: c4 a, K2 s3 P
        double Q_filtfilt[800];3 D  T+ i/ r5 z) W6 ^
        creal_T b_I_filtfilt[800];8 g& ]0 s% n1 g/ a6 x
        creal_T b[800];8 G7 |8 g- D2 y1 [
        creal_T RCRxSignal[50];
: O( r9 h8 @& M; J        creal_T fineCompSignal[50];
4 |0 T7 h; A' f        double phError[50];& {6 k* ~6 d# @1 z& L; _# k
        creal_T timingRecSignal_data[28];
0 m* t' M# O. f2 D" L; b: L5 l        int timingRecSignal_size[1];* k7 t' K. v/ @8 ?' ^
        double prbIdx_data[28];
' ~/ T7 }3 Q3 ]: _/ Q/ J* l$ {        int prbIdx_size[1];$ R! p$ u* s( W6 q% Q
        double dtMt_data[28];
! h6 a) P6 ?+ ]2 r        int dtMt_size[1];
' a7 t( c2 M- ^6 b: H8 R4 D        creal_T symFrame[25];
" i/ f! p) ?) R: `  [        boolean_T isFrameValid;
) Q2 D/ H) p, @! n3 {: i        double unusedU0[3];
3 M1 Z5 [( m/ s6 r2 T" N" L# V' B$ R" j3 ]3 T% `% H& S( H
        //调试过程中的变量' G' n9 ^/ @3 P; o5 L2 d) e
        int  enough_data;
8 {1 k' j- R; h" N7 [; g% E; ^6 U# K
        int enoughDataFlag;
" m* N7 Y( B9 I) L0 J& e7 I( S        int yiDuanShuJu_mean_int;5 R( s) I7 @$ O- l
        int int_sum_dv0;
2 D5 W# b( }& }# d  r/ T9 D# @4 P        int oo;- E  R# s! n2 X) `6 X6 {9 y
        int ii;
3 J- f' T7 M5 _' X! t& W; ~        myfuck=10;
0 ^  a$ p' G4 ]: s1 E        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
+ X. R$ G7 D; B$ b) }0 A        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
  E5 Z0 V: ?- j
0 v' J% N- b1 e% O3 i  i& G! G        yiDuanShuJu_mean = mean(data1000);. T( x/ @5 F. M4 D
' v! Q" y6 N  w
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;6 m$ x0 i: f, F, {' M
        UARTPutc('A');; X8 Q3 D6 A+ S5 @; y
        UARTPutNum(yiDuanShuJu_mean_int);1 V5 ]2 s; d! T- ^! m
        UARTPutc('\r');
3 j* Y* N$ [: `        UARTPutc('\n');
, U  M& j3 h* M+ I5 P) S+ H1 m" [1 d5 R% N+ o$ h  k! G/ d: T
        for (ixstart = 0; ixstart < 1000; ixstart++) {% `; x& S3 h& B0 B
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;1 N; N! a. B- S+ t% {- N
        }# e% t& B' G! K! l* O* o

( |. w+ R' q* h" @7 T* F( ^4 b        power(yiDuanShuJu_LowMean, dv0);
. ]8 E  ^" N) L' b+ _' [  g" v6 j  w) m4 q! }8 Z# _' M
        int_sum_dv0 = (int) sum(dv0);
# X5 l$ p1 `& W. V. g% _/ c8 ?7 p& p" f3 ]) T# F
        UARTPutc('B');# a9 M8 @7 g1 N
        UARTPutNum(int_sum_dv0);
' m  \$ l* P1 z3 n/ o' r! X        UARTPutc('\r');
6 W1 d" i, i0 U/ n& ~$ i        UARTPutc('\n');& F7 `* p6 P7 y
' T1 v% L3 V2 C- n  m
//        int compareFlag = int_sum_dv0 > 1.0E+8;
7 z1 E7 L7 n, a, U. b& l1 B; z/ O% g2 A
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
( N3 P# i) S0 t; o$ T, O                UARTPutc('C');- \6 b3 c' f* |2 ]+ @
                /*  比较信号能量 */
( s! Y6 _8 P/ G8 M                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
6 u9 `) _, I+ O6 |/ v7 T# s7 ~//                yiDuanShuJu_mean = 1000.0 * youxiao_k;4 n" @) v" B6 o' p: x
//                for (ixstart = 0; ixstart < 1000; ixstart++) {: Q: v$ ?. B# m. ?5 D* F" k5 o
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 g2 v8 w, U' s3 z1 M
//                                        yiDuanShuJu_LowMean[ixstart];
7 }9 d; T& P! |  G4 p% T//                }
9 ]2 ^/ L! }, o//4 h/ _* S5 M6 V
//                youxiao_k++;' G% d& N9 y7 k/ a
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==# V: q0 B9 V2 f6 @
//                        /* 感觉要取21个数,即0-20, */
$ e, o0 m" x. K1 R+ ?9 _; z//                        enough_data = 10;//有效是10,无效是0, F; A' \( J: U) e
//                }
- R) V2 T) L. k5 |        }4 K8 g9 g* n. B; D& j; B! D

1 F( s7 y# Z; x7 u3 p7 s* E
( O/ B* @% ~# l        enoughDataFlag = 100;5 X" c0 f2 [/ r2 h  j; y, R
        enoughDataFlag = 1000;
& ^- [) h, ^" [7 B" A9 {2 l        enoughDataFlag = 0x02;' @% I  E$ R; |9 w6 c" Z1 s
        enoughDataFlag = 200;: c" S% }6 P: r. g! M. X

1 N8 Z6 i  m- E$ U        int myfuvk1;
+ s8 P5 }  |7 F        myfuvk1 =11;# Z  g/ P# b4 b* P0 I+ P
  e! x7 q  q) X) r8 v
6 }7 r0 s* Z) I" y5 n
        enough_data = 0;
7 X% K: \* ^) X& ^, T0 u
; S4 _) U, {" |# b* w//        if(enough_data>50){
+ l" o; i  u4 n4 S4 C# e- K//                enoughDataFlag=0x01;7 h) R% m6 w6 C. g6 L# G9 t
//        }else if(enough_data<50){5 \( u* g2 A- L( q7 A
//                enoughDataFlag=0x00;//0x00还是不行
4 v) q: w6 G1 S! v//        }
9 g# k9 o, ^0 l8 y" s; {
/ A+ d: c0 u! H! j, b/ Y9 r) g& o+ c2 ]  p  x( \  f5 f. d
        oo=10;$ V9 w* v5 r8 V2 R0 ?  ^' E# K3 D* k
        oo = oo  <  5;$ u" W" \6 H5 g9 q) r' K7 s
        if(oo){
7 E& T2 B& C) {- d5 l$ g8 W, D3 {                ii=0;& {+ r6 Z. Q% L% o+ K
        }4 Z7 s- v- s2 F, s
        if(oo  <  5){0 s( h; g& ~1 V3 t2 i. t" Z- i
                ii=0;
* g/ [% p6 u$ e( @        }
4 z* t! w- c. v/ W$ C  ~        if(oo  >  5){
3 `, C0 W9 Y5 t. F8 N7 ?- I' _) b                ii=0;
( e1 s  |0 ]5 z" E4 h        }, f* M( L  R# r* K! C

. p1 ]$ \0 ]0 n( V: V6 K& F( H        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
; z3 I# g; d8 w9 G        /*  如果数据足够才执行主程序 */
! C$ o4 W$ ?! ^6 V! E3 _        oo = oo  <  5;
5 ^; e7 W9 K( G- L; n- ]" f        enoughDataFlag = enoughDataFlag  <  5;+ H$ |7 h0 C" w
        if (enoughDataFlag  <  5) {
& c3 c! n) `" O) D8 r* S//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
. u4 d7 Y# i) W                AGC_AGC(&pAGC);$ T4 M% P' S- s/ M0 S3 q
% M& N0 i3 j7 V3 {) p2 E7 D
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 H- X$ |( y3 L: }; D1 q# J: h
                FIRDecimator_FIRDecimator(&pRxFilter);
7 C$ w0 L! I! A% M# _  ]! P  |. c" G$ ], Y0 V9 G
                /* Downsampling */# R3 G) r' V- G& E. B: ^" Q: t
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);# r' D# k; q( N: Y" L# `
, s# @0 W) f( J3 T* X5 A
                c_PreambleDetector_PreambleDete(&pPrbDet);0 M6 |2 O" S% X2 N. R8 [6 ]3 ]

/ ?2 H# \0 A' S. \* [) r                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
# O9 O: S& e" ?; U% _. ~/ w  U                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */8 J) u3 d- g+ d4 |
                /*     %帧数量=100 */* V% W% ?  k7 a1 U6 r' P0 k
                pFrameSync.isInitialized = 0;
( O& a- O) c8 i. k+ K* @( K* M( s
- \% ~$ l6 A3 _& X' L9 f3 O                /*  [EOF] */# L/ `9 x; e$ F2 f; p: \3 k! j
                /* 前导码长度是13 */
5 f; c. J. }' m- R                /*    %qpsk */
6 u! V% v1 H1 P* l; D                pDataDecod.isInitialized = 0;  D& m& u9 b8 P5 ~* U6 r# u
) A0 N" a, {* f4 d# N. P. _
                /*  end */
( [  F# F& ^) ]/ d                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
8 {: e1 ~) P2 S( q( |) n                /* Convert 3-dB frequency */
6 b+ X# ?, g5 d3 h                /* Convert 3-dB frequency */
  Z9 W0 U. I* T- m0 \. v                filtfilt(save_buffer, usable_left_filtfilt);
4 e' q" s& u9 n0 I                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 L5 r( t, E9 V2 ^1 S                        usable_left_filtfilt[ixstart] *= 2.0;' ]1 t1 l& R7 f6 K9 l1 I8 T) `
                }
# K* f' g# d/ N' U- U$ B" E5 O  {. m) P. ?( ]( E7 f( ~0 u
                /* 注意乘2,处理幅度 */
  s4 r: t3 f3 T! H                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
+ _( m% @/ B: b9 r' s$ |' I7 b, N                /*     %% 行列转换 */) ?: h" h( R/ E4 z6 H
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
3 K6 C: ?' [: n/ B% ?3 O- O5 ~                for (ixstart = 0; ixstart < 81000; ixstart++) {
+ r, K: ^! ]1 t0 B                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]; E+ ~2 t: g2 I+ [& W+ o4 l
                                        - yiDuanShuJu_mean;
. l+ B# J( Y- i# h                }
9 d/ w& t% K( }) l% L1 u" U. o5 g& r6 J
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
! f8 y$ [$ w3 i* I9 }: b                ixstart = 1;
! K, x1 t! M3 ]& b) u& Z3 {                mtmp = youXiaoShuJu_QuZhiLiu[0];
1 L! _. H$ K% a% _                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 ~* `; b2 j  ]4 `/ D) h                        ix = 2;/ n2 B, Q8 @  i( ^% g
                        exitg2 = false;4 [  \0 @* U; R
                        while ((!exitg2) && (ix < 81001)) {) I+ ^* c/ z0 b5 a$ c) _
                                ixstart = ix;# }# ^* O. i% }6 J+ m* H
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {$ q+ k- c2 x0 d! Z6 k' E# Q8 }, ~& D
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];+ |) f& R/ E; [7 j5 B5 I: n7 ]# t
                                        exitg2 = true;6 Y$ [2 B. w. a, C' m. b/ ^6 k
                                } else {
- Y6 z/ I8 }. b5 K6 W8 m                                        ix++;; F8 [- U! b* k( k
                                }# j" i1 E% {. q2 f! y
                        }: U: C/ A/ J$ J3 j
                }
) V4 B( J9 k7 K* w7 ?
8 m% c; P8 ]7 G# B# T) E                if (ixstart < 81000) {
! g$ o. i) w; u& \5 x; e, b& f- u                        while (ixstart + 1 < 81001) {
# }& F5 i3 M. s# l# z                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
) c  j1 f( y9 d* b/ x! \                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
3 [1 Y# {5 U/ E' y, x- L, \5 c* d                                }, r7 t0 p! z: d% R( H9 H

: E; v8 T: n3 x! [. |% Z+ O                                ixstart++;
6 A) w) V1 r6 ?  f- A! q                        }7 G9 t% G9 b1 N- B" y; W- ?: W
                }9 @3 H; T! S7 a
9 `; N; T! w. W& o$ x8 z0 M* b" u
                ixstart = 1;
" f7 c$ Q2 A" U  \+ Y                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
! L* x# Z5 ?; O" T7 p& `                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
! v7 n/ t( Y5 f! P3 l- @                        ix = 2;* D+ E) i( o3 J; `5 Q
                        exitg1 = false;
! I0 q( U6 Y( A1 R1 S                        while ((!exitg1) && (ix < 81001)) {
% N" s; x7 W7 S* G  @. M                                ixstart = ix;
; j  m* v. B; B, s  }! \                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {7 F& Q; H  C( [& a0 V; e; S$ D
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
, d) J6 M5 t7 g                                        exitg1 = true;/ M" r" S8 X( Y4 C9 e& v5 l! B
                                } else {& K! Z8 C7 @! h* a) d1 E/ R
                                        ix++;
! m6 s  x3 ^9 o# f6 X                                }. r$ {, \( s; x+ O+ O2 G+ O
                        }
9 V) F; ^* F/ T$ l6 c9 O                }3 g# b) W/ C* Q, Q5 }/ Y
- Q0 t) Q5 k, L# T* F- q- B
                if (ixstart < 81000) {
" I, z2 |, O3 _8 d! h                        while (ixstart + 1 < 81001) {
1 R, S& O: V6 l5 @/ r                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
2 Q. R8 c4 e) l1 {" h                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
5 m( i( ]: j% G9 U7 d) D                                }4 n7 P. m& b1 i* a9 y
4 m. g  `4 U) n3 T1 }
                                ixstart++;  j) i, V. E& f  Y+ a
                        }
1 `5 O7 u: K" Z) T' i                }
; x* J( N  e) {5 U1 H, J! C3 D+ i5 I
% }+ S. {9 z' V! O# ]                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
1 K5 x/ V7 i" d                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {. E, {$ w7 O% l
                        yiDuanShuJu_mean = mtmp;
0 J) ?. ~& ~9 A4 x' Q$ _                }# ^7 R$ s  h1 f; X1 g

: w  i( g; u. N! l. w5 v5 Q! ^                /*  找出极值 */
5 V- a+ \6 v, N! }                for (ixstart = 0; ixstart < 81000; ixstart++) {
! ?' M1 s$ @, ^  ?                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
. r! n2 `# u# L6 H; M                }
: C9 v0 F: H3 A2 u) e. `6 y- m$ h* V1 [* M4 x
        --------------帖子字数限制------------------, y) F! F# [) S4 S, `
}8 w' G; |# Y9 e* _' N- M/ }
& o/ K3 ?( K0 B" A4 ?

* r  G( i9 D8 w: \: K# m9 C9 w* H+ \

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 04:00 , Processed in 0.049245 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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