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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
% D' G& D7 j8 f1 t# d" a# u9 ^% x) {
各位大神:
1 |% @8 O( w+ z     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
" c4 n- |5 g2 w6 [: Q, X      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:* `% j/ N3 z/ y5 m! ~

9 @5 r  R1 |- ^- H, |3 r  K# g     + H* Z" l6 q/ x3 b% {' J
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
, P; ~2 {3 g9 F4 d/ f+ c+ v8 n! J) M& o7 h8 ?/ M3 \# O
并没有其他线程
! }1 ]2 I$ W' a2 o- V反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
  S: P* @- S- k+ a' X3 X) H6 F8 h1 j也说不定是和堆栈有关系。。。。。。: }+ N( L% T1 B; L3 z
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 ^' _4 p3 H6 h  K; }% b4 x+ q1 R6 y9 g# U6 x8 V' P: o. g. e

8 C5 ]9 T& a4 }, G1 q# _7 w
4 s# s) R) \4 F1 |3 \8 [1 s' M& p我也很绝望啊,希望大神能帮帮忙,感激不尽,!
8 b* I2 M0 E4 T, K: C
! s( N' T! C6 @- D1 y0 z5 d# w
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];( {+ g: j7 Q( |/ X6 G
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
' c& `* e' l. x0 F
/ r7 T3 S4 v5 G' Oboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(  p" n4 ^% S. P. k4 ~* y* X7 u
                const double data1000[1000]) {8 \. b! |  N. k. Y( u! Z
. H3 ^4 |: N$ B, f. |2 v/ ^6 ?! l
        int myfuck;
% ]+ X  }( E. f' k3 j# s        double yiDuanShuJu_mean;: ~6 H- _4 V& k" _; y' M: J/ C
        double yiDuanShuJu_LowMean[1000];
& T4 b' ]8 a# [        int ixstart;' C. }8 ?6 |2 w: y& b
        double dv0[1000];
0 J' h( w+ C" `8 k. f6 D0 a        comm_AGC pAGC;7 K$ t* ?0 j6 a% m( E9 P
        comm_CarrierSynchronizer pFineFreqCompensator;
% ~9 I1 ?/ I! ?) A" P: N5 y        dspcodegen_FIRDecimator pRxFilter;/ E) V1 W2 n0 w: M- y) z, R
        comm_SymbolSynchronizer pTimingRec;
4 n0 K: @4 J! j# O9 e/ U6 @/ V        comm_PreambleDetector pPrbDet;
8 w6 N7 B1 H) l- v# z        FrameSynchronizer pFrameSync;
3 q' a; a7 _1 F) C# {        QPSKDataDecoder pDataDecod;
  v6 J: @; @0 m        static double usable_left_filtfilt[81000];
9 Q$ m  W9 f1 m' z& r        static double youXiaoShuJu_QuZhiLiu[81000];, @0 _+ A# J, b/ u3 D
        double mtmp;
0 v' F) {5 N( C" z5 C) {        int ix;
1 G# ]2 i/ X( s2 I& f9 v9 g. b4 l3 @& L        boolean_T exitg2;
6 b' Q/ ^: ?, e        boolean_T exitg1;( q7 L9 f- o! d1 q+ \& Z4 D
        double YiZhenShuJu[800];
( ]# |' T. o5 F8 ^. B6 ~1 U        double dv1[800];# M3 z7 L+ [$ i

  b( ^  X! o) e& n
: T4 j0 B  w. M; H6 E/ n        double b_YiZhenShuJu[800];
6 _' a( D% l1 t  Z7 t+ d        double I_filtfilt[800];
* |; L0 H: C0 X# r6 d( `1 G        double Q_filtfilt[800];( j  Y* Z1 S, |: U0 s% Z* ?
        creal_T b_I_filtfilt[800];6 T! Q$ C0 R# z- H
        creal_T b[800];  P" x; c' Y& H
        creal_T RCRxSignal[50];
