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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 & v( I# s! F' C( g5 E1 D
! u/ ]5 X: U/ _- O
各位大神:
0 K) }8 b! Y7 h  z: W     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
" y3 a5 c+ O. E6 F# @      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:6 _+ V- d3 T- @8 k6 ]$ K0 j
! e$ Y6 i$ T! V: P( G
     / B- k4 H. S: `. K  N
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
+ `2 A. d6 n3 f2 x
+ }) [3 X3 n* A; a并没有其他线程! x( U. g( }; C) D4 ~8 w
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
3 J, R$ l; O3 a+ D也说不定是和堆栈有关系。。。。。。
; P# A) a: G# n& ]请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数..../ Z9 a' B8 Y5 _( r- \& M0 n
+ w: |" r; r% r' [1 z) T

6 O3 ?# Q! t/ f) Q6 d  `6 I; B* n4 U1 `' |1 Q2 ?
我也很绝望啊,希望大神能帮帮忙,感激不尽,!/ ~# J, A& T+ ?9 r5 U
, o, @# i& ?. c3 n9 }. o3 t/ {; c! ]
) u6 M" I8 Z' \
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];- L8 y1 ^8 u" C! b! X$ z$ c) p. c
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。; j, O( s5 \5 n! d# Z. H; a

' A5 Z. x5 G. |2 ?boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(  U* @8 g- C8 }6 `( G/ o6 j
                const double data1000[1000]) {/ u1 E. h& G  y
% U2 h, ^1 @: r3 M- l
        int myfuck;  H: P1 p0 @* l2 [  B/ Q  _5 }' ~
        double yiDuanShuJu_mean;
! @0 P+ g: h: }+ l        double yiDuanShuJu_LowMean[1000];
, {6 v) q' }% x2 O3 \, i        int ixstart;1 N% X* D- U& H$ r. v+ Y7 _
        double dv0[1000];- ^; V5 O8 x" _" Y
        comm_AGC pAGC;
