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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ! W) ~  l; l% F3 \2 T

" _7 G$ x! M! o: f6 O; M1 X各位大神:2 w& i+ d% u  m+ q7 ?
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
8 H  D3 F. R. c9 S6 R2 p      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
7 Y6 J$ ?4 U6 ^1 ]+ J6 ~! U6 l6 n$ m- V/ T
     5 o' u2 U) C* n4 Z0 A3 S/ Q
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。( p7 z4 }* Q$ r. ^& [4 Z% h

5 {2 C$ Z" v8 q* Q0 R& x并没有其他线程
. `- {3 S. J: q反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
, F  V: m8 J0 }! D, ]" S. J也说不定是和堆栈有关系。。。。。。& n: I9 W9 E. g' x: E8 Z+ e
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....  U) V$ _. h! E7 P' S  K: a8 P3 ]3 v( w

! x$ ]0 V/ g$ ^# Q$ Z& X+ [" n+ v: k- w: g
9 h5 I3 [3 Y0 v& d
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
( G" c) q" t: a0 W
% _+ F! u( E, h, {$ L# Z: \/ r" R1 i1 t- j9 i4 Z0 o
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
! U# A8 M- A, l$ J6 s% j# `        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。( ]4 @5 }, L6 @% W

& {; R0 E' a0 U7 o% W9 d) ]# e5 rboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(9 Y  w: S1 t! ~4 F7 ^
                const double data1000[1000]) {
" ~% h+ |- d9 z- w& O1 L0 M6 p* N& Z9 Q- X0 W: L6 L, T
        int myfuck;
4 O& R2 n# q" S7 }8 Z- M        double yiDuanShuJu_mean;
6 @8 p. T2 W4 ]3 n4 W        double yiDuanShuJu_LowMean[1000];( T! F  |2 A; V7 K9 p
        int ixstart;8 x9 R" r4 M# Q9 n! g6 g6 i* ]5 @
        double dv0[1000];
+ W1 ]' t* @: F: G        comm_AGC pAGC;) H& U2 ]6 A2 e. R
        comm_CarrierSynchronizer pFineFreqCompensator;( ]1 ~0 b+ U+ x8 f+ V  A
        dspcodegen_FIRDecimator pRxFilter;
6 {9 h0 M* o' R- p( D4 p1 a        comm_SymbolSynchronizer pTimingRec;
/ F( Z. W- b! y        comm_PreambleDetector pPrbDet;3 e9 O- B" k$ r/ I) |' }
        FrameSynchronizer pFrameSync;
+ a# }! U: ~& g        QPSKDataDecoder pDataDecod;
. E  ?' _) _7 Y7 A0 z; l        static double usable_left_filtfilt[81000];( x; x. P& S! S  N5 D2 v# ^# D9 z4 O
        static double youXiaoShuJu_QuZhiLiu[81000];
$ j+ M  d/ X9 P# C% {( ?        double mtmp;
4 A& s  @- |5 Q5 s( b        int ix;' ?/ O0 v! h* w) \! b
        boolean_T exitg2;
5 w$ G, P4 M* k1 c$ h+ B. J        boolean_T exitg1;
9 r- ]. l/ Y2 f  t* A# ]6 V        double YiZhenShuJu[800];
8 H) O6 Q3 v4 z; ~' L        double dv1[800];
, s$ i6 D# K- r% j* A5 k/ E9 D! `5 g, O
6 m5 _8 D6 |0 j) s* L# T- F: h
        double b_YiZhenShuJu[800];, a* ]! M3 U# ?2 A7 A+ V- ~
        double I_filtfilt[800];* h/ b8 P2 A& ^7 w) N; Z
        double Q_filtfilt[800];
3 |# n4 g9 ^5 V% y7 C- F5 j        creal_T b_I_filtfilt[800];
9 i3 L# r1 U+ l- z        creal_T b[800];  f% x0 H. z! N0 y( W% S- Z6 C- Z
        creal_T RCRxSignal[50];# f6 V/ C- K. q
        creal_T fineCompSignal[50];