7 Z4 i; f3 v$ l6 N8 h        creal_T fineCompSignal[50];# t$ v" m8 A  Y: u+ o
        double phError[50];
4 n2 O# a8 G* h! r. F        creal_T timingRecSignal_data[28];
7 |; n& D* F; C" w! h  d! n        int timingRecSignal_size[1];9 {, c/ _4 c4 }0 K
        double prbIdx_data[28];! l' h9 F( `. k+ T
        int prbIdx_size[1];+ p3 G$ ]0 i6 `
        double dtMt_data[28];7 B  Y( t1 g- N
        int dtMt_size[1];
) V) {$ v: J3 o8 [, l& E2 q& V        creal_T symFrame[25];
  I( C6 i* T: }0 ^" @. f        boolean_T isFrameValid;1 T! y! W4 ^% T7 u/ m4 V: _# Q
        double unusedU0[3];# ^% s! k' t5 R' }8 r6 {8 K

9 v2 e3 f* J( Q- O) `& \        //调试过程中的变量
, ]% a* @) W! w1 j1 [+ a        int  enough_data;
% ]- w  F7 E1 F! I: L; }* l; {% o
8 b9 |$ u3 M0 B0 F5 d. `' f1 p9 y( q        int enoughDataFlag;
& d8 o/ j+ C; ]% r& ^0 K1 J        int yiDuanShuJu_mean_int;& C& n0 q4 }0 p# i" p
        int int_sum_dv0;
4 F1 [* k. L/ [8 ]& [1 i& a" i6 L' V        int oo;& }; z( I0 I$ A$ m. O' _) S
        int ii;; _; c" Y  K5 l2 l5 `6 [$ X0 f7 C
        myfuck=10;
3 O8 k3 n7 Q+ ~) c7 Q- ~        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */  D( u9 P  @1 B6 j
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */0 {  O' D1 \$ {" H- x+ I

6 E4 a$ i1 V# q, |        yiDuanShuJu_mean = mean(data1000);! K& b+ a5 E  S/ Z6 f
# m% d. h/ P& L" P0 U! S1 ~
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;$ _5 f  t/ I4 t' g8 N$ Z" B
        UARTPutc('A');  t( a- u' B, }& Z2 A: K7 A& v
        UARTPutNum(yiDuanShuJu_mean_int);9 ]9 e7 X1 r# u9 p" X! Q
        UARTPutc('\r');
, c/ c, ~1 u, o! B5 A, Q. g& T        UARTPutc('\n');
# v' z* h9 j) D+ l2 a- T1 P% I  X/ j" r/ L- Z( T( w$ K# D
        for (ixstart = 0; ixstart < 1000; ixstart++) {: N: \$ C/ m3 h8 a. O1 _- I
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;2 @; i; s# q$ ~- Q
        }
+ k5 o2 [/ ^2 w. H/ f( }; e
! {* z. k6 x! G( k$ a        power(yiDuanShuJu_LowMean, dv0);- \, {3 E  [0 Q4 _# a

( G6 u/ i+ |" A9 Q) J; ~8 S1 t9 v$ {        int_sum_dv0 = (int) sum(dv0);
9 `. m, \7 _: f+ E6 ]
. I8 j: L( r6 ^1 l- l        UARTPutc('B');
2 e5 R) u  i7 A6 E# l" K& w        UARTPutNum(int_sum_dv0);( H/ w/ j5 L' e# {" e) S5 l: @: Z0 C
        UARTPutc('\r');
7 a$ h& x1 j, O* f6 U* K. a        UARTPutc('\n');3 K4 w/ Q( ~8 K. c% w/ O( _
/ f0 Y& L. W3 s! [& ^" o# B; v
//        int compareFlag = int_sum_dv0 > 1.0E+8;% C. @" Y; V! U: B3 F/ n
1 c& e* h* b2 a" ~, ^
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?( ~4 U) D( d5 G, ~$ H
                UARTPutc('C');
( c! g/ y9 Z6 r7 J3 J: D* {/ Q                /*  比较信号能量 */, i; e2 w5 N( ^  i
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */$ |' n! r- J. x8 T( n# o" C
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;+ }6 w* ~: U0 X$ ~* p1 D
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
, V% ]" C9 Q& r+ K//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =  }( f, f* M4 Z: y+ R- _
//                                        yiDuanShuJu_LowMean[ixstart];1 [( n; Q) y( c7 o! m
//                }( r8 r. ^  s; [4 N
/// k+ x- D: S+ S) P# d5 Z' V
//                youxiao_k++;
9 M& `9 d2 h- v3 y4 l//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 u7 F& C' r5 x! F1 y
//                        /* 感觉要取21个数,即0-20, */
: S! I  f5 B  @) X//                        enough_data = 10;//有效是10,无效是04 t) u/ F$ @4 F2 \) e/ w9 F
//                }& ?6 n7 F8 M6 P! `
        }
2 b0 o2 j7 S1 \+ m. o& C1 s, V
; S$ @# D2 _( ^; a$ m; B2 d% x6 @# D7 G) F/ I2 L' N
        enoughDataFlag = 100;0 ^! U0 t! d* t" I+ P0 s3 I" J" x  i
        enoughDataFlag = 1000;, X8 f  E/ }1 }4 r3 I- E9 O
        enoughDataFlag = 0x02;$ N! Z! {9 {$ ?4 R. k
        enoughDataFlag = 200;$ X8 u+ H9 y6 E" D; ~+ ^
; f. e8 b* ]5 n% i
        int myfuvk1;( H5 `% b' K. X1 ~! E* d% [
        myfuvk1 =11;, N9 X  V$ p' {; i2 Y. O% N
, x! x0 P9 j$ v" \
* J2 W0 @0 z/ I4 j
        enough_data = 0;
4 {" D( m9 U- A0 E. j2 l
; n. e/ i6 l" Z* Y& o9 x9 I//        if(enough_data>50){
6 e8 t4 j; ^; d$ `2 P5 c  m2 o( T//                enoughDataFlag=0x01;  K' I# Q5 r) L& n4 I% O
//        }else if(enough_data<50){
9 H, F* E) v$ U$ C0 Q; }8 w5 v//                enoughDataFlag=0x00;//0x00还是不行
* `9 A! a  E6 d) @; [3 f) H9 f//        }6 i9 o. j6 Y0 Z' A% S3 e; _* }/ a; R7 W
; k; y2 B# H, L% R% P
+ g7 P) o- F" ~7 x
        oo=10;1 q5 H- e* G  f3 r3 a% f, S5 f
        oo = oo  <  5;: |) F, e& @- O, @" L
        if(oo){
6 R% k* ?8 B) _  V# a                ii=0;& p1 P6 I, i8 o+ g6 d/ o
        }# G0 h$ T" v# e4 f: [
        if(oo  <  5){
- X' X1 k  k/ j* D! j, \9 y1 j$ |                ii=0;
4 F8 Q4 \& \: O* \) H. B        }
; |# ~/ t8 X6 }  Y+ W        if(oo  >  5){
+ P) L& p( C& P, t9 w                ii=0;4 n! v" n/ k- h# ]! d
        }1 Z9 \: Q5 {$ Q! Z+ y7 o; y4 h8 ]
- D: [" q' c( f9 \) }
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */9 \, C& G6 d; N+ Q
        /*  如果数据足够才执行主程序 */
# Y, g( n0 }( y7 `! }9 f        oo = oo  <  5;# {+ h/ d. Z0 G
        enoughDataFlag = enoughDataFlag  <  5;6 L# B! k4 D# A- k* l4 K
        if (enoughDataFlag  <  5) {
( b9 S7 f; r4 A1 O+ ^//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0' p" s- F, ^0 u. m2 O& X6 V) [- m
                AGC_AGC(&pAGC);2 F% |" q- C" U5 K- _# J

% W) {' `' H0 r2 {7 p9 ?                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
$ Y* B& g5 F9 {. p: @- k/ T$ N                FIRDecimator_FIRDecimator(&pRxFilter);
& u, [0 t' g: O  g& @
2 _" y- o7 B; }& K0 ~                /* Downsampling */
) l0 N- L& M. `! Z3 V; j0 `                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
8 c) v% S) Z& e7 Z$ W6 Y  w: a9 i& Y" i# _
                c_PreambleDetector_PreambleDete(&pPrbDet);- t2 }8 k: s( c% G4 j
9 b* t. R- _+ {& p$ A8 s: p
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */: `: |! F& P' p3 j" a
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
) V/ V3 T% M5 K3 l2 i                /*     %帧数量=100 */
/ u. c; q$ b, I( V$ E                pFrameSync.isInitialized = 0;- H) O. X! B3 Z% _# O& L' H% {

* d1 j# ^3 m. Y6 f" }' |& Q                /*  [EOF] */
$ L8 ^1 D3 C7 o$ D! [. ~) f                /* 前导码长度是13 */" _* Q& S6 Y3 \& X' j+ |3 \
                /*    %qpsk */6 R, F4 G. ?* e7 c! p7 h) t5 {: d5 A. ?
                pDataDecod.isInitialized = 0;
- |5 m  l, C: Z4 F# k6 e" M3 w4 ?% J  v1 Z) Q  _% \
                /*  end */
* c! w: g, `. n7 A7 B. ^& C                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
; A3 d" d: p. u6 S# `                /* Convert 3-dB frequency */
; K. P0 x" Q% y: W) O' Y! k; O                /* Convert 3-dB frequency */
* h6 z" o0 N/ X* f; j                filtfilt(save_buffer, usable_left_filtfilt);# N8 s* {) J2 x' W$ k; K
                for (ixstart = 0; ixstart < 81000; ixstart++) {, R& |8 w6 l+ Z) p( ]; c& Q. Q
                        usable_left_filtfilt[ixstart] *= 2.0;' u. ?1 l2 i2 A# r4 P2 R  [8 `# ~
                }: @* u( w6 J0 W$ s' ?# d8 t/ K

2 L' w  t# E* R8 K                /* 注意乘2,处理幅度 */
& q) }8 g* E* O) m# u7 m                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
* d+ ]9 Q. Q/ g' O                /*     %% 行列转换 */
+ H, g. Y1 r; P6 p                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
5 D3 |! {. ~& Y" L; u& ]                for (ixstart = 0; ixstart < 81000; ixstart++) {- f& p- n  F6 W% _3 N6 Z) Z
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
# Y! R3 b/ x# B4 }                                        - yiDuanShuJu_mean;
. r% ~; L5 h1 e; U# B0 K                }4 |4 K: C4 z$ u3 j8 r8 ?

0 Q, M' S* x' U: x/ e                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */, A3 w( ~2 c9 t1 k( c' S
                ixstart = 1;% L$ Z  m& Q/ X0 J
                mtmp = youXiaoShuJu_QuZhiLiu[0];
; h" W9 m% d( w6 C- H                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& u$ s& ~- B( D
                        ix = 2;
. }* r$ }/ s& V# M2 ]. {1 Y                        exitg2 = false;+ X* c* D/ X# D: H; j0 L
                        while ((!exitg2) && (ix < 81001)) {
/ G/ y: i$ A* c# Z0 V/ F                                ixstart = ix;
) l- _4 T: d  Z* X3 o* a- E                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
2 H" P5 L8 @: h% n% k  M                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];+ j6 ]  A* _8 t
                                        exitg2 = true;
* \) F' N8 m5 e1 Y# g                                } else {
! ?  F; l4 L# w* ?  l                                        ix++;; [. v9 h+ _8 j; h9 @4 O
                                }
, ?1 s0 H% ]6 B# T' T5 p+ \                        }
+ u# {/ p. j) e  k( s                }: j  }7 e7 @9 }# p4 h- N  K

% T1 n. G! l# l9 D* c  T& S& W: }                if (ixstart < 81000) {% m3 l- |* [/ o2 b$ X
                        while (ixstart + 1 < 81001) {$ z% v5 Z) e: t! w. R* }4 t' V9 |8 [
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {4 H% D# ^9 U1 r( H: f
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];  s  Z% m' O8 T, C4 ?$ G
                                }
