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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 0 C8 f) o9 }9 U2 Y0 [

! m) }% e4 R$ ^5 Z各位大神:, L! J/ o# n- d- H
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)! B3 m: ]/ L: \) |/ T  w6 E" v( A
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:0 c5 Q# S/ n4 {( F' L

! h3 t( B$ ?* @, p, O0 ^     
  c5 E# @- \. u) O' \这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。+ }6 [/ b- C: q0 N  L4 ]5 ~
3 b  N4 ^1 }& p7 u+ i+ u
并没有其他线程
& t, B7 K1 ]) ^1 T! j反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
! F9 Q5 W5 j2 Q. r+ ?3 @* E9 ?$ S也说不定是和堆栈有关系。。。。。。6 Z: m/ u. ^* B( m# g, A% z
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....0 z3 c3 A8 M. t7 |

$ g: C0 l, \- R% p
% P) x. T$ s1 u1 a# ?. ]7 ]( m: N) Y  `5 K. d/ W% [; c8 M
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
; Y: H& G$ E! p$ K- l& r& B5 Z7 Y! P. C' n4 C2 x

) m- {$ W! v3 b附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];* V; n+ y) {1 O2 k
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
; y0 x( l' B5 }: p2 c$ B- K) z3 f( ~
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(+ X' \, h, w& c3 _. `, \
                const double data1000[1000]) {' w7 A+ {2 B" A8 Z5 i- E' R3 v+ H
, n0 ?6 V" L& j* b
        int myfuck;9 r) y2 v" y2 s# H* E  g$ r
        double yiDuanShuJu_mean;
( m5 n7 ?: e4 v        double yiDuanShuJu_LowMean[1000];
0 ?" i6 s( X6 }9 x# M. v$ {" c        int ixstart;
- M9 s7 U+ v" Q+ Y1 V& J        double dv0[1000];
% L) Z$ `7 _; A+ k* `: A        comm_AGC pAGC;
) E& S, j5 V( _6 L# d* a        comm_CarrierSynchronizer pFineFreqCompensator;1 h! E7 F# f4 T/ j
        dspcodegen_FIRDecimator pRxFilter;
$ x7 j2 W9 n1 c/ C* I% l; |" B1 J        comm_SymbolSynchronizer pTimingRec;1 _8 H5 m# j5 z- v
        comm_PreambleDetector pPrbDet;
1 r3 C$ i" C/ l2 [        FrameSynchronizer pFrameSync;
% s  J2 m8 w5 n        QPSKDataDecoder pDataDecod;+ [+ B5 x# j. U- _0 d
        static double usable_left_filtfilt[81000];$ P! q" Y/ j( L5 {
        static double youXiaoShuJu_QuZhiLiu[81000];) U# k6 \* l- ?5 ^
        double mtmp;
6 A7 d: H! g+ o" H/ g  K        int ix;( d( ~/ S7 S2 s
        boolean_T exitg2;
# k! G2 b8 }2 K6 X# W        boolean_T exitg1;
& W7 C2 A/ I: p6 u4 K" S' Q/ c. s        double YiZhenShuJu[800];
0 H! n- v9 E6 ?' j% M# t$ L+ t" M        double dv1[800];
* W1 k, F6 f# t" ?7 |( j
( {) H# A, o7 |9 a/ Y
, A& `3 m& @# \3 R1 F* E        double b_YiZhenShuJu[800];
% c8 Q+ b7 l: q" |        double I_filtfilt[800];
6 p7 h4 N5 r  [9 J. L. s        double Q_filtfilt[800];. a% o5 X' u0 @8 J5 J) U
        creal_T b_I_filtfilt[800];
, v9 f' J6 K& \        creal_T b[800];, b  l/ f$ |. Z+ o# B% D
        creal_T RCRxSignal[50];
% F! ^$ }) V5 E        creal_T fineCompSignal[50];& o: d. P0 W7 l3 ]
        double phError[50];' L% s3 J6 e3 {, {
        creal_T timingRecSignal_data[28];! f/ h5 E/ }2 c: A+ o  `! U
        int timingRecSignal_size[1];2 d6 a+ M! E% [- d) l" [* j
        double prbIdx_data[28];
: @8 d2 j2 a) h. F! c        int prbIdx_size[1];' U+ E  Q+ v% C& t4 d/ t2 r0 M- m
        double dtMt_data[28];/ W# o/ [8 @) V
        int dtMt_size[1];
# A* L+ T6 L. a/ c0 A" }" d        creal_T symFrame[25];
  i8 t! p( u6 j2 ~# W  Q) H3 p/ R        boolean_T isFrameValid;
, V# f$ H/ ]. {  z& V' Y        double unusedU0[3];0 C6 j2 ^6 q; \! L3 o1 A8 Y8 J& g
; S1 o/ a  R4 s  {5 w/ d
        //调试过程中的变量6 Z0 T' R6 {$ j6 p
        int  enough_data;8 V5 K7 ]- U/ c! x, |

- K" S  L0 C2 m- \% I" X% a& [        int enoughDataFlag;
, m8 T# H8 O! B* \/ V( _        int yiDuanShuJu_mean_int;! u2 j$ w# B5 y$ C! ^3 d) G
        int int_sum_dv0;5 {: S* `0 O1 X$ |* T
        int oo;2 x0 J; H/ t% h! ^( W
        int ii;. r/ n- `: Y% a: ^' E
        myfuck=10;
( `/ b7 h8 O! {  v% M7 H        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
* t& c5 I9 u3 }        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */: E0 d+ E% B% I

5 K2 x; c7 Q% W0 W; J        yiDuanShuJu_mean = mean(data1000);
% B4 y& f5 A4 C+ U6 z
0 I  `3 @" g# Q/ ]' ]- z1 `! F        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;2 R+ c3 p( e6 [5 g; }( E7 X1 F4 V
        UARTPutc('A');7 k# |' b1 j% h. t/ B7 V) y
        UARTPutNum(yiDuanShuJu_mean_int);" ]. C5 x3 @2 P( P: [) l* [
        UARTPutc('\r');. _& n# e0 i- O) ]) S- E9 c
        UARTPutc('\n');
) I( e0 h. A7 W8 e. Q' g6 L1 S6 P* e3 E+ m! I3 W2 f
        for (ixstart = 0; ixstart < 1000; ixstart++) {+ o- ~- y: M- D: A& T
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
. g7 k- e6 g5 _1 Y' S# B        }3 p8 c' [5 P8 J$ M

! U- d0 K6 W; D* {1 H        power(yiDuanShuJu_LowMean, dv0);; F1 r! r( ^, [4 l  [- K" h4 k; Z
! ?5 `5 e  V! ~
        int_sum_dv0 = (int) sum(dv0);9 Y6 r$ s* D! s5 u
9 [3 Z/ X5 z% C; g& c
        UARTPutc('B');$ {! c! @! \8 w$ E: |
        UARTPutNum(int_sum_dv0);
7 I- O" F7 U( i* j# y7 H        UARTPutc('\r');  P1 X% m( {; R7 y% G. e
        UARTPutc('\n');
6 R- _3 X' f/ h& I; [9 E
  J8 c+ ^( `0 W5 S$ T# I$ j/ U//        int compareFlag = int_sum_dv0 > 1.0E+8;
2 Y% F: F& D: f; z9 E) g0 Y. V3 ?2 Y, E/ P. [
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
* b5 n# A+ V9 F* [                UARTPutc('C');
7 i0 t; e% ]6 n8 x                /*  比较信号能量 */
/ g3 x% v$ W- v' I: n- j3 N+ L                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */+ d2 ]0 e2 u8 H# f
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;6 L# [# F. U+ i. z
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
4 F0 g" J7 y1 [) c2 c: j; Z//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
% _3 `. |$ ]& x9 l//                                        yiDuanShuJu_LowMean[ixstart];
' _$ ]' ]/ A) z/ X: x% F" d4 }//                }2 T% a! Y0 Y0 `( K/ m/ g! l5 c# K
//2 N0 z" u4 e; u9 \( l
//                youxiao_k++;4 X3 m% [: k1 Z( V( w3 V
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==) l1 d) u7 z, B$ W
//                        /* 感觉要取21个数,即0-20, */
8 F' \  L) q2 ~% x5 E" t) p//                        enough_data = 10;//有效是10,无效是0. _5 W$ i5 p( Y7 I# ?% D
//                }
/ K9 A0 D5 ~, A        }
6 J- _- B0 R& Q8 C) D# j9 u1 A
. c$ f3 ~7 k4 Z/ z8 `
9 s6 _: I# B. e+ }        enoughDataFlag = 100;8 R+ S! \% b; Y5 t& {
        enoughDataFlag = 1000;
/ U1 c$ K9 C  Z        enoughDataFlag = 0x02;  A! Z) `9 n: N  g4 ^5 D0 c
        enoughDataFlag = 200;" M% t4 o4 o# w9 l; [' f
# d3 n, n! Y" [' f
        int myfuvk1;; _3 o* e4 _& w6 i# _% t
        myfuvk1 =11;$ M- i7 I1 j- n) P1 }
" S& ?4 y* N% q' K! V) T0 q

* M. ~0 u! c' m' c2 ]3 h4 L! Y        enough_data = 0;
$ |5 a. L6 W# F6 i3 Q! P( p4 y/ l3 x8 p" t" |- M/ [8 e; L
//        if(enough_data>50){& D. b% Q% m% t4 x  P- u5 l
//                enoughDataFlag=0x01;/ j& c/ X9 ~2 W& N* I$ N
//        }else if(enough_data<50){4 e: r5 k' k! n0 }7 C! }! o
//                enoughDataFlag=0x00;//0x00还是不行; f1 e; T  D/ J4 h
//        }# |2 U4 f& q! q, b

4 K4 N# e, L6 D! L% I& F* ^' W9 B" q) e- h& f1 s5 D
        oo=10;
9 e% B6 N2 M7 Q: `& _6 D" S        oo = oo  <  5;+ W0 }# @) L5 Y) f0 c9 _
        if(oo){, l  ~8 i, r6 J) E4 L& Y; n
                ii=0;
" g2 `4 |0 j! t4 l. X$ t2 G        }
1 b. \5 k% N9 K! v! W: O        if(oo  <  5){
4 @8 C0 t$ b6 `, |; y8 e+ |3 t3 L                ii=0;
3 M5 Z7 n, M+ X. z5 T        }
6 `  U5 R! w% W* y; v) P& s        if(oo  >  5){. N+ T* m* F9 Y7 s% r
                ii=0;6 H5 n* y- ?% @9 s! e7 w  C
        }( Q: j' v) t  r! N6 p
$ \& N0 T0 w+ ]# B, E+ r5 z6 Z
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */4 J, L  U7 {- X9 o
        /*  如果数据足够才执行主程序 */
0 Q7 d# e9 L5 g& a* H        oo = oo  <  5;
6 ^9 ?# Z; y6 f" j        enoughDataFlag = enoughDataFlag  <  5;
8 i8 @3 c8 t1 V( @* X        if (enoughDataFlag  <  5) {
5 N6 h  d. t% X5 D7 ^% n//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0) m0 a- Q# c, d, _; D* l! \- A
                AGC_AGC(&pAGC);0 K. y3 t( }. v- T  b  e

4 @% `+ p1 G6 \5 t* H                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);6 m6 z  A1 @6 K% U3 h7 U
                FIRDecimator_FIRDecimator(&pRxFilter);9 o- R1 T# Q# D# V' G- q0 o! l
' @3 p5 V; {! C& j9 X; d8 v: C7 [
                /* Downsampling */
1 d$ k, }' W- G* A: b! F* q0 \: ?. Q, X                c_SymbolSynchronizer_SymbolSync(&pTimingRec);, k! }7 M- A1 u, n  e  Y
/ q/ u# E7 V  X0 G" W& x
                c_PreambleDetector_PreambleDete(&pPrbDet);8 ]; p* E9 g' T7 {1 O, ?  r
2 m+ \# r, N: K
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */0 g: S/ ]  k3 u
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */7 P0 m  l7 I. L# G# D' i( u' t6 k4 s
                /*     %帧数量=100 *// i, F5 I5 y5 y  k+ x; J
                pFrameSync.isInitialized = 0;
' P) _( D* Q1 d- K. c" H( q
) |, s1 [( t+ E' d                /*  [EOF] */0 h* e( L  E0 v5 ]* A0 ]
                /* 前导码长度是13 */7 _% q: k# H8 Z+ [
                /*    %qpsk */& K6 @5 ^1 f( `& y) g
                pDataDecod.isInitialized = 0;7 v: ]7 o' \  w7 W/ o  \" ^1 @6 s

' W: a- t& r+ q& g$ U, B! p                /*  end */
- V$ F* |% O7 {. `% J- h                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 D; U; U( R, Y# l) B2 T% f$ D) m                /* Convert 3-dB frequency */. K7 l# p2 b' g- ]6 u
                /* Convert 3-dB frequency */
% H% a7 M7 v5 K1 |                filtfilt(save_buffer, usable_left_filtfilt);8 c& Y% {4 s; G! G
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# E' ^! f; t; O/ ]                        usable_left_filtfilt[ixstart] *= 2.0;, v1 C+ Y, N. Y4 l* i: z
                }* A. z3 H: g# A' z! |1 r% n
! n9 l3 `1 K0 [# Y* q* z- @
                /* 注意乘2,处理幅度 */
2 V5 h' O1 N7 E. O6 U0 p                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */2 O) G' q5 a: M& p
                /*     %% 行列转换 */2 Q3 r5 R( q: W0 ]
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
+ r" g1 ?8 B; }7 s0 t" M0 F+ @, }                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 r& I  a0 f6 p. p                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]0 @. C7 D4 E/ U; _; x
                                        - yiDuanShuJu_mean;0 Y: v9 t; a* V4 G- |2 F
                }2 q; _' c/ Y. C: s8 `

' E8 E! E0 ]: p' M7 U7 S( E0 h* L                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
% ^6 S# ~2 R5 @( Z' C* ^+ }                ixstart = 1;
! F9 n9 w2 N: R                mtmp = youXiaoShuJu_QuZhiLiu[0];
% T7 F! O8 \$ t# p8 S  e                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
  s# y% ]9 F6 P$ F0 ]                        ix = 2;
9 U+ z$ f6 r* o. C                        exitg2 = false;% c) o' r. a5 U% \7 S
                        while ((!exitg2) && (ix < 81001)) {
9 G# c% y4 N6 Y                                ixstart = ix;+ i6 ^$ v' C/ S5 W$ v  e
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 ~6 z, C7 p8 `& O
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
/ H, j8 \) _( \8 K4 o                                        exitg2 = true;) H- j& f! {% O- ?. L& J6 L
                                } else {! ]8 g+ B7 k4 Q; c1 k5 _
                                        ix++;) K+ x7 w4 c6 G+ r6 I% J6 J! }/ K+ Y
                                }7 @: o0 H& m0 X' G6 A4 l% {- j$ o+ F
                        }9 O. i3 z# w0 V! F7 Y) S' P
                }* O- ?3 L% Q; _: l" i

9 g3 a9 |! ]2 J5 K9 G, s                if (ixstart < 81000) {1 {) |/ G' {& |: }4 Z) e* d
                        while (ixstart + 1 < 81001) {. }2 B9 c( V$ Q9 F# W
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {  ^* z0 c5 L  `% ^; Q
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];) p9 H. N  H, B+ p+ q4 o" `
                                }
- o% Z  p5 O7 v% M8 \9 l# s" e% j* s2 ]  }0 \
                                ixstart++;& h  @9 X: e& z( r
                        }
+ k! X8 \6 |4 p8 Q$ }& u1 c                }
- q1 M6 R6 f) u! f# U: e6 S: m
1 N% q' c1 [; T+ U                ixstart = 1;# T, J# |( c: f, k4 N  s
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
  q& f' T# [9 w                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- [  U7 ]  c* C4 {% ]' Z                        ix = 2;
) A3 M5 ]& u% f                        exitg1 = false;, ]2 O4 ?' N+ W6 s7 S0 R. g
                        while ((!exitg1) && (ix < 81001)) {0 v, ]. G; M. T, ?$ B4 r( P* E$ G4 s, m
                                ixstart = ix;8 m% O/ G1 D  [! o' j
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
4 N7 g7 `7 a) E9 {$ \3 e                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];4 r9 s7 r# a/ q' h; e' B( N/ [- b! u
                                        exitg1 = true;9 w) q5 G+ M% j; x, t! P( {. ^
                                } else {
/ E) B  T+ }8 h                                        ix++;
4 ~6 v8 v  s5 C! E- E                                }2 }. M  C- `! D- p
                        }
" y8 M- F* M. y! r) M                }
% [* K! [! e% R
$ e1 U) S6 M  ~$ `" U+ \                if (ixstart < 81000) {4 F- z2 z  w% Z6 B, T  S& q" q" {7 e
                        while (ixstart + 1 < 81001) {
8 O! N; t4 S( v; ^0 }                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
* o) W  W" D; e                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
8 L' e1 E  I) D: r; v                                }
7 W8 d1 k! n1 u* i
  w5 w0 D2 J$ |2 V, o$ t                                ixstart++;
& k3 U$ @4 R2 d                        }
+ d- G. t4 R1 a' \! A                }& `, N4 H: q8 n
' e8 w, X3 ]8 A  S, y  G
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);- x' ]# b; G6 |4 b- F6 N
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
5 s+ `& C. B4 f/ [! ^# |0 n                        yiDuanShuJu_mean = mtmp;
5 D- F, ^* S* m, F                }
# A- G' O( f8 z% U) H6 ?' A8 N2 s
( v# q$ |2 m+ D" e9 G8 {+ u. y* U                /*  找出极值 */
* k5 j8 [9 v  A$ e4 ]4 z                for (ixstart = 0; ixstart < 81000; ixstart++) {
. K% |  ~0 g" M                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;: W, X, ?- f/ o4 Y$ @
                }6 E# [/ ]) l* R" ?- s
: [. i: T6 J8 O, P' l4 z& {- \
        --------------帖子字数限制------------------
/ [" q# _: I  x9 [. Z' e}" E# l" G) N( i! ?6 ~

+ n' _% d6 v/ _% @+ l0 m. x0 n6 r/ O& d. L8 H

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-15 14:16 , Processed in 0.042672 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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