debug时程序运行的莫名其妙 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 6 q+ N, r' v8 j0 E
, o3 X$ Q8 Q3 A! V% s  ]
各位大神:
1 i; }. w9 ?; o" X- v4 B     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
: o* m2 Z8 u0 U; Z7 w! k  T) `      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
. G9 Q# J- Y2 [2 J9 s( ]9 @( B/ ^7 V% V& r' P* z, T
     + @: @% {4 k: _+ N# \
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
* ]  A4 m' p9 p: D3 K
; W3 m0 u9 Q/ R9 B+ T% q并没有其他线程0 r8 ]- O& K3 a  P7 H
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
/ C+ N' I* `. H也说不定是和堆栈有关系。。。。。。
- g  e( U9 s. K4 t) j% g: u请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
8 V/ {5 x9 D% w0 H2 B. {0 P
: L6 ]0 f4 r8 a, G4 f' m- F+ M/ U$ l+ W% d% |. s/ m+ W& I

5 s4 y& T* x) [; Y我也很绝望啊,希望大神能帮帮忙,感激不尽,!
: K/ g- @% q  s1 u3 Q, }: k  G8 g
2 z% H$ Z* _, [; J) Q1 D" K! z; T; Z5 N7 X& t8 `: l2 Y* Y
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
1 W& [  j& Q/ ^) ?. X        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。1 G+ C/ W% r$ ^2 d  P6 e
7 ]* N$ t" u  g; l
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
5 B) G3 n& }) V! H                const double data1000[1000]) {
. j/ r  n- i* Y$ N# `
! A8 ~/ M' U# m, j$ h; F        int myfuck;+ T4 X# J" m" o" a
        double yiDuanShuJu_mean;2 y) o) ]) Q- r- w2 W0 ?
        double yiDuanShuJu_LowMean[1000];: u# D  X& g; Y1 d+ u4 l# r
        int ixstart;/ _& V# B* s4 e. ^. u
        double dv0[1000];8 |. b' z7 z* P
        comm_AGC pAGC;
0 e7 }# [: b/ `7 I; S9 W        comm_CarrierSynchronizer pFineFreqCompensator;
6 B' y0 y( \, F        dspcodegen_FIRDecimator pRxFilter;
' i/ g4 \: C; p. G6 S- G1 H        comm_SymbolSynchronizer pTimingRec;- s3 R+ v* r5 _2 }2 L8 [  U
        comm_PreambleDetector pPrbDet;
% N  _$ a; g$ o; F. b" d        FrameSynchronizer pFrameSync;) d/ i; A$ C" B5 l) S3 J% @0 V; F
        QPSKDataDecoder pDataDecod;