; P- d6 w& N6 C' i9 K( A
! p/ W+ l' X4 _- M* B                                ixstart++;7 N$ o, ]0 n8 Q. @$ e% N- P0 y
                        }
( b3 l' o- W2 [2 _. A                }
8 Y4 F+ h! \$ K" L( l+ n" V& I+ R1 i6 G% V1 t8 n
                ixstart = 1;
( y; L2 h/ a: v9 E! s1 n, Z                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
( c5 p, F* b  M) w/ x" p                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 d7 y* z6 N: P0 n) N                        ix = 2;
3 G$ E- p: J( i9 c" [: O4 i+ Z                        exitg1 = false;
" |2 w- n" B$ @  h- M  ~                        while ((!exitg1) && (ix < 81001)) {
/ i$ N, x. i0 _) b& r' ]" b                                ixstart = ix;* c* V% B6 A; U6 U  d. s
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {. ~" `! }1 y" c7 j: b
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
* C  R/ _0 J, o                                        exitg1 = true;7 m" s, t# x# @: Y4 Z
                                } else {" U& q+ H" _; l& m4 L% Z$ z
                                        ix++;
. C$ J/ V; b; `2 T$ r' t                                }
0 M. @, z7 d8 ~& F- N. P                        }( H" K4 x1 f! i  L0 B8 [: R7 W
                }
! I" o, W, e3 z4 N4 E6 m
0 c; }# k& m9 Z* \0 ~: A9 m" W8 I                if (ixstart < 81000) {
# c3 k2 l% [! ~% ~# |% Q                        while (ixstart + 1 < 81001) {! ?' F) O) n6 N% A4 L+ }6 y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {1 l# ?" |; l5 V5 |; G
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
/ k* ^& P7 @( J1 I) y$ t, z) S0 m                                }
2 _' T6 ]9 k9 @9 e# X& L( V
* ]8 j- |- B, h8 |, v6 Y9 E                                ixstart++;+ Q# Q( e4 D5 Q
                        }7 `  m4 X' A! q9 f' L( }& P+ R' i
                }- z6 ?" n8 }! H& Z/ s; G! H7 F
4 `/ ~$ P- ~/ M3 J& G4 l: C
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
9 n3 a: \7 O: U( j: Y; [. F3 s                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
0 W) V, n: t, ~! G! J& P                        yiDuanShuJu_mean = mtmp;9 Q7 W3 S  }. P1 S3 w. I
                }
" }. `& Q) J% v, u! K4 c9 P
+ F1 w* q$ {  ?9 S                /*  找出极值 */
2 e; z. ^0 A2 R9 P& h                for (ixstart = 0; ixstart < 81000; ixstart++) {, w7 f: J% G( _' Y7 j
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;" O! }, g  k& L3 h
                }( Z2 e' c- {3 G4 `( v# t# Q! }

  y: O3 e& O. u( z* _        --------------帖子字数限制------------------9 t) P6 v" L; c, O
}- d0 Z- O& _' {

  h$ F6 s4 K# M! P
% b. {; \- @& X. {. K* ~9 _0 Z

本帖子中包含更多资源

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

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-4 11:31 , Processed in 0.065493 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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