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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
3 z- C$ P  z' U& s* f7 q" h+ }! X# y  ~" _: f9 }. ^
各位大神:
: U% V  G8 V2 Q     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
4 m8 W% {9 A1 Z- |5 H3 z      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
6 M  W3 g7 N4 g1 @/ l9 a
4 @8 c/ }) v" H* s3 X2 C& N     
: g  G/ [7 W+ z这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。6 m: h( q+ t; G9 `  b" u5 X

/ T8 W" ]' }3 V+ ?. y  c并没有其他线程
" u/ K1 g. x% Z- f/ U$ H反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
/ K' [: h. c+ l/ r# E! [0 k也说不定是和堆栈有关系。。。。。。: h, t3 C  R. ]9 \& l
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....( V4 J) l9 J3 f! w# B& |
0 l+ V& c0 @6 k; i1 l* e/ d" ?
4 F4 g/ I+ C8 L/ \

7 C8 L. B8 W+ _: r  R: c我也很绝望啊,希望大神能帮帮忙,感激不尽,!% B' q* z% |6 J! L5 h

  q) D9 w1 e( f( W+ p6 q
- N) ^0 I8 g+ m3 ?8 n附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];1 J+ s1 U1 S% a, g+ P% N% V& n
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。0 B+ K* F' n# s! A/ a, B

' m6 [. h2 _: c+ z9 L# @( Rboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
: z- [$ `% g3 v6 h: q5 J                const double data1000[1000]) {
  w( S4 z% ^3 B9 u$ o7 x) G2 }
! p6 Q4 Y! Y: k% L9 H, b- ~' H        int myfuck;
8 s4 I1 p) i3 A        double yiDuanShuJu_mean;1 x' h2 h; p% T' |2 [0 ~# x. U
        double yiDuanShuJu_LowMean[1000];9 p' P( \' s0 z/ M# \
        int ixstart;
+ f: i: P- c& G7 I% W        double dv0[1000];% Z: f: H. B$ q
        comm_AGC pAGC;
' t7 F# m! Y- v0 E        comm_CarrierSynchronizer pFineFreqCompensator;
% b* u: J" O9 X4 c/ o/ B; x        dspcodegen_FIRDecimator pRxFilter;
; |- c, j3 q- B& N. I# M        comm_SymbolSynchronizer pTimingRec;
& R( a/ d/ ?# F- a* w2 q        comm_PreambleDetector pPrbDet;
( L% V  ?5 l& g8 W* D; \! s9 @) B        FrameSynchronizer pFrameSync;- H7 e3 i* }- Y
        QPSKDataDecoder pDataDecod;
9 @/ P3 R$ \( K" i# u  P$ N4 Z  k        static double usable_left_filtfilt[81000];
7 r3 j% b8 F: n5 t        static double youXiaoShuJu_QuZhiLiu[81000];
" a' B! y. J$ R. e2 y        double mtmp;
0 S' Q; i, g! d9 s: h! {2 J        int ix;" q. L' u$ s) H- b. }
        boolean_T exitg2;
& V  p0 F& w: @" s/ h        boolean_T exitg1;7 `* f+ o. H7 [7 Y2 I# s, E
        double YiZhenShuJu[800];
1 w, U9 }+ }* `7 C: h7 w3 h        double dv1[800];9 [& [$ f+ H: L1 n/ I' R
. Y: i' K, M9 p8 G* _

5 R1 V3 N# f6 @* i        double b_YiZhenShuJu[800];
4 Z5 G6 k- E# N- W1 X9 ~4 O        double I_filtfilt[800];. L& o' C5 m4 e2 _/ o- s' s
        double Q_filtfilt[800];
6 Q  n1 b9 j4 Y& k% P7 ~" ?% b        creal_T b_I_filtfilt[800];
8 Y# B1 }6 L- l; H3 _$ P" m+ x# \        creal_T b[800];! o' E9 h: q0 Y8 Z- w/ z# b+ `' f
        creal_T RCRxSignal[50];