. Q0 p% r. T0 D$ d; }5 l        static double usable_left_filtfilt[81000];
: }8 f2 |- e0 S  r0 j  w        static double youXiaoShuJu_QuZhiLiu[81000];
" K3 G5 ~7 f- f        double mtmp;
$ [2 @8 Y5 X% B        int ix;5 g/ G8 Q' @; _% r  d& t
        boolean_T exitg2;
& i" y0 W9 K- d" r        boolean_T exitg1;
! |' ~. ~; {+ f$ I# Y        double YiZhenShuJu[800];. u  S( D. x: B5 J( Z
        double dv1[800];
1 H7 B. W, P3 M+ I* B* V/ J! j( |% y3 R* o' P3 u1 @; h
4 J5 o( U5 D) B* p% ^7 f' j4 Z4 Z2 R6 ?
        double b_YiZhenShuJu[800];
% c4 d  e0 z0 u  B. X' Q0 G        double I_filtfilt[800];
* o) M/ ~% w  p& w; w        double Q_filtfilt[800];: T% I% _7 W( q6 n% G
        creal_T b_I_filtfilt[800];$ W$ C, O1 a" o0 @) F5 a: Q
        creal_T b[800];
# Z6 z& ^! i3 O  `9 \2 g- \$ R( S' T        creal_T RCRxSignal[50];0 w) _; f0 e0 K- E
        creal_T fineCompSignal[50];, t" M" j2 ?1 `. {( k& g/ ~
        double phError[50];/ L; P: R' o. v  W9 @
        creal_T timingRecSignal_data[28];
# K; y: k+ L. e) R        int timingRecSignal_size[1];) w% |. a2 @" N
        double prbIdx_data[28];- p' F# {5 z5 O7 R7 ~  I( H
        int prbIdx_size[1];
: L8 Y2 F, v2 d) R( W* X        double dtMt_data[28];
' ~, f( m1 G( V3 ]        int dtMt_size[1];
4 v7 ]" ]' E' f7 L        creal_T symFrame[25];
7 D5 Q" F3 b8 C# b        boolean_T isFrameValid;, H& S8 Y+ @4 g6 V4 _: {7 ^7 {
        double unusedU0[3];& a, p, Q0 a$ S2 z1 b! O& K
5 F. w0 Y9 y, x* B' r% f  y5 A3 N
        //调试过程中的变量
6 z7 s0 D0 W$ q: ]        int  enough_data;, y4 M) m( X# x5 x

$ U& Q# A: q  `! Z* I        int enoughDataFlag;$ w! j, e; F# [
        int yiDuanShuJu_mean_int;& m" {5 d- X, E  H  o
        int int_sum_dv0;- i1 C/ ^* ^& _
        int oo;" ^1 d; V. a6 [3 E/ {
        int ii;
* n# p  r7 s4 ~/ w        myfuck=10;! U( `5 G" ~2 n' h: ~
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */- m1 U. g' D! ^, Z$ a
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
0 R1 C3 d/ [2 g/ I
- i& `+ B* G" y8 g* o0 l  {        yiDuanShuJu_mean = mean(data1000);
( M7 V# e- a* D" x. o1 S" c
% d- m9 E/ D: A: h, `$ t5 J2 V        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;+ J+ @- V, g% b$ C! S1 Z+ [
        UARTPutc('A');
! K9 G: ?: l1 S9 [/ S6 N5 @+ Y        UARTPutNum(yiDuanShuJu_mean_int);
5 ^: n3 P: ?6 y" W% m% ^( m        UARTPutc('\r');
# O0 D! l8 k' U  q        UARTPutc('\n');  T  V/ y: k6 _
) a9 I2 n+ i2 C4 k  y& e1 s
        for (ixstart = 0; ixstart < 1000; ixstart++) {( s' y" c5 `, g+ z4 b5 J, {3 t
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
, c. K  n$ j& S        }
- b- @# m3 u: G8 ]- l9 o
6 m& p. T! a/ d) ~" _% n        power(yiDuanShuJu_LowMean, dv0);; }# c7 w" E3 o+ b$ u8 O6 v1 @
) Y- H/ _% E1 P! I
        int_sum_dv0 = (int) sum(dv0);# l& ^4 u% _9 L5 a* P+ d0 I, f$ I! G

% w4 i0 M: `$ j2 I8 M- B' d7 G+ D        UARTPutc('B');
+ q$ g% O7 X% w4 e1 h        UARTPutNum(int_sum_dv0);
( P% \2 }5 k4 y* g5 a$ r1 }        UARTPutc('\r');
! z8 r7 _2 f$ I2 q$ {$ ~        UARTPutc('\n');
+ h) b. R8 K) ?. V4 Y( C
% C$ X8 \' |' t6 Q//        int compareFlag = int_sum_dv0 > 1.0E+8;6 k6 ?+ u: D- }! \8 |8 W

" c* A. P6 o8 l  i3 f        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
2 b9 D, p, M% h7 J' N* a                UARTPutc('C');# M1 i. R: j0 }2 k' d2 J" f  a
                /*  比较信号能量 */# o: ?" k/ x3 ^7 l
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */, k( w+ u0 r2 G; _, q1 N$ h5 C
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
: z" d9 N* A" E/ w+ T+ v9 J. t//                for (ixstart = 0; ixstart < 1000; ixstart++) {4 v0 @) b; e* f& h; j
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =1 c6 F3 i8 B' U  l, k
//                                        yiDuanShuJu_LowMean[ixstart];7 v2 G) b4 |/ C4 L& T6 }4 c. o
//                }
4 Y. M, Q* o8 M; b* }1 L6 s7 ]//
# G4 [3 c1 K  Y% q5 R//                youxiao_k++;; Z# w* s, L8 N* j4 y, l. `
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
/ l+ T6 V+ _+ l5 v$ U3 C' M$ m1 n//                        /* 感觉要取21个数,即0-20, */7 a" n- {( P& M4 z2 W! Z2 V
//                        enough_data = 10;//有效是10,无效是0
, ~& M9 r, e  J% j( K//                }2 E/ V0 x5 p/ k4 B1 B
        }
+ D2 i6 Y" x, N& n( L2 S; T, A
+ B9 l: N. A' h) k! m! Y0 o5 K$ O# |
        enoughDataFlag = 100;
, b- w5 }1 D: v; ~        enoughDataFlag = 1000;
2 `) ^: V8 ]" K7 D: X; @        enoughDataFlag = 0x02;  T# P! }8 P+ F8 M" h" C
        enoughDataFlag = 200;
* e6 {3 r0 k0 K$ h
8 b+ [/ H  K) ]( Z5 u        int myfuvk1;
2 B$ v4 I0 A) |% l$ I0 U7 |        myfuvk1 =11;
# }3 h; |! i/ q/ y8 k: u9 p: x- F, E
8 q7 y! |4 a6 C+ d: r9 a! {6 O9 u
        enough_data = 0;
' W( R  U# X4 ?0 N" A% ^3 g6 g- C: g* s8 p# G( r0 T" R" ~! @* B
//        if(enough_data>50){
, T/ Q; Y" o6 V0 h* L: E, @  {//                enoughDataFlag=0x01;! Z2 X% n1 ^( }4 R: _4 c" g! C4 L
//        }else if(enough_data<50){9 p' o. J: s0 \# ~
//                enoughDataFlag=0x00;//0x00还是不行
9 j! T9 Z8 @2 ?) G, h5 D8 r//        }
) h% `/ z2 B" n- f2 q' ]; `8 ]3 \% q) b
1 Z7 `1 r+ q0 q( Y5 A7 e+ H4 s
        oo=10;
! x" s( o6 d# v* ?        oo = oo  <  5;
, q8 |& [/ B  C1 j) l+ ~        if(oo){: h9 y# V- H. [" K9 q! X/ C- X
                ii=0;# h- C( Y* q$ M& {7 p
        }
+ i# I0 `/ k) p. U4 W        if(oo  <  5){# `: _3 m- Q& ?$ B
                ii=0;
- T3 y" e- B: R6 J( ^  p- A        }0 J. I  H) J- l+ b/ `( j
        if(oo  >  5){; A/ X* N, t. _
                ii=0;
5 J2 D" O# k4 r7 E% k  E, r        }$ I% `* S3 z6 L0 H
; t+ d: ]+ l2 [
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */8 @: F5 E3 Z/ S( {
        /*  如果数据足够才执行主程序 */' U+ a# N! Q! ]5 g" v- u# r
        oo = oo  <  5;
6 {. @5 P0 l; Z, ^2 F4 V: \5 }        enoughDataFlag = enoughDataFlag  <  5;1 Z  I% E6 {6 O  Y- l4 a
        if (enoughDataFlag  <  5) {0 l" t6 o( L1 t) c5 T# a
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
9 ~8 v2 C' T4 P" u' O: N) ?' s1 o0 J                AGC_AGC(&pAGC);% P# _6 S/ A% v0 W# E' P
/ Y5 X# ?1 P7 j; n$ ~& K
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);7 @# Q; T+ m* {& X' x6 _
                FIRDecimator_FIRDecimator(&pRxFilter);
# H& w: h  K+ j& r' g# Y* n$ {$ c$ Z
                /* Downsampling */
) z$ v" {( D0 @6 P- ]* |5 g" d                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
- L% C; T# G7 n- F: a% H. o( P; g; |+ Q+ h2 T, [
                c_PreambleDetector_PreambleDete(&pPrbDet);4 k1 T0 M) Y) M2 r6 Y& x
5 R. `# m5 h. ~) o* @* p% B4 [
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */; y& g5 z( g. y; N8 {. C
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */1 W# v, h! ]' T- U' M) u- e
                /*     %帧数量=100 *// Z1 w6 @' K7 b& D, P8 p% o
                pFrameSync.isInitialized = 0;1 l! \. `( Z# q, e! E3 i

3 e8 O2 i9 d0 }' x                /*  [EOF] */5 R1 z3 v5 w  H7 `+ N
                /* 前导码长度是13 */
. O" @/ i: }) J2 Q6 e                /*    %qpsk */
6 `( f0 m0 U5 ~3 T                pDataDecod.isInitialized = 0;
5 L7 c0 s' b' ]" F/ A6 t9 n3 d. t4 F; _1 D5 T
                /*  end */
+ u6 I- M/ e2 `$ P. B                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
1 F0 D  x) i. H" R                /* Convert 3-dB frequency */
- t$ c( f7 [( W- ^, [3 L" ?                /* Convert 3-dB frequency */
  B$ G; G8 S( d( G: `. L                filtfilt(save_buffer, usable_left_filtfilt);# F' P' n  D) W  ^8 k$ W1 b9 Y1 n2 Z
                for (ixstart = 0; ixstart < 81000; ixstart++) {
7 V- {7 M  w# m8 ~) E                        usable_left_filtfilt[ixstart] *= 2.0;
( B' M' |3 n1 C$ Y& m* k- `                }4 O- g( J- a. |! n2 m
1 O7 P1 X- Z% F0 K3 |, f; R. w, t
                /* 注意乘2,处理幅度 */
3 x" t, G$ \( x0 |                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
& W" G" O( f2 v3 G0 ^% x                /*     %% 行列转换 */* Y; s. ]% L& Z  B1 \
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
, ~5 q3 i1 K3 ]0 M3 E                for (ixstart = 0; ixstart < 81000; ixstart++) {
! M' a- M' g1 G$ x5 E/ E                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
. Q5 O, d8 }. c6 z0 _                                        - yiDuanShuJu_mean;
  x8 I7 u7 u7 [  X" J                }5 p( \  g6 h' C$ `2 f  @1 K

( U4 Y' n* V2 Z4 Y, C* k                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */& R( Z& o) }3 \' D8 a" C6 q, Q
                ixstart = 1;) a1 B5 C+ g' C
                mtmp = youXiaoShuJu_QuZhiLiu[0];$ p1 e# Y% q5 B' Q
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- ?6 ]% y( g% _* q  \
                        ix = 2;
, j' ~' ?( o! j% d9 N7 S                        exitg2 = false;& g8 }" C7 K6 t0 E9 O- }
                        while ((!exitg2) && (ix < 81001)) {
8 r/ `% Z- o3 y' R) m0 f5 k                                ixstart = ix;
( d& |3 ]  u; T& o                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
  n' u7 P3 x; U, u                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
# q$ w) M3 ?$ `+ S6 W5 z                                        exitg2 = true;( J( ]0 s3 C' e9 x  x. _6 V
                                } else {$ P" E2 L. l. ~7 d9 b
                                        ix++;$ E4 i2 q' {7 L# b- @: N! X# p% J
                                }
* T/ a& [* K+ z7 H  o                        }1 K! k% c' M6 O9 _8 C
                }% P2 E% u! P- s. {  Z

2 e9 ^* `' G' ^- ]# w5 V$ @: w                if (ixstart < 81000) {' M3 P% N: A" O. z
                        while (ixstart + 1 < 81001) {
; A& ^; @. T0 |1 O. k4 ^                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( H8 F: f# l+ r& W4 w3 C                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
9 {: \; D: E$ P6 D$ p; ^, i) _                                }
' B/ u# K  G5 T+ P# ^4 N% a" f0 g0 U& _8 F+ H, p* u8 G
                                ixstart++;0 H8 C: E4 R% k
                        }4 X' W! a/ t9 }2 t; f6 o" X
                }, v) r. L* Q) a$ c6 z; p% B/ I
8 M$ n2 i# |& E) y
                ixstart = 1;
- a7 k: Z# S4 c4 J                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];# V7 l& Q" @( A( t0 u" ^
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
9 S7 }% f/ p0 A' d/ a# H7 {  G: G' P                        ix = 2;* I! c/ h; f; n: E$ o  P8 B
                        exitg1 = false;+ j& G9 Y1 P9 L5 K4 \% E6 U
                        while ((!exitg1) && (ix < 81001)) {8 K9 b" I' ~% ?7 C$ Z
                                ixstart = ix;
' D! Q8 k5 H2 l. l                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
0 m0 Z5 }) i$ @                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
) `% r8 Z% q: `- w' m& v; f                                        exitg1 = true;1 Q' p0 l# s2 \# _" G4 n4 b
                                } else {7 V5 F# T7 \/ h- j$ k* X
                                        ix++;8 k. ^- v' f0 d8 u6 [2 r
                                }
* ~# R& \7 B0 g# f% G' ]                        }
; I. ~+ m6 W5 U5 X0 v+ Y; L                }
4 B/ o; h7 l. n+ S2 T; M0 v$ i* Q9 W& y' J0 m  H
                if (ixstart < 81000) {
; Y" X  _6 }) n                        while (ixstart + 1 < 81001) {  \; a7 r5 I3 v- y& r+ I  c
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {7 K! `$ r6 G9 w4 [0 D4 A
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];( k2 L, k7 u; t4 T4 _
                                }- s  s6 R7 o" ^" {0 r
) M' c7 f! l5 a& b
                                ixstart++;+ m: G- E3 V0 R  b) J  L+ v1 b
                        }
& d% w$ o3 ^6 _4 `7 ^                }6 C* i" ~- X; F# E. c3 ?$ n
3 Y; N9 d! m2 F6 V/ p1 O
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
; t7 [& ?. E3 U                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {$ H6 H' Z& {, l: m0 {  W5 B; w/ A
                        yiDuanShuJu_mean = mtmp;% Z1 J& ~# D# H2 m$ p  l/ b- I' U+ Y
                }  d; B' O- V: |% z
$ F- H4 M5 J) P# U
                /*  找出极值 */
$ ?) I% O) G( w                for (ixstart = 0; ixstart < 81000; ixstart++) {
3 S8 O3 J. O" f  R/ h, _                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;8 X8 B! W! M' |9 t! y( V, }0 ^
                }
) [: k' k( W! c- Z7 {' {) t
  x: d. d$ l: v1 s& m, ]        --------------帖子字数限制------------------3 t& |  i1 `& `6 E8 E' M0 A
}
/ j9 t/ F1 J& n. V* l5 x# a; i4 M9 c4 a+ I+ i4 r
# }( F# c( ~9 ]" P$ `9 ~. c

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-11 07:11 , Processed in 0.049885 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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