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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 / s% n7 I9 h* A8 p
3 P3 ?5 ~4 H  U* ]0 E
各位大神:; `5 r: |4 M! c/ f/ G
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
& z" s3 Q% T. W  N- o) l  V      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:5 Y( m6 b) v% @+ M, h
3 {& v- o6 y5 [4 R: _
     
2 Z/ w/ ?, m5 |& A这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。1 @4 t8 i' e4 U. ^( [0 P+ h/ f
/ s: L+ I0 ?* E: m
并没有其他线程
  c& C2 O$ g8 n' F7 u% |. O; ]+ z8 ^- X反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。" Z& \" v) P' Y' s4 K4 O8 O  \8 d1 E0 b
也说不定是和堆栈有关系。。。。。。
/ j8 e1 w" D4 ?4 K# b  }$ r- F请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
% K) i" R7 K: F. V: z0 v) c9 w4 ]6 u

$ {  ?+ n5 U  G3 d" G' D, t$ K/ G* a' B% T$ A# j- O- I
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
* w9 g+ v. x8 k$ P
3 h0 d( `% S: b! G
% ^- ?/ H6 @; S, Q) Q附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
+ ^! M& `- `0 v" }0 J        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
1 B+ s5 ^8 e, ?4 W  U! e1 k6 E
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(0 G$ W! ^" f$ }0 ]+ u
                const double data1000[1000]) {
, O* x# ~% ^. {. ~/ U$ p) o: V1 g! n3 t% v3 ]# W5 G1 `
        int myfuck;
, `6 ]9 m) U7 K) o% l6 T        double yiDuanShuJu_mean;
/ k6 b6 [; m9 v5 y  q        double yiDuanShuJu_LowMean[1000];5 S2 _3 l3 y& o1 n
        int ixstart;
0 P, i8 L' K6 q1 q$ [        double dv0[1000];
- y' |1 g  M; |        comm_AGC pAGC;
* R/ ?- j. K; J2 O! r        comm_CarrierSynchronizer pFineFreqCompensator;
& c6 \; Z8 i+ K# F6 P# B8 O( ?        dspcodegen_FIRDecimator pRxFilter;
% }  C6 n! g" n+ v, i5 [- F& l        comm_SymbolSynchronizer pTimingRec;2 M& D1 I; c' M( M7 [
        comm_PreambleDetector pPrbDet;0 l- R7 `6 K) k+ {6 l
        FrameSynchronizer pFrameSync;5 C( K7 c. [6 J9 G- X
        QPSKDataDecoder pDataDecod;3 Z5 c  b0 B8 ~
        static double usable_left_filtfilt[81000];) @4 P! }+ t6 E/ Q1 h* m& U
        static double youXiaoShuJu_QuZhiLiu[81000];
' h( a* ^0 |- k% i* t! F& b6 u        double mtmp;
4 G! m9 @1 u- n, e& q! p! N        int ix;
- d4 E) v/ y, B; N        boolean_T exitg2;# l/ u" G/ H7 i7 {; j  a% G
        boolean_T exitg1;
" G7 \+ S9 F0 G! h# a1 d5 W; t! g% ?        double YiZhenShuJu[800];
3 R" j. D: ~. f/ j        double dv1[800];* ]) K* t4 O) R' L2 l

" V3 @) W5 @) u$ u9 O8 k5 Q* J! @
+ G4 e/ [# B) e8 U9 {        double b_YiZhenShuJu[800];
. g! J5 e" }9 p/ h0 `        double I_filtfilt[800];
& E, m9 s+ f6 y5 p/ y% o! u7 j1 L        double Q_filtfilt[800];* A! I. i: M  M: L# @
        creal_T b_I_filtfilt[800];
5 W$ C% ^8 }# k2 n, }1 V7 K& U6 ]        creal_T b[800];
+ z+ q; X: a7 R" c5 O% |2 c1 l3 g  x        creal_T RCRxSignal[50];
& ], R1 b+ z# z* @1 x  a8 H( \# ?) T        creal_T fineCompSignal[50];* k) I% R1 t4 z
        double phError[50];$ E, p* g& T/ Y/ y' \& l# ^
        creal_T timingRecSignal_data[28];
