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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
) Y8 r, Z  I, _: g4 ~4 H6 A# N7 \( {  I3 Q1 O
各位大神:
8 k/ q4 g: z5 y$ D$ i     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
+ L9 @, Q% M- Z; H( W* f) b      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:. L. E1 ?9 X5 z

1 l1 C0 K9 Z( w( _( H* K     
, d' S7 t* e" i这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。: P- _- H! G) h) J, h! r
+ ]9 t& q+ W. j/ P
并没有其他线程
0 U& I: K2 F2 t* R' r反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% q7 z( V. ^: f6 K( h) V
也说不定是和堆栈有关系。。。。。。
5 X0 {. d' D- ?8 j4 a请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
: z  _% r( |/ E7 L+ Z3 t  D1 s; r$ P2 o8 `# Q! S; F

8 x5 w3 u% m' A, d) c3 v% @. m; d5 y; g7 ^- B8 G' _  e
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
5 T' F/ Q. m- ?1 X/ ?, Q( y( G2 t& M+ @, V

7 [2 O: R4 S0 T. `* o/ T5 h附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
6 y+ ^9 m8 O  u0 T& O        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
  `- `/ D* v3 f! ^7 N0 R1 @  O6 }5 Y3 E6 ]
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(. ^$ N) s4 G- H' T% p" Y1 e8 V1 c
                const double data1000[1000]) {  J! F% ?: I' `3 Q' \7 x

4 ?# c( d5 I3 b* L) l$ y" c        int myfuck;
6 u/ B% Z* H$ |% p0 I        double yiDuanShuJu_mean;! R9 w( _( [: M+ e7 S7 E+ S
        double yiDuanShuJu_LowMean[1000];! E1 W0 \/ \0 K" n, e* z$ P) I. a3 W
        int ixstart;
( w. @9 y+ h1 Q/ D        double dv0[1000];5 V7 K$ A2 L* t& v
        comm_AGC pAGC;
$ f6 P4 D3 M* h% T2 z        comm_CarrierSynchronizer pFineFreqCompensator;2 ~/ S/ Q' E: z7 F9 F! \
        dspcodegen_FIRDecimator pRxFilter;
; J: \) M8 B5 \        comm_SymbolSynchronizer pTimingRec;
# x4 K1 q3 B' o! X7 V' I; \        comm_PreambleDetector pPrbDet;
% I6 a1 k& y* I; r        FrameSynchronizer pFrameSync;
1 j6 |: o3 _* F+ p% m1 i) _- ~' g$ Z        QPSKDataDecoder pDataDecod;
- j" F* B4 Y  v0 k# Q        static double usable_left_filtfilt[81000];& k  A' i1 G! F. l$ p
        static double youXiaoShuJu_QuZhiLiu[81000];5 i" w2 p& l( M. E# r" P, [0 Z% E
        double mtmp;9 z# d0 j( U: v# P4 C
        int ix;2 h# u8 U+ I) d* S. z$ t
        boolean_T exitg2;
+ K, p5 j  C! |' X3 Z8 t% I        boolean_T exitg1;$ _; I9 J  }, L8 M9 M, Y
        double YiZhenShuJu[800];
. i6 M. D- n+ l% I        double dv1[800];
0 I( s# e, u7 |: g% ~4 B+ ?% a1 i7 L  u
; N7 R: W1 c; @
        double b_YiZhenShuJu[800];
( j( c! Q' B$ q! `4 a+ C        double I_filtfilt[800];+ t* |6 W/ w( T& Y' ^$ r6 |
        double Q_filtfilt[800];9 D' P( Z0 l8 `$ p' }
        creal_T b_I_filtfilt[800];8 s- j" C3 t" Z
        creal_T b[800];
& Z+ X: G% t8 @: }        creal_T RCRxSignal[50];4 X* f1 _: b$ i9 C
        creal_T fineCompSignal[50];! {8 r7 W; n  H9 [& f
        double phError[50];
, I" J+ F6 P. j  }        creal_T timingRecSignal_data[28];
, G- o3 m! i1 K8 b: L3 p9 A        int timingRecSignal_size[1];
# c6 X7 W# j( ]+ `        double prbIdx_data[28];
2 i: g7 [% ~) M  U        int prbIdx_size[1];
3 }9 r7 \% O# P& s5 e. o, n8 X        double dtMt_data[28];$ T* j0 B+ M+ N$ O1 }
        int dtMt_size[1];
) Q7 ^+ a, ^0 D' ?) x* W        creal_T symFrame[25];* }$ T- H: w; b/ P$ @9 E- c* v
        boolean_T isFrameValid;
+ f8 i8 F$ q- a- R8 Q( q( g        double unusedU0[3];  O. P( l5 K. ?7 E

& @) d3 A7 u4 d) h% w; R" e        //调试过程中的变量
" Q: E# A: v6 `& j0 d        int  enough_data;0 y4 _- R7 U5 i) }& S$ r

/ H4 p  E; z' c; }) Q' {/ K5 P        int enoughDataFlag;" {1 c. \8 }& Z
        int yiDuanShuJu_mean_int;
8 X7 n7 E: j1 s3 x        int int_sum_dv0;* J5 z% o3 r& v  n5 G9 ?3 @' t% l% B
        int oo;
) B5 O# v% c/ S. }        int ii;
( `% l, P$ @$ r# Y4 w6 F        myfuck=10;
' D  R* Y3 L' ?" H5 i        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */1 p, @5 }: F' `! u
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
( t: y8 S9 @* k, K% t
( W% K8 b. @$ Q9 b) _1 M( U$ y8 E        yiDuanShuJu_mean = mean(data1000);
2 v! v+ d" G1 h( k" ?
+ x) e1 S" z0 ^2 V: x        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
6 ~5 y# Z) f2 P( r        UARTPutc('A');* c' p9 {* u9 B  }" W3 v
        UARTPutNum(yiDuanShuJu_mean_int);& d# p, {* ^+ g0 {
        UARTPutc('\r');. }% i8 T1 y$ C+ c3 A
        UARTPutc('\n');+ i& l2 I9 Q7 c+ B. a9 k* s

  n0 E+ r+ }+ e3 m        for (ixstart = 0; ixstart < 1000; ixstart++) {* D/ {  P- V. X) s+ v2 e
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;6 X2 Z8 }3 l8 d6 N5 l
        }5 e/ q# T6 L7 ]# s  L0 E8 |; D

. X7 ^  Q* _, Y' z) v" T        power(yiDuanShuJu_LowMean, dv0);
5 [  y  k  ?; C" A4 Q, A& W
; n, |8 z4 l/ y( s" m        int_sum_dv0 = (int) sum(dv0);' }# W, Q1 D4 K8 n, }' B& [
# Q+ _" q- n3 b6 s$ m+ A
        UARTPutc('B');
7 M5 Y% @; O- i8 n, p' l        UARTPutNum(int_sum_dv0);6 u5 z. d0 j/ G' n0 I/ Q
        UARTPutc('\r');! ]1 B: |+ Z- h% [
        UARTPutc('\n');
  d/ |; e2 v" y* A+ {
8 i  [) }" r5 J$ L1 q$ P: X//        int compareFlag = int_sum_dv0 > 1.0E+8;
& V! R2 c. A* H; ~! i) P
; w, }  v8 R8 c. T3 _        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?# a( M9 M. Q. ]# [1 A1 o
                UARTPutc('C');. M7 q3 t+ |" q9 z2 f0 d9 t: |+ p
                /*  比较信号能量 */7 U7 F4 J( {5 K) z
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */! E0 X: W0 K2 \! N% J5 v+ l3 w
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
) s( D! e( @& q7 H' ]7 R$ J+ z//                for (ixstart = 0; ixstart < 1000; ixstart++) {
* A& |" h% V1 ^. }//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
7 z3 f1 _4 l3 G9 b//                                        yiDuanShuJu_LowMean[ixstart];
. I( l! r5 N) t$ |0 a* z//                }
( b0 w5 }$ J9 Y8 e' U) ]5 l//3 J" l: h; D! F( x* t5 j% `
//                youxiao_k++;
# m0 x1 S) G) }0 b- R+ x//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
1 p9 v4 d) w" Q' R, I. E//                        /* 感觉要取21个数,即0-20, */! v4 q  |# N5 Y  U! q
//                        enough_data = 10;//有效是10,无效是0: u& _' I- w1 P0 l( `$ Y6 I4 P
//                }4 m: T/ O0 T- d& M
        }7 e9 T  G! b# |5 O, W

+ L' j9 v9 _8 ~$ l0 a2 Q: d6 R: K' K2 f9 q; b+ `, Q; D
        enoughDataFlag = 100;
$ I* t! }3 t5 I6 W* J/ \  z        enoughDataFlag = 1000;
! D8 M  f; u" v/ e  d# l        enoughDataFlag = 0x02;+ H; h) X% G0 G4 G
        enoughDataFlag = 200;2 t! |* i# \1 X
& Z; r- r: n( h
        int myfuvk1;
3 M8 j2 `' K1 T        myfuvk1 =11;
6 m8 A/ ]! d( `' B4 a$ G# q" i! H7 u. r
+ Y! r: ?" h: C' e: i
        enough_data = 0;
' S  z1 f, ]( B3 o8 c6 J7 A2 t
( v" M% {9 b8 E/ w9 I* U//        if(enough_data>50){6 {2 J, x5 B% Q) T+ y# @+ o/ c
//                enoughDataFlag=0x01;
3 A, g& ?3 i5 }) c) I% g9 S6 p//        }else if(enough_data<50){: C: h/ o% k9 M5 ^: }' S/ h
//                enoughDataFlag=0x00;//0x00还是不行
* P5 v7 g! G: T//        }
, f* }* {+ J* P5 m* s- [8 p8 M  ?) P! q5 S
+ Q) Z/ ^! R# B: `' K  O( z
        oo=10;
0 V) j! _( z' a6 X2 ^) t        oo = oo  <  5;8 W3 [! t1 V, u9 C. s: r
        if(oo){; Z; N7 }7 s4 h* _
                ii=0;$ Z1 l% B) x4 r, Z
        }$ q' v  I8 f2 r9 m$ r$ V3 W: J/ H* a
        if(oo  <  5){$ b5 ]$ ^  F% l: U8 M
                ii=0;+ T# k) x& r, D
        }
" O) h. a" R. v  K# n        if(oo  >  5){
( L1 T5 V9 E: l' z# K                ii=0;
; Q7 a* h: f, M3 Z& P# Q9 A/ L5 O        }
9 t) e, {( g9 u, {9 A) S+ {1 ^) i) O' P
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */* g9 r; p" t3 k0 b1 [, ?! v
        /*  如果数据足够才执行主程序 */
/ ~" D4 U% r% `" R3 Z3 U8 l' a        oo = oo  <  5;
" p3 M- T! O+ T        enoughDataFlag = enoughDataFlag  <  5;
3 ~0 X/ M% j5 x$ Y        if (enoughDataFlag  <  5) {
9 h- D) l( u* |8 M* Q6 q//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
% ]2 q! M! m/ z, G: u& \                AGC_AGC(&pAGC);+ |+ `$ e8 @# A

$ X' Y7 ^6 t5 Z% Q, Y0 T. t6 Y                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);+ ~9 V4 I# J  S0 C' M0 k; s
                FIRDecimator_FIRDecimator(&pRxFilter);
6 k4 j9 T  G7 ^3 ~/ Q" F0 F& p
$ N7 B2 q0 i1 N, q1 V) D8 l                /* Downsampling */
- E% h  t" @% V2 @1 [% o                c_SymbolSynchronizer_SymbolSync(&pTimingRec);" Q; o2 Q1 T, T

- _. q3 f4 e! c& A' c0 u                c_PreambleDetector_PreambleDete(&pPrbDet);8 n; \; T6 B! y6 O3 _4 ?

: {1 l  O- n2 A+ e6 c! k                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */. u1 X4 }$ ^+ I, {# P( B
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
1 \# ~) B# E- k2 R- M) R  F                /*     %帧数量=100 */
: j0 X( g! B" t                pFrameSync.isInitialized = 0;  j. P- B: @5 Q! U

/ }/ n- B2 f$ ^- r                /*  [EOF] */
2 B; d( S) C) f. U' n                /* 前导码长度是13 */, ^# c, k% }. f+ ~! b' m( }
                /*    %qpsk */
4 Z6 e+ C# k. O# |                pDataDecod.isInitialized = 0;; p# j# W6 ~9 [: [: B) i- h$ _

0 N+ p. u/ A! E$ T/ q                /*  end */
6 y& O  _: M5 h+ C$ E( a                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
' @4 w6 ^4 x4 Z6 X& ^                /* Convert 3-dB frequency */
$ c! e" Q: G8 f, P. ]                /* Convert 3-dB frequency */
. A/ z% j# r8 z& h4 x                filtfilt(save_buffer, usable_left_filtfilt);" c0 s& n( }# s
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 x% r* G' L. A8 O6 q* c1 l% r& P                        usable_left_filtfilt[ixstart] *= 2.0;
+ Z, [" x9 U0 v: O                }
8 G  F  s  g* R. k; P. n( U
3 [4 F6 M& X) A  Y; K2 Q, F9 |                /* 注意乘2,处理幅度 */; f% l+ e2 B9 r& H' O1 L0 J/ s
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
& I) B6 f: B7 m$ R                /*     %% 行列转换 */: t" C* F* R  K( b* k3 z2 p6 P% W
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);: z: r( D7 U+ e- i! Z
                for (ixstart = 0; ixstart < 81000; ixstart++) {7 o$ t0 u0 `% p, @$ T
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]: X; l' }  {, @: {) q
                                        - yiDuanShuJu_mean;
* e- k- t9 y' O0 [                }
" a9 r' n8 b1 y3 h) o0 ~, I3 ^
+ A: `) p; r- O                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
1 O! N: Q" v) x- D% h                ixstart = 1;
; Y$ M) P' K, T- h( T                mtmp = youXiaoShuJu_QuZhiLiu[0];5 n% W3 Z; p8 a% H
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
) c9 H+ T" z: G# b5 K6 `$ m: x  N                        ix = 2;
" J, }+ s7 T) `5 f1 D                        exitg2 = false;/ T' y  v+ y6 F! K8 M0 g% g
                        while ((!exitg2) && (ix < 81001)) {
  h, `+ X; M. s+ j0 G% F8 X  U' `                                ixstart = ix;
$ x, [. \; D5 ]1 [* M$ ~5 H0 N                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 d; W2 s& f4 V  ]2 Y. b                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];6 {% o' F* X% C, _' `0 i
                                        exitg2 = true;; H! b0 ?+ \7 Y
                                } else {
- ^; u+ U* j+ R                                        ix++;
' b/ `5 e3 [4 D! C% Y2 D) I                                }
$ e( [& y2 U' L5 l! b% l                        }4 D- s9 z4 D4 t' `
                }. V2 Z- G+ p  d6 Y- I* ?8 d

0 v; d; ~! X; }( c; F! g                if (ixstart < 81000) {+ Q) Y8 ?( n1 L6 ]: Q
                        while (ixstart + 1 < 81001) {
4 ~; F/ p- Y, n6 `* m) m0 ^& _! }4 x                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {; B! ]1 T( ^9 J2 M
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
& v  o+ X8 \3 _                                }
  F: m5 E! s; O1 x/ X# D+ G- p0 t  N' K! R9 m5 E* K( ?
                                ixstart++;
; O& q9 o: j, v: r4 @" F* A2 Y                        }3 r( ]# U0 A5 N2 m
                }0 A$ I4 V2 m. s3 M! e
$ B+ w( y3 u# w
                ixstart = 1;4 s! I  P! }7 {$ u9 I9 i) n
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];& Q- e8 J6 V% y, G) _) h
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
; }  Q- S' h. Y' U. s                        ix = 2;
3 X* x# J9 U3 z+ U8 c& l1 J! x0 b9 B. y                        exitg1 = false;( Y/ H) L0 [* f/ q+ o9 ~. z9 C
                        while ((!exitg1) && (ix < 81001)) {
4 D  A: C# P- W% [8 \& D" ~' u                                ixstart = ix;
/ X+ B( ?, G9 a& e! E/ A                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
3 @; {/ F0 d3 O1 O. `' B2 F                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
- F$ E5 }3 j% n. w6 H  w                                        exitg1 = true;
3 V" `- \4 M' H1 \: E( d                                } else {0 b5 H& v& }7 y# F/ _
                                        ix++;+ u& \* }. H9 ~9 d! H' x: u
                                }3 a" c2 R$ D- m% H! Q$ X+ j
                        }
