debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 % ^/ s! G9 T: B0 A" L* ?
  p. O2 M1 g# F8 H# \$ }
各位大神:) c$ Z2 S; s1 y* @' Q  N3 O7 Z2 r
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
0 _$ @  e" R, y" V( H      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:: o" e1 ]$ H- c+ D; N# @: V( `' W

2 i1 G* t0 R4 \/ ?7 ~( z% |! v     
, u" o: b1 H# W# @5 o' `4 Z: A这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
% f" Q: u% r9 l. G
# B5 o8 {# k; d! t0 E0 {- M并没有其他线程
, N% |" l! d, @, V) s反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
7 V4 T: O6 ]) J5 U. P9 P0 U6 z也说不定是和堆栈有关系。。。。。。6 {, J+ J; D4 C! j
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....7 O, u; Y( m( Q8 E/ C

1 ~  h& n4 B5 p% ^% h; B4 G
! F( `' v7 I& c  {; {& |
( ]7 J( C; Y( x我也很绝望啊,希望大神能帮帮忙,感激不尽,!
" x! H% t* t9 }6 h6 u- O  [. G  q; N- t# }& o
& p% h- ~0 w& M( Z
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
7 ?. u  I% j! ~        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。$ k. R; }, h( E

  P) s5 T8 [( J# N! eboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
/ F/ W1 w; G& K                const double data1000[1000]) {
4 x$ _$ @3 h6 T+ ^, I1 E$ c2 D! n# [9 j
        int myfuck;1 ~/ Y( S, p5 o, x: `
        double yiDuanShuJu_mean;3 S0 j' J. B7 R2 J
        double yiDuanShuJu_LowMean[1000];
  ]6 F- D3 F* {, m3 B/ c        int ixstart;* O8 {" U6 d9 Y/ O7 f& P* e
        double dv0[1000];
# ^7 _0 L1 B$ r! C        comm_AGC pAGC;
9 n/ h: _3 t2 }  B$ ~8 J$ c        comm_CarrierSynchronizer pFineFreqCompensator;
, z3 Q1 [& ?. g; g) O2 L# Q        dspcodegen_FIRDecimator pRxFilter;
; s3 i3 f% j* E: Z( [! n  Y+ j; P        comm_SymbolSynchronizer pTimingRec;, S$ \. t, m4 \0 R$ v+ ~
        comm_PreambleDetector pPrbDet;
8 `: s# ^; D& m, |) F* s7 ~# s' m        FrameSynchronizer pFrameSync;. O+ J4 x' n6 d% k! J+ J! a8 U
        QPSKDataDecoder pDataDecod;6 _) A: t7 K7 E) ^& J% B0 U
        static double usable_left_filtfilt[81000];3 t4 ^. P7 Y6 Y1 i$ e, K
        static double youXiaoShuJu_QuZhiLiu[81000];
9 v+ H) E$ [- F( D( o        double mtmp;
4 W: D0 P8 L3 L2 j/ ^. \# t3 w        int ix;
! b( x! ]! j9 M+ J        boolean_T exitg2;  W4 `2 P% I9 d
        boolean_T exitg1;$ I( b( }( m6 W. n& I6 u
        double YiZhenShuJu[800];: E/ \* w0 H# w. D6 b
        double dv1[800];
; r) y# l6 p1 F5 @* c+ U; @/ I, n4 B
7 o6 @% D! f' `2 `
( V& p5 w4 r: E+ L% E0 ^0 I9 I2 C9 c        double b_YiZhenShuJu[800];2 Y! |: k3 }* z8 l- T% K: O) F
        double I_filtfilt[800];9 L! _. Z! x* A9 \: }$ k4 u
        double Q_filtfilt[800];8 T2 Y2 D7 k$ n
        creal_T b_I_filtfilt[800];
% M/ S* `" _' ?, z; V# p0 q% W        creal_T b[800];
' u+ d7 R& O0 a        creal_T RCRxSignal[50];: H0 c. H4 _" J
        creal_T fineCompSignal[50];
6 r- \0 S: Z6 A# I4 B# n        double phError[50];* c3 o" W( D0 F4 D
        creal_T timingRecSignal_data[28];# B3 g' t0 G5 R  ]+ S/ Z0 H) r) i
        int timingRecSignal_size[1];4 S0 `1 F3 u& _9 r
        double prbIdx_data[28];, S* S' y) o7 p% \7 A+ z9 w! G8 K
        int prbIdx_size[1];; [7 B# y! h. g2 R
        double dtMt_data[28];: B1 r" u, ~+ k# N1 }
        int dtMt_size[1];9 f6 O8 n5 ~1 X% J3 f1 D% ^; w
        creal_T symFrame[25];
' r2 t, B# O2 V) }9 m8 f8 N; F5 x) S2 }        boolean_T isFrameValid;6 t7 ]( X% J/ y+ R& y
        double unusedU0[3];
* y2 C5 W& E$ P4 N& j- U  U" H& G5 R8 K( ]
        //调试过程中的变量. Q2 Y. f; B: U9 t
        int  enough_data;- G) @/ N. I0 e2 F8 f

, f9 d$ U& H. j+ \# ~+ t        int enoughDataFlag;
/ v; _& v3 p2 j1 Z" \        int yiDuanShuJu_mean_int;
4 ^' p1 J3 U( t' p9 n        int int_sum_dv0;. D. c2 b6 \8 u% x
        int oo;1 E6 g# t$ F- S( e5 m# `- |
        int ii;
' T2 m# y+ F/ |4 R, @# {" A! J  Z        myfuck=10;
- o+ h6 I( `! T+ p( }5 c- E        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
6 g2 K0 u) \% ^0 p        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */) i* p# u0 B1 b5 M) V5 q
2 ~9 J4 y0 \0 P* \/ y7 C
        yiDuanShuJu_mean = mean(data1000);
* m/ w+ R! e( F7 ^& @" b0 r6 U
! i* g, |2 \8 I$ C7 m! q' i, p        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
' I7 j# C( j  \( h        UARTPutc('A');7 z3 D' A; p3 d, ?& Z
        UARTPutNum(yiDuanShuJu_mean_int);
% }. E. {2 t9 M3 Y        UARTPutc('\r');. m, i( F, V, Z$ J! I
        UARTPutc('\n');; `* b8 j3 ^7 K1 D. j8 [- M
+ ?7 P* N: g6 g; c; z2 i4 G2 n
        for (ixstart = 0; ixstart < 1000; ixstart++) {
5 d! z2 J: }6 w) E: u                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;4 O" h7 I: f5 T5 }; H
        }* q( B$ ^. w& W% p8 _% J

  o# i6 v4 `* c. i- W# P7 F        power(yiDuanShuJu_LowMean, dv0);
3 u! A( i9 V! v
& B( g& x0 @5 y- l) t        int_sum_dv0 = (int) sum(dv0);
6 I' Y9 `3 f& T0 h, f6 ?# Z2 r
        UARTPutc('B');- y4 m4 S1 ?3 g$ |) W: o
        UARTPutNum(int_sum_dv0);
+ q. Y0 t( r& h- M5 K        UARTPutc('\r');* x/ [* c. u: g  q
        UARTPutc('\n');( Y$ ~, p) ~2 G
) e; h1 X. j$ v/ d
//        int compareFlag = int_sum_dv0 > 1.0E+8;
7 B* Q) o" k3 `5 v. Y+ v  W6 \# m9 [" H1 }
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?# t3 B: T& T5 r+ S2 r6 G4 J8 H
                UARTPutc('C');
" e  Q0 ~6 y1 k! F5 J+ J5 i                /*  比较信号能量 */: A: b2 n  W( b, J1 s5 j
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */* v  ]' U0 a* Y' {4 U
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
, r: v- k& F# G( g7 |//                for (ixstart = 0; ixstart < 1000; ixstart++) {7 Q. E4 p. a5 K1 ?9 Y0 K& D
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =; a6 s, v% m; v4 i
//                                        yiDuanShuJu_LowMean[ixstart];6 s) {' A! ]7 S0 Q' Q5 v
//                }
: ~) {. j$ E, J0 e! E//. ?6 r1 q5 V4 ?' q) F$ Z; `
//                youxiao_k++;' i7 c( y9 g% T5 {. H
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
: Q$ j% V, V: C//                        /* 感觉要取21个数,即0-20, */
" J/ G7 N' I/ Z! o$ [//                        enough_data = 10;//有效是10,无效是0% f6 M! j+ O% p; p& T/ R. r6 ^2 {
//                }
! o* g3 ?' ]( J. Q; Z        }
7 n, a; ~: h! X2 U
" B7 G' ~6 U. Q* s2 y2 N; j1 H, ?
* o  F8 k( Y. K; x- n7 }4 A        enoughDataFlag = 100;" r; f6 Q; j! N: p) n
        enoughDataFlag = 1000;
. e4 F% e! Z9 @! j- `8 {$ `        enoughDataFlag = 0x02;
8 B9 ]3 Q0 b% G# \* j' q        enoughDataFlag = 200;1 Z/ h8 H, w7 i; \. Y1 l* g

- T, i& ^2 z7 {. k- W; a8 o        int myfuvk1;; }1 ?5 }0 @3 K% s. p
        myfuvk1 =11;2 P& Z' e. ^- Y& e7 A
* H3 A; E( L0 {7 t# u7 _! N' @2 p: Z
, E0 m9 C: F0 ?" T
        enough_data = 0;1 Z1 L8 V$ ~: `! \% P, s7 w

( y( U* K1 }/ B+ X//        if(enough_data>50){
8 H2 Y- x' V5 |* {5 V3 ?//                enoughDataFlag=0x01;
( C3 k1 Q0 N: F8 d* l//        }else if(enough_data<50){- w- h# J/ R# _& r9 A! ?0 b% l
//                enoughDataFlag=0x00;//0x00还是不行
4 a! u. k; _+ \# v6 s, x. L//        }
; y: B- m0 D' F) C
. Q, F0 M* a8 y8 @& B& d/ J+ q+ l! K8 o
        oo=10;
: }3 Q3 J5 }' m/ g! e* g        oo = oo  <  5;; [  \; Y- l- c5 [% G1 n
        if(oo){
; z0 P" ~( F/ D" p" `) k' n                ii=0;: l) e3 s# k1 i
        }
7 m, z8 z0 D! y/ q2 `& f8 T        if(oo  <  5){3 Q9 s& N1 b6 i; K. }
                ii=0;
( g0 q/ v* l' m; ~$ |( M: T# D        }
% U5 ~: R0 f' O1 I- L        if(oo  >  5){
0 p) z4 f8 R1 G( {. D9 d                ii=0;
' j0 L5 F5 O% o6 c6 }. I/ z5 Z        }! J7 }# \3 w; p% u" ~0 O" m
6 a$ U* |% r, i) U+ W7 k, j
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
, @! z7 K# |9 ~; b7 W. D        /*  如果数据足够才执行主程序 */: G* `: K( _. O( D0 J: t) B. j* L
        oo = oo  <  5;
9 b3 y9 W6 T8 e" B1 H) ~+ W3 M        enoughDataFlag = enoughDataFlag  <  5;1 y6 X+ [* M0 }- Z  n- ]# A# `2 N
        if (enoughDataFlag  <  5) {
$ T( I* I' n" b+ l2 a( _//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
* [, o) w+ ]; d2 w8 Q* M, j9 t                AGC_AGC(&pAGC);
8 k2 n# u1 J" L9 Z: ]4 V5 n, o5 P- B3 x) [
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);7 @7 [3 O2 [1 z. \7 L+ k" h
                FIRDecimator_FIRDecimator(&pRxFilter);1 U/ W1 }+ P7 ^

: o# N8 x( \9 i) y. t" x1 }2 Y  Q                /* Downsampling */' w+ q# b  c0 V/ s8 {3 w- m  N
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 a- y- d9 X7 X0 w4 `
4 _' `) }3 r- H! j' ?
                c_PreambleDetector_PreambleDete(&pPrbDet);
5 Q. M' @& ~' K1 }
4 w2 s1 W- O5 u. h2 Q                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
4 a2 _  D/ q% C. z$ F9 }( Q                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */6 n' _/ R+ W: t6 Z: w0 j
                /*     %帧数量=100 */( q% I9 h( |3 I: U& k- a4 b5 _
                pFrameSync.isInitialized = 0;
) b0 U6 r  Q/ b4 Y7 [1 R: p+ V
1 p; s  ~$ [7 v( d8 d) |                /*  [EOF] */
. w3 _, u# Z& o: v, _                /* 前导码长度是13 */
7 ^, R" j4 `! m6 X. G8 Z* [- s                /*    %qpsk */
* Z3 b* W0 j9 z8 z5 ?0 L                pDataDecod.isInitialized = 0;
7 e' t- z0 |4 [4 Y9 S
) E& T) u$ n3 w  t* C4 X! V                /*  end */
, K, a' v: A- H, Z7 `6 a9 R& \7 Y. N                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
; C" F8 M" d2 X7 ~' P% E                /* Convert 3-dB frequency */
" s1 N, S  z# S' |% R# i- Y- b                /* Convert 3-dB frequency */
# ^* j2 r5 V! I) _; t0 i                filtfilt(save_buffer, usable_left_filtfilt);
  n+ |. b; ]8 |; h) K# t) n                for (ixstart = 0; ixstart < 81000; ixstart++) {" O6 D  T% G7 R; r: q
                        usable_left_filtfilt[ixstart] *= 2.0;
3 W  g! Z$ t% ~  X) q  T                }
& h( L  e) b# |+ {; H% d1 I, B2 d' J$ Z. k; k4 m' t' a/ I
                /* 注意乘2,处理幅度 */! t+ g& y: w' I" [
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */5 ~+ b5 ]# |: \; D  `* z% N: j
                /*     %% 行列转换 */% }( e* }. P- F6 u- I
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
2 _3 H; m9 R# l: P  o; O                for (ixstart = 0; ixstart < 81000; ixstart++) {- {0 c7 Q) D7 b
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
9 n( t7 m) O8 a* ?% S1 W1 F% U% ^+ N                                        - yiDuanShuJu_mean;+ x# C4 Z& v2 h5 s
                }# n3 b1 y( ^* @2 b- q