6 e2 J: ?9 [# b( L* ?        int timingRecSignal_size[1];
! \% G+ T; t# d        double prbIdx_data[28];
! d6 ?; t0 ~% a1 u        int prbIdx_size[1];+ b1 k+ c3 L: H  m" A  U" j- {
        double dtMt_data[28];0 R8 r: V# D2 f) h4 A0 T+ {" ~
        int dtMt_size[1];
% K: a2 H% ~1 i: c1 c8 j& S        creal_T symFrame[25];
  A0 N: l; F+ N4 N3 E        boolean_T isFrameValid;
1 [8 O) k; A6 v6 q        double unusedU0[3];
0 p  Q2 w9 K% I" n: X7 i" ~( |, h9 _# l  K' z
        //调试过程中的变量
$ K, e& F* L" L9 c7 ]: W, ^0 _- F/ H        int  enough_data;+ v' f, [$ R% R3 r# z
. A* x" Y0 o4 D. R
        int enoughDataFlag;
6 K( Z8 D3 x* k        int yiDuanShuJu_mean_int;
; ~3 K. g" V5 ~        int int_sum_dv0;
5 e& |  u# t9 Z' P* D& H        int oo;/ C7 a1 M0 D) x3 X  ]! D7 }
        int ii;0 ?! Z. q3 t  D( B; L) t
        myfuck=10;, T" `/ \; y; n# g; d! ?, L
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
1 P- V9 B1 `( K( J( T7 K        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */& h% V+ f6 S( f3 \

, \' x1 E* X7 ?8 F5 t% P) U* T) D        yiDuanShuJu_mean = mean(data1000);
/ h# O8 B% T; V$ G1 H, n4 n# B# O) T3 n
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
/ ?& L$ \8 P7 t5 r! E- l        UARTPutc('A');9 e  {& h5 t# \: y6 Z* w, D+ q5 h1 I' }0 S
        UARTPutNum(yiDuanShuJu_mean_int);
* L1 n' U7 Y( r0 B- y( C" A- Y' N        UARTPutc('\r');
" x( R9 S$ m! W        UARTPutc('\n');
& S" j7 H  Z9 z+ x+ Q+ E# w: ?* h; o6 ]
        for (ixstart = 0; ixstart < 1000; ixstart++) {
% }, h( F* y& G( S+ M; z                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
, b! S0 s* I" j4 H. B* p, ^        }4 Q' \! m- w* ]  P+ P

' u- h" H9 `2 G1 t: a        power(yiDuanShuJu_LowMean, dv0);
6 f) m5 E" S  y# _, J8 r/ `3 p! Q/ ?8 ]0 y$ V5 h7 L& Y7 K$ q* f( g
        int_sum_dv0 = (int) sum(dv0);
! R- r' G3 w$ A' `7 i0 N: `- T3 H. q' o: K$ y. L& M
        UARTPutc('B');
9 c* i* \* Z" L. o        UARTPutNum(int_sum_dv0);
' j0 b/ m" U7 |  r5 i8 j5 X        UARTPutc('\r');/ ]: g5 m$ ?4 A0 n% l
        UARTPutc('\n');1 o3 r, {) S" @) X% [
6 p9 z* j' z7 P. A
//        int compareFlag = int_sum_dv0 > 1.0E+8;/ N1 y5 _: t6 W. x8 d* U
1 r& Z" J9 b( e
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
: |+ s5 f* _4 S9 _  x                UARTPutc('C');: ^/ Z6 B0 L/ F4 y+ p3 J& H
                /*  比较信号能量 */
$ p4 ~' r8 G5 ?/ F* `0 Y6 c                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */0 ^  m% F& q  H  R& r# a% o
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
: f) ^: a! r& \( {- w1 I/ m//                for (ixstart = 0; ixstart < 1000; ixstart++) {# E: p0 P. {# {; L; g" ?7 |! g
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
1 s  A, n6 a1 H+ {9 L+ |1 ]//                                        yiDuanShuJu_LowMean[ixstart];
$ C9 Z9 j, Y3 D) ~3 U//                }' {; c% W# e5 }' D9 c
//
" s3 r+ L/ }& c' t' F6 D' Z//                youxiao_k++;$ U  `. b; {, K: a
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
$ m9 ?, E) O! D+ k3 `$ S//                        /* 感觉要取21个数,即0-20, */
& @  A4 W7 S1 s3 P3 c//                        enough_data = 10;//有效是10,无效是0$ ^  |) g; b2 t5 `) w
//                }
- O* Z1 N$ p) l        }8 Y3 p) P$ w: i* }. f3 n7 b* H

9 h; |9 h8 }1 ^0 `+ d7 @/ P# O
/ L' f" P, j1 n9 u6 u        enoughDataFlag = 100;) Q: K3 }4 [1 w3 R/ G, i5 D6 j
        enoughDataFlag = 1000;
: N  u" W) k! m! W1 u) s/ a        enoughDataFlag = 0x02;; K9 s3 p, K4 d$ I1 v5 M6 a* y
        enoughDataFlag = 200;8 d- }6 B. ?4 D  k
- W& c  x+ H' g2 m1 [1 a
        int myfuvk1;
3 C$ u% I1 T: O( y% l  `8 P( a        myfuvk1 =11;
2 r% C9 Y0 a! z
! z. [- m- I  T# \
2 m, ]" k) ]1 x- H* y% ?        enough_data = 0;& h+ u5 V! _8 j/ X

- ]: U0 m: D+ ?: i//        if(enough_data>50){
6 D3 M5 w. i) B  y  z" T0 z//                enoughDataFlag=0x01;; B, O$ U8 G. y4 E
//        }else if(enough_data<50){
$ J! V1 J/ z) B* n- `) J//                enoughDataFlag=0x00;//0x00还是不行3 Y# o8 d/ N+ i3 H+ M/ \' a2 @
//        }! \9 t( b5 l' g/ x
7 i: {' @4 Z0 V* M1 `8 u

