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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ' L9 u( e& J! \+ T) |+ k0 ~

3 k+ E" n& i+ d1 p  R( M# P# b各位大神:: ?" h7 {$ d; E
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~), @  S+ e/ I6 M- T5 d6 B" U
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
! ?1 F. L' r. s! r# P1 e0 f. ~9 a9 k9 R# X- `- }* |
     ; n  f) z/ m; u9 u
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。+ C  o% i6 e% u$ O% y4 p7 p: \

9 C4 \9 w0 k" K& T9 c并没有其他线程" A4 j. ?* C4 ^0 u' s$ F" s
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。( z5 V$ U8 G+ z( G: S4 }
也说不定是和堆栈有关系。。。。。。9 {% u" \& Z0 H3 K* w1 ^8 @- V
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
# b" ?0 y& v, `% v$ M. p. A& v. c6 T# K# M' Q4 G6 V. f$ m: H3 g# M

, ?5 I- }. j+ C: k7 r! l
( F5 W9 K' m" K我也很绝望啊,希望大神能帮帮忙,感激不尽,!6 B7 x4 w, ?, E$ {
' F9 V$ N2 v1 E5 ^7 u; C
  R  O0 G+ a2 i  `
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];; P' A& t5 @! S" X+ B
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
7 O+ Z! \2 W) S* l3 l
/ I8 F0 F' ~! d' c* T+ Nboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(3 H1 m) X' e! M% ]. x( x: Z
                const double data1000[1000]) {  m/ y+ X! Q% R# X7 G1 h
& p4 y0 R% b: U! v! u, G3 Q
        int myfuck;
* }9 {( t! y4 O, T1 M% t        double yiDuanShuJu_mean;% D# K1 u& E# l) |) v, c
        double yiDuanShuJu_LowMean[1000];
  @) D0 ]/ b! c/ W' O" t        int ixstart;
; t# M( A5 Z. I3 U; J        double dv0[1000];: l. p* `6 ^/ \" g/ p) F
        comm_AGC pAGC;2 |) a+ C2 ^# D% _5 ^
        comm_CarrierSynchronizer pFineFreqCompensator;
1 h2 ~. @' m- `( a, x' O" u        dspcodegen_FIRDecimator pRxFilter;
$ M( _( M0 Q& W' i) {        comm_SymbolSynchronizer pTimingRec;8 ]* R% S5 ^+ b3 ?1 Q" O$ _
        comm_PreambleDetector pPrbDet;# v' i% m5 I1 m
        FrameSynchronizer pFrameSync;
0 x5 h; Y7 H) z) `. P        QPSKDataDecoder pDataDecod;
# D2 _$ [, ]! D  f        static double usable_left_filtfilt[81000];) C6 p' [3 @1 ^0 B
        static double youXiaoShuJu_QuZhiLiu[81000];# }( L0 D% _2 `. \
        double mtmp;
: e+ u4 m. o5 d& x( }* U5 ]        int ix;
" |( |8 C* a5 `: I/ k        boolean_T exitg2;2 F/ g& X. t1 }# |
        boolean_T exitg1;  f+ t6 x7 H4 |$ O7 N
        double YiZhenShuJu[800];% ]! K- E3 V4 p+ l
        double dv1[800];
; t9 P$ t9 u" f: v* Y. q- `- {
. a. ~; d& I* G- Q! z& u
- Z6 ?: e5 V( `( p7 y        double b_YiZhenShuJu[800];: J9 V) _- i( I; V) ^& F
        double I_filtfilt[800];6 O0 @6 D$ F; a
        double Q_filtfilt[800];
  @8 i! W7 `$ p! D, j        creal_T b_I_filtfilt[800];% G7 L3 R/ L+ r) _! m
        creal_T b[800];- _) S, n. e! `: G; W" @
        creal_T RCRxSignal[50];7 S7 p& h- T& E. Q) Z/ h5 o
        creal_T fineCompSignal[50];1 f: t% z8 K& k+ c
        double phError[50];
. R1 v4 Q* k/ ^5 J8 g2 S6 P        creal_T timingRecSignal_data[28];& b' _3 i2 f& i$ K! q
        int timingRecSignal_size[1];7 {% M+ |- `3 m  B1 V0 }$ |0 A
        double prbIdx_data[28];
3 h9 U7 i; h: Z+ d" ~        int prbIdx_size[1];# Z$ @. W/ d0 u1 q, o
        double dtMt_data[28];: e' T' }* r0 _) y7 g
        int dtMt_size[1];9 o) ]# w; x4 q: h0 O5 g
        creal_T symFrame[25];0 q) y0 A+ t  U
        boolean_T isFrameValid;" k8 j& C  n/ Y/ E$ M: B& O
        double unusedU0[3];; K& @6 t0 a, z