9 I0 l! G' R* M$ i        comm_CarrierSynchronizer pFineFreqCompensator;9 B. ~; U. }- O/ C5 o$ {3 B+ Y
        dspcodegen_FIRDecimator pRxFilter;6 U5 J$ J" Z8 A$ A
        comm_SymbolSynchronizer pTimingRec;3 x" k0 u3 I( q
        comm_PreambleDetector pPrbDet;3 V( f9 s% ?2 X8 I6 k
        FrameSynchronizer pFrameSync;4 U; F& F2 Z8 M
        QPSKDataDecoder pDataDecod;' o. Y: F9 f+ k  Q  J! G
        static double usable_left_filtfilt[81000];
. F( r$ ]3 i5 i" h5 k0 ?$ ]# l$ s7 p        static double youXiaoShuJu_QuZhiLiu[81000];
& o. c8 w, U$ V# n        double mtmp;
( x; D, @8 f$ v5 D        int ix;
: R) O# k& [  O: h, k        boolean_T exitg2;+ Z( ?0 ~/ h& w" u# r: c( D& i: X
        boolean_T exitg1;2 L+ j' V/ C6 Y/ O$ X3 a- T
        double YiZhenShuJu[800];2 y2 i0 ?) k: {2 J9 y2 Q$ ^
        double dv1[800];
* Q" k: L  r; e3 p# k9 y! S; l! L3 n, T2 u
( Z  D1 c* O+ B3 K9 G
        double b_YiZhenShuJu[800];
, ]8 y7 ?7 c- [0 d        double I_filtfilt[800];$ y2 O2 G- x- Q8 f
        double Q_filtfilt[800];
$ b7 r2 h; f+ X  w8 f8 n* u% x        creal_T b_I_filtfilt[800];7 _# c, M8 t* N6 p/ B/ F6 m
        creal_T b[800];
% w/ d, Z; F1 E. c        creal_T RCRxSignal[50];
7 R' W3 q; Q3 @* a6 C3 j        creal_T fineCompSignal[50];
2 `5 {$ v/ Z4 f, b; U        double phError[50];- D, Z2 M2 [. G5 F: {) g
        creal_T timingRecSignal_data[28];
9 C. V2 @* f! i# [! J6 e3 W        int timingRecSignal_size[1];
" Z+ h8 {6 W  s2 @        double prbIdx_data[28];
5 H8 [3 b1 Q( t$ r        int prbIdx_size[1];; \' T5 i6 m  o9 L  h) W8 X" s" i
        double dtMt_data[28];. S! [1 |" E) F
        int dtMt_size[1];
: V% E) G# y" x        creal_T symFrame[25];
* ^8 U& U8 g1 v( {; s# l        boolean_T isFrameValid;
% W* T9 E% {3 F" E        double unusedU0[3];# p. {0 H9 V! ]: b" i: j) e
* s0 @. J9 f: d6 O' [
        //调试过程中的变量
2 Z1 g- o. \& e5 W8 Y/ e4 T        int  enough_data;
' g: j1 z$ q2 Z* ~' G# W0 O8 g! @- ]  l5 P& v( z* f
        int enoughDataFlag;& F+ j- t9 j' s1 d4 v: k1 y
        int yiDuanShuJu_mean_int;
" X( f! _# s5 o& o* Y        int int_sum_dv0;7 M; n. q5 }$ X5 f/ N) x
        int oo;
: ?- \: `' i: j. _. \1 i' ?; @3 J( u        int ii;
2 ^  D2 }" {! Y% `' y        myfuck=10;
" l& p# o* v2 B: D- E" g2 z        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
0 ?  s; |6 k- m/ y/ x( L7 h        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
9 T# k% \+ E" Z9 l/ R
3 F7 i7 s' H5 f* H$ c        yiDuanShuJu_mean = mean(data1000);
: d+ ~. j( D6 H* ^
0 Q+ W/ D  P* ?- \        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;/ A) r' _! _9 @, S8 z. L# K9 ^
        UARTPutc('A');5 v" [! e4 t" a4 n  p# w" g' l  J
        UARTPutNum(yiDuanShuJu_mean_int);9 C! b/ W8 X" z! n) c, @/ a
        UARTPutc('\r');
2 l6 W, c# B8 |# w, H0 I        UARTPutc('\n');5 c& [* y' y6 ~

' @: S- F" E3 {$ q. i& T* U6 P        for (ixstart = 0; ixstart < 1000; ixstart++) {
! G' A& T2 F; V% j9 p' l1 k                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
5 m- x; I! y# r, l. k$ B. |' Z6 m        }
" y8 a+ f  _; b3 I! A0 v
/ `4 E! W1 r0 p: ^+ a( w% u        power(yiDuanShuJu_LowMean, dv0);
- ]( \* T4 [1 W9 }3 p  ]1 i8 c0 z. z4 d+ Y) f9 c+ G
        int_sum_dv0 = (int) sum(dv0);
/ u$ n% }' `) O: r2 f, i+ p* D
; s! d6 v# }6 c" K        UARTPutc('B');& S3 I; u- n3 M4 }- G5 q- y6 C
        UARTPutNum(int_sum_dv0);
; L1 O! ]4 H" W6 A' ]+ {2 x( W& D  a        UARTPutc('\r');
7 f. |2 l) T+ X) p- M" w        UARTPutc('\n');% c8 R6 q2 i9 c& ^
; c, ^% M% Y3 a  K; ?" P3 o8 n+ s) B
//        int compareFlag = int_sum_dv0 > 1.0E+8;2 j1 D# B/ T6 I- M, D( g4 l% g: `" U
0 q/ M, O2 A  O7 y
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
/ X' q$ h5 Q4 p- f" j2 O                UARTPutc('C');. p- [* C, @) m* M
                /*  比较信号能量 */  g/ M2 R" Y" y# a# p2 ?2 z1 v
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */+ D5 o1 Z* w. l! G" m* d8 m
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;1 t+ |, i$ S  F9 x* d) ^
//                for (ixstart = 0; ixstart < 1000; ixstart++) {- [. T, U% p6 g/ f1 h7 Q
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =4 |) ^0 l" J8 E/ v
//                                        yiDuanShuJu_LowMean[ixstart];
! g  w$ W7 j1 K& T0 P//                }/ w+ R3 @' j  Z* p: R
//
4 h/ U9 P0 `8 H5 X3 v) a//                youxiao_k++;# ?- K1 l- ^0 F
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
7 V; V3 S* a  x  n* w  p* p% P! T//                        /* 感觉要取21个数,即0-20, */$ s, S* ^: t. y
//                        enough_data = 10;//有效是10,无效是0
7 U" e0 d: P' `. t( H( p8 D# @" b//                }4 C# w6 a. i1 D: E4 @7 r
        }8 [, `9 X- x& s% O! I! V
% ?% ^* Q3 @& G
* ^& l( Q) j5 Q
        enoughDataFlag = 100;2 ?' d+ O! |4 c4 N) L% n
        enoughDataFlag = 1000;
  B9 y; z( G6 g% O% w/ A& ]        enoughDataFlag = 0x02;3 `5 C" l0 b2 h- ~8 |8 ^
        enoughDataFlag = 200;
2 K) d; v+ F* ]8 c/ w9 m7 P! V: j- _4 [7 O; d
        int myfuvk1;
1 |/ [) `' I: _  }: y        myfuvk1 =11;
- H7 v1 t) \9 M0 o) H7 K
* Z; i4 h, x2 @# m9 E8 l- Y, u8 m4 g- L7 u- g6 h4 \# A
        enough_data = 0;9 Q9 r( R/ }7 y& h! E

0 v5 ^+ \5 I9 ~8 ~* i0 B  H//        if(enough_data>50){: R) [( W- k* \& a* [% Q4 {% C
//                enoughDataFlag=0x01;/ G7 \5 `6 g& ]
//        }else if(enough_data<50){
; M3 \& ?/ F) u1 D, Q8 h//                enoughDataFlag=0x00;//0x00还是不行6 Y+ ]' v6 @. j  M9 P' @& `
//        }
$ c$ ^6 [8 Q. E' {3 i: ^' {: p9 ~# P' o) v+ Q. G
& \9 t( J! L$ A
        oo=10;
6 ]( O# w% L/ D2 j2 N2 U        oo = oo  <  5;
4 d! F( D* K/ _- ?6 [        if(oo){
7 o) s  `  y# }                ii=0;
& E7 g5 D& T! T7 [        }) Q" `' P  b. l/ n
        if(oo  <  5){' d% p/ W4 K1 D# w0 [
                ii=0;
4 [2 I$ Z) ~, d" |        }
& ^  Z6 P2 t* t6 v, E        if(oo  >  5){
3 X  b9 r) j! x7 c% v) w5 y9 D                ii=0;
4 t' k5 Q$ q$ A. d" q0 g$ v2 K        }
3 ^+ y' Y+ _! G* w8 r4 |+ A6 _) S7 i2 M) [& s2 [
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) b. T; ^/ e+ h        /*  如果数据足够才执行主程序 */, q# ^0 U: {5 s" o! Z8 s7 \
        oo = oo  <  5;- V5 l6 @  K1 }
        enoughDataFlag = enoughDataFlag  <  5;$ ?: c( |( I1 k& w' ?
        if (enoughDataFlag  <  5) {
  s0 B- i. e( u/ }) w  _//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
# `8 @# L+ C. d, L, T                AGC_AGC(&pAGC);
% ]* h1 \1 _. _  f; g. Q+ n
1 m) K3 s3 D( p) D0 ?                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 [1 x( M7 S% X$ m) N# w( }5 c# a# B
                FIRDecimator_FIRDecimator(&pRxFilter);& F' [/ c- @4 K* `' B+ Y
. _4 i) t; M4 c
                /* Downsampling */" }9 E. P0 M4 h5 `
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);# W7 {5 z5 I" ~; ^3 K  U
% l) t" Z4 r+ ]- r$ [
                c_PreambleDetector_PreambleDete(&pPrbDet);
5 _# w2 O3 ~6 F* `* v
* D0 k: |: d4 M, N  A                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */6 K- q* c  Y0 D- s
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
7 j7 A4 ^; X0 V- M                /*     %帧数量=100 */
; N0 {1 h) [5 ~4 C# D* q                pFrameSync.isInitialized = 0;
5 T9 J  p- B' x3 Y6 c
# T9 s/ E5 j; T3 {* g2 R5 t  z                /*  [EOF] */
% v8 \9 R( Y" b                /* 前导码长度是13 */6 ^# B3 x8 d( w
                /*    %qpsk */
5 a  i& M! }" X5 r                pDataDecod.isInitialized = 0;/ k  O1 p  [) n4 Y: ?, d

+ d, @2 E1 K2 e' ^                /*  end *// K- W+ Y- O  K0 G! y: Q, t7 Q6 b
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */' J1 a/ z! d# W
                /* Convert 3-dB frequency */
) p% Q, [5 Z7 P( b0 c& ?) \                /* Convert 3-dB frequency */
( T0 A; N4 D. n, @* j0 y1 l9 G                filtfilt(save_buffer, usable_left_filtfilt);
! E7 |; ?8 S1 ^                for (ixstart = 0; ixstart < 81000; ixstart++) {
; `5 H8 g% L" n- k6 I, ?                        usable_left_filtfilt[ixstart] *= 2.0;* m; v0 k# d; h( T8 p$ O* w
                }" r( H* R3 T* ^$ I0 Y
4 ]2 `% `1 u( C: a) B
                /* 注意乘2,处理幅度 */
  H$ Y7 Z% w) m                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */$ z+ ~8 O8 C: [! s. F$ T
                /*     %% 行列转换 *// v* t4 {1 k, z/ W' w# B5 F  p
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);- z9 W; ?; x& L- G- A# V: {+ @
                for (ixstart = 0; ixstart < 81000; ixstart++) {
! A0 E+ B/ {; w! A/ x" u9 D9 |                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]# ~& J' z7 q  }( |5 ]4 ]
                                        - yiDuanShuJu_mean;+ K+ Z' W6 P  m. |
                }
% g, A4 ?5 Q6 O- N* f  o. v7 c6 E$ h1 n% B( y, [* e) [5 {/ {
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */) x' {# ]4 ]( R1 h
                ixstart = 1;
0 \* `; u# [, M* ?6 g1 a6 c  x                mtmp = youXiaoShuJu_QuZhiLiu[0];
. i8 i- p( o3 f7 L) e                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; X" e+ T, N4 H9 a! u/ d. T) @) G* M# }
                        ix = 2;% }6 X0 O0 h! z9 L7 A: O' \" V
                        exitg2 = false;
! X$ @7 e( d6 w: E( T# g                        while ((!exitg2) && (ix < 81001)) {% O" X1 P3 \0 q( A& J
                                ixstart = ix;
: g7 e, |9 \( o3 c                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
) g  u$ ~2 u  t2 o2 B3 q" ^$ c                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
- ?1 O5 g8 P2 Q                                        exitg2 = true;( h% |4 f/ l7 Q, d/ ~4 P. d' o/ b
                                } else {+ o$ q" t$ \" j9 q9 |$ \* ?
                                        ix++;
, B9 ~* Q0 _7 E, o7 _& q                                }2 W! C0 h8 D9 a& z
                        }
' \: P6 J. u. m" I                }
, ]' x- Y$ J$ Z/ Y, ]4 Y
+ f! q7 j9 R! [7 y9 a                if (ixstart < 81000) {; b; r* h" @+ c1 k0 ?7 T6 K
                        while (ixstart + 1 < 81001) {' o- n8 _9 |' e3 ^" N; y) Y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {/ I: W; f/ x: n, R. K% `
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];) a! t9 h4 J) w. d5 h
                                }
$ c, @4 w9 T1 o/ |  K
& W7 e$ v6 D. A8 p                                ixstart++;
) }1 P& |  x1 J8 W                        }( ?% I4 t) [$ l, ~- M( [
                }
) Q$ `4 o1 q% {  T1 z: R
4 e' q3 J! q7 ~% K8 s; o+ f                ixstart = 1;
! F: x6 o3 E' h6 n0 |  @                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
- @5 F" K0 ^; V' Y/ H0 I( h  v                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {1 k) k: O* ]7 }1 w
                        ix = 2;& W7 I6 E. d7 g- m* S7 I
                        exitg1 = false;9 S- v9 Y+ M8 m$ _
                        while ((!exitg1) && (ix < 81001)) {5 K8 J/ J7 T7 e% J
                                ixstart = ix;1 A/ x4 V6 U0 p% I
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
5 ?$ T  p  p9 N0 p: q5 b                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
* c- @. \" ~+ t                                        exitg1 = true;( ~7 r0 P, N* g9 V: ?
                                } else {/ m5 Y3 E4 |; q$ J) U, C5 J) L
                                        ix++;
9 g. Z+ n2 ^: P5 ~5 g& L" l$ e                                }& ?: B; n9 y5 g& G: ~2 j
                        }
$ m. Y0 Y$ b$ j5 [* N; U' k; J) k                }
8 k% v* A+ n1 v1 ~9 N
  s+ A8 Q# E. u2 R3 R$ j$ F2 T; V                if (ixstart < 81000) {
+ |# z! ?- H' b5 w- j9 j3 R! o                        while (ixstart + 1 < 81001) {
0 N! ^, p* h) b/ V                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
4 Z, Y& G0 Y1 O1 e1 }                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];: ^" F$ F- r) m
                                }
5 [% G) k2 g( q" g% A& m- h) w& z4 W6 V
                                ixstart++;4 m4 H7 q5 \7 B
                        }& R- ]* ~1 E0 K; e* \7 x, p% D
                }6 P& M8 |9 C; v

; K: u# B2 a5 u- X, {( V, F' [                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
3 K9 H% \! n; ^9 v& @0 C" t1 r                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
: ]7 Y0 e% N, _5 x8 ~* [                        yiDuanShuJu_mean = mtmp;
3 }' G0 K7 _# o; e                }
7 k' M8 J  ]0 d3 o" ]# C% ?4 [6 p3 H/ N/ `
                /*  找出极值 */$ ~/ f+ ^) e$ i. k! I: q
                for (ixstart = 0; ixstart < 81000; ixstart++) {2 \( x, x8 _; C. X1 y: f
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
3 _0 p2 S7 ?6 K, u4 U( Z( y- V                }
+ L/ L* {% z* p% e" V% V0 c6 }$ {5 R- Y* K: F- V( I: @
        --------------帖子字数限制------------------& B. F' \% s  l: ^! ~/ u6 L
}" l9 O0 l8 q+ u$ B7 ^

* B+ t& S. I4 U7 {3 l# _6 S2 @8 c  q6 r8 [6 c+ F6 w6 s2 b8 P

本帖子中包含更多资源

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

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-2 14:57 , Processed in 0.044422 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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