$ d; i* S% s4 s3 @& M- U        oo=10;
7 K) S, c% A; H9 H5 S        oo = oo  <  5;+ x* |# ^4 J6 M5 ]- p2 n
        if(oo){
' z) O1 M$ w( h% Q) @! [                ii=0;2 n# l% `' K7 D8 q2 ?3 N! f4 P
        }
  O& R: ], x, @0 g. J8 J        if(oo  <  5){: i* Y' V* L, e7 R2 R' n
                ii=0;' r7 Y4 z4 h& |) {+ o
        }
( y4 d3 S# z7 X. g/ b$ T        if(oo  >  5){) x9 k/ F1 b$ |1 D/ F+ z- d2 i
                ii=0;; T9 t' @) s% O5 s
        }
% G3 i8 U0 @$ c; y; e& F
! _, P8 v! B4 H1 Y4 M7 i        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */2 _4 {3 W4 f+ c# K
        /*  如果数据足够才执行主程序 */- g6 ~! {$ G$ d$ X% Y! F: `  c
        oo = oo  <  5;, y" V/ F# K* X
        enoughDataFlag = enoughDataFlag  <  5;6 ?9 s- a9 F& c* I
        if (enoughDataFlag  <  5) {
7 |0 Z* y0 L/ G+ Z, R//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0) K5 i  m4 o' w/ e3 \. R
                AGC_AGC(&pAGC);
, A9 P  J# K8 C9 @! o  i3 k! ]* n7 {8 p
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
) T/ [! h1 m- m7 ]8 P                FIRDecimator_FIRDecimator(&pRxFilter);5 Q/ n/ g' N# u- a3 L; a& H
2 M) i& a7 y: ~6 G/ m
                /* Downsampling */
2 B( b7 e- T! Y7 t  s$ v                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
4 {& z6 Q' o6 ^! E3 {; x" H# w# G6 {- r+ a
                c_PreambleDetector_PreambleDete(&pPrbDet);3 K$ j# K/ a% y: j
0 p6 r/ e: a" [8 `# A
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) z7 Q; F$ n8 S8 d: N; d5 B: q                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */) ]/ z& g% B* K) r0 l. H
                /*     %帧数量=100 */
/ L( u) J5 i; k: h3 ?# \                pFrameSync.isInitialized = 0;! J% u8 G$ Q# G6 H$ s
# d6 X8 S4 w8 s' m: ~
                /*  [EOF] */, {/ c- K7 X8 t0 G+ X
                /* 前导码长度是13 */  B" Y, _1 p' [
                /*    %qpsk */
% A3 T# k8 h5 L8 c8 {  a                pDataDecod.isInitialized = 0;6 l% ^2 D/ C- T. N$ O; h
* N# M! W% w* ^6 b3 n
                /*  end */1 q8 N6 u5 d8 [1 G# H
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */% j# j# O. W3 x- Z8 T9 O5 B4 o' P3 x
                /* Convert 3-dB frequency */5 F  \% n6 W# ?9 p" M( r2 y6 l0 j! b
                /* Convert 3-dB frequency */6 w: g+ p. p6 p, c) `
                filtfilt(save_buffer, usable_left_filtfilt);6 y7 `$ p7 w% C! A, g/ j
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 o3 d, i( L9 G4 \# c                        usable_left_filtfilt[ixstart] *= 2.0;4 F7 W6 x9 X, m0 R
                }. B) Q' B6 f1 z% x