2 y6 ~' W% G. o  k0 ^        //调试过程中的变量
* A! i8 m6 t1 O1 q        int  enough_data;
. G6 t9 p4 E# V1 W. B* f5 T: M/ V7 j% t2 ~. \. M, q: c7 }
        int enoughDataFlag;
8 M, y6 q! n, `; E7 i; W        int yiDuanShuJu_mean_int;: b* Y, y4 m* F) E( Y/ ]( U/ @
        int int_sum_dv0;+ q8 q9 d+ l( ^( U2 e
        int oo;1 I  N5 P" q0 b1 }  t0 P
        int ii;
& G4 N& G2 o, U! t        myfuck=10;3 o# [5 m% T6 e+ F( ]% _
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */7 x. Y( f' a# V" ~
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
- S) M# b- @+ u6 E- r& N0 M! h& q/ y( L9 z
        yiDuanShuJu_mean = mean(data1000);
8 y! T( `9 X- j6 r0 h' [( o3 W1 [8 A* q: z* C
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;2 |" Z5 w3 T4 _) y( S) j/ h
        UARTPutc('A');1 y. h6 y+ t+ b# k5 ^7 `  i6 I
        UARTPutNum(yiDuanShuJu_mean_int);" p$ |4 W) }7 W2 k; y
        UARTPutc('\r');9 A2 m4 r9 a0 C2 y( t
        UARTPutc('\n');$ [: T% l1 }$ q6 l) G( C# J- B: [

1 R( M. w9 ~) e) y        for (ixstart = 0; ixstart < 1000; ixstart++) {0 g1 w5 v. T/ @) G8 z. g0 |6 R5 I
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;8 n2 T6 N$ E; G, l
        }  I* L# g" R: l4 X8 Y. |) @