9 ?& E. `; `5 G; l        creal_T fineCompSignal[50];
. f8 a: l4 s* F1 T7 s        double phError[50];# x$ h" N. d  D+ L$ d. L3 u
        creal_T timingRecSignal_data[28];& v7 U4 `, {2 i1 r: ~/ t
        int timingRecSignal_size[1];7 E# b5 H9 j4 F/ ]* X0 m3 F' x
        double prbIdx_data[28];
! q3 C- x" g4 J$ l6 I# U) b: z6 c( X        int prbIdx_size[1];! b: o/ J4 h3 B1 D& X+ w  C
        double dtMt_data[28];
. v, ?6 r4 ^* n0 c4 S        int dtMt_size[1];
2 V5 m$ n8 g9 t6 o        creal_T symFrame[25];
. o5 u2 A+ e0 \& v        boolean_T isFrameValid;
# }: s6 p6 }6 P; ?" H8 M        double unusedU0[3];
! w. B8 H& T! s% v! V* d  X. B( X! n' Z" x, X5 V: p5 o
        //调试过程中的变量
4 I8 j* I7 D9 ~! D2 F8 |; [        int  enough_data;
) D1 N% k, s- R2 Y+ d# {! T
2 r5 [% ?- V' |& t        int enoughDataFlag;
+ Y3 p8 l6 U! x        int yiDuanShuJu_mean_int;
/ a& v8 w" e$ j% f& n        int int_sum_dv0;
8 J* J; _1 j' w7 R" U  s/ z        int oo;* z8 N- r% h9 E5 N+ [4 F
        int ii;
4 z; Z  ]+ V' k4 r        myfuck=10;7 p. D8 `6 a- W9 ?$ C
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
4 d+ P+ s4 f4 t        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */' ~+ S5 T7 ]2 J8 H2 o

  E: ]: A* h7 a4 |/ w        yiDuanShuJu_mean = mean(data1000);* _% W0 p. \1 m

- o4 G. g' _3 w8 W4 y) h8 }# [' q        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
$ l: F8 b# B: M" Y# ?# @        UARTPutc('A');! A; A# ^5 }' m
        UARTPutNum(yiDuanShuJu_mean_int);
5 W7 n+ F: }$ q$ ~/ e' E        UARTPutc('\r');
: ?) V2 O/ n2 F5 W. ?7 C        UARTPutc('\n');* }+ t- F5 M1 ^* Z- o

4 I5 n3 C$ C" M4 |  M        for (ixstart = 0; ixstart < 1000; ixstart++) {
; v, `: i) M) s+ Y0 S% x                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
2 z- l" `$ W8 I% O        }' X, j+ R" s- d4 ?0 O9 K1 s# G% A

' n3 X9 Q& g' B6 P( ]* d) X        power(yiDuanShuJu_LowMean, dv0);5 z  k# H/ X, |0 h# H4 O0 v

; n/ M( t3 O; W8 ]0 O* A        int_sum_dv0 = (int) sum(dv0);
" m. N' s+ S4 N- ?! \, L6 z  k! J/ T
        UARTPutc('B');
4 H) x# _% H9 G7 U        UARTPutNum(int_sum_dv0);
$ V! S/ K# v6 \/ u+ e4 b+ p$ t        UARTPutc('\r');' M5 I/ V/ U/ o! Y$ N
        UARTPutc('\n');. w: y; w) J% z, g$ z5 V8 l3 s3 Y
