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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ; B6 d) B  [1 [6 V

# A, \6 t8 o- Z; |各位大神:: Z4 L1 x4 R9 F
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~): O4 a' l; P3 o* X, ?" [8 d
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:- G4 x6 q7 j' _# ?3 y# s9 a+ i7 O
, h: v$ Y5 M' s1 K+ c% h6 Z- Z
     
: R% j- f, Y+ u这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
. b6 p( P8 d; b0 }+ X! k
0 c9 a$ L$ L$ K  l! w/ l并没有其他线程
$ N3 Z. V* b& X% d! K( R% H+ ^7 E反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。- {2 J# ?* t. a8 N0 ~
也说不定是和堆栈有关系。。。。。。% @7 f# F+ G# d, Q  j% f' Q' @
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
0 a& s0 v% P- g+ C) L! V0 u) B8 v( _" |

+ a# F/ U% q8 j* p" G3 R0 a: G3 @( |+ E3 P3 j3 g0 Y
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
* @9 w7 v7 E* k/ @4 F9 p( ~8 L1 ^! v% Y( R5 H
$ y4 W0 Q6 c7 L
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
( U9 ^% \2 p0 _8 R# q        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
6 k4 k, ~' N  ^$ B, t, p; J6 O6 ^  N) I' j& ?
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(% d. J0 S: ~# z5 `! a: f
                const double data1000[1000]) {
& S( s* y/ O2 o% d& [  C3 L4 C" n2 C$ X1 R- n6 k3 \7 q
        int myfuck;. e% [0 R9 H2 x
        double yiDuanShuJu_mean;
! h+ y2 `' U! i$ J/ f; q, d6 o6 [        double yiDuanShuJu_LowMean[1000];1 J3 `* x& v# p, T1 _1 M0 `% j( Q
        int ixstart;
: R/ A* g7 i3 K. Z        double dv0[1000];
: S4 S7 k4 f7 V3 @! q2 l, z        comm_AGC pAGC;& ]% V+ C: i3 a0 I+ n/ B" G$ H0 L5 c
        comm_CarrierSynchronizer pFineFreqCompensator;
4 {: B8 i: Q& ]; A) l# e! W% ~        dspcodegen_FIRDecimator pRxFilter;% c# I) i; {0 q* H# X
        comm_SymbolSynchronizer pTimingRec;
' H; J& t7 c8 y        comm_PreambleDetector pPrbDet;$ z$ t' F% n. L# i6 [
        FrameSynchronizer pFrameSync;
1 m  L  W, l6 L4 a1 Z) R3 K9 a        QPSKDataDecoder pDataDecod;
" p- r7 y4 a: y2 j3 V3 h7 ]' F        static double usable_left_filtfilt[81000];
0 j0 ?0 @+ R& O        static double youXiaoShuJu_QuZhiLiu[81000];
% e3 `8 O+ l* @2 C        double mtmp;& D; v8 B, {; r$ y" \9 I
        int ix;
: U. D. l* x0 r9 E! K        boolean_T exitg2;: X; m8 Q& J$ Y. q8 g4 n
        boolean_T exitg1;
+ M, Y$ i4 a2 r. b$ u        double YiZhenShuJu[800];0 V: s. o0 Q, W2 D( B
        double dv1[800];
7 y. z2 _5 R/ @) \3 g+ v8 q2 g9 |4 @8 K! ~4 `

. ?3 Z' b6 [. r# w7 V        double b_YiZhenShuJu[800];$ c# |4 c- L1 k' P6 D
        double I_filtfilt[800];
- X1 W2 p2 D9 U( c6 y        double Q_filtfilt[800];( `" @1 F% o- G% C# M
        creal_T b_I_filtfilt[800];+ L- t6 V& g+ Z3 z/ x
        creal_T b[800];
  g8 h" Y" d+ z/ V7 v& w        creal_T RCRxSignal[50];
: C: b# S% V4 {- {2 ?! F        creal_T fineCompSignal[50];
- E  E9 E' {7 W. x! ]  m        double phError[50];# y( T; W( B) }8 f  f" f
        creal_T timingRecSignal_data[28];
, g& W- z+ [) t5 p( ?6 A/ t        int timingRecSignal_size[1];' A% g) N# o- h0 h- p; \+ [( Q' R
        double prbIdx_data[28];" D- [( h. n! l
        int prbIdx_size[1];0 `& O' Y( m  H# ]+ U
        double dtMt_data[28];8 f+ ?3 N- I. V5 B$ H$ M; g
        int dtMt_size[1];
' w3 E6 G+ d1 n6 J4 M0 r        creal_T symFrame[25];
7 U/ F! o2 F, W- Y' d! ]; r        boolean_T isFrameValid;
3 S5 N5 j1 e2 _# w        double unusedU0[3];2 E5 y) h8 l# q" D  q' U+ E
, n' u$ T3 d) l6 S
        //调试过程中的变量
5 V* ~" X! h# |$ \        int  enough_data;
; H6 z1 ^1 y* n3 ?! ]8 m5 {6 i
: n0 C! p1 B# X( r+ C1 p        int enoughDataFlag;2 i/ a+ K0 S4 ^' P; T
        int yiDuanShuJu_mean_int;) y+ A- o/ T/ R3 a& o9 _
        int int_sum_dv0;  }2 C. o3 R& P+ e
        int oo;
! R: f! {, q7 ]5 L5 u. j        int ii;
" x% d9 z5 \& I9 ^5 E: h        myfuck=10;
; x/ k$ v( E1 G& F1 K# W        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */0 X7 u- e0 W7 P* i
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, *// p1 b0 J( F& _6 z' W

. Q8 j! {- ]0 a6 P! t! N( R6 A        yiDuanShuJu_mean = mean(data1000);0 j, f2 r- I, ?8 ^2 q2 F: `

* |4 c+ z* k, p6 D0 e/ Y        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;( ]" {  M4 q2 u0 s* [% c
        UARTPutc('A');. \5 z; a9 Q) u- C0 C: W
        UARTPutNum(yiDuanShuJu_mean_int);
$ L" [! S: x7 q5 s( S* J        UARTPutc('\r');
" A6 M$ a# d3 {/ C% c, V0 G/ ~9 o( m, [        UARTPutc('\n');7 g8 Y8 t9 @& D3 e
% d' P" W9 E; V' Z8 l: W& A* c/ B
        for (ixstart = 0; ixstart < 1000; ixstart++) {
& j3 U4 l4 S) C9 K& {                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
2 t, o, O+ m9 X' G# M9 y  G$ F' A        }
2 ^: }4 K/ p' f" H  V& h
1 q! p, w. K+ @# N- F! Q        power(yiDuanShuJu_LowMean, dv0);
* m( C3 Y6 c! Y) G# Z: f/ [( z$ ^6 K1 o2 N. z. T& f8 }* l4 k
        int_sum_dv0 = (int) sum(dv0);
. P4 I5 z) t! t. H: x; l
" F4 }9 H5 E7 T7 l5 [        UARTPutc('B');
) Z& ?! _5 A& f# h* d, L        UARTPutNum(int_sum_dv0);% N+ {( ?! n: H
        UARTPutc('\r');
" P& X5 w/ l& B( p  P6 {6 j        UARTPutc('\n');5 j( [" b  T7 `1 g8 {; R

* Z& b% y9 X: {# ^9 C/ ~: r//        int compareFlag = int_sum_dv0 > 1.0E+8;9 E% m* Z) }4 Q, I  F% X3 C% w
8 f6 g7 k7 I5 n! C! l9 i
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
8 N% d! ^' C- @) u3 _. N1 k  _# \                UARTPutc('C');
& e7 i  x2 i! ]! X( o                /*  比较信号能量 */
7 _6 c) C. P1 P) \                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
( i( ~7 C( F: W9 R+ K. K' p8 t//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
1 H" }& v( I2 O0 G6 E# H//                for (ixstart = 0; ixstart < 1000; ixstart++) {
& k& O4 O6 Z1 A2 X//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
) w! U1 B% n4 f4 F* {( ~! s5 P//                                        yiDuanShuJu_LowMean[ixstart];. ?% {( H/ t9 }  Q2 W; s1 t! `
//                }* k- Z: ~7 `; |4 ]2 E9 \+ ~
//
" E, b1 V/ @  I/ r5 d//                youxiao_k++;; K  n2 k2 m9 {4 |4 \9 Y
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
1 q1 [( i. S' ~& M5 S  g$ ~/ G//                        /* 感觉要取21个数,即0-20, */7 O2 @, [+ o& }3 {7 o/ V6 J9 i% s
//                        enough_data = 10;//有效是10,无效是0
5 s2 L. u* c* K2 b//                }
; C5 f8 x  W5 U1 ]" W0 r' m        }
- a0 Y6 T: D2 Z. I" h% d( e
3 s8 e& \6 S6 d' @! I8 ^9 h/ F) S9 Z: E6 w0 Y7 A4 X! M
        enoughDataFlag = 100;" F) S. ]1 S- S" l4 y( p1 k
        enoughDataFlag = 1000;
3 v+ \+ Z: R  m9 {4 h( `: |        enoughDataFlag = 0x02;' M" `$ \3 [: M# b2 ]: e1 ~
        enoughDataFlag = 200;1 l. Y, i9 ~& \) P+ `8 R2 P
; h2 l4 X  r3 j& Z5 t( \& G
        int myfuvk1;- R! `- N" S' l% n) o7 P
        myfuvk1 =11;, `( F8 n) d! c" W- v! u2 ]

. Q8 K, |, G$ f7 X
0 D& S  L4 q9 _! l, M$ C        enough_data = 0;! \. ]# w# l; r: v6 @3 \' C! R0 z, c8 G3 Z
; y* ]7 x) J; {
//        if(enough_data>50){
. T3 _  O9 O: T, D$ w+ A//                enoughDataFlag=0x01;
  N1 F  M0 G$ H8 R8 z//        }else if(enough_data<50){
! F" u1 H' Q; G4 l+ g! S//                enoughDataFlag=0x00;//0x00还是不行
$ l; I! q* P$ a$ _& H2 R: F2 X//        }7 _+ ?3 C% _. D; }. T* R
) K- [! a+ P) g! ?

9 E' C' l6 _6 l& P& c' U        oo=10;
/ d- _$ |: V' c        oo = oo  <  5;
0 ]+ @- Y0 e' l0 F; U0 X; ~5 h5 O        if(oo){% e2 e- K$ P# J9 q
                ii=0;0 Y) F9 A6 @+ ?) R; r, ?
        }) G# `: o- A2 L: u% T3 A5 ^5 ^
        if(oo  <  5){
9 |( X9 V& f0 p$ M+ y                ii=0;
$ q+ l2 M: W* {! n, J! {+ G+ W. X4 l        }
, \; G3 s. N' E# N        if(oo  >  5){! W; ?; O+ O" ~- w$ y
                ii=0;
+ [$ y" a& O- S3 f$ Y. z# E1 D        }
( t9 c; o1 U) {4 s4 ]' l0 E' W& G/ q3 E# G
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
& ~% c& W" p5 u        /*  如果数据足够才执行主程序 */
7 p* i& E& q& m3 p- V- R2 ?6 N! h        oo = oo  <  5;
8 e; X1 f% U, Z" L5 V$ E        enoughDataFlag = enoughDataFlag  <  5;# ]0 v, b, H& z9 D! E+ n  W
        if (enoughDataFlag  <  5) {
% |# X  [9 a$ ]* C//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0# ~9 M6 V( N/ ]# H3 v; A5 @, U
                AGC_AGC(&pAGC);
1 o' @2 }; G, o# E& R' t5 \- m& `1 r& G6 E8 ~9 P9 N
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
0 H2 k3 y  R9 E/ f$ c, q" R- k1 L                FIRDecimator_FIRDecimator(&pRxFilter);. l* k. N- H6 `3 F7 A* f' k

( M# G( h" q/ F5 x( P                /* Downsampling */
3 ]+ P5 \5 T1 \7 t2 M4 m+ C. U1 E                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
) S" e7 P1 F& H
# R/ d8 N$ {: s3 N6 t                c_PreambleDetector_PreambleDete(&pPrbDet);
, n2 @/ G- A. W2 j' N1 u3 Q7 d" u# l9 e2 {3 P& C
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
3 h; V5 m0 X. F) h0 \1 t3 w/ x% d  p                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
9 t% I( S5 l5 ~1 |- q" M5 k                /*     %帧数量=100 */; L! H' S5 s" k# @. K% z3 h" j: X
                pFrameSync.isInitialized = 0;
" ~3 D9 t  W' {9 q* A& f2 R% Y* C; k  Q
                /*  [EOF] */' _: m! L/ ^3 R
                /* 前导码长度是13 */
% ?0 W+ C+ A- C                /*    %qpsk */% u6 E6 E) O. s. ^7 ^7 ~7 J+ w
                pDataDecod.isInitialized = 0;! t) P& r! R( Q0 `( Z/ u  t

/ }* M' H) t* _. r+ S% {% @- l                /*  end */, z% Q1 l0 g8 x, A/ ?, |$ h7 F
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
3 |5 u+ V; U; D# F6 Y                /* Convert 3-dB frequency */: e# ~3 a' u/ v% @. f
                /* Convert 3-dB frequency */2 a; _/ @6 t3 {# K3 Z* q
                filtfilt(save_buffer, usable_left_filtfilt);
  e9 |$ a; F7 w                for (ixstart = 0; ixstart < 81000; ixstart++) {0 i2 E% O+ q6 _! i
                        usable_left_filtfilt[ixstart] *= 2.0;
0 K- }" |8 L: _+ ]% i) I, d+ u                }9 J$ y/ L6 j# Y$ P( u
& V, ^% h& Q3 ?' _1 A; K
                /* 注意乘2,处理幅度 */& a/ p) Q$ P3 s+ x$ I0 T
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */( d4 l5 k8 p# @9 Q
                /*     %% 行列转换 */+ I* R1 k' B5 v, |. j! \: u
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
8 t# F0 Q# Y* ?8 @1 ~+ w5 F, t                for (ixstart = 0; ixstart < 81000; ixstart++) {5 C& w1 z! y" e5 c# Z- v& v
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]& n' h0 l. w$ e; T
                                        - yiDuanShuJu_mean;
- V7 V6 I9 N; f* u3 L                }# g. d# i' |% Q) E* H

  M  Q* y5 i6 }: Y/ J/ o& V  A' P                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */- A. h6 K' z2 V9 G* p
                ixstart = 1;
( N/ t- Y" _: ^% z                mtmp = youXiaoShuJu_QuZhiLiu[0];
- [6 f  T2 v$ E( u7 x' J                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {0 c0 A- s; U6 r( l0 g" z
                        ix = 2;5 X  d$ s- e, b1 p) t; o6 f; ^3 z
                        exitg2 = false;% L* Y8 J$ V: {, u8 q/ `+ H( Y. `
                        while ((!exitg2) && (ix < 81001)) {
( f) [( l5 L5 g, t                                ixstart = ix;
$ C1 f, c# l) j! e: ?7 E, c                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {2 y- J7 _  F: }+ C3 `- F$ m$ E
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];- C: }$ R* J! o& x: ?$ ?
                                        exitg2 = true;; G2 t" L$ d2 F8 J8 e. _/ N
                                } else {* X3 Z9 p0 n/ {1 Z5 A
                                        ix++;
4 X% L5 W; R- L                                }+ u! m, R; E5 Q- N( t, f
                        }
5 C% _* e) Y+ A1 ?( R                }
- M8 U8 G/ {) D# z: l5 ], `! P
# F! |* h+ R1 B" k& P& j                if (ixstart < 81000) {3 E8 }, ]# Q. R, H% \. d9 w/ e
                        while (ixstart + 1 < 81001) {
0 _+ V+ @% A: m+ R8 b2 m                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {# f* |( w% u8 u
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
1 V/ n5 \% D( C                                }8 \  z2 q* }; b( c
* [# ~# u9 p9 S; `2 {7 l
                                ixstart++;* k3 z# S, N% ~' }. N. f/ K) O
                        }
, c+ j0 b( u2 i3 W) ]) }                }- t9 E3 w) z) A1 l' Q7 r

5 l- Z/ V( @$ D) O' w6 s3 m                ixstart = 1;
! l# ?1 n. E$ [+ V% v                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
: [" c2 q6 j/ D9 g4 |3 b  v, p0 `7 O                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {2 D1 A( u& @# h: E2 t
                        ix = 2;
; e% ^' I  {, i; K7 y+ W                        exitg1 = false;
/ w% ]% e  X3 r% S3 M) |# \                        while ((!exitg1) && (ix < 81001)) {
) h3 u9 H6 s/ \  `: `+ v( e                                ixstart = ix;4 k' N" i, v# a3 d- ?3 d/ W6 |
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
- I; q! ?/ \/ m1 d! T/ H                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];, f9 t" |7 @, j" B
                                        exitg1 = true;# _. P# i+ Q1 W9 _- E
                                } else {
7 e6 U  a1 f' S# \7 h6 S8 j  v                                        ix++;* T& [# s. z4 |0 c
                                }
" @: i+ i- D3 e0 E2 L# ^* [% o% W                        }
$ `: t4 }* f: a0 f; r) D                }; k2 \, g( Y, \) @, C5 X3 w# A, M, P) F

) a: k  C0 F" t                if (ixstart < 81000) {
& n7 W' r. _. }: p                        while (ixstart + 1 < 81001) {
. v. j8 B8 B7 a* ?" n( [% q                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
' G; g' K: E3 m7 ]                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
- {$ `8 f) ?; ~                                }
0 a% K7 z' c7 M4 P" p2 h( S4 i4 H: O1 w1 h0 h* B
                                ixstart++;3 l; F) J5 b; @, b1 D
                        }+ F  r$ f5 d& u) `
                }$ |" C: G" t" B, ]3 F- `' [9 V
9 M/ N6 a; ]( J" y
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
% j1 b) K# T0 f" b* H5 c! K9 S                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
+ j/ l" @+ s# J% _0 h                        yiDuanShuJu_mean = mtmp;* B/ D/ X% C4 T% U: m
                }5 K5 i( h$ D9 L1 t: Y
, P8 K# [; O$ Z  q" Q/ e8 i" c* e' l8 x
                /*  找出极值 */
& v0 D# q6 j" U/ x) r2 E; h                for (ixstart = 0; ixstart < 81000; ixstart++) {2 t5 Z9 r& M- {2 z, _2 e) H
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
7 D' c: E5 }; O2 ^" N! L                }+ ~3 Q8 L, X  Z- Z9 O+ y
. v% X! n- G6 G6 K& e
        --------------帖子字数限制------------------" a' a2 e4 }( ~
}
5 f! s1 V- G) [9 p' h
& G0 y% S2 b  F/ L
8 C. [; N- h% {" E% v( m

本帖子中包含更多资源

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

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-18 07:40 , Processed in 0.042974 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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