7 ?. R& u5 ~- C& F9 V
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */% j# r/ @  d& \* g' k
                ixstart = 1;
! J! }: h& g; A' \                mtmp = youXiaoShuJu_QuZhiLiu[0];% _2 Q$ n& j/ K( f# X0 j
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. w6 u, y' U7 r! m. C: T4 n# A
                        ix = 2;
- A! K/ s: ]7 m7 `/ @) D; b( `7 j                        exitg2 = false;
& o7 S- Y3 G4 z) K3 ]  a                        while ((!exitg2) && (ix < 81001)) {& x. `3 Y1 K1 m7 w  i$ p
                                ixstart = ix;: W1 R3 i9 K' a7 q  G2 ^+ @9 Y% V
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
3 S/ d  Q" V0 t+ Z2 `                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
7 v0 S: A; `7 k& D                                        exitg2 = true;" g' {; j* }; i8 D$ d
                                } else {* t6 }* {+ o& k& O6 s+ ^
                                        ix++;
2 N1 h) c% X- m. W3 ^7 q                                }  r0 y) c1 F' p# \+ F. r$ O
                        }3 D% ]  q: P4 {# F. O3 l7 i
                }$ p% d. c* E1 v1 u

* Y, e3 p+ h9 g5 T( c+ A7 G, \                if (ixstart < 81000) {* `+ e+ ?& U% g3 w# K5 K* ^
                        while (ixstart + 1 < 81001) {  @4 ~' D" N4 D, l) ]$ X1 z( c% K
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
% m( Q3 ?2 M' ~5 s( k9 i                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];# w: u; a, t+ v6 w* Y; V) j
                                }$ x; E# m* S( c3 J2 M1 f/ f

: @  k1 ^  q7 b) ]4 L                                ixstart++;7 a& ^( F" ]3 o* _% G9 @
                        }) a- @. s2 A* `( T
                }
6 z3 \  {/ g' r: F! e- k1 e0 `4 H
: T1 ]0 ?. F0 _; D+ W3 T% D& g' A                ixstart = 1;
4 q* ~4 P  R' K0 r. b                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];+ G$ p* L' z% b5 G* k% K  d
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
; \9 y* _+ x( E- [& z8 m2 F5 l                        ix = 2;7 L. W9 q& t1 S" C
                        exitg1 = false;! H* X* J/ e- @& Q9 e5 K. `: F
                        while ((!exitg1) && (ix < 81001)) {
5 i. i5 G! z4 r7 v3 ^1 f                                ixstart = ix;
7 c: |, h8 g8 c6 P3 @0 [% u5 k                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 |0 W5 r; ?& U. Z' ^% ?- A* D1 C8 `
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
8 t8 z+ S2 T: S                                        exitg1 = true;
" z3 T. M" ~7 ~2 y7 |% r: w/ {                                } else {
3 V/ s( }: O$ M                                        ix++;! z* K# x) w* ^2 \& p% L7 E0 W; a
                                }
, T9 s/ }4 Z3 r/ d  b1 u                        }+ z; \' r* C: Z! d+ |( U. Z) S3 z
                }7 c; L) x' W/ ^