, [, o3 }* j9 Q0 [        double phError[50];" l% w1 k! a' y- G: R. d* R
        creal_T timingRecSignal_data[28];6 N: H& \4 J& w& O, _
        int timingRecSignal_size[1];
1 d1 n+ k3 W5 @% x; u. c        double prbIdx_data[28];
6 u0 C3 v4 M" L) f( j* u0 a        int prbIdx_size[1];) u/ V4 o- _' `/ \
        double dtMt_data[28];
8 e* g+ }# k- F8 k- x        int dtMt_size[1];
! P. m0 s  G/ g0 O        creal_T symFrame[25];; o3 z  Z. M/ l8 \  Z: E5 @9 w
        boolean_T isFrameValid;- X8 h9 y* C& j) k/ {: C  _3 I  B1 [
        double unusedU0[3];
2 d" Y: X! o& p* j5 C
) T' _3 F1 z0 l- r+ ?        //调试过程中的变量
0 A3 w. h1 M: \9 z0 W) r        int  enough_data;2 _& R) c0 u0 F7 |
, h8 C; c( c- C
        int enoughDataFlag;
8 s% P$ o- D: ^7 H! [/ q5 Q, N' v        int yiDuanShuJu_mean_int;
# j$ r3 u6 X! W: C! j* ]" ]        int int_sum_dv0;
1 ^+ c  ?' \% y$ n+ a$ k        int oo;
- e+ M+ o6 J- f5 t7 C( i' X. ^        int ii;; n1 c/ U, s" Z+ o6 f! ]+ d& i
        myfuck=10;& U  a# Y3 l: q4 C% E$ ^# p
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */( h4 Z* J+ l$ L" w( a, h
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */8 p6 H" q: p8 X6 y9 z+ A; t, l
# L7 y2 z! q- {
        yiDuanShuJu_mean = mean(data1000);* u$ q1 E# ]* V- z; z* Z2 z/ M3 E

" @! H/ G; V3 B7 T5 V; f        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;: D/ M1 a- |1 x
        UARTPutc('A');
) S1 C$ [( G& M( e& e( c& K; O        UARTPutNum(yiDuanShuJu_mean_int);2 M+ B( p; J- D* y5 I2 A7 S4 C$ V
        UARTPutc('\r');. P6 L- ^1 F( E3 I
        UARTPutc('\n');
& P! i# G0 f; B) f1 ~) P* i# ]; [1 q+ Z# h, w) ~! [' K3 I
        for (ixstart = 0; ixstart < 1000; ixstart++) {6 U& _( _0 q$ s, K7 P2 d3 A
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;) R6 M5 H: E6 O9 O- e2 {, a' Z$ s
        }
) ~3 b9 n8 X# ]$ z' l3 h7 i/ X" T5 u" B. l2 t/ R
        power(yiDuanShuJu_LowMean, dv0);0 M" l2 w- A7 x8 d

5 m' w$ V# w4 f+ J) y* e  c* q        int_sum_dv0 = (int) sum(dv0);' n& c- I1 q5 G2 ]0 [

0 E5 z) X7 L' G, ?% Z        UARTPutc('B');  V- J* s4 `* b- h( ?* ?7 o
        UARTPutNum(int_sum_dv0);! e# t: [" l9 P! P
        UARTPutc('\r');2 x) r4 I0 t4 X1 s8 u; h3 g4 |
        UARTPutc('\n');) X4 u: f6 @: |3 f; \$ t& D
0 U) S6 l+ X" ^
//        int compareFlag = int_sum_dv0 > 1.0E+8;
7 c" }8 c$ Q. {# V1 e
: E. |0 T- r! T( B        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 {  m9 V6 C0 J
                UARTPutc('C');
8 I" r, q, P" ]! R* p9 \2 M0 R                /*  比较信号能量 */
3 e& ]" k* n! O8 f                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
) b9 l$ e$ B. i9 z+ B//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
7 J9 R6 c4 a* y) h: r# i% L//                for (ixstart = 0; ixstart < 1000; ixstart++) {0 U4 w2 R& T) f+ F
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =! k4 a5 o4 b$ C( M0 o
//                                        yiDuanShuJu_LowMean[ixstart];- G4 a  ~. Z) H+ b5 E& x
//                }
$ y' B5 ~: n" m3 D9 D! y//
" v9 W/ V4 I! g& V//                youxiao_k++;) l8 \" X% j9 D, z; h
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
4 o8 p* x" I; E* F' l//                        /* 感觉要取21个数,即0-20, */( `* Q( S; k: _! Q( M) ~# n
//                        enough_data = 10;//有效是10,无效是0' g! G; a( m6 H7 t* ]9 |' y) C
//                }# M5 p/ K6 a: y) I" p* F2 m/ p6 m
        }& [% D  `% N+ s; k5 W9 ]6 R
+ m( p6 j& d* Y  a$ ~
4 G+ H5 U7 \% O& n- Y% D0 ~8 V
        enoughDataFlag = 100;* R) P$ o8 Q% V; Y
        enoughDataFlag = 1000;: ^" m+ w  H; V0 L/ G
        enoughDataFlag = 0x02;4 E- a! }" y/ ~
        enoughDataFlag = 200;% H8 @  [0 d% l% j$ ]+ P( n7 A
3 H, u9 }/ }; k0 H4 `: {0 K
        int myfuvk1;* ]9 _; o/ b8 }% q5 w1 _3 S7 e
        myfuvk1 =11;
/ m! v' M* T: m' @  _. I% b; h1 I8 \3 q6 O( W/ N9 Q; X

6 k  m9 v: U$ b$ T# G        enough_data = 0;
' C6 b( [/ I4 R
* Y2 T5 S+ L* T; e//        if(enough_data>50){5 F% L9 h! l+ z
//                enoughDataFlag=0x01;
9 B8 s, W! ?, [//        }else if(enough_data<50){9 L3 P* H0 b) N
//                enoughDataFlag=0x00;//0x00还是不行. n$ R: }  _5 j: w  ^' j5 ^
//        }
  Y+ r' s( w; M# \7 z- Q
, f) [2 c$ Q  L& a. G# E* r7 ]0 H6 ^1 F# s% ~6 G! A' S! m
        oo=10;
- R, U% C" h0 f7 h. [        oo = oo  <  5;3 s# G+ j1 J+ P5 T  k: W
        if(oo){
' O# j/ R6 g$ i                ii=0;3 y  H! U/ c; X+ h' A, d$ z
        }# D# {* E' v+ q7 {# ]
        if(oo  <  5){8 M' Q1 v; M3 Z
                ii=0;. n. x) \$ ?2 ]* p' a4 Y
        }3 A5 w1 ^* Z% \
        if(oo  >  5){
! J2 _7 U  \' A+ F' X, J. h/ R                ii=0;
' V: s9 C0 i$ f" A3 d        }2 n: R; h; g, D5 v' b
. z8 W' e/ `" R& {3 T0 O$ n1 O
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */+ g! ^% I$ l$ M, D) n  K* @
        /*  如果数据足够才执行主程序 */- m7 C5 a8 a  l+ Z8 J
        oo = oo  <  5;6 N% ^# K+ _2 D( F% q
        enoughDataFlag = enoughDataFlag  <  5;
2 N/ F4 L0 \* U" U  z7 H! Y        if (enoughDataFlag  <  5) {
' f3 ^; x$ k2 g. K4 }" E3 V//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0; @9 X3 ]' l# M3 d( Y
                AGC_AGC(&pAGC);% P9 P" m, k& N& E+ U" Y9 K0 q

3 {; _9 a% e' s1 j' l8 |( e; v                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
' l. x- t9 _) T) j& N                FIRDecimator_FIRDecimator(&pRxFilter);
% x  Y5 _; i8 y/ `1 k8 I
5 L- y; Q* e/ f" e) r; N" W. \                /* Downsampling */
$ j* j4 E5 {( i( K0 D# ^9 p                c_SymbolSynchronizer_SymbolSync(&pTimingRec);2 x: |5 g/ O0 _0 ^, U  H

. R8 G/ e4 K# N5 U0 O  [& s: D                c_PreambleDetector_PreambleDete(&pPrbDet);
( M9 M9 ]+ O5 B  I# j' o) C6 ~6 L4 z5 y9 B3 c
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */9 U4 d% b8 F( i6 m
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
+ Q  [# P7 z( s7 c                /*     %帧数量=100 */
) d' u& v% w3 S6 n5 S: M                pFrameSync.isInitialized = 0;6 h2 W5 g+ ^5 _* }

) G9 H* @' {; W/ _' D6 C" x                /*  [EOF] */
* T7 B7 ?- c" {1 f3 a                /* 前导码长度是13 */  P0 x. j* C! M; k+ _
                /*    %qpsk */; ?" e9 M3 t& N9 R8 j% v: K& i
                pDataDecod.isInitialized = 0;
# ?: o/ J$ u7 Y! x* m5 {4 t; l9 ?  u5 @1 u* P1 M+ p
                /*  end */
0 Y1 V% J, c' P5 F  O( D" |                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */7 l+ i( m' y4 w% \: C# U4 M" [  e) K
                /* Convert 3-dB frequency */& h9 s3 K6 i. T7 Q8 f2 L+ s) d
                /* Convert 3-dB frequency */
- S2 k- J6 t6 r" c3 N' u                filtfilt(save_buffer, usable_left_filtfilt);
6 j8 t2 {1 O6 N7 L) k                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 x3 H, X0 k7 z3 f4 V: i                        usable_left_filtfilt[ixstart] *= 2.0;6 t; u* o! t; \3 l4 Z  ]5 m
                }* X: D. v* n5 R* r) N8 ]
+ @: j' ^0 _, b( {5 T# r
                /* 注意乘2,处理幅度 */3 t. Q/ ^. U# ~5 Y( ?
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */9 h4 Z6 x, ^5 }) w
                /*     %% 行列转换 */
! q1 n/ c, N& E* e) j9 J( o- Z                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
" S' g  O) ~0 u8 n* {6 W                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 ^/ H' ?5 |+ Y/ e                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]! f" X5 j4 ?, i% r9 r; Y3 E8 D
                                        - yiDuanShuJu_mean;
3 ]* [# H) _$ U6 P- p( ?0 ^1 T) P' m                }! f% ^$ M3 K2 ?' R# f  p
' [2 z/ `" r: B6 E3 @* p5 m  c; R
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */, B+ {: ~0 L3 G- s; H( j$ B7 n, P" [
                ixstart = 1;. |& C+ e9 |* \# o! c2 \% t
                mtmp = youXiaoShuJu_QuZhiLiu[0];6 S( Z  d! }( c4 ^
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {, W) c+ ]. b/ o7 H5 U, A
                        ix = 2;
3 @: i3 C* z+ Y9 J0 U" n& ^                        exitg2 = false;" B& ^; ]) P$ V: h
                        while ((!exitg2) && (ix < 81001)) {- c3 k$ @! y0 \! o. R, t
                                ixstart = ix;9 e: ?( _8 a8 m; c6 T
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ e/ N, N$ m: y4 S                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
6 a$ `# V. r2 U% s' f- @                                        exitg2 = true;
/ q! R0 ~; o' t. z/ Y$ y7 q                                } else {9 B) [5 D5 [" s7 t# O9 G: B: v
                                        ix++;% J) x9 k( j7 C0 P3 [
                                }6 ~2 i9 Y/ L$ u1 m3 ^  C
                        }
" ]4 ?1 z8 X+ T0 c                }: ~  P, M( R% `- [$ E

; l! w! R" ]% e; e                if (ixstart < 81000) {& O4 n7 v7 V7 g% w( E! d/ i
                        while (ixstart + 1 < 81001) {0 s' [+ C( l  V
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
7 D' u4 B$ s; A# H                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];9 S- ]. Q% u5 i0 w: x8 ^
                                }9 R0 e( [& \( j: b! X
' h' U% k2 i4 G# [9 l; A" O( c
                                ixstart++;
9 D( F' I7 i0 x' h& v1 A                        }' N% W& L; Z/ K
                }# ^) g, `  C4 ~7 Z8 {

. ]! P! X* ~# v, D5 K5 d  [* Z: w                ixstart = 1;  e* l* P  z3 h; q4 t9 A
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];6 `0 H/ j$ d. O" T& l3 [. V+ [+ A
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {7 w7 R  ]3 B, g8 z  |) ?
                        ix = 2;( V' T$ {# W' d
                        exitg1 = false;
' T/ }! ]( E% `8 V. c8 ^                        while ((!exitg1) && (ix < 81001)) {: k% A3 C- s, M* y6 I. i
                                ixstart = ix;
& ?  c$ S; A; S: B$ ~! y2 g+ K                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
5 Q6 v6 _- |" o2 L5 u2 s. z* y                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
2 Q! k. o0 u3 Z5 `% j3 T* D, y) o$ W                                        exitg1 = true;
+ l) `3 n, L. \) w: M$ J                                } else {
$ u4 N; ^& k/ P, G! c, l                                        ix++;
& Z6 _# a& }* H- s+ y                                }
) p1 {9 k- {3 {                        }
, S0 B" w( j: n( X& N                }* r: v, }# P8 r% t. l
4 I8 U# n) R% q- |
                if (ixstart < 81000) {
3 E" S+ a4 g: f8 c; R                        while (ixstart + 1 < 81001) {- y; _& F( S" Y& Q% A
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
! M' T9 ]. g+ `2 z& t% ^                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
/ h3 b3 I. ]0 i) }) J                                }
% l3 l6 O+ @4 v$ s: f1 k
/ n/ Q$ o- z5 j2 E' Z- R                                ixstart++;
8 Q8 ^- w/ A, E: T: l0 v                        }
5 Q1 j, i5 a' J' E                }
# p: r! M- |9 f$ J. ?; {" {( f
) ~0 a0 E5 `; g3 }4 Q% |) P                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
8 q& T- e5 f: F% r# E                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
" V% g: U; |- g. G                        yiDuanShuJu_mean = mtmp;
0 X; i8 o$ x$ }1 P1 W: H                }7 ]7 N" x/ G3 i# O+ z; F

8 Z: ?9 f4 O: h5 J- W" @/ c) E2 D7 X" |                /*  找出极值 */$ G; w0 g8 m; {1 T( ^# `9 m
                for (ixstart = 0; ixstart < 81000; ixstart++) {
0 E" Z7 X' n' N5 H; Z0 _                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
. D  j3 T2 R) y                }
% R' ]( p: ~- Q- \
. ~4 h8 j+ K! @; _6 z9 c. p        --------------帖子字数限制------------------: z; s4 ]" Q2 N) c. z" e
}2 p8 X2 s0 f5 I8 b5 u
1 V/ y4 R" s0 p3 C. V+ F: G3 j+ d, j
8 e. |* \- K' c1 ^7 K1 S  I

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 04:08 , Processed in 0.042590 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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