' V' I% u! ]' o
                /* 注意乘2,处理幅度 */( g+ ^% Q) {1 t1 q5 @; D
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
+ @: b" Z! Q6 ^& R7 }  w3 H                /*     %% 行列转换 */
% _* ~6 e2 N5 r' ?: q/ B; i; d                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);7 z; N4 o/ b5 B/ x( l8 c2 Y0 g
                for (ixstart = 0; ixstart < 81000; ixstart++) {" J  x; S, G3 @
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
  @  r$ E3 K" b) @3 w                                        - yiDuanShuJu_mean;
: C7 |! V8 X& e' t1 T7 K2 v                }
* v4 G( b5 N9 w% ?" O5 Q( j' l7 z
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
0 b- F# Y! _4 ^/ H                ixstart = 1;
  Z. }( J  o6 Y2 i6 |$ d8 S3 b& O                mtmp = youXiaoShuJu_QuZhiLiu[0];
6 X: _+ h1 W' D6 ^: T# \  E                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {% e3 y8 ^5 C% \7 ?$ x
                        ix = 2;
4 P! c7 Z. l' a6 h$ D7 e                        exitg2 = false;
% L2 ?7 u: n; J. P                        while ((!exitg2) && (ix < 81001)) {
+ C$ g; ]7 T( f* C8 P3 M( t( }) q                                ixstart = ix;
$ ^; h% V" T. v& q2 v/ Z                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {0 P0 s% u; `1 q+ _; S' ]
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];+ x) A% I- D9 o9 F$ @6 m$ Y
                                        exitg2 = true;
: u" z- Q1 ?2 n+ c% E                                } else {
; c* x0 ^7 i  o& U9 O                                        ix++;( _1 f( M6 R0 D! T' D7 t  R
                                }
, |, }& G5 T7 u4 u" Z                        }8 p" ]" \5 o6 O2 L
                }
6 S- d1 [* v, S8 h' @  e( u, E- N' U2 h! J$ _9 W6 x
                if (ixstart < 81000) {
3 E1 ?- K" h" \# l3 B- ~1 C                        while (ixstart + 1 < 81001) {! `2 j( A: n4 H6 ^& U" |/ G. R
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( V9 d8 b& E( x- r+ ~                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
7 z; ^/ K+ [) b; V6 \- R$ g                                }) C1 s' Y' F8 m0 ^- U" U9 ]

: E) n' ~4 J3 P+ ]" o  W  Q: ~, S" n) v                                ixstart++;
! x  f* X# r9 y2 K( `                        }
" x2 s& d8 M8 v) O, f- \, E) H                }
9 E$ N$ v; ]  S, n1 o/ M8 d# R: I' g+ v# O4 C; M7 s
                ixstart = 1;, y% \( a% s7 g; Z0 M
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
/ `' f2 @$ a( ]+ X) p8 ]                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {* I" s4 |0 h3 B
                        ix = 2;0 ^( \$ w- g% r) H
                        exitg1 = false;
- Y9 c) Q3 [) k. g) L                        while ((!exitg1) && (ix < 81001)) {
. L6 r$ j" F( o* u7 F" c9 u/ H                                ixstart = ix;; }3 Q5 w+ y6 L9 Y
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
7 a7 p6 X' g) y9 ?                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];# p# ]" g; s2 ]1 {9 Q
                                        exitg1 = true;
) m9 K8 v7 G+ L7 X                                } else {
$ ]+ K) I' [# K- z                                        ix++;' x2 m" P0 I) ^8 z* r
                                }' h. J. q, F4 a: R. n
                        }* S) @4 Q1 p$ e3 I6 v- U
                }! q7 L# t3 X: U* `7 |2 v8 o

; W! b* v. F: i( E/ J- J3 x! m- L                if (ixstart < 81000) {
7 `/ c9 S$ k% V# n: n! _0 x, e                        while (ixstart + 1 < 81001) {* U4 r1 L3 q+ e  N  E: d/ I+ {
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
, Z( ^$ x0 j, }: Z" X6 Y                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
6 s& S9 z; I. R7 n" R2 l                                }" V* f& t8 N+ \8 E0 M
# w9 J- i) N$ i; n" N& a
                                ixstart++;3 W  v7 U3 ~: D9 @9 D
                        }" X8 {- O% i, D9 n
                }
& e( [0 P3 q# q& A. Q6 N
5 a+ j' z0 x8 K1 ~+ V                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);1 L- y% p3 i7 O: m* Y
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {9 Q) H2 {+ v0 u% F& A6 \2 M
                        yiDuanShuJu_mean = mtmp;
; E" w6 W/ \# S: F2 g7 X+ X                }
  k+ [' f' ~" ?5 F" T+ R' ~0 b" I
) ~. o" g4 b- X1 B+ q                /*  找出极值 */
9 x1 W1 H7 d" L* H8 ]                for (ixstart = 0; ixstart < 81000; ixstart++) {. ]1 |* t5 d( U  `% ]$ H. h6 m* f
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;/ a. Z% k1 M, K% P- h
                }! s* ^5 o% n' g1 D

8 R& N& W. v) H) O* a" d1 R5 u        --------------帖子字数限制------------------
5 _6 O/ ?: U2 B: ~6 k}* M- ?/ V8 D# e5 x: w/ B; G
" w5 y: {! |$ I/ G8 E

4 {' n# T9 Q, ?8 }4 r: m: U4 c

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 15:32 , Processed in 0.041597 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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