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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 # i& T+ J5 X/ P8 n! s9 I

6 o+ m$ A4 [" G: E) O! o各位大神:) h" s; Y7 J7 d* ]
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
1 ^5 W4 r( X; S7 K7 v) b- e      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:% A0 {2 X6 x# n! d. s

; _. U. W. J! m7 q; _! H# Z3 S     4 v( v0 {$ ~! N" C7 n* z
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。/ W9 F9 H9 r3 P+ ^* l
+ G  F" h# p& e9 \3 `, b9 o9 J
并没有其他线程( C3 J2 h% P4 H0 G# n0 s/ V1 j
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
. N% W* `) l7 @也说不定是和堆栈有关系。。。。。。$ ]% j6 H$ f' i# u' C( @
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....8 m4 a6 Y. p$ Q

( c" |; M* \; p3 J8 j
' q% k2 s5 p" m8 U- i/ C) t
# k) T. Q) g7 G我也很绝望啊,希望大神能帮帮忙,感激不尽,!
" f. |" z, m' C6 m- |6 B
) Z: C" h+ n8 {0 t2 @% N+ Q% K7 y6 t! n  N; k+ |
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];5 s, i/ W: b/ W$ z# P
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。! m) D- Z$ d4 l9 w! Y! I# Q8 s
( z3 L4 ~* B5 I) Z# U+ x; X- Q
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(/ H8 R% b, N6 y! G3 s
                const double data1000[1000]) {
+ o- {  q+ ~8 e$ `
. c: ]& D$ N5 q! W& t+ r5 M        int myfuck;! `2 H8 `2 \$ H; [. d
        double yiDuanShuJu_mean;
+ @' D% }" c" i6 ]        double yiDuanShuJu_LowMean[1000];  u$ h  F3 W% n+ e1 w: y, I' \
        int ixstart;3 n2 d, T5 E! _7 C) {4 D( q
        double dv0[1000];7 G# {0 E8 h8 `  _8 J7 p
        comm_AGC pAGC;! Y3 o. R  K: `/ |% S) H* z' O  \& H
        comm_CarrierSynchronizer pFineFreqCompensator;
' b& W9 b0 R/ |0 h1 d, f" T. p        dspcodegen_FIRDecimator pRxFilter;
3 D4 a  r, o1 {& {9 ^" i5 `        comm_SymbolSynchronizer pTimingRec;4 P+ {: f7 Q! U% n. c# K
        comm_PreambleDetector pPrbDet;5 k+ D& K8 g4 H3 v3 N
        FrameSynchronizer pFrameSync;
) _0 O; p6 V' g; a! X1 j' p        QPSKDataDecoder pDataDecod;
0 Z2 j1 P( m( H! j$ y+ R        static double usable_left_filtfilt[81000];/ R3 K  ]! {% {5 F! X% P+ ]
        static double youXiaoShuJu_QuZhiLiu[81000];
* d$ b" I  d" Q, e# Q- C        double mtmp;: a' y9 Q0 p* e2 |+ `4 s* d
        int ix;+ X+ [3 V2 `% n
        boolean_T exitg2;
  ?+ h; R# c; c7 r$ J) J% r4 ~; ]0 \6 C        boolean_T exitg1;
, [% b! z7 m/ R0 L( ~% Q        double YiZhenShuJu[800];5 U4 R4 m; E0 @' d* `6 ~6 s. ?
        double dv1[800];  q* X6 c# I( a2 k
; t" \" P( K* J0 T8 q/ a
9 d) v4 m7 I) C
        double b_YiZhenShuJu[800];
, w* ^# D- x; q        double I_filtfilt[800];
( s/ T7 [! h8 x* y& n" e8 ^1 |: H        double Q_filtfilt[800];9 F' {1 `5 Q* R1 \3 v
        creal_T b_I_filtfilt[800];
0 A* ^* @) h. z* r& {7 A        creal_T b[800];
4 v, R) _8 ?) b        creal_T RCRxSignal[50];
( i) G3 ^1 @" S% [        creal_T fineCompSignal[50];$ l! q! l$ U5 ^- J8 }7 V; _
        double phError[50];
" E. O- p& B; _) n0 p9 n7 v        creal_T timingRecSignal_data[28];; `/ \/ T5 P; s. Q' R5 g. `
        int timingRecSignal_size[1];
8 R/ `, y. b: E! ^: Q        double prbIdx_data[28];; E2 n8 L1 ^  Q7 A/ e  {
        int prbIdx_size[1];) Z: a5 A- ~/ S" g; D0 Z
        double dtMt_data[28];' C* j0 B# H, o3 ^0 g, \) u( f/ e
        int dtMt_size[1];7 w- t/ s2 q1 o+ K& R; K9 g* m1 Y
        creal_T symFrame[25];5 q* L4 o$ R7 I
        boolean_T isFrameValid;
5 V# s) i( `: c' v2 V$ y        double unusedU0[3];
6 Y5 }  o& e: U: M: `; M2 i( l" {8 L6 U8 Q
        //调试过程中的变量, @0 n" s+ w! X4 C% X
        int  enough_data;% D' B( E; I7 J- l, R( b
7 m- j1 {5 l6 {5 w- n4 R* l$ s2 a
        int enoughDataFlag;8 j# t: ?6 w9 X6 E% H$ ]
        int yiDuanShuJu_mean_int;/ s! n3 T0 g! t+ }) B: l
        int int_sum_dv0;
" _: Q& a3 ~! X+ _6 ]% x/ V; Y        int oo;: c9 z. b! U6 |- ^* M! Q# |% Z
        int ii;
2 u1 c# n! d+ ~$ c; y        myfuck=10;
) K+ N- O/ H; E, U        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */3 |1 G' |. `4 d5 H; D1 c
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
" l) D% m: j% Q4 O1 I* X6 ~
. Z- A# h1 e  g7 F% f  |        yiDuanShuJu_mean = mean(data1000);
) a/ L( x  F( I0 @9 x7 q; o' M1 \
* j3 b& X7 p0 X# t# z3 [* x        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
2 f& Q- ], W+ S- c1 `- i        UARTPutc('A');
# p# S" ~  t. @9 @: Z1 K) B        UARTPutNum(yiDuanShuJu_mean_int);
2 c" f  M( Q$ |4 v  b        UARTPutc('\r');" x- E% X1 x9 A
        UARTPutc('\n');% r- ~! v2 r; v/ i3 S
; R) ~% N2 @  i8 R8 [# C
        for (ixstart = 0; ixstart < 1000; ixstart++) {- R* f& E1 U$ G# Q, @
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;) s  E2 w* J6 a; y5 L1 B
        }
. q8 P* I& n- [9 _- X9 |  @$ R9 P) t+ N' I/ L+ ?7 \
        power(yiDuanShuJu_LowMean, dv0);' R' A+ K5 p" y

7 p" [0 h- h: f7 F) h; k7 `: F        int_sum_dv0 = (int) sum(dv0);
' M) m9 }) \1 b- g4 A$ M1 S3 o1 v
& B" h" ]; O( b        UARTPutc('B');
( l8 t  [' l! p8 r! r% Y2 c# Y        UARTPutNum(int_sum_dv0);
! u) l* y1 @" ~! C* k! u        UARTPutc('\r');& R7 Y) p0 k# g
        UARTPutc('\n');
0 T& U9 s: C# [
: b" t8 ^: \' ]8 v//        int compareFlag = int_sum_dv0 > 1.0E+8;4 ^( r6 e6 L2 m; R; A: S  F
+ A" l8 ]$ K  |1 y4 ~
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 z; u0 q" Z$ Y; ]& `; U
                UARTPutc('C');
; z5 N, p+ M; b                /*  比较信号能量 */
4 d! C, Z- x; T: A7 {: k0 P                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */5 N& s6 a+ I! v& ]' J
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
9 l7 U8 u2 d! h; {! W//                for (ixstart = 0; ixstart < 1000; ixstart++) {8 O. M% B7 h5 a- O
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
" |- T1 i* y) |! [//                                        yiDuanShuJu_LowMean[ixstart];
3 M( o% n8 c* f" a//                }
4 U# t& q7 ~: Q9 K//  ^! e- @9 X# ~+ s' A
//                youxiao_k++;. p" P/ j# P7 X/ \
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
5 z- h6 {! f5 @: o& Y+ [! Z6 S8 g//                        /* 感觉要取21个数,即0-20, */
0 W6 ?% @! ]2 x/ w//                        enough_data = 10;//有效是10,无效是0
# x* k+ {: h4 T//                }1 i9 l0 S; e. B$ p. R* Z0 C
        }
0 s$ }; ~  Y. w8 G# T9 m) }0 R9 A6 v2 ]# {
; p) E7 x5 ~  n9 \) g: w
        enoughDataFlag = 100;
# n( P7 L1 F7 O5 q        enoughDataFlag = 1000;
1 N" ^9 y( b5 s4 v% M- S        enoughDataFlag = 0x02;
7 _: S6 m1 W& B% U2 D: C5 T6 M        enoughDataFlag = 200;
$ f) \1 ?1 J* \- [3 f. B0 ?% s3 O( }8 C/ v) r9 s
        int myfuvk1;
5 N0 t" l) }( S5 ~: d( F        myfuvk1 =11;
/ A" ]- w# g' E
$ Y; @* @) t/ r% [' x: M8 G- D
6 b$ e; f/ l4 z6 y: z        enough_data = 0;
7 K, a( f( u* w7 G. Q
0 `. R) R  g, q//        if(enough_data>50){
! R0 t/ w( q; d. ?/ N//                enoughDataFlag=0x01;( V( E$ d5 _) B! I( U
//        }else if(enough_data<50){
* f4 h( L4 D2 D' j//                enoughDataFlag=0x00;//0x00还是不行- @6 d9 e! w5 D; ]
//        }
$ u# }  o8 z0 b# ~! J" y0 H& W2 Q7 l3 E/ a

- o( H2 T( {7 O, N% [        oo=10;& ~6 _! N  u. H. [* T  q
        oo = oo  <  5;$ `3 _, C. t! g# x
        if(oo){
3 Y7 W$ H, I1 M  \8 U                ii=0;6 t4 {9 D* [$ g  [' k
        }" ]3 X" K. n) _3 k" C! i" k
        if(oo  <  5){
! U7 J+ x. Z/ G; _  c0 [6 ~) J% ~                ii=0;, G4 F$ k+ L' Q
        }7 ]( Y5 L$ t6 c6 ]) i! F
        if(oo  >  5){( ?. C& [- v& x% L4 ]3 L
                ii=0;
3 E" ~4 n1 U( ]" i3 M' v        }) r/ L5 O: j4 t0 r% L4 y' \

5 f( D# ^3 ~) r+ Y        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
7 c# n/ p% [( n. h1 F        /*  如果数据足够才执行主程序 */
; [# {/ ?) X0 ^; j# o" M& g1 ?        oo = oo  <  5;! e7 ?# V% |4 h( ~$ @
        enoughDataFlag = enoughDataFlag  <  5;
5 W- L7 Z! T4 [4 b# ?( s        if (enoughDataFlag  <  5) {
# @6 V3 N/ q' W+ d6 m/ b  d, [//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
# c& X: ~4 _! Y( f" t                AGC_AGC(&pAGC);$ I! _. ~. ]+ T) \3 W
2 d9 g+ Q  i' B' [" N% {
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
& P' H, @# a3 J                FIRDecimator_FIRDecimator(&pRxFilter);
" E) x$ `' c3 Q! b, I$ d: {  b- k/ l& \( s/ m0 g, Y
                /* Downsampling */
1 a" E3 E* H2 K+ @' O                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
& e2 Y0 j1 r! u4 ~
+ l/ q/ d- R* \9 L: Z& i5 Z$ N% B1 Q                c_PreambleDetector_PreambleDete(&pPrbDet);
2 K" E, }9 Z. U1 U: W7 b) d0 w9 R1 e: d" d* ^& g9 b+ }
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
) w7 ~/ q# \3 ^" i! z/ T                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
9 r4 A8 O1 \' A) u$ J3 D                /*     %帧数量=100 */
* D! ?2 w. d. C' L- s: y4 R                pFrameSync.isInitialized = 0;" W2 ?8 N# E, r  S, k$ F
) \6 _* B; F% l) z
                /*  [EOF] */
; j" S! ^6 `1 N2 ~( e0 a! M2 z8 @$ D                /* 前导码长度是13 */3 T# b/ ~8 h( c* E2 z
                /*    %qpsk */
# U+ D8 Z" T0 ?/ r$ i( m" @' y                pDataDecod.isInitialized = 0;- l$ T5 j4 O# B
9 ^3 W* n3 j, b  T7 [7 h) {; k, I
                /*  end */6 i5 F/ X# a6 q, D! N2 B
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
2 F! {2 u8 z# u% U                /* Convert 3-dB frequency */9 Y& G$ A$ Z4 G7 A
                /* Convert 3-dB frequency */
0 t( ?- R' a& r& F  u, S3 m                filtfilt(save_buffer, usable_left_filtfilt);. i8 v6 r, `: D( {+ v: P. y1 _* s
                for (ixstart = 0; ixstart < 81000; ixstart++) {8 U6 G& r# d5 w7 d# l) Z
                        usable_left_filtfilt[ixstart] *= 2.0;7 k+ i! ]) Y5 U; ?; y+ W
                }) a2 h+ [/ O- @  z% D

$ ]* ?- B5 Y- M3 n$ v0 q                /* 注意乘2,处理幅度 */' S. D* ]5 N! H# `% z
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */0 e5 s- z" R: r+ R% r
                /*     %% 行列转换 */3 E5 }. J/ {% O3 O( R# ]
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
0 }/ |. v4 ]8 k: @                for (ixstart = 0; ixstart < 81000; ixstart++) {  J0 m1 n0 q$ I1 F% \+ C  |$ Q
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
9 \8 ]) [  |8 \8 N+ n; F7 E4 D                                        - yiDuanShuJu_mean;) L) }0 \/ o# i! p, k7 d
                }  V2 Z# T$ r. Z. W+ V

# R$ Y3 ^3 f2 y7 x) [: ]0 h* V                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */. G* P9 r; Y; {. h, ?  ~6 m$ F. a* H
                ixstart = 1;
' z7 H+ W0 w7 [" S! S5 |* r9 Y, d                mtmp = youXiaoShuJu_QuZhiLiu[0];
% R. o# M8 z0 Y* r9 O6 y5 e                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- ?( M3 p1 [* ?1 |5 x
                        ix = 2;
( _- d  f6 c- t7 i5 B$ S1 a$ K1 G                        exitg2 = false;
9 @6 ^7 I1 f" f$ a                        while ((!exitg2) && (ix < 81001)) {
6 C/ Y. u& B9 l' A                                ixstart = ix;
  x5 C2 v5 h' m$ U/ i* o# T1 g7 H8 F                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
$ j+ M1 ]5 e- e7 F" V/ X7 d3 u                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
' V7 e4 u9 _4 w9 J4 Y* K                                        exitg2 = true;0 N9 P/ z  \: s! c) T  G) b9 [
                                } else {# M' A: w( w6 X& k+ k1 h  [( M
                                        ix++;
/ d3 M' ]. b+ o8 E2 Y' t) C7 b                                }( u. p! o8 V- M  {# ]; x! H( }% C
                        }1 U" \* M' I% |2 b  i0 t3 I
                }
