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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ) W3 y' t4 F2 S- G  J

5 Z* o' ]1 r$ H! I! V* u& V各位大神:3 N; m" `6 d7 U
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
; ?* C2 E% ]" v, x5 g2 n( y      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:; t5 ~* n: y" h( J% ~& q+ l1 Q" d' U

! K* p1 x8 t+ f( k* F0 ~. f     , w  R3 J3 e$ z9 N
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
9 o. B, H' D- ?) @9 a
7 p7 s+ i% Q9 q* [2 X7 Y' j5 r. `并没有其他线程, }/ ~; A$ v! Q! d. N6 V6 B/ c0 k& _
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。8 `) R& {+ m8 U% ^1 m% u* X8 P
也说不定是和堆栈有关系。。。。。。
% y2 e  y4 {" W2 q: j4 A请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
, q( E3 Q$ i$ b! Z- [/ J! \% ?4 U5 k, Y4 \5 V3 W, ]2 J! \9 c$ F

2 D% b+ {% T$ h+ @5 Z* E' W. h" I& y! N! V
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
) q! o% H1 {( ]2 W5 O5 U4 X* z" f
' \, _, U% ^6 O& u/ q3 B) g- M  e* s% R, P! j" U( `% E/ }
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];" G9 M7 a, k5 R8 J( N
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。2 z! n* l8 W  R2 Y- |
3 [& _1 [' ?4 L# l+ j; b! j# d
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
6 e- e; h& \* n                const double data1000[1000]) {; Y: k# e% P& l4 T' w) \. o
3 R' N7 H& a+ g$ n, O- P5 K
        int myfuck;
7 ?8 E8 V9 V- @( ^8 b( v        double yiDuanShuJu_mean;
6 z6 \; u7 H. H8 H0 w        double yiDuanShuJu_LowMean[1000];7 K3 a# y) T* `/ O# h3 K) T+ U5 m
        int ixstart;( r. t" W& ~- P2 q! V
        double dv0[1000];
6 G: ]1 Q! ^# Y) v        comm_AGC pAGC;  ]* t8 G1 d) }6 T" M
        comm_CarrierSynchronizer pFineFreqCompensator;
& v  y( S" f9 ~0 D6 P! }' b        dspcodegen_FIRDecimator pRxFilter;3 u4 B$ i+ l0 z; ~0 f
        comm_SymbolSynchronizer pTimingRec;6 L" ?2 Q% d  S0 _" n" _
        comm_PreambleDetector pPrbDet;- x& Q* r& a# _( P5 ?
        FrameSynchronizer pFrameSync;
+ v. x% C4 ~+ E% J% i        QPSKDataDecoder pDataDecod;
2 c- M8 J' b2 N6 E) i- y+ O2 |        static double usable_left_filtfilt[81000];2 c! _2 C  [1 q" V) \) N0 m
        static double youXiaoShuJu_QuZhiLiu[81000];; w" I) x+ n* r$ g7 t! w" K* _
        double mtmp;
5 }' R& ~7 `# [* k" S        int ix;
" F2 U2 H" m* Q        boolean_T exitg2;6 V7 U3 k  V# D! w5 K$ Q
        boolean_T exitg1;8 x( Y2 s- G5 @8 V
        double YiZhenShuJu[800];2 o9 i9 `) K. E% k% C# z
        double dv1[800];
0 _1 F: E% N4 C. H# h7 ~+ J3 n$ N4 I, k3 p, O+ S+ P) ^. `0 U
' Q' d( O( h% t# ]: L3 m
        double b_YiZhenShuJu[800];/ ?, P6 S  R% L7 N' N
        double I_filtfilt[800];0 c4 g9 A5 i8 o. Q2 s+ h
        double Q_filtfilt[800];& o9 [9 z; t( l
        creal_T b_I_filtfilt[800];  }+ m  B& b4 x$ a* F6 @
        creal_T b[800];
0 w& q' Y9 K# a' c        creal_T RCRxSignal[50];
" ~7 t+ E  Z7 @* l        creal_T fineCompSignal[50];
$ R0 W% Z/ l* b& v9 i        double phError[50];! L) q. J% \" k6 _7 N/ K. q
        creal_T timingRecSignal_data[28];
' I$ p5 g* @7 D0 d% Q9 @* m        int timingRecSignal_size[1];+ j; p. S1 L) z; a! O
        double prbIdx_data[28];& i) `( @- v8 Z0 g
        int prbIdx_size[1];
" A$ v" Q3 S. q+ D- Q/ |& O1 R: \        double dtMt_data[28];
. h% \; g  l3 B# X; P/ O" S3 d        int dtMt_size[1];
, t+ Y$ Z* Y1 B( |        creal_T symFrame[25];2 K2 s  D( i5 h+ V, n  J
        boolean_T isFrameValid;
' L- H) q" O: A0 u) K        double unusedU0[3];
  t3 {& G0 z) T! W
; E, K0 S: i* _1 J: N) \! U        //调试过程中的变量
. F" K0 C1 m; y8 v; h        int  enough_data;" ?" ]" k& a8 B$ U# [
' H; D# |: e6 M6 J; y
        int enoughDataFlag;
+ j# d- c7 v" e$ W( @+ M- {        int yiDuanShuJu_mean_int;
- i5 h* T  X9 u  A( V; C' Z+ b& O; Q        int int_sum_dv0;
' d( D( N5 e5 E% G: \        int oo;( @- M! ^! Y  z; P! q& \
        int ii;
% X: U* ^( H  B        myfuck=10;
0 @& d5 C. v) Q1 Z        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
% u4 m1 O; n4 e; U) H! @' ?: r        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
6 d9 r; M8 E$ K4 o; ~  ~% r# f' n3 }# S
        yiDuanShuJu_mean = mean(data1000);
$ R( S3 N7 J8 ~  m% }. V
$ @: ^, v" w: v3 W" n; L% x& N' ~( L        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
3 O0 H. ^3 T  G4 J        UARTPutc('A');
5 ~4 w; b8 Z9 R! Q3 C        UARTPutNum(yiDuanShuJu_mean_int);5 G; v- j- m4 r! u1 `5 d% \: G
        UARTPutc('\r');& A: k7 c+ P% e# p9 K
        UARTPutc('\n');* K6 @7 q- D; q$ z
! i. m3 w8 ~$ n& C
        for (ixstart = 0; ixstart < 1000; ixstart++) {
5 I% x/ w- I# a/ V; w2 M0 F                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;8 R) [" Y4 y7 g7 T, i% v
        }
! {# r9 C. w% o
( `2 g9 {; D) r3 i. f        power(yiDuanShuJu_LowMean, dv0);
8 V9 E- _8 e  d% L
; R$ O+ Q  r  m; i* O        int_sum_dv0 = (int) sum(dv0);
0 P1 c- X' u2 o
+ L) n$ e* I7 R* n9 W7 d: a        UARTPutc('B');- @8 r; U5 e) w, f3 ]/ U
        UARTPutNum(int_sum_dv0);. k# K% j) ?# O( m( B! o- F
        UARTPutc('\r');0 A  p" Z& [1 }. j- a' D& |& b
        UARTPutc('\n');  k/ {! r% |' z( L0 o
1 x' g3 I# ]2 L5 ^! n9 S
//        int compareFlag = int_sum_dv0 > 1.0E+8;/ O+ A# V7 B% t
* W9 h) k) ~. B: e  Q. [' k
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
8 Y- \2 I5 E( {- l                UARTPutc('C');2 s" `* G& j* f; p3 b; S8 t
                /*  比较信号能量 */
1 p2 Y) b+ l/ u+ t. Q  T* n7 n                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */' n8 H: l7 X/ f6 h- @* d
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;  Z# S+ Z7 T2 r
//                for (ixstart = 0; ixstart < 1000; ixstart++) {# n9 [6 G5 M' u- T9 y+ E" g
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
6 ?. [% A' Y9 i" n+ W, N//                                        yiDuanShuJu_LowMean[ixstart];" p/ j- n1 y2 ^% O8 T) R1 `- q8 U
//                }- c. o5 g' V/ V, A
//
" S5 O( b0 y0 {//                youxiao_k++;  i. }% W" ^: ?/ r
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==2 h+ E! j+ K, ^* \$ Y9 I* \0 `
//                        /* 感觉要取21个数,即0-20, */' H& c- S/ d+ H" s
//                        enough_data = 10;//有效是10,无效是0
4 X- }/ i" ], G/ N& \# P0 V" Q" O//                }
0 c5 i0 v  a8 }* _* |" h8 `: h1 m        }0 r5 ^" |. W* q& w6 {- C

* d5 N  ?" |. i+ |
& z1 v9 q7 v' e# p8 P% M6 k        enoughDataFlag = 100;% Z: L* `" n* V6 V
        enoughDataFlag = 1000;) q1 a# D. |. _1 |4 t/ ]
        enoughDataFlag = 0x02;
' j2 ^) z$ n5 K9 K        enoughDataFlag = 200;+ g+ B5 s' Q( [# e

% L  R3 X2 t) l5 M/ }* U        int myfuvk1;2 o+ h8 d+ }% W% m, [! o
        myfuvk1 =11;
& i4 g. u1 ?% D/ E' B% n8 o9 r. ?5 i# e* Q! o; l: f% w& Z

4 y  Q& w( Q5 i  D6 d% G. @; f1 y) W        enough_data = 0;
1 w, G4 {1 ]# x' K! r
6 a/ f' W7 s1 U$ J2 W1 C8 r. @- s//        if(enough_data>50){
5 l9 L( s, P/ P; a7 Q6 Q, ?1 l. y% G//                enoughDataFlag=0x01;
. M8 }: B8 S! B2 Y/ V//        }else if(enough_data<50){8 Y; @! v8 m4 c" ?4 j
//                enoughDataFlag=0x00;//0x00还是不行
/ c$ s1 Q: f4 C0 U//        }
/ `8 x" U  a- K7 W/ [
$ d4 u8 [2 M! v
# j* ~; X( T' ^5 I        oo=10;
( ^- t7 C( g, y1 j; l3 {1 c2 D        oo = oo  <  5;# G4 J- [# r$ u5 \0 K* ^
        if(oo){
7 p9 O. ?: B$ }: F% |                ii=0;
0 O; S: P* f% _) S7 `+ a5 T  I        }2 R! @- u* K7 X1 V- ^
        if(oo  <  5){
6 o) y( u( T8 k( W6 r4 T                ii=0;" a4 B, F- S2 S7 Y% V
        }  f8 S7 p- f5 v" P1 Z
        if(oo  >  5){
! x- K/ }, ?8 [, ]  s/ ]( w/ S                ii=0;) c2 c0 [3 Q- w6 z  h0 A9 J
        }
1 u5 x$ V# x9 R# I; A4 c7 P1 G+ C/ w. z+ i& e5 w7 ^8 Q
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */) z  G$ F$ `4 P4 E2 @
        /*  如果数据足够才执行主程序 */
. r7 u) Z: h% w. b: h        oo = oo  <  5;7 Y$ Y% O6 R. F. V# j8 N. N7 {
        enoughDataFlag = enoughDataFlag  <  5;
: R) u& d/ P* |* [0 U9 l, T  b3 {" I" ]  [        if (enoughDataFlag  <  5) {
, X3 S/ G) k4 H7 g/ ^//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是07 B6 l) R7 g7 q
                AGC_AGC(&pAGC);
  w  Z  i7 w2 ]8 t' Q% g4 I( p
6 V6 Z0 p1 f6 O% l+ [& }1 h                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
7 \. _: N7 A( P+ c1 g, v  v* ]( V                FIRDecimator_FIRDecimator(&pRxFilter);
, M! u9 Q% L% s* H. p) |! F: E4 s( D+ ~' \6 s
                /* Downsampling */
. L( B2 z3 o6 A% @) ^                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
& t; t6 [/ N5 t* R+ s
4 d# Z$ g. {/ P4 X9 o# d! z                c_PreambleDetector_PreambleDete(&pPrbDet);" Y% U: P7 x3 A( P* x

' G9 J( S  g! D                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
. u/ \6 ^3 u8 r' J  ?3 F' |; m                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
! M  _9 |. b6 x4 p- o- _                /*     %帧数量=100 */- G! l/ u5 E; G8 X0 A* C
                pFrameSync.isInitialized = 0;
) X7 `0 Y2 g' E. j
/ v- g! O* v$ i2 e4 p; A7 o# j                /*  [EOF] */
, R; |! {5 o$ i2 b  k9 Z                /* 前导码长度是13 */" T0 w& `; j1 [% c
                /*    %qpsk */' f3 L7 u7 i, m  }. d
                pDataDecod.isInitialized = 0;
5 Y" Q, ~* B5 @) g7 }
, F# ?1 K7 V  W# k- v; g                /*  end */' k5 Q0 E  J+ O+ N' i1 P/ i
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */4 S) n  x; @/ a
                /* Convert 3-dB frequency */+ h5 ~# Z: f1 }4 J- i2 y
                /* Convert 3-dB frequency */) ?$ W2 C1 e7 K- O5 I0 G7 u
                filtfilt(save_buffer, usable_left_filtfilt);
  \6 O- \/ e, ^' M                for (ixstart = 0; ixstart < 81000; ixstart++) {/ e; d8 Q; R$ e) I
                        usable_left_filtfilt[ixstart] *= 2.0;3 _+ o7 c7 s* d1 K0 e5 ~
                }# M7 ]) Q- y5 J! N3 A# i

$ @2 I8 |  r  g! x9 z  \5 U                /* 注意乘2,处理幅度 */
4 {8 D* y1 l* A$ U                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */$ g& y6 ]/ r/ P: u7 P6 s
                /*     %% 行列转换 */
* h$ i7 ]0 E+ u- G. @0 t                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);" a7 C) P3 T) h' n
                for (ixstart = 0; ixstart < 81000; ixstart++) {5 F0 F5 J5 P# o: K: g
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]3 U' f: Z' u7 R8 V# j' e
                                        - yiDuanShuJu_mean;/ R: z$ f# P8 o, X& G/ B# T' }
                }( K/ T1 `2 _% h8 H2 _
5 f$ J" S3 ^( u
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */- t( M* g6 u* Y; e0 |2 |' N
                ixstart = 1;# u2 V  x, T( e- f. `
                mtmp = youXiaoShuJu_QuZhiLiu[0];
- D; l. ?  U% Z5 W) r0 a- G                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. y! Q6 B8 l  n" a3 c" u
                        ix = 2;
8 {! W: L7 y/ O( R! p5 I( N                        exitg2 = false;
8 |2 k# L) ?( w9 X+ Y                        while ((!exitg2) && (ix < 81001)) {; R" Z7 K8 u) o; f  G1 b: C4 p
                                ixstart = ix;
, {: ~( i# ?5 I9 g9 s, v% x% p                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {3 P+ J# X& K: `1 t  {
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
! L4 s5 f; j8 I& v: s8 P                                        exitg2 = true;! h! X: @2 ]7 Z3 \0 G  S/ H0 L" F1 ^
                                } else {3 h: r# t% n: |& I) q; t
                                        ix++;
: I$ n$ g+ g2 Q7 D# l                                }" ]" ]4 T, n; b# N: q
                        }
8 n8 G4 _( A" V! U: \; h7 N% _                }& y/ }/ U- D( w1 U

6 ~7 W: V; v3 Z; c6 G$ q% d                if (ixstart < 81000) {
* X# ~8 @! h5 d- {& Y0 X                        while (ixstart + 1 < 81001) {. [1 J# H) D: H- _$ N1 z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {1 q% m$ ~& d6 t3 m$ Y& a8 U
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ |( T" A: u0 M4 S                                }
) F: |3 n: k+ L( E- v1 P7 `( X! y9 m; j4 v# @* ^
                                ixstart++;
- I1 z3 I- T% y7 n8 d* r                        }
! r! N% q: D: P+ A' {7 W7 R                }
: l) F( s4 `6 Z4 a0 M8 e3 H3 k  V& d, Z5 X* d
                ixstart = 1;
: U$ D0 i6 S* g1 o; M' G4 D; O& u                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
9 Y7 C3 }# S2 o7 R1 u                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
& f$ u3 I# i" K  P' g                        ix = 2;, h0 U1 k3 ~! y0 w9 t, ^. C
                        exitg1 = false;
3 E6 `5 j+ r3 H5 |3 b0 w9 y. u5 G                        while ((!exitg1) && (ix < 81001)) {1 I* l) K6 F$ _6 e; P6 u! S
                                ixstart = ix;
& s1 M( }5 p7 ~                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ q5 h. N* v4 T/ y& p                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
2 ~) R- _$ u5 Q( D$ |                                        exitg1 = true;
1 C) G' h+ E7 u: ]/ ~, e+ e                                } else {+ T; `# n* A; A8 d6 {; f
                                        ix++;6 X: T3 L8 M+ q, u" p
                                }
1 u5 l* P" m1 r# J: l                        }3 p5 X$ s5 J8 ^
                }
; @) C- u& [( `# P; f
: K6 Y/ |; V4 k- q                if (ixstart < 81000) {, X/ P' e$ F* Q% B2 O1 C4 m3 t
                        while (ixstart + 1 < 81001) {
, o+ y8 C' ?+ d7 H4 @! q( X* w                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {9 h( m+ U2 k8 A2 @: o% O3 i! Y2 Q$ q
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
  y( `/ x6 S8 B# l2 M                                }1 n* S* @" i2 q2 G) P3 n1 r
: r8 V' b6 G  R6 O/ }
                                ixstart++;
# x0 J& X: Q7 i+ \                        }( h8 P; K  l: h
                }
! [0 `, V8 b1 _$ {" q8 v) i) V$ i  |6 D
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);+ |3 I0 N' Y  l3 {( I& n
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {, C8 t- _+ j% E6 ^. t' \  L
                        yiDuanShuJu_mean = mtmp;
* ?8 L; H8 W$ Z/ {6 V                }
! O: ~2 A1 ~% `# J# p$ ]' k
; X4 `6 I4 S9 N2 E/ T$ s- q% b2 t                /*  找出极值 */
/ ]) u7 t0 E/ p% q1 l! `, C                for (ixstart = 0; ixstart < 81000; ixstart++) {
2 E8 }- _9 e9 b: z$ b; K: g$ @                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;8 o7 G  `% K, b, ]# a. ~
                }' ]2 N. V, s% b3 ?* y

2 w# e, ~  A# p9 A* R8 F/ n* b, Y        --------------帖子字数限制------------------
- \# Y8 W! D. s& ~, H$ b7 O- X}7 y% L2 |1 x9 A. a( v9 _
, F7 v& A/ h- E( t* j& i
, U" ]8 ?5 }) u+ U. d

本帖子中包含更多资源

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

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-17 06:24 , Processed in 0.048927 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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