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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 + `! }& ?- H  g" q
6 @+ g' Z* |1 l+ r0 [( K
各位大神:
* f5 x9 r# _: P' Z: ]; Z) u% @     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
! @5 v$ d; m* L0 k  v      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:! [) b( Z2 T- a
- L6 D$ d6 [1 g/ U9 v" O
     
) i, q3 Q7 B7 G& h2 {% X* N+ f; U这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。" i" G8 @! E2 Z  s
$ \. I( L7 D( o& r3 m" Y9 W
并没有其他线程) I5 p# z, y3 n
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。( }9 l: }. p/ Q% E( N
也说不定是和堆栈有关系。。。。。。
- G4 B: J2 _: W: X* k- X& v* L请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....; R6 ?1 Z" Y9 [

9 K0 f1 ]8 R& i& E+ _; q0 e+ N: X& n, k8 b% I- @: t

1 u. r$ P4 a  j7 u4 t3 K' X' R我也很绝望啊,希望大神能帮帮忙,感激不尽,!
+ K% m4 y) z4 d* I' A
9 E, G1 P! ]- p1 K! K" T( s7 {! l2 r6 o5 |
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
  x4 N' R5 k0 ]( j        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
. x+ P7 V+ [) m- ^: r: g- h' b, b$ c
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(* t$ D* i) e( B  |4 u& V1 q
                const double data1000[1000]) {
5 b6 Q/ K! j6 v! L7 G
' y+ }6 a2 x9 N5 V1 m! Q        int myfuck;% D  y& q* F+ s' ~3 o. H
        double yiDuanShuJu_mean;
' x, K9 e, J* ]& L: R6 |/ _        double yiDuanShuJu_LowMean[1000];
- `; W% S4 O4 s9 c- g        int ixstart;
! Y' L, a# U0 g  \0 H" q# @/ N        double dv0[1000];" k6 n/ S8 C$ f% `
        comm_AGC pAGC;
$ K3 k; w( i" v* Y' D- f$ b, K        comm_CarrierSynchronizer pFineFreqCompensator;
/ S( Q: ^! |& e* ?* o% t4 n- l        dspcodegen_FIRDecimator pRxFilter;; Z# _  @1 w& Q: L& E6 _3 `
        comm_SymbolSynchronizer pTimingRec;$ X2 R+ f6 q1 `2 E$ S8 z" F9 X
        comm_PreambleDetector pPrbDet;
8 p7 P$ @: P( [' Q8 B& _2 A0 k        FrameSynchronizer pFrameSync;( D# |+ w  m2 x6 C' K
        QPSKDataDecoder pDataDecod;
! l# k- U7 Z5 F! Y; t3 c2 E        static double usable_left_filtfilt[81000];
  K3 T5 v4 y2 k5 o' Y% k8 ?8 ^+ ~2 w        static double youXiaoShuJu_QuZhiLiu[81000];
1 {! v4 i4 f  G" L( g7 }3 j' a" M        double mtmp;
2 Q# |" k& V5 Z        int ix;+ o2 X: A- w% ?( F
        boolean_T exitg2;) u% O" d  J: v* |2 q. @
        boolean_T exitg1;
! H: N% {6 i! `* v9 M        double YiZhenShuJu[800];
# J( ~# ]3 n$ E        double dv1[800];
+ ^% U) \8 ?/ Q0 k3 \* k" P0 T2 e" h- `; Q) S# C. N1 d; l

6 L  ~: U1 i. L) l% g/ [        double b_YiZhenShuJu[800];
% \5 ?  k) F2 n! A        double I_filtfilt[800];
( ]4 w7 t& o* [! N7 _7 S        double Q_filtfilt[800];
1 N/ v$ U; n+ {; w        creal_T b_I_filtfilt[800];" t8 @/ m7 n3 j( C7 I; k9 J2 |% q
        creal_T b[800];
, x8 D% e# c/ Z  X. \5 c! l        creal_T RCRxSignal[50];
: O0 L4 D$ h# n3 q2 v        creal_T fineCompSignal[50];
1 ]# Z7 @2 D' S. R- g# Z4 P/ O/ F0 P        double phError[50];6 j" P$ t8 n. R! ]
        creal_T timingRecSignal_data[28];
" e( l  w$ q2 g( o6 y! I7 d+ O1 l        int timingRecSignal_size[1];
* |" d7 x: V; N0 N        double prbIdx_data[28];
8 Z( f) ^! T$ x# a        int prbIdx_size[1];
: C: D/ _1 m0 y; v& c& d9 T        double dtMt_data[28];
  M; ?. `5 H  H9 e        int dtMt_size[1];2 I! G& W; J2 i5 B5 t
        creal_T symFrame[25];0 T) F5 |! j: q& p) u3 u, e" w, f
        boolean_T isFrameValid;6 t; C; L! A9 ^: E( A  A! z
        double unusedU0[3];, R0 k4 J$ K- |& @
. w0 K6 [- F+ U6 w+ h3 E) r8 }
        //调试过程中的变量
  b% U  o! {) k* }8 \3 D2 _! H        int  enough_data;5 Y3 }# I) G& t) M3 s
