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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
  b5 \  S6 h: k( t% m6 p- e$ C0 \1 _  x9 C' K4 Z$ J7 L; \/ n
各位大神:
4 F( h. H9 k" s$ N" n: h' a     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
- q3 j2 X  |* E5 \      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
, y$ B4 ^2 Q. o! m
7 @& q$ d2 \' h8 P7 s1 |/ Y8 w     , h; u8 J2 h2 m+ [
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
, K! {3 B: M1 U) [$ H# C7 |0 @3 F( ]5 \; m/ ]& u3 V
并没有其他线程
* M, D2 i# ~7 ~4 ?% k1 |% E反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
" d& D% ?  m/ k$ @! w也说不定是和堆栈有关系。。。。。。' L0 }4 P2 H. ]6 F) [6 ]# ^% _0 l" @
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....# B8 B3 [+ k2 z. f7 O
9 C4 M1 g+ e3 z9 A/ }# x( p

' a4 g. T3 A) u  j  j( X* ?! P' ^/ ?) A
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
: I. n  Q6 D3 o, D6 l9 m- L: j, F# {/ L# D

* D& s/ |" i9 Z1 B附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];) o( u, S3 f" l1 e& }/ j2 J
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
9 \4 ~. S4 n! V/ j# N# z: Q7 `+ J* d2 {
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(( u" F5 P) M% g% c: Q
                const double data1000[1000]) {( P& a) K: Q9 C, X8 T+ Q, C6 |3 b( s- g
: B( P6 i6 z$ K: L5 t9 N( w  X
        int myfuck;
" N3 B/ i, U  r6 O+ W5 c; n        double yiDuanShuJu_mean;) P# ^8 \7 _4 [. }
        double yiDuanShuJu_LowMean[1000];
$ T$ W6 q  m* Y0 F        int ixstart;. G. f. _7 l7 O
        double dv0[1000];
5 B3 s1 y; ~$ c0 E  V1 o+ k        comm_AGC pAGC;
. `6 ]# Q- B2 f3 c        comm_CarrierSynchronizer pFineFreqCompensator;
/ P4 t9 I5 c, a( ~% P! Z  F        dspcodegen_FIRDecimator pRxFilter;+ \6 ]( b4 n4 e
        comm_SymbolSynchronizer pTimingRec;0 n/ r; g/ M5 B  D
        comm_PreambleDetector pPrbDet;
. k0 t9 o# v$ v2 F2 f        FrameSynchronizer pFrameSync;5 E7 s5 b! C) g6 a- V" y8 C# ^
        QPSKDataDecoder pDataDecod;1 h. S- ^" M) Y# Z2 }1 i
        static double usable_left_filtfilt[81000];3 }$ F) Y# x% V
        static double youXiaoShuJu_QuZhiLiu[81000];
9 B# l' |3 D: E  {        double mtmp;; Q6 |8 w4 r1 I9 K9 `
        int ix;
; C5 Y( N* Q; f4 C7 o. _; r        boolean_T exitg2;) _& x; ~0 ]5 z8 F0 `9 q
        boolean_T exitg1;
6 i, C  H2 q9 U1 W4 _- z        double YiZhenShuJu[800];/ `1 g: v3 v4 o3 {" {, L3 Q
        double dv1[800];
$ z, \% l( B( y( g: J
! q+ X0 q' z$ _/ s$ C+ q
& Q4 {, ^( k6 s" ]9 W( }: t0 e        double b_YiZhenShuJu[800];
2 V$ ]: F: s, f' Y+ q        double I_filtfilt[800];
& U# G( _; B) ~/ R1 O        double Q_filtfilt[800];
/ D$ @! v8 }/ |3 H        creal_T b_I_filtfilt[800];& j0 Y+ \- P) {( x
        creal_T b[800];
  B; a8 G3 q( x        creal_T RCRxSignal[50];0 W5 z8 W5 |; w& Z
        creal_T fineCompSignal[50];
/ ^% Y  u5 r% s        double phError[50];
# i; Q1 t: e8 G: s5 I4 u1 i! S- O        creal_T timingRecSignal_data[28];- n1 ?6 v: F6 ?  h( H
        int timingRecSignal_size[1];
' p& n, F7 \5 q$ e% u' ?        double prbIdx_data[28];
4 @9 P5 W1 Y! Q0 X        int prbIdx_size[1];% ^8 S. e- B3 O, G0 Z: ?9 X
        double dtMt_data[28];0 V& j2 ~! Y5 X. j0 v
        int dtMt_size[1];7 U  \. [% {- p9 |4 d
        creal_T symFrame[25];1 F8 J7 R( {* m3 y( T& m1 @
        boolean_T isFrameValid;
% U; ~" I2 K" S% P, ?        double unusedU0[3];" \3 A4 P8 \: j* ?$ R+ H  N" m
1 s/ ~. r4 \+ D
        //调试过程中的变量
" \* ]- K* c! Q4 G        int  enough_data;7 p/ C' j" q/ u5 u' v! V- A
/ R7 S% q# H! A
        int enoughDataFlag;
9 l/ S/ B4 i% Q% |  c" Q        int yiDuanShuJu_mean_int;5 d9 F- s5 o+ \2 ]1 ^9 H1 \' S
        int int_sum_dv0;' ?, l' g0 N5 c9 b$ [" T8 e/ h( i
        int oo;
) C1 e9 G' p+ x1 \, [- X        int ii;1 k, ^( q8 |/ t7 a+ e/ }! |# t
        myfuck=10;+ N: T& ?; a& u) V& }% o; n
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
6 q- j, R; r' X$ X3 m$ j) O% g8 N        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
$ O  F9 O: x+ C0 S2 ]
1 j  {2 @; k* k8 y, @1 H4 N        yiDuanShuJu_mean = mean(data1000);
5 {) v" u+ [# v# e+ k# S1 {0 `5 j2 b( D( b& B6 ?* k
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
# {# V1 f, O  M+ X% `        UARTPutc('A');
' H9 F# o: a' m8 D$ d        UARTPutNum(yiDuanShuJu_mean_int);
+ n, K- b  x1 F2 I" H! y% f: {        UARTPutc('\r');
+ O& V* w7 n; }2 x; b# S0 O) g        UARTPutc('\n');; k) j6 e* J3 Y2 D  p2 A
- d8 z! m0 I7 Q; P% {) }1 p. |
        for (ixstart = 0; ixstart < 1000; ixstart++) {
! d7 n: X3 X! L9 b7 D+ b4 K* F; x, G                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;  e% |3 J$ R1 A1 Q
        }
6 K- D5 D; T* W& V/ D/ y
0 Q1 i2 P4 T8 h        power(yiDuanShuJu_LowMean, dv0);
2 h, j/ w8 o; D' G# k/ r( H6 C9 K. F+ x
; D# D+ z9 X5 X6 M. S3 e7 z  Q        int_sum_dv0 = (int) sum(dv0);
: `) o' G+ l. b/ n' {# y) `. ^
8 Q. s; ?" T) o        UARTPutc('B');7 r6 e# j2 f2 d9 X" s6 K$ }
        UARTPutNum(int_sum_dv0);
: W6 x9 L& c$ D& n6 d- j        UARTPutc('\r');
) ~! s& N$ Y/ f& x* s3 M" ]. @! D        UARTPutc('\n');' G; k5 F5 r# ~

) F. n7 h& o0 I//        int compareFlag = int_sum_dv0 > 1.0E+8;
" P8 ^2 A" L" B% [* b9 v, M* a$ z! s) E5 d& f
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?( P) ]3 H& {: H1 d
                UARTPutc('C');
& U0 y8 F# g+ ?& Q( M                /*  比较信号能量 */
5 s& ]" m5 ~4 i                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
. V$ L4 k3 Y3 e! [5 D//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
/ C, S( D- Y! c, ]: ?/ G9 q//                for (ixstart = 0; ixstart < 1000; ixstart++) {' S9 V& X! M; P' ]% |- v$ R$ u6 h
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
7 B& d! h  Q" k8 k0 S" {//                                        yiDuanShuJu_LowMean[ixstart];
% }- @" y+ h" K3 s//                }
, _; }0 n* n# _# o//
. e; {1 W2 S' y//                youxiao_k++;
7 \& z" \$ }9 O! U6 s- Z+ n//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
% w( N# W; J+ B8 G% {0 [//                        /* 感觉要取21个数,即0-20, */
! @* v1 @" u+ g# J3 p/ O//                        enough_data = 10;//有效是10,无效是0
) Z: e) [/ n4 V: U1 h  s4 y1 Z//                }: l% _7 i; I: o! ~, b3 W; a
        }
2 ?6 [/ {+ e0 @! O
! X/ S$ f& s6 P- \8 W- j5 O# |; k6 C4 K; C" j. D
        enoughDataFlag = 100;
( o* T+ L  G/ H4 w) o2 W. S        enoughDataFlag = 1000;+ F8 b% s# @: D  x
        enoughDataFlag = 0x02;
# x# }  d3 B# e% h, S' h# r& p/ e7 H        enoughDataFlag = 200;
& ]# j/ H. ?0 m! X7 J0 ~# V; n
, b; k% B3 j) H4 ]0 R9 D        int myfuvk1;
- v5 o" j8 U* C: w6 G) E" L$ p        myfuvk1 =11;
5 i  k' l( d# `5 `6 t5 A( [" S4 B
/ W/ q; n# S$ Q8 M
/ `- d& S/ v( l# }: _) ?        enough_data = 0;
" L8 _% ^7 x# x, B+ n
9 s, \! e7 M2 K  T4 O# n//        if(enough_data>50){
; b+ \6 Y' n; {- p: L4 ^* k& `0 O//                enoughDataFlag=0x01;5 Y$ X: ?) g# e8 Y  q
//        }else if(enough_data<50){
; o% {2 R* u1 g2 t/ i//                enoughDataFlag=0x00;//0x00还是不行/ j- t$ n( J! ?& c% ]% N$ \" R
//        }5 C! W0 h( E* H; n

" h% O& i) X2 e# O7 ?( v$ E6 `9 r+ C& f4 @; _- h
        oo=10;
$ @7 ~( U: h9 E% N+ K* J. ?5 R        oo = oo  <  5;
( k2 K6 P8 M( j; L. C        if(oo){
5 f. w- n9 }( ^/ i% o$ [0 ~  v  _                ii=0;" o( L6 C. m- P9 G7 p
        }
" `; |7 t- w. E: i        if(oo  <  5){6 ^3 U* E: O+ g: f" R0 E! Z: v
                ii=0;+ c; a/ k8 {' b- G' ~" h0 c1 \3 Q
        }# r! ?: F6 P! N/ W* p
        if(oo  >  5){
6 _7 i  q( f! F9 V! b' J/ a, x3 K                ii=0;1 q/ O* k/ `2 ]) W
        }
8 o6 x4 i+ M0 B7 o7 M" g) @, K+ C: P) I
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) G2 E7 }$ ]+ R) F$ K. U' N        /*  如果数据足够才执行主程序 */
3 q; o- }' r$ K; z) p7 J        oo = oo  <  5;
) t# W! q+ r! t        enoughDataFlag = enoughDataFlag  <  5;
6 D6 F" [, n6 m: L; r; V        if (enoughDataFlag  <  5) {5 I7 G: W) r4 U$ c/ r( h
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是01 P1 n( R- f' E/ [
                AGC_AGC(&pAGC);) j$ p. n* K) X5 R" X5 Y0 g
8 N, }( B5 z5 d  {; w, c
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
$ O9 ]  A$ i* c5 Q2 U4 n; c+ J                FIRDecimator_FIRDecimator(&pRxFilter);
9 m# n+ \, }7 Y/ {7 e5 }! m% z! C" ~9 v' m9 v( [, b" D
                /* Downsampling */
2 W6 Z( g3 P6 `5 S3 O0 j                c_SymbolSynchronizer_SymbolSync(&pTimingRec);  Z% K+ z& m! Z

+ y  h, j% g: V5 _+ [                c_PreambleDetector_PreambleDete(&pPrbDet);- V/ P  R  Q, q+ o, L

+ o' |  _  s6 w6 p/ E                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
+ H1 t5 G( q/ Y% |1 j$ J" u                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
$ B, m! _( U0 j/ U  G                /*     %帧数量=100 */
( \% [( H. k5 V5 s5 m( |2 ?                pFrameSync.isInitialized = 0;
- y  [  a, L( ^
) }& y7 D8 I# h                /*  [EOF] */
0 |% _% `! ?+ @- U                /* 前导码长度是13 */
$ S' s1 n# ]: Y; c, c                /*    %qpsk */  t" W& O, w) ?8 X8 ?( N
                pDataDecod.isInitialized = 0;
, a7 H. a) W: A. I" S+ D# O/ \, R* V2 q. f: B7 W
                /*  end */
$ ^$ M! O$ a4 n6 m/ s" T                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */7 j+ z$ v6 _! `- u' R# p
                /* Convert 3-dB frequency */. @6 y" ^5 {7 p& N
                /* Convert 3-dB frequency */, I" T" ^, u# n. y
                filtfilt(save_buffer, usable_left_filtfilt);
1 r! s+ @) ]/ n( p5 {1 r; \                for (ixstart = 0; ixstart < 81000; ixstart++) {* k9 E2 |9 e( k8 S' L
                        usable_left_filtfilt[ixstart] *= 2.0;. g+ k1 @. g' ?, Q& ^
                }
/ C. g: j- C- V( o/ v! n
+ M# b$ C7 E: D2 g6 F                /* 注意乘2,处理幅度 */( n4 a" x! H( t$ A; F; l
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
& B' }: C$ C) `: }* i                /*     %% 行列转换 */
7 Z% d' q3 Q6 \' ]/ }0 o* `                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);3 S. V$ T- ~0 ^0 I. c  l& l3 C
                for (ixstart = 0; ixstart < 81000; ixstart++) {5 s! J! T* t* L( _4 j
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
/ g: d* b6 I: w& O% b                                        - yiDuanShuJu_mean;
' k" V/ _( y) K, O4 ?( X6 x4 Q                }) [8 u* I! L8 w! L
$ J5 F$ S( b, [# v6 S
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */% _5 J1 `( b. z. n3 O' R
                ixstart = 1;4 l6 o" X+ n6 t$ J8 }
                mtmp = youXiaoShuJu_QuZhiLiu[0];$ z! g, d- u3 F9 I. M
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
/ c* l  D3 [: v/ H/ w                        ix = 2;% a4 g$ }, b' w' P, V
                        exitg2 = false;* `& e4 U! q& D3 q/ r0 j
                        while ((!exitg2) && (ix < 81001)) {0 {" x+ I& m6 ^4 ^( C0 b
                                ixstart = ix;
# j. N, z! i& _* v0 n                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 Z0 L0 j& f$ a                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];! I  n2 @# c  m: Z' b) L
                                        exitg2 = true;( l: P/ n$ e# A: u. A, }
                                } else {6 u: Y8 p& U0 I
                                        ix++;8 S* e% S2 G' W- i
                                }# u: G+ c3 S0 b( |$ k2 x
                        }/ `0 g8 n/ I% ^) f9 F# h! r
                }* I% a& I( i% X% a

! [. G2 M* @6 G                if (ixstart < 81000) {$ L- O9 k+ M6 M3 k/ q7 Q6 ?; c/ w6 _
                        while (ixstart + 1 < 81001) {
- A. {* ?1 W% }2 y6 w9 v# m( o                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
* `) e, U+ s( _1 B! m- f: [8 I                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
' D( D6 n! G8 V3 _* g                                }
# L% m* ^  _9 O4 H( F6 L0 ^' D% e
! D. ?& O. s' j8 }& Y                                ixstart++;2 ^! L% C2 H" y; b* Q9 F/ n- E; q. _
                        }
" y+ |$ p" T+ V' T% A                }* L! R  F. W1 f* B, ]3 x$ @. }

( v4 D$ j$ b8 o                ixstart = 1;+ H8 P* U, c/ A  b
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
$ B9 j2 L; u; k# \6 e3 L  x  D9 \( {                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {( E( j) o3 F) z
                        ix = 2;4 p* m9 `. w5 z2 s
                        exitg1 = false;* M0 i1 ]6 A" Q. M: [% g
                        while ((!exitg1) && (ix < 81001)) {4 Y5 Z7 r+ n! P) b! ]
                                ixstart = ix;
) A3 v) I  u- t" |- W  h4 I% U                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; e7 d: p5 _1 Z9 r+ o. W                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
& u, t4 k6 |+ Y. k: N* W                                        exitg1 = true;
8 i& @8 }4 i7 f                                } else {
( Y1 ^/ t9 O7 N/ M! H) C/ L& W                                        ix++;3 [: R7 X: h% f6 v+ j- \
                                }+ w3 j# y5 G+ g
                        }0 D/ n; A* d) p8 i8 A' B& r+ G
                }
- ~  e% L$ N! _" e! _2 b  Y/ c/ `1 U1 U) P; V) T8 s, }
                if (ixstart < 81000) {: t! W% O4 R" x" _) \* e
                        while (ixstart + 1 < 81001) {
% q' O; O) ?+ e, I- H9 ?% U                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
$ t* S* Z# |" G2 H                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
) P9 f, ~' k7 z7 r% ^                                }1 [: S! t# ]% n

; p4 `: T) t7 q9 V% f                                ixstart++;0 F( M0 H. Q' I) v( B
                        }
, l" H5 x: |0 x7 ?- u# L; y                }! @: D0 E& j8 b! G
. }0 O4 [8 ~( D! L6 [$ e
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);9 U$ l9 v% R4 {$ D# j0 P
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {! b$ A" E% g. Y8 F
                        yiDuanShuJu_mean = mtmp;
$ \% d% G# d3 i8 G% V) H                }; p5 L; s; u; ~7 u2 U) J' `. e

4 E$ T. u  {  r3 `                /*  找出极值 */. P. H. K+ o7 S4 O5 ^  m8 p
                for (ixstart = 0; ixstart < 81000; ixstart++) {
7 @* X' S& C& y" z                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;7 z. b! c+ J% j% l0 b$ k) _' V3 c
                }8 o. u- `2 O1 c/ d0 G" _/ K) ~
  [- A9 z  w  b, j+ C$ |
        --------------帖子字数限制------------------
4 k. e0 L/ G$ X/ s9 s) p5 u+ F/ Q}
/ p7 f7 Y& ~3 y% z- G: E6 r' {
- `4 e- d9 o0 J8 O% L( Y
' \; m$ ^3 D- C' c- S1 {% P

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 20:13 , Processed in 0.049286 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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