' ~/ g9 H. s( S5 a2 C# E                }
8 i+ Q& @7 R. U6 X  k6 x7 e2 B- x. `+ d
                if (ixstart < 81000) {, ]: V# o1 H9 x9 P6 a' T
                        while (ixstart + 1 < 81001) {
- ]* k# N6 I/ Z' H                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
% W9 y9 S3 N2 ?; |; [! O" K" q                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];  N' ]0 G5 R* ~* A2 `
                                }
7 d2 W5 U& G6 }3 F
8 ]$ m- X* ]# Y% e) F- u                                ixstart++;
; |4 m5 X$ I! r* ]                        }
* Q% e# T3 M( Y: ~1 G( Q* r                }
% A5 d; A+ r/ e0 s# t& A7 y% P
/ L) e4 R2 p$ ]4 B5 o- j& j. V                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
0 N; o/ A+ C% F                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {2 M* E# x! H- r" F+ M2 |" @0 R& Y, l& T
                        yiDuanShuJu_mean = mtmp;3 i8 _  s. v( L# N( a' N
                }5 h2 f8 P' b8 d- @' z

7 F$ L; D/ z# D6 h7 j% P1 L  q1 N                /*  找出极值 */% @  U, @/ M( M; ?3 @' k
                for (ixstart = 0; ixstart < 81000; ixstart++) {
4 f$ n: h" @7 E8 _8 e' S& f# z; m9 d4 R                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
, A( A! N" R( G+ H  Y+ c                }
" T$ `+ f" T  S: V
: N3 Y" R4 h% R1 V9 }8 Q: I        --------------帖子字数限制------------------3 M- p3 `4 K  e  T
}
7 ~7 z) l" d/ V+ ^$ `2 p" P, D  ?& ]; b; z4 k

: J/ N9 H/ Z" X4 V! h- K  }

本帖子中包含更多资源

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

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-14 16:03 , Processed in 0.041699 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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