! d% J, J2 }% X+ {
                if (ixstart < 81000) {' R& y9 M# h% F/ n
                        while (ixstart + 1 < 81001) {( T# d5 V; {9 V( B, D5 y% [
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {0 N; z9 B+ ?0 b" L; m
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];" j  w& `( V$ K) l3 C- }7 \
                                }
* O+ k( S: r# L# B; e* z0 p- y' u, [
                                ixstart++;. k4 @0 j. g2 N
                        }
0 U( ]4 C4 m0 k3 p% x                }: P- c9 n9 T' A8 T6 `
; ^- X$ i5 y! Z! b" }: u% C
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
" ]; U# }9 [8 ?" u5 R                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
6 j5 y9 s, Q9 T8 b9 s( ]( C/ H" o                        yiDuanShuJu_mean = mtmp;
3 B; _4 Z" k; ^                }. L- d2 [' W6 b& E3 W! y; M' f" e

& X4 V0 a4 n) q( d( v5 c                /*  找出极值 */: z7 J- a( B8 L7 n; G
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# F2 v1 b$ u, l                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
/ `) \$ \) n( I: R                }: J" r- p/ o) Z! I7 v8 r  v  b

: p) v8 B6 [0 U9 U        --------------帖子字数限制------------------$ _3 {% u7 E$ S# x9 g7 `
}  z- u. _  C* T- @7 f3 [
3 ]9 S3 J' J5 ?) P/ B
3 c8 Z9 Z5 v7 ]1 @7 |( {

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-22 11:38 , Processed in 0.048760 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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