! K3 q) U) Q% O, }
        int enoughDataFlag;9 X, V0 K3 C% k$ I  n
        int yiDuanShuJu_mean_int;
0 _3 c: s* D% v3 u/ f9 \6 F8 [. i        int int_sum_dv0;
* n! ]8 {- Z1 I* G$ D        int oo;
( {  C7 b: ~) H" z3 B6 G        int ii;' S0 t6 \. G; Z3 [* B
        myfuck=10;
1 @; C: q8 _4 `        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
' N0 D) i) G9 _8 v6 Q* Y6 B, H' r        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
( w6 f' y* J* s! t+ [8 A
2 x# w; [; o: v, f$ O        yiDuanShuJu_mean = mean(data1000);3 G" A+ Q" y; L

! Q2 D3 L7 c, o6 K: C. Z" Z1 p* p        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;6 J. A, W) @1 y: i3 J
        UARTPutc('A');
/ O4 T6 _; U( k3 W$ f        UARTPutNum(yiDuanShuJu_mean_int);7 m! T, ~8 E0 C2 S8 e0 S
        UARTPutc('\r');
7 Y9 Q+ C6 S  b; w. r6 R        UARTPutc('\n');% \! X7 |; d# K
) b0 O- j. p& V3 R9 L# L; Y
        for (ixstart = 0; ixstart < 1000; ixstart++) {/ @# Y+ G2 M: I* t0 k1 n) @8 B3 C
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
2 v$ O( S1 F3 t0 U+ v6 h1 L        }# B6 z7 M/ u! j8 e  g! \( k
% N. z* r) K8 k1 \' ^
        power(yiDuanShuJu_LowMean, dv0);
8 a3 v% p) y. r3 y1 m
4 U7 J0 q# t" V3 \: K- j; ?' g6 c        int_sum_dv0 = (int) sum(dv0);
% E* T. @% z; O9 |" Y1 B& U6 L- u8 Y3 W6 ?5 ~1 R
        UARTPutc('B');- d7 v% K" W+ e3 }
        UARTPutNum(int_sum_dv0);  R6 z: s% z4 n9 Q* l
        UARTPutc('\r');8 S4 n- z! \0 W
        UARTPutc('\n');
9 q" r! r- ^/ @7 Y0 X
/ k% K6 e( Y' ?3 m" Z5 H//        int compareFlag = int_sum_dv0 > 1.0E+8;
4 `0 X5 y4 H1 K$ s8 P3 ^5 T/ M! @! h2 ~1 a3 p! v7 E! K8 |5 R
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
% X+ N7 ?. `7 R  _: ^4 ~$ c7 O3 Y8 `                UARTPutc('C');! ?$ F2 f* H4 s+ B- A+ \
                /*  比较信号能量 */, j' b- w) U9 v
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
4 p5 K' b! D8 A$ b//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
9 n( r- x. P& j- Q2 ~//                for (ixstart = 0; ixstart < 1000; ixstart++) {2 K7 A  @! B# x. h
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =( Y# S! S7 u$ E: T4 G; X0 R, X% J- ]
//                                        yiDuanShuJu_LowMean[ixstart];0 {. a7 B2 A0 ~  C. e- R
//                }
% k& r: |6 ~, H& y) y# M# ]: A//
2 F0 @. b' [6 I% j2 I6 ~//                youxiao_k++;
8 y2 h( Z: W  H; D9 e//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==: ~' ?3 A3 h. }8 y' m% E: \1 T& X
//                        /* 感觉要取21个数,即0-20, */
  @/ a" f) D8 s& Y1 y& D% C//                        enough_data = 10;//有效是10,无效是0/ j. q% l5 a/ g8 @8 v; J
//                }( h# }, d# X: d+ m5 T
        }
+ z1 N" a, S, G. i  w& y2 d7 D
, g- K* D5 z- h  R6 ]) S
3 J: d9 f. {" v: e- X1 U        enoughDataFlag = 100;" B$ A0 q6 |: @, l! ~. h6 p4 T; v
        enoughDataFlag = 1000;
8 t; G; f( v9 {0 f: X/ a8 T' l7 M        enoughDataFlag = 0x02;
, z, C- Z# \0 j2 V5 F. l5 @, T        enoughDataFlag = 200;. X0 r: o( w( _8 p% Q

( |& N- {$ x% W* q7 d) o        int myfuvk1;
+ U5 @' V" _5 w6 O" n$ `# Y        myfuvk1 =11;, M$ O! D0 l% V0 d9 M8 b

4 J8 l& {( Q: r; C8 P, Z' ]9 Q( j. |* O6 L& U  |
        enough_data = 0;8 _  U) D8 E2 J& }% \7 R" Y% O
- S8 \5 J5 i4 J* l, ~
//        if(enough_data>50){
- W9 q2 z4 D- M//                enoughDataFlag=0x01;
6 D6 e# w" x. Q2 P//        }else if(enough_data<50){
: g. s6 u8 F5 W& ?( h  |, Z0 [4 |//                enoughDataFlag=0x00;//0x00还是不行
# G1 g: z: r: P- z0 j% g( _//        }& k# y' G4 P9 m, Z; y

9 I* C. X  R! o, V
5 F. o5 \! A! g1 d% [" C+ l        oo=10;
* J) s* o5 E' {; R) G6 v' C        oo = oo  <  5;
* A+ N/ m$ }6 h' `8 @$ ]: a6 q        if(oo){
" ^% L* G2 w* K% }0 a+ b4 m                ii=0;
1 t  F5 G1 ?" @- i6 ?        }- X( y( G7 B) R/ w( ?$ I
        if(oo  <  5){
: o7 C' d: O1 {% A! U                ii=0;
$ |4 j, l6 c0 S* m7 I        }
1 ^  p7 F! e9 _        if(oo  >  5){
  H5 _7 _+ z  N- R1 g5 V                ii=0;0 J0 M" {# X. N8 T" q, r
        }
1 r; m8 f0 {$ j, D# u
( I* {. x6 H4 z" ~        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
* u( \( e5 _0 s+ l        /*  如果数据足够才执行主程序 */
0 J+ |2 g8 s  [% M) s        oo = oo  <  5;) {: O5 Z; z; u5 |
        enoughDataFlag = enoughDataFlag  <  5;+ i! p. y  F5 O& `" b. P! w$ z
        if (enoughDataFlag  <  5) {3 }+ t6 ^! w: F
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0  U/ w6 G, f/ [& Y, Z- c# O
                AGC_AGC(&pAGC);; D5 T" m& L2 L0 D
+ g. Y* h& [0 x- @
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
- r  I3 b+ Z$ H" P, C% h                FIRDecimator_FIRDecimator(&pRxFilter);
0 a( p9 a: }. E" S; Z% O( a/ G' Q
                /* Downsampling *// G& N* r3 B! C& f- G- ]& I) P
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);0 Z5 C& @- v, x9 \. y/ a4 H
3 W' i* h/ s8 _, a3 }
                c_PreambleDetector_PreambleDete(&pPrbDet);
' `, {* Z& [, Q  W. ~0 s& X8 u: |, z0 S/ [) ]* x
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */. `4 R& q2 S3 D, r' f
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
+ E, E! [0 j# S: g8 w' h  ^$ ]                /*     %帧数量=100 */
# E0 U4 F+ m0 s$ z2 u9 C' `. ?                pFrameSync.isInitialized = 0;% D. S% K2 v4 o9 `. U; X

; H5 P+ T6 `# x; c2 d7 R" ~% W                /*  [EOF] */9 p  C! U1 x# D' U# S
                /* 前导码长度是13 */9 Y, C# k& \4 |( \: S  c
                /*    %qpsk */4 z8 O) `  _: G& O% y+ m4 _
                pDataDecod.isInitialized = 0;  I. N! O0 j$ L) U. J

- M! g2 u, E) H2 U3 b                /*  end */
" h4 L# l! G: w( T                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
1 z# r: e9 x# ?8 K+ I+ H: }& i% V                /* Convert 3-dB frequency */9 |. P/ c, }1 K) J' Q3 `  R2 b
                /* Convert 3-dB frequency */5 E5 P1 r6 R" b  A9 C+ ^3 P
                filtfilt(save_buffer, usable_left_filtfilt);0 C2 X: k  f% U8 r( v! @; g4 t& {
                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ }0 w8 [1 A+ p$ W$ d  a, q                        usable_left_filtfilt[ixstart] *= 2.0;3 W5 o5 Y1 R7 q4 o  o3 t& e
                }0 M  y1 d( E$ k  m$ Y& y4 k4 T3 i

7 G" `0 q7 @% e3 F- m$ t                /* 注意乘2,处理幅度 */
$ \8 B$ K8 l2 r; K8 m                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 *// A, Y& y6 {. W0 ^9 Y; N
                /*     %% 行列转换 */
- e6 Z. a$ \$ i3 i: x+ y/ D2 u1 Q                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);5 C7 p! `8 P; k2 {9 C
                for (ixstart = 0; ixstart < 81000; ixstart++) {
& B/ s- ^; b5 \9 s                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]4 D# A5 W) _- c5 |# Y& q
                                        - yiDuanShuJu_mean;5 ]3 T2 o2 ~9 w- Y# p" {; P
                }
+ k9 f% p! ]7 ^  u- u" ?& c8 ?; \  k+ H0 n' F
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */& d' `0 k5 H- y4 T5 ]8 m3 D
                ixstart = 1;
% t3 L6 M( K5 l, y1 P                mtmp = youXiaoShuJu_QuZhiLiu[0];6 ]4 h4 M2 {& J
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
8 N2 s# {/ Y8 t6 t( c, c                        ix = 2;2 D! \* z! Q1 V/ o. k! D
                        exitg2 = false;7 @/ B1 Y9 k( n3 J
                        while ((!exitg2) && (ix < 81001)) {. j2 {. Q2 v% a
                                ixstart = ix;  `  F( L1 b0 b8 b: o
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {  L4 i0 V9 M! d9 ^
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
2 K% D* \% Q9 i$ o                                        exitg2 = true;
4 s. Z9 S- Q3 Y$ N. x1 D                                } else {0 B$ J6 r, D- t& Q) M% b
                                        ix++;
2 f- E9 H: c) F/ m2 V                                }: _# q* i& v6 {
                        }
3 }7 x# ?% \% M( p% e                }
! F" Z4 B1 ^' q  o' K* F9 Y8 N4 J! M! [0 V) s
                if (ixstart < 81000) {$ s9 a0 y% O4 m) F
                        while (ixstart + 1 < 81001) {
. X0 g) }, w+ |- q: y                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {- V$ W$ r+ |5 a2 y6 U) o
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];7 Q9 }& Q5 I3 f
                                }" F2 [2 A5 v& V" p2 V6 {2 a; _8 M# q

+ K5 N2 t0 _7 v, O1 S2 D" G* ^                                ixstart++;
/ P7 q$ }4 j4 y& H  f                        }& `; M: e9 ?, T* I
                }9 T0 g* O( k0 {% }

6 B" E- F3 V4 y. C; s& D0 d                ixstart = 1;
2 ]5 u& }% O) |' R# f3 u                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];3 ?* N- g! i/ ^9 }7 C' w- D
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {9 y7 j. L7 j, n; _2 \
                        ix = 2;; Y. g' ~) q: c
                        exitg1 = false;9 v+ ~+ q4 _5 w8 x2 y! \" J5 T4 w
                        while ((!exitg1) && (ix < 81001)) {
( Q6 {3 W' E" G/ j" F                                ixstart = ix;
9 b, U0 K0 Y" J1 Q5 a                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {9 p% q" _* F- v' Z7 Z& d
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
- p: w0 P' ^) Q                                        exitg1 = true;
+ T7 S7 @/ _, Z4 r8 _9 j2 r* G                                } else {9 U" y- A( c) T% R  o6 v
                                        ix++;" B" X4 B1 \+ o0 @# [: @
                                }0 k- X8 o5 R' n  ~) |9 e
                        }
, A# k' M/ B5 c0 P                }
& Q) I, P/ h9 V, O& g2 c- h! P# G; C- q* @( e
                if (ixstart < 81000) {
4 ?. f$ s" c5 o. n' M" h9 F                        while (ixstart + 1 < 81001) {0 n; g$ d- l2 d2 i
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
8 t; x" N* t. m. h                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];% v' k" k% r! m7 }
                                }
3 R) `4 b4 {. N. q% x+ M, j/ F( K; ?, b  M2 Q. p
                                ixstart++;8 H: j% W: V3 n, ^
                        }
# m0 `- B6 E0 @  }3 O                }
6 \- k* d& E" E9 H( _1 A; x& |3 W3 r% f2 v- I5 d
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);8 T. y; x4 m! S" }  |) b' g' X
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {7 Z+ Z9 A4 x! H) }
                        yiDuanShuJu_mean = mtmp;- d$ }+ i) \( r4 L8 ]2 Z$ W
                }
  I- K* e+ m& T$ `9 L# y9 f
' |( F8 y5 z3 k2 `) e$ U2 a                /*  找出极值 */
& u1 x4 p% c# N; @                for (ixstart = 0; ixstart < 81000; ixstart++) {' X+ o' D5 [! a/ n
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;1 h7 a7 r* K! `
                }
% |9 p$ h& B! L3 D( V$ ?- }% W8 t" Q7 K" E& U* X# O' Y
        --------------帖子字数限制------------------% a6 ^; ]# H0 w1 G$ t2 L# Y/ V
}6 o2 @6 [# m* J/ l8 G4 ]

" |! |, G+ r, v- W3 y: U2 h$ @: \1 u$ @! t6 F6 m

本帖子中包含更多资源

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

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-1 16:59 , Processed in 0.043416 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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