; R- [. P& c7 Y  p
//        int compareFlag = int_sum_dv0 > 1.0E+8;
. E( X" X; k7 ~6 f5 l# r& H+ i# I9 x4 l: m& q# p+ b& D: D
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?4 K* C. F1 d2 ?( f
                UARTPutc('C');2 p- N# v. W6 M/ ?0 E
                /*  比较信号能量 */
! H4 D! L4 |& S5 [                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */& e) e& O0 i0 q5 L. s" j& \
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
. k2 q5 _& C7 b% z1 s1 i6 n//                for (ixstart = 0; ixstart < 1000; ixstart++) {
, A5 P2 n( h& G! a, j3 F  S//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =# I& O  g6 Q/ c- P0 X" x  Z
//                                        yiDuanShuJu_LowMean[ixstart];
: b- y$ x6 n3 P3 F1 L, I//                }
5 J+ ?" N2 m3 ~5 I+ S/ F; ?4 V//: O' _. q, L5 o: J: U7 `
//                youxiao_k++;
7 i. p9 _9 U' h  @//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==! |4 x' W9 T1 I" k
//                        /* 感觉要取21个数,即0-20, */
0 k7 y% F& I" G. n//                        enough_data = 10;//有效是10,无效是0: W( B  a) R. j1 m8 J3 y" g
//                }: [9 u  d1 Z5 W6 `# N& w
        }$ Z; @- a- k9 S! R4 d/ Q9 g

$ t, u4 H' N) z! A7 [2 G3 V8 M% U
. r, }, J. z* q4 g# z3 i        enoughDataFlag = 100;! x+ N, o5 O, |. `9 ?
        enoughDataFlag = 1000;' ?  ?9 v4 c9 }% K$ @% R2 e* ^
        enoughDataFlag = 0x02;7 A8 m' |9 |4 R% ~  k2 M; t6 f
        enoughDataFlag = 200;  d# w* R- d0 g  B# O
9 [4 r! P  b# F0 X5 i/ W
        int myfuvk1;* s4 n& ]9 y/ a. u8 Z# Z( C
        myfuvk1 =11;
8 {- K2 O# q5 U! `5 M; y5 W1 l
: w8 W7 p- V/ s& x+ {2 M5 J  I. S  x- y( r# t* [
        enough_data = 0;# a3 s+ U1 J0 X1 }
5 o# Q6 U/ f) k! K" s& w9 J. k
//        if(enough_data>50){
# R3 E8 K1 t/ w- @" i; j) J' ~9 l//                enoughDataFlag=0x01;/ }9 ^* {/ C% u3 P4 q, j) Y- D$ j
//        }else if(enough_data<50){
' `1 N4 d2 G- a( I. j$ f: D//                enoughDataFlag=0x00;//0x00还是不行
, v- c0 H8 F- Q0 W//        }
9 Q/ r4 i7 F; ]/ D6 L* X, u- ~- H2 I1 }

4 o5 ~& @3 L0 r6 h8 v1 F        oo=10;3 S. y& ?" T, O, e4 f* U! Q
        oo = oo  <  5;
/ T) m  A$ T3 }. [        if(oo){, w- Z  G$ S; A! a1 @
                ii=0;
6 u: _2 g6 W# u3 l2 I        }
% ~/ L/ C. s# C) Y' [2 Y        if(oo  <  5){+ ^2 x, J% r+ Y. T+ F1 x
                ii=0;
! ^2 T2 c$ N) ~& \8 s0 H0 }4 M# T/ g        }) i7 V+ t4 p; M
        if(oo  >  5){
% A) i, h1 g) [8 `                ii=0;* x5 ?% G. ~' w
        }
$ {; K' M6 S$ m1 G9 h! G
5 v. _) L- d9 X        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
0 f/ x% Y! j% K& r: A        /*  如果数据足够才执行主程序 */1 t& h! Q/ Y! P$ @7 x
        oo = oo  <  5;
2 H$ X7 Y* c. Y: @1 [5 C5 l- O# c        enoughDataFlag = enoughDataFlag  <  5;3 c' s6 I: _7 V0 I  D7 E! L6 ^4 g
        if (enoughDataFlag  <  5) {% ^/ Y7 J3 \' z2 G6 l( Z9 q7 c
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0- {. `; Y1 O# T
                AGC_AGC(&pAGC);0 z/ J9 X& Z9 f/ F
+ s: v( g8 `' |: ?
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);, o0 A0 [8 p3 |; I( ~
                FIRDecimator_FIRDecimator(&pRxFilter);& e4 U: z$ \9 ^' g1 x4 q
/ N/ a$ A' ?0 U6 g9 L2 d9 @
                /* Downsampling */' \) G1 t% G" O6 E* ~5 w
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
$ Q/ n* G7 X( N
% H9 ?- R6 C9 T2 p8 L- ^& D                c_PreambleDetector_PreambleDete(&pPrbDet);2 f8 h+ t2 {8 z1 ^0 H1 C. R

, l* ?& i& [6 z7 t, B+ u' e" e                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */: |7 b, K, {6 p9 l0 w
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
, f( D  q+ l' A2 E                /*     %帧数量=100 *// y* i2 A" o* E4 d. U  d( W% ?9 n
                pFrameSync.isInitialized = 0;* ?, {9 K2 L" S; o& @) ^! v
1 E: n: w/ j  x4 n. `1 i) z
                /*  [EOF] */
% U! t7 s$ c7 E. u0 [2 t                /* 前导码长度是13 */
( b- i* u4 D/ X, _( z' g2 G                /*    %qpsk */* y, }7 p  I1 V+ O
                pDataDecod.isInitialized = 0;
$ o+ K: s/ Z8 Z) X  p
6 f% O8 Q! x" y                /*  end */2 d% l; G* z- T2 P+ @
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
2 l0 ^7 z# i% P                /* Convert 3-dB frequency */
% S+ q9 U: b2 h( k& }% J$ z                /* Convert 3-dB frequency */
. d6 t9 n% g4 M, {                filtfilt(save_buffer, usable_left_filtfilt);
' d% V' B9 o$ n7 m1 e4 F5 ?                for (ixstart = 0; ixstart < 81000; ixstart++) {4 C: A6 ^9 B/ L+ p" a
                        usable_left_filtfilt[ixstart] *= 2.0;8 V  S' m& g* d5 N0 a$ L
                }
- V- D* C; n6 t* _: u- u3 C! D) s# c
& k$ z2 H2 P- Z* l1 A9 @) y: J                /* 注意乘2,处理幅度 */* l' M* i* T! ^& E( @  d! ?3 y
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
, n) \: n9 k! S$ ?- {2 U* x                /*     %% 行列转换 */! O2 B! ]( ?+ P
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);: q  A7 K/ ]' h! w" [
                for (ixstart = 0; ixstart < 81000; ixstart++) {
. q' y& k) U) G/ I4 G, n& |! [7 f6 e                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
# G0 [4 ^: u6 C" [5 g9 k5 [* X                                        - yiDuanShuJu_mean;
8 u3 E  B5 F1 K8 u* d$ V  I                }
" M# {' l3 U# o* w# \9 [
  w+ z  U$ G+ `                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
; t; U/ B; J& }% {. w% j/ b  O) ^                ixstart = 1;/ D$ ?" d, h* r- q
                mtmp = youXiaoShuJu_QuZhiLiu[0];
; D( F$ h5 ~: T                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& Z- ~+ \& i0 s/ z
                        ix = 2;1 H* s" k1 `  Z
                        exitg2 = false;$ p+ ?7 F4 P4 C6 O' \* R
                        while ((!exitg2) && (ix < 81001)) {
5 n9 `' [: H" j7 }                                ixstart = ix;
) W$ L/ X- y2 t, A7 c9 z" u                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
% N5 t0 y  U4 K" Y0 p9 y  ^7 O" B                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
  j. K$ Q" \5 z% n3 B$ c$ U4 K                                        exitg2 = true;
3 c* O0 C5 L, n. f4 N                                } else {
5 d, [% t$ }# w% k, Z2 w* u* D5 u                                        ix++;
* `- V1 w1 W9 f& H  m                                }
, c4 |9 l# L, A# B8 s8 o7 d  u                        }8 K' |% `% O( B: _5 T$ b8 V
                }