7 U3 Y5 ]- M7 [9 q& A. \. O0 s
        power(yiDuanShuJu_LowMean, dv0);
( ~: ~$ \. _& x# ]! Y8 m; F! t, d! V7 F7 }
        int_sum_dv0 = (int) sum(dv0);
: h4 A# J/ R* [, G$ G5 L5 e# D" E4 K# _$ O- D& I, ]- t$ V
        UARTPutc('B');
4 @& J- C+ u: a2 x2 P1 Y* b" E        UARTPutNum(int_sum_dv0);0 c- U7 X7 |8 O9 l+ z! i
        UARTPutc('\r');
6 L+ m# k! U  k. O2 c        UARTPutc('\n');( M9 @$ U3 k# n5 P7 {# i- d- H

) _( T6 k- D0 z, F* f//        int compareFlag = int_sum_dv0 > 1.0E+8;1 N  z8 j) I, E& M; Y" G+ r6 z- z

- \0 `# q& ^% z5 u! ?        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?: I( X( t5 h+ S
                UARTPutc('C');# l8 P5 c) j9 q) g
                /*  比较信号能量 */
6 ^) ~, t" B) m, V0 @                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
$ ?6 |! T( K& a//                yiDuanShuJu_mean = 1000.0 * youxiao_k;9 u4 c& U& l3 q0 _
//                for (ixstart = 0; ixstart < 1000; ixstart++) {3 g0 j1 H+ @3 Q, J
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
, ?1 E3 r5 i' J: r& g9 H& W//                                        yiDuanShuJu_LowMean[ixstart];
7 M6 j) p- D8 K( r0 H8 ~! x//                }) L& A+ |( P) W3 \1 S
//
- l. i) |7 V) U7 V. f; P; D1 E) j/ m//                youxiao_k++;, w% z2 B+ y7 d' B! O- P
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
' I1 _& G# j7 r//                        /* 感觉要取21个数,即0-20, */
" X2 x1 }$ }4 M/ e6 t) C//                        enough_data = 10;//有效是10,无效是0
% b) {$ O- ^# q$ J( x; r//                }
8 K2 K# ^% M$ f5 j        }3 o  r8 i# V: g3 f
- [: N' `; [" g  V8 B
. S/ F* m0 y/ c; ~+ t
        enoughDataFlag = 100;
1 j+ F, M/ C! B- d        enoughDataFlag = 1000;" v! U& W/ p1 D5 W9 I
        enoughDataFlag = 0x02;
# E# d4 X, L& P# B1 x        enoughDataFlag = 200;8 e6 e- ^1 I( b5 E7 Q3 R# z& `

$ B" n/ v, `* @        int myfuvk1;
  s, M) H" A- m- ]" O- q& f( O* l        myfuvk1 =11;
1 F4 T6 t3 ^! y/ A& L8 F
5 A0 B2 d( C8 P
3 l& @* y  r9 d0 [" X1 i/ p) j7 f        enough_data = 0;
1 T4 Q( V# ?) m1 S, Y* h. Q! N4 O% F
//        if(enough_data>50){
4 L- I) X& |) D1 d( m2 n//                enoughDataFlag=0x01;" b+ a2 R8 e* Z3 C; g# e
//        }else if(enough_data<50){
! J, H4 G! d, ]1 l" d2 H//                enoughDataFlag=0x00;//0x00还是不行
+ C# q% x, I( \* P! P//        }
: U8 R$ w% `( ~* p6 h5 @7 i( f+ j! Y, X2 G: k0 N
4 Q3 G+ O* O# @% q% x1 w
        oo=10;
; P; V. y! g, R0 ~! I: a9 d        oo = oo  <  5;
3 A) T0 p5 q. t* N- g        if(oo){! o' D+ O3 t2 k1 |2 H# x- }
                ii=0;! {) s/ c1 E: q% C+ x: {
        }
# h2 t; j# X0 \, a" M3 }5 J1 {        if(oo  <  5){' `" R& T. O7 S- d. L" I3 T' \
                ii=0;+ M5 C, J0 |$ C8 `/ J
        }( b# j1 G3 L+ b
        if(oo  >  5){
% M5 X3 D$ c  [7 V6 L                ii=0;
. o" p' P0 c3 G& u# O% C: ~        }
8 n4 `& H5 `) |( _' Z
  U4 M* b+ x7 [8 |9 I" g9 _        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */5 Y+ |% e! D# i( n* o6 ~  Y  H
        /*  如果数据足够才执行主程序 */6 ]% @3 O2 f  J; O: d
        oo = oo  <  5;2 c/ V/ u+ V& P2 G7 H, [
        enoughDataFlag = enoughDataFlag  <  5;
7 Z0 X  T- l2 ?8 w        if (enoughDataFlag  <  5) {
& Q* d5 g9 M( P. Y9 b' w  f//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0% h- o5 Y9 u1 H# L$ c
                AGC_AGC(&pAGC);$ {" j" ]# r% p* P) v# V4 G# w! z
; E2 c6 Z& ?( _( G; f( E4 R% ]
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
  k. U2 z, ^% b/ c* b& t& V& A2 N                FIRDecimator_FIRDecimator(&pRxFilter);- i3 F; H) n. N8 H8 ]3 i* [
/ @4 U( O* }( {) ?$ r& ]
                /* Downsampling */
) \0 r0 L9 Z) X$ O9 ~" g' U5 H                c_SymbolSynchronizer_SymbolSync(&pTimingRec);7 f6 x$ w/ l& D, b
% C! A1 y  X- [; {+ L
                c_PreambleDetector_PreambleDete(&pPrbDet);4 I( W8 [+ ]8 q2 b7 b' e" D3 M6 ^
7 _9 a: q& j4 {3 S* I7 A, K) {7 P
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */* E* O% o" Y% X+ m. X" \/ [( U
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% *// C! s: E: t: |" f
                /*     %帧数量=100 */0 t0 g3 t1 `9 v3 \2 S8 V! ?/ t
                pFrameSync.isInitialized = 0;
0 J9 m: b# u( v( e. b  b# x' H
0 S. E, [' }/ G% B  S4 U                /*  [EOF] */
# ]$ h6 t7 ^' }2 M! q/ t* v                /* 前导码长度是13 */
! K% W/ f; P+ K& H$ g4 I" S                /*    %qpsk */
' o8 y: j6 Q' P2 I+ w8 A                pDataDecod.isInitialized = 0;
2 ?: {/ x/ O% f! Q9 t% T6 Y" m4 W) n
                /*  end */
) \7 p2 L& d; P1 ^/ j  B                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */& q# ~2 Y9 g& t$ Z& P1 n3 O8 e
                /* Convert 3-dB frequency */
1 ?  s+ l: \4 l' e4 }                /* Convert 3-dB frequency */
( P# E* t4 g# z* @) i                filtfilt(save_buffer, usable_left_filtfilt);  E* r. [6 a' {' h2 r( L# k
                for (ixstart = 0; ixstart < 81000; ixstart++) {
( _$ [% A8 {, J. K                        usable_left_filtfilt[ixstart] *= 2.0;+ h, ^7 K  g! i" J5 R8 Q
                }
; u. ~0 @4 E7 ]3 X
3 z$ E) U8 F' @; ]                /* 注意乘2,处理幅度 */
' h  D" o/ d! h6 v6 j                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */" R- |' S9 y8 z* |
                /*     %% 行列转换 */
; Q% E, O3 ?& E5 @- d  G1 @                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
! e  }6 t$ l* ^/ h                for (ixstart = 0; ixstart < 81000; ixstart++) {; y$ q8 q6 E" A$ p& s. v' u1 O6 l) Y
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]6 _! Z- g* @" H0 Z
                                        - yiDuanShuJu_mean;
+ a" T; r4 c) ~. a& P                }
+ u3 S' _; E6 Z8 J& u' q) `7 B6 M, _7 ?( Z" f
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
8 u& S  L2 n1 l' N. c  r# g                ixstart = 1;4 d( K$ a9 P+ m$ W. {6 e7 W* B
                mtmp = youXiaoShuJu_QuZhiLiu[0];
6 Y7 l* ^- J& u; p                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {: `. E! }+ Q; N4 l$ V! O
                        ix = 2;
/ [1 I% Y, A5 N& H" o                        exitg2 = false;, E8 E. h. g( d
                        while ((!exitg2) && (ix < 81001)) {
1 c0 E* {- ^0 f4 t% E8 X# Q8 Y                                ixstart = ix;; D$ T2 {& G/ f9 h2 D7 N
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
* h" E* S5 E# e9 i/ {+ {                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
0 Y! o3 w& a; u1 H( A, p                                        exitg2 = true;
  g% ^$ X( `7 K+ Z! i! l! e. n, L                                } else {2 o# _( j0 U* e, {, M
                                        ix++;
8 r& w/ ^: H( n, l: T& N                                }
; ^# O8 G- |. m7 X$ ]4 {: x* c- G                        }: H8 k, |: A" _. J
                }
1 {$ a! u* W& i' a+ W* ?  r3 m% \: D! A* V  \; {, P% R
                if (ixstart < 81000) {
1 w! |* {1 o, `+ S                        while (ixstart + 1 < 81001) {# Y' J% H/ C1 w8 [& y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
4 G1 n: |: `8 ?  S, t                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
: e- ?5 L3 u: V2 j1 W                                }' E, s3 k  j& ^/ d3 l
$ T  F$ K  S& P$ b# c
                                ixstart++;2 f% n( ^. N" X* F, s
                        }7 w4 \  h/ R8 ^7 ~
                }
- |1 W4 d, ~+ i) k" I& H1 v. e) w$ p) C3 Z! q9 w5 x3 K* ]
                ixstart = 1;8 L4 |: A6 d  ]8 T
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
1 G) f* z4 V: L' s1 B' [* r- A                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
, b' o  l, V! m$ P                        ix = 2;
* Z3 Q2 l" z1 H* ^1 W                        exitg1 = false;
4 b3 [2 X% l5 J! o% }3 g                        while ((!exitg1) && (ix < 81001)) {6 U' \2 E* g# s5 a' t
                                ixstart = ix;
) s9 X/ z& X+ t; _& J                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {( E: j4 _( x+ ?; ]) q0 K
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
. ?$ d  p% R1 d4 z2 m                                        exitg1 = true;$ |: n1 _9 k7 [( R0 k6 _
                                } else {
+ ?% j6 n( q+ V: ]1 Y$ u                                        ix++;
% G- L- @! {& g- P                                }1 M/ F! g& X' R0 @. X9 k
                        }
5 n! z5 p, j4 J9 x! r                }9 x  V- l6 W5 A
- l4 F. w: y& V5 `9 o* }$ l& t
                if (ixstart < 81000) {
3 M5 z: V6 W3 Y; R$ f2 m                        while (ixstart + 1 < 81001) {
. c% U: R( R& U/ Y( N" j) z                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
0 S; z: W! h: \- s$ y  a6 J, J& t                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];  |) ]5 z, F# c, D! Z1 @
                                }
  s4 \( ]: p# q* P6 I* ], S
. K& \) N- P1 x5 T4 N3 `                                ixstart++;% Y3 ?/ E; j0 d7 J
                        }& f) P8 x& c  H9 a: T6 @+ g
                }4 F% R- V9 {- ~$ `6 h: B

+ m# |! D$ j; v' \                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);1 T& e; O# f" A, Z- R# B
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
8 m0 P" o$ k0 w" ~8 V7 j1 z/ {                        yiDuanShuJu_mean = mtmp;4 y% K8 N3 V4 u, y2 s7 s( p" u6 `
                }
: q- s" M  i8 P6 [0 Y# s5 Q$ Z; u) w6 a& h2 t% s( J' l" N9 K
                /*  找出极值 */
/ L0 t2 w9 N7 Q3 V, O' w' h0 t  q3 e                for (ixstart = 0; ixstart < 81000; ixstart++) {
; G, f6 j/ ?2 T; u5 B8 d  _                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;) b1 s: W; _( c: q5 m  g" [
                }# s$ u* l1 V! P" `  r. `
/ ?4 _2 X: k  Y: r% O
        --------------帖子字数限制------------------7 H! g$ \: z5 t# \$ n5 E
}2 y( H( i! H! y  v# U9 M0 {2 p
7 k3 e4 n+ B$ g2 P" N
' M$ r. h% S% ]) c0 r$ G

本帖子中包含更多资源

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

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-22 08:57 , Processed in 0.042285 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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