; W% f& r4 X7 [! t
5 ~% ]( ]" s9 K6 t/ Y( ?2 Q! U                if (ixstart < 81000) {& i& J9 a: f+ Z/ a
                        while (ixstart + 1 < 81001) {
6 y' A% K- J+ n5 c9 Z" C% T' @                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {/ H1 j) @; G6 @) x. G
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];- f. f4 h! w( w3 Q
                                }. x0 _0 |; D9 Y; j' ]9 C5 S' X2 H
' o1 w2 E. d  g& w5 T5 Z  t
                                ixstart++;/ X7 ?1 }1 t2 N
                        }9 U  E5 q! o" h( d9 g1 y# I6 V
                }! l) @' a- d* o6 H' e# Z" {- q

3 F, g: h% }; Y$ r7 g9 @, K3 I                ixstart = 1;
2 l) Q9 F2 _! H% [                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
4 q1 R: j: a# E$ J4 P9 N& ^2 f                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
: M# z" f8 r! d/ c8 c( r: x  S                        ix = 2;0 C3 [" o% _) o+ c  R& n5 i, W& o
                        exitg1 = false;3 `3 J+ i* j3 G, U4 q( ]
                        while ((!exitg1) && (ix < 81001)) {% p& R- v6 }1 |! a) S6 T3 G
                                ixstart = ix;
& |0 w) G+ J6 U, o1 [  }                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
' f; R# b9 ]+ B8 k; j5 j4 D: I                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
* e1 C, C+ v, \0 S                                        exitg1 = true;5 d, z" Y# q5 h5 d& d( {' W8 ~
                                } else {* V/ ^  h+ j9 w* Y$ M" M# J- d8 T
                                        ix++;
! q6 H* w. O: v- P                                }
& N: q1 c6 R% |+ Z0 I                        }
" V* n; c; b- L  s" S5 l                }
5 N: ^; s" P* H+ s  C. N# s& o* U  x' |3 d
                if (ixstart < 81000) {
: q4 y' ?$ C, ~- Y+ a- C% q                        while (ixstart + 1 < 81001) {
/ H* ?: m. D9 k# D7 u0 Z  F                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
+ D' g3 @+ a0 w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( K# A7 T; d5 S% n+ Y3 N# Y( R' C                                }6 f4 V+ j2 d8 R4 J9 e7 R
( J' p1 U% P3 U* q
                                ixstart++;) B* a- b: b( L( B
                        }
3 `7 J( X) G# G/ ]4 J- l* U                }" y; N8 r5 X% Q! D7 B

* e4 X6 S1 p& _* ?# m( y* m                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);; \0 p* G: f2 }$ x  T
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {; G" X9 p& S3 k* Z
                        yiDuanShuJu_mean = mtmp;  U* |! c5 M& l
                }6 N7 U$ Z2 }0 B. L1 F3 E; x0 e' d. v
1 \+ Y( U+ f8 f- z! n( b7 a
                /*  找出极值 */: n# b3 L9 w( Q- }5 M# o' F% g1 x
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 g' S, U7 T0 ~! I9 Q" K9 d+ [% o9 J                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;8 w) s! s4 P2 U/ Y  ?, B7 _
                }
( |* T+ N! z  _. }7 N( j5 E& A; L
/ A, k& Y' h. y/ I& V! b        --------------帖子字数限制------------------$ e! G( {" m: {, G
}
# Q( y' ^- {( ?) @  D  |3 g0 l" S, {. v: |. l& T/ B! y

5 F" I& g( J6 g: G" f4 R

本帖子中包含更多资源

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

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-20 12:15 , Processed in 0.050333 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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