; A; ~- ]5 N& D- C  v( [6 S- j# H7 ^0 Q
                if (ixstart < 81000) {
( ]! j2 Y" k4 Y6 i                        while (ixstart + 1 < 81001) {
; r: l2 ?. O! f3 G! Y                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
7 t+ |  c3 U% Q5 \1 `                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
3 p4 E2 Y+ q1 x7 Q' J$ E  F# l1 T                                }! [, e9 C/ F  a

: h0 v2 V* {2 W, ]                                ixstart++;9 Z# l4 l) i" V. c- R0 G
                        }
; N% p. ^# P. ~, c' x9 I                }# q1 g2 h2 x6 a0 x

) v: r2 Q4 ?, d/ n) @: o) N                ixstart = 1;& X8 z- J# }, H" \# _
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];) V7 g0 p+ ]: |, E% y0 k% W* x3 j
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
( @2 _  q0 ?! U) o9 F% H# w                        ix = 2;" l( d5 x; Y3 m( s' [/ \) F
                        exitg1 = false;
4 f; Y7 {# M+ V, n                        while ((!exitg1) && (ix < 81001)) {
6 w) \9 v6 s5 i5 z                                ixstart = ix;
! g/ T' g% T' S$ x/ z                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {5 ]& x: K% m/ J& H. J! v
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
- Z4 Z7 d4 E/ M                                        exitg1 = true;2 Z, Y0 G, O! N$ M% [
                                } else {
0 ]8 B: z+ C* y7 \                                        ix++;
6 ^  ]" k" h( U9 a4 e                                }1 `3 D; `  `0 m. \
                        }
5 Y+ Y& d6 a' A3 L$ K                }
1 [; k6 j/ R2 c% B5 _: E; u3 a$ K0 F
                if (ixstart < 81000) {" |$ H& D0 X& e0 L' c" b2 z2 E
                        while (ixstart + 1 < 81001) {
8 D$ G) j; T( D9 a& a                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
# e8 ^, B% j9 C( h" [1 @! j2 Q- f                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];, C, B+ K* Y7 H& I$ G
                                }/ k8 L* ?! e+ T' s# m6 r2 B
4 g. Q( S2 x5 q- ~7 w
                                ixstart++;
+ h8 o+ T8 Z  x3 r. t: u                        }3 t0 }7 o, X) G; U
                }& C" T- |: q8 i

$ O9 n. q! }" l- q9 o: t, ^                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
; I' M$ D: j2 p0 A! Y                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {" R4 f  Y% s+ [4 ~! ]
                        yiDuanShuJu_mean = mtmp;& H' J* a* r+ ^
                }
! p5 n1 V8 f0 K: Z) c# W4 k, G/ E6 D
( J2 E9 _! d. `                /*  找出极值 */; M) Z: r4 a0 l" e- d
                for (ixstart = 0; ixstart < 81000; ixstart++) {0 g! Q  t4 c: b, ~0 M3 Z6 |- L7 S
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;; H+ v5 ~' `2 w: _( K7 O; i/ B
                }
! @5 x: s. e8 j: f8 P5 t
* s1 F9 [; L- m7 b( ?        --------------帖子字数限制------------------
; U& L7 r6 j- \) o2 E}
% x3 e- s3 S' ~0 v/ w6 T2 ^2 V) T: U, ~- x& j5 l( ?* u0 d
4 r2 K; N- D  q1 i

本帖子中包含更多资源

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

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-2 06:50 , Processed in 0.065689 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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