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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
; B8 b! ~4 k9 M8 h6 V5 @
5 i4 i* T, T- C9 }各位大神:5 [( l; F% @$ k7 _$ C1 h7 I( {) F
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
7 n1 h) g3 o- _5 Z, @      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
9 A" j' W+ z! Q/ y* m* h2 z+ u0 L2 w+ @/ y9 K( {
     
: p7 C2 [8 ~0 v0 Q1 O这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
3 T$ Q& U8 }; z2 p7 }4 F1 S$ {3 `3 z5 i. T0 G* K) ~% K
并没有其他线程
/ q9 r# F4 |0 ~" V+ P" R1 |反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
( T; `+ n' \4 c7 j! t也说不定是和堆栈有关系。。。。。。# y4 _1 B, _2 V" g, }
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....' e) W% U8 @+ s

- B" R* {/ Z! G0 H7 T
. F' S8 E, q1 ^: C( Z- o* A; {* K! ^" b/ L
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
# |* O  `; U$ t  e2 }7 S! g! N3 G1 B; z

8 N9 d  ^0 ?7 z- m附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];. W# I- K* l/ B5 x7 [
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。: T6 p6 ~% K0 B2 Y! X2 \2 G' Q

/ c- s6 X6 A! |boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
* O7 Y: q9 {3 M5 \; E" E5 `. |                const double data1000[1000]) {
( r6 y# @1 c: c) h4 W
$ I5 T- f* w7 m        int myfuck;  O5 |3 k9 B  D* e) l; X. e2 S
        double yiDuanShuJu_mean;
' F5 C' }/ \3 s( w/ _1 d7 k" q        double yiDuanShuJu_LowMean[1000];0 I; u7 H2 r0 w8 z0 I) d5 N: r
        int ixstart;
) o  V4 F% s: `6 v        double dv0[1000];" m$ w) a  ~8 ?# h7 h: P' \6 {# F
        comm_AGC pAGC;) p& z. }' }; Z: h' \
        comm_CarrierSynchronizer pFineFreqCompensator;4 U, E4 j. g. d" r" e1 `
        dspcodegen_FIRDecimator pRxFilter;' Y$ S; l+ m6 L" i$ P
        comm_SymbolSynchronizer pTimingRec;
: z1 h1 e+ {( t# P6 l        comm_PreambleDetector pPrbDet;* r+ z. g$ d0 S6 C- v6 g
        FrameSynchronizer pFrameSync;# n6 H9 s0 t. C! E
        QPSKDataDecoder pDataDecod;) F8 }/ l# _5 x$ e; J  N/ ?
        static double usable_left_filtfilt[81000];$ t6 R7 h, ]6 H" T1 R: w4 X, z6 I
        static double youXiaoShuJu_QuZhiLiu[81000];
1 [, j+ ~; {6 h: G5 ~- r        double mtmp;
/ x" t8 L; P  Y+ y7 v        int ix;4 ^! i& X, L; @* G* B+ L$ B* U, \
        boolean_T exitg2;
& k1 n2 s4 U. S. T, B! d7 f3 I- d        boolean_T exitg1;  Y  x6 d9 G& R$ v
        double YiZhenShuJu[800];
5 @- C. f, Y2 o* l4 F* P        double dv1[800];
) p" l" R' O' u8 Y6 N3 Y
, K  [8 ^; o) N4 v7 F
3 L4 B3 z: b7 P' K* ?  I0 x) g        double b_YiZhenShuJu[800];2 p  q* ~, s, v; d( x
        double I_filtfilt[800];( T. H& b1 O. Q7 F
        double Q_filtfilt[800];
* a4 X9 U3 X0 N/ p( f$ i- E) q        creal_T b_I_filtfilt[800];
" E9 |- c0 r5 _# N        creal_T b[800];+ t- P! M0 ?3 ~) E9 }& h
        creal_T RCRxSignal[50];2 c' ?: v* h6 B2 Y3 L" G
        creal_T fineCompSignal[50];; U; Y- s  w, J5 q/ Y
        double phError[50];. [$ N" ]! i1 D; w) ~' Z% J- J
        creal_T timingRecSignal_data[28];7 t) o" j  \/ X
        int timingRecSignal_size[1];
% t2 o. ^" V' R& _5 Q  ~% D% q2 O        double prbIdx_data[28];0 e( v. |/ h& h+ k$ J" V% _
        int prbIdx_size[1];4 y# i5 ]) r8 k
        double dtMt_data[28];
5 }6 W$ S$ m& u1 k        int dtMt_size[1];
3 u4 x- O% T4 @( l( A        creal_T symFrame[25];; I( d( C0 H% u. q( s* F
        boolean_T isFrameValid;
' W, T% F" E7 S9 `        double unusedU0[3];% ?7 |6 y$ J; s( t$ }6 n

. @  F, l9 L' g6 J        //调试过程中的变量# h0 @: \. r1 B* M8 w# P3 f& K9 L
        int  enough_data;5 [1 Q8 k& X/ |  a
; A5 r7 ]- }% p4 _4 l
        int enoughDataFlag;
; E( h% r$ W0 l- {, p        int yiDuanShuJu_mean_int;' l8 c2 E5 l  ]7 c+ y
        int int_sum_dv0;
' [  P* @3 @/ M' B        int oo;! Y" }; e. Q8 {) [" z2 c: g
        int ii;8 |3 D6 h0 d- ~# X, N  c& U  P8 l
        myfuck=10;
* J, u$ O3 z! P* g& I* ^1 n5 }; @        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
/ l  ~/ O, G# P9 F$ a2 u4 @0 Q+ L        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
9 V+ Q4 L# R7 u+ b8 {  B
& Z" |3 R3 @$ o% Q2 [; H/ p        yiDuanShuJu_mean = mean(data1000);4 w/ A: ~# G0 ^3 M5 {! f( I; \

; t- U+ A7 [8 N* G        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;+ `% S+ z) u8 {
        UARTPutc('A');
7 r  }" T0 C& s1 \        UARTPutNum(yiDuanShuJu_mean_int);1 `( D9 L3 p" F9 G1 Z
        UARTPutc('\r');
  [' J/ P9 ]. K# r  l/ n! w        UARTPutc('\n');
3 z" K' y+ H8 M- z7 o" c* {% {: k4 V3 t$ f% M# x1 {/ |* V
        for (ixstart = 0; ixstart < 1000; ixstart++) {# f+ I- N6 O# |1 n' t4 p2 I
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
9 X/ @2 ?3 D9 f0 n7 r$ @3 l        }
9 p+ f1 X5 i7 s8 e0 D% H
6 Z; @: z1 f& [4 ~+ Y2 E& K! D& V        power(yiDuanShuJu_LowMean, dv0);
* U/ H1 L5 @# I, t
  z6 B- k) B, m( D% v        int_sum_dv0 = (int) sum(dv0);- U# W) J( {$ i/ b% c% l7 U) d

) S; S+ E* {9 Z3 i2 i3 B3 ?/ }& L! v        UARTPutc('B');$ n6 V  b. F/ j
        UARTPutNum(int_sum_dv0);
8 M1 s  ]' [" Q( D        UARTPutc('\r');+ A3 n* i+ \; t0 K0 M
        UARTPutc('\n');
9 R' M+ R9 P5 {, A; n/ R  i
- [. l( c% m4 m# p/ D//        int compareFlag = int_sum_dv0 > 1.0E+8;/ D5 }+ O/ L2 i9 H# l# C7 _# Z
3 X9 u$ r* [* @5 d( c% l
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?8 X# C$ h# \% Y6 P
                UARTPutc('C');1 f$ [. e% Y* u  X: x1 K' {; y- h
                /*  比较信号能量 */
3 S" P- A$ q7 L5 O                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
6 e" C! E1 A! i( l6 P//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
& N1 |0 {! u- ^& c//                for (ixstart = 0; ixstart < 1000; ixstart++) {3 f7 d" L* f# w3 f- S: e
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
& y1 m" s. O4 B1 r//                                        yiDuanShuJu_LowMean[ixstart];
1 [/ C9 b% D' [% e  s/ M' C5 U* K/ A//                }
/ v) h4 @  K. u: \, J6 y; `0 E//5 e- R- g8 j: I6 i2 Z8 }
//                youxiao_k++;
, d7 b: b/ Q7 T8 f/ I3 [! o* Y//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 y3 P' ~- X! ^9 R) D9 y
//                        /* 感觉要取21个数,即0-20, */8 c8 Q. I7 d- B1 ?7 f
//                        enough_data = 10;//有效是10,无效是0
7 y) y1 V# b. h0 r( q, q9 }//                }; k3 R8 u3 Y/ x. T: G8 |
        }3 n5 s- q) Z" Q3 z
5 y4 ~# D+ Y2 ?5 ~$ A1 f: O! E0 x
/ H% F6 m+ N& |# ]
        enoughDataFlag = 100;9 {# B  f* U/ ?2 G8 D' ~
        enoughDataFlag = 1000;$ T+ E- z5 y, z$ e" i- Z
        enoughDataFlag = 0x02;
2 Q7 D: T- n" B. t9 ]0 O        enoughDataFlag = 200;
0 e) B% D) U! _! v) Q7 _/ @2 E3 y, `$ o
        int myfuvk1;
4 H& ?$ C, {) a) N& e! [        myfuvk1 =11;
6 _1 Q5 O" O) _+ \
7 H) W  S/ g, m; P; [+ p
! T2 A: H4 Z8 z        enough_data = 0;
) H. ^$ J% [* }, ~. e  i, C$ N
/ U" ?3 W% y8 b$ S, J/ k- P//        if(enough_data>50){# Q+ L. L& s8 L: Q
//                enoughDataFlag=0x01;% n/ Y9 E+ i  s9 u0 [2 @$ v' C7 H
//        }else if(enough_data<50){6 p2 q% ?5 c3 e  ~4 N
//                enoughDataFlag=0x00;//0x00还是不行
4 X& G+ p9 z' |1 S2 S//        }
/ y7 }- p$ s* B: v- f# T' t& F2 \* `' d$ R
6 N+ C$ X+ }6 x
        oo=10;
- ^$ K$ Q6 |) C- l8 f5 R- V        oo = oo  <  5;
: y0 q; |0 K% i; J. z$ G        if(oo){  s/ c# P+ x+ n- L/ k  ]; h9 J9 f/ F
                ii=0;
- C: _: o, i! O' T        }& A5 D$ I! y2 L3 E) m: |4 \/ ~
        if(oo  <  5){
4 Y" q& r2 s  Z% r1 G/ _+ g                ii=0;
; |( N8 w# u9 B8 s, X        }, g" \& G( b$ G
        if(oo  >  5){* O% H  d( a0 ^2 M# t
                ii=0;, y8 L# M/ M' w0 {( `1 ^3 q4 q0 M! {
        }, s6 G& u/ d8 p, C1 G
% {: d( y# ~2 {1 O* l4 f) |  C0 B, A
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */0 w5 R/ `  j7 C6 d  ^, p) d3 |
        /*  如果数据足够才执行主程序 */
9 G& e9 r* X5 \% O" R# V: m- w$ H" Z        oo = oo  <  5;" V* f' s4 t3 S. K
        enoughDataFlag = enoughDataFlag  <  5;+ z+ r) p7 [* V$ u
        if (enoughDataFlag  <  5) {1 E  @# Y* ?( x* `' W
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
: t3 g2 g6 t5 X                AGC_AGC(&pAGC);
' [& _. Q0 M/ G; f- \& ^5 `( {( U  V# ?) {0 a& ^3 {
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
: T" v8 ]/ H1 b2 m, I% \                FIRDecimator_FIRDecimator(&pRxFilter);+ l8 J/ V7 r/ i8 n4 v$ t/ ~

( T2 [% C  a( x& O                /* Downsampling */
: f, l5 u* x: K3 `                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
9 r/ p' Q! b5 ^- N, E/ c/ W  E; f5 t* H4 H( {' _
                c_PreambleDetector_PreambleDete(&pPrbDet);+ j& O* N2 H1 p+ B6 H& y' Q
2 A+ F! G: l4 z3 t6 }
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
0 r! Z& ?# Q. Z! X4 s                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
$ T3 B8 @/ H$ U. H- `- B                /*     %帧数量=100 */
: O; u% S( V4 q2 P                pFrameSync.isInitialized = 0;/ V. w2 s* v$ a! |/ k
) Z8 _5 t( t/ d" b0 b! e9 k- a2 C
                /*  [EOF] */1 g7 y0 k9 L; h- W9 w# U0 u$ q
                /* 前导码长度是13 */# b9 F7 h' E" Z! M9 X
                /*    %qpsk */$ h1 ]; ]" P. i/ M+ }+ f
                pDataDecod.isInitialized = 0;( s- k/ S8 H2 m8 @: S9 ~6 r
: i, W& _6 W. N
                /*  end */7 ^& Q  u% J9 ~7 m
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
, ]3 ^, L. K* I% ]7 g                /* Convert 3-dB frequency */" C9 }8 C! ^3 `: _
                /* Convert 3-dB frequency *// \- C% R+ {( s1 i
                filtfilt(save_buffer, usable_left_filtfilt);. L9 [# J/ d% r. h8 K5 N
                for (ixstart = 0; ixstart < 81000; ixstart++) {
6 A; m; ~# Z' Y/ I" o* z* v                        usable_left_filtfilt[ixstart] *= 2.0;2 f/ v# S% {4 M  p; b
                }: E7 k+ c/ i/ [

" ~; c: K, m, P: v3 i5 Z                /* 注意乘2,处理幅度 */
" v3 u. T" _% n- L5 E5 k                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */1 Q1 A% w/ {$ i( h( `
                /*     %% 行列转换 */
( K! B2 I" U$ O5 d3 a                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);) b; p2 T6 ~5 f: J& A
                for (ixstart = 0; ixstart < 81000; ixstart++) {
1 R) }5 }" O) z0 A                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
% a0 A! Y# y  O+ [( V                                        - yiDuanShuJu_mean;
: j+ K7 z2 u( i$ B( y                }
1 n  z; j6 a9 A' K
8 `- O. g) w0 [* o( L- E                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */* c2 Q  l# y9 ^( b9 @
                ixstart = 1;
- z6 P8 `" o$ O. ~) q6 M                mtmp = youXiaoShuJu_QuZhiLiu[0];
6 x$ N" B( C4 [' s# l                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
2 m7 K+ f/ B, n/ m4 \                        ix = 2;+ b7 g" u* T' k% z; f/ y
                        exitg2 = false;, C5 w! M, N* q  J& w, @8 }/ `
                        while ((!exitg2) && (ix < 81001)) {
& J3 A$ u# F0 S% M                                ixstart = ix;' V$ y) E% }, V: ]# o
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {0 k" Z# ?! B1 N! j. F0 N
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
5 g# O; [* P. O7 X( S                                        exitg2 = true;
- F9 w8 Q- F+ l7 M, ^7 X4 M: g$ A& ^                                } else {
% |' W, z7 T9 E                                        ix++;) k' x% U8 H- e$ x: `8 C- p
                                }
" F6 w1 w4 h) G! K" S                        }* _9 S8 R* e& D0 _
                }  _2 |4 r9 F* p  O! w

8 e0 g; `: G5 M  a8 [  ^                if (ixstart < 81000) {
! T& A4 N2 b/ G" E                        while (ixstart + 1 < 81001) {
7 l- s1 R. Q$ v4 e                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
* e2 H- Q/ D: ^# ^7 B  \, b! O                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
' Z0 S9 W7 G3 M                                }
, y  z9 N' H& l- U0 K7 B' e( f: F. K7 P' P. v+ E; o
                                ixstart++;
3 d; u- n" s* M! @* ?& G5 h; ^                        }7 A9 T) V* _. T3 C7 S4 [7 u
                }
5 Y* G" v/ E: U7 h
. t' L& d2 r- V$ E                ixstart = 1;- G. c4 w' G" f  e9 o
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
+ c3 c' [6 a- u0 s" R1 `: l5 U) }                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
1 v" P  `7 p7 O7 i9 q                        ix = 2;
' o$ d8 K+ G9 W                        exitg1 = false;" \  C9 n, Z& M  s
                        while ((!exitg1) && (ix < 81001)) {
8 i9 A% E8 l& a                                ixstart = ix;
! j& x8 c) w9 s/ Y                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {1 p# T/ V" _+ ~1 z! ^
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];( c( F) b9 H& f# J' ]
                                        exitg1 = true;. T; X: D5 P) v- v" D
                                } else {
& H7 N; [9 ?1 k" l2 i                                        ix++;
3 c$ O/ u$ i, S; G5 p/ b9 z3 h                                }# r% ~! @% D6 {
                        }
; _* v  `) C; `                }3 J  r# m+ _/ S+ n
" c0 X* g3 U4 B* R  A
                if (ixstart < 81000) {  I( V3 \3 _0 S
                        while (ixstart + 1 < 81001) {( n+ e1 V$ {3 c7 x: h3 y7 o
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {' N4 u& E0 L* J
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
; H+ q# F, ?, d4 ^& F0 [9 a                                }7 f7 R* l! e& M4 L4 j

2 F4 a) ^, O$ b# C8 r5 T                                ixstart++;  N6 t: O0 T: E" N
                        }, J  `/ A) _' K- B5 U3 ~. G5 x
                }
. x1 M" [5 p* S% l
$ K5 V7 p$ D/ c8 G  r7 a& L% s, T                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
* Y( s! r. A0 C4 w8 N" \5 L                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
: Q3 I+ B& A: J2 I# ^                        yiDuanShuJu_mean = mtmp;4 z% h* [; P8 r* O
                }/ v8 C9 u6 E/ z7 d& L

- P0 g: E: |1 P- ]+ |                /*  找出极值 */
# n; p1 d/ a( R' v/ P                for (ixstart = 0; ixstart < 81000; ixstart++) {
/ n* q* }$ n5 |                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
- N+ v+ W& K( A. n+ `                }
4 e' b( t0 N* s. U/ {  K( Q& v  }5 d
! K6 ]: B1 m0 F7 D+ H        --------------帖子字数限制------------------
- i6 e$ h: q$ j  `  [' K}# [# k; M6 G) S% J5 Y
- H, W: e7 M1 P  t; h6 e

8 i& L) ]: e. K9 ^% x

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 17:47 , Processed in 0.042938 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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