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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
) k2 i- x4 K) V# l$ i" T0 @" X3 R. M7 x9 g
各位大神:
/ w5 Z! g. C$ ^' _     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
- b2 |/ e9 X- b      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
2 T7 w) J0 v; P) T- b; A
! j0 f) C: y; }  @5 J2 s     
% K  C5 ?4 {  [: [0 z4 r  \6 p这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
8 u  C7 W+ A- l. l( t7 d. Z# n% M) T) b/ \* N' h
并没有其他线程0 Z! A+ Z4 N7 T8 ?+ v- c4 S
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
" a- z. k" [# s  W) k% N! U( ?0 z也说不定是和堆栈有关系。。。。。。
3 Q8 h. ]/ D9 Z$ M! L; |3 g) ?. \) Y% u请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
( A2 x  X3 G3 T( F  W* g: r6 Z$ j  D% I. s0 p' }4 I* h

/ |+ {5 F' t. t$ x5 S1 r, g$ t. V0 y% X( M7 o) Q$ W* B$ \
我也很绝望啊,希望大神能帮帮忙,感激不尽,!* y- p" u  }: h7 k. D8 C' l# _; ~0 }
' ]8 X  b$ j7 t( @  k
2 l8 z0 i4 q5 u0 r# d3 ^
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];4 N: F2 M' ^1 L3 K/ R
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。( `  R  E: L, M

) ^9 I& y3 v' yboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
! m) j' u$ B1 p; u                const double data1000[1000]) {: y( g* O0 q6 N

4 Q5 v- j1 A" w0 q% i; o2 d, J        int myfuck;' B" P/ n; O3 u5 j- o/ @
        double yiDuanShuJu_mean;
/ K, Z- r/ O) ~# b& h& S  U        double yiDuanShuJu_LowMean[1000];7 a% v# Q4 B: b  V8 m; }
        int ixstart;( v2 N3 t2 d2 V4 k7 b* {! r0 ~9 P2 ?
        double dv0[1000];1 e- n1 x# J' I
        comm_AGC pAGC;
: e" F/ z4 F5 w, H9 x        comm_CarrierSynchronizer pFineFreqCompensator;+ z* C1 @  g; t* m+ W' Z/ j
        dspcodegen_FIRDecimator pRxFilter;
( O, C5 W9 V3 a9 J        comm_SymbolSynchronizer pTimingRec;; h$ z7 Q3 D$ s1 x: N0 x
        comm_PreambleDetector pPrbDet;
2 y3 j5 m+ y% Q2 u2 C        FrameSynchronizer pFrameSync;
" y7 N! q* e6 l7 {# P        QPSKDataDecoder pDataDecod;0 R: z6 l9 }; V( p. T
        static double usable_left_filtfilt[81000];( Q5 U0 U3 ?# s( ?& F7 [/ i
        static double youXiaoShuJu_QuZhiLiu[81000];" {3 N  h( u; Y( v! F8 s% H
        double mtmp;
5 n1 L4 u8 Y5 [        int ix;
' S' ~/ r1 N, b4 C9 |$ @* U        boolean_T exitg2;7 a5 f* |8 A5 e2 }8 C
        boolean_T exitg1;" J) h5 {3 n2 \5 ?1 z  ~. I
        double YiZhenShuJu[800];
# h4 m5 C6 c! C- k( ?" ^        double dv1[800];) M3 s$ A0 \/ F% X. P

7 _/ Z) \8 o# }- E: G! I" b/ g1 j8 K
8 v5 t4 k( H- u! U" v% |        double b_YiZhenShuJu[800];
1 n: u7 q- Q( f0 o) l6 G        double I_filtfilt[800];
* p/ b& d0 ]' [        double Q_filtfilt[800];" n. e% s& V& y/ f3 g
        creal_T b_I_filtfilt[800];
; d5 E/ s6 P7 q  n; o0 @        creal_T b[800];
( [- B! z1 i8 ]7 z# {9 t5 B9 C        creal_T RCRxSignal[50];
, j. A! I/ S1 x# \  P        creal_T fineCompSignal[50];7 {2 {2 F0 Z" p
        double phError[50];$ w) f5 u+ E/ W/ H- Q, E  w% U
        creal_T timingRecSignal_data[28];
0 z- _% L( f, T% J/ `        int timingRecSignal_size[1];
  ?8 M  k: N" F% h& `7 E6 U        double prbIdx_data[28];
7 ]2 |7 d9 r; Z        int prbIdx_size[1];. p! Q4 D' Y+ {
        double dtMt_data[28];- Z+ Q/ {  y+ z; x; _
        int dtMt_size[1];
& ~7 t  Y0 M7 b! L3 [$ I. Y        creal_T symFrame[25];
3 ~6 l0 Y. C% a$ q0 j2 [& ^        boolean_T isFrameValid;7 P$ l' [) u8 u& `. E- U
        double unusedU0[3];
! h0 `& S+ k8 Q# p3 [6 y# t5 u. R9 `8 c
        //调试过程中的变量
( P8 n, L3 p% h" Z- Z+ ^5 O% m) G        int  enough_data;. {" s2 S7 J8 i( C) e
5 s: n# c1 M  m$ |
        int enoughDataFlag;
& g% o  U1 z$ b        int yiDuanShuJu_mean_int;' K, d' J0 u: w# @& U
        int int_sum_dv0;# n6 w7 _) k  r/ z5 ]$ ]0 [9 o
        int oo;
+ Z+ C8 C6 B% i# o9 T1 o/ w; {        int ii;
8 ^3 S: L# p2 F" t' o        myfuck=10;
* T+ G* i- K8 T% n* z        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
) T5 r+ `* x; P5 y1 S        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */0 A; u; V0 m3 |8 X; ]- \) O

1 U2 O4 c6 ~4 {9 _7 j6 J# h        yiDuanShuJu_mean = mean(data1000);2 U' |) [$ I9 o7 \& d! U( ]* s. s

% E& @. i8 e7 v; l9 G        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;$ R, a4 n' }+ P5 E4 J
        UARTPutc('A');# I3 k% J% A" F) u) p* E, J  X  K
        UARTPutNum(yiDuanShuJu_mean_int);
: X3 W1 F. P( R1 q# o( ~/ O        UARTPutc('\r');
- \  W5 T2 `7 {. {        UARTPutc('\n');/ ?! J5 y+ T& U' h
! S' k# s! Q8 d0 ]5 H( |2 n2 t
        for (ixstart = 0; ixstart < 1000; ixstart++) {
& n" N9 W% C! G+ \4 z& w                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;+ D, W' |% {" O; z' [3 m1 `& g, x
        }
" I8 ~  M1 J: x1 F& Z3 X& U& C$ T: F  b& `) m  }/ t4 C
        power(yiDuanShuJu_LowMean, dv0);
* F: f7 O6 g8 _1 H- E% {% E3 ^& w8 ~, W1 c6 C7 f! e2 ^3 f$ Q+ o
        int_sum_dv0 = (int) sum(dv0);" J' m) f3 K; X
& t% S/ k+ J- R8 M% e
        UARTPutc('B');. V( j, H5 f# X, m; s% h
        UARTPutNum(int_sum_dv0);5 @  q" N( A1 z8 u, @. m
        UARTPutc('\r');
2 M2 @6 f. ]( ~5 T2 T$ Y. `        UARTPutc('\n');
7 O) j! B  i" P  r8 Z" u/ ]6 `1 m
8 s# F, x  S9 H4 a! c+ }//        int compareFlag = int_sum_dv0 > 1.0E+8;
) W8 K0 n2 B. S! x: O  s0 i
" s: C! |8 v$ A& t. S, ]        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?' W6 _4 R$ r9 u( r( j
                UARTPutc('C');
+ v+ p# Z" f; Q9 j& y                /*  比较信号能量 */6 u3 a) ^5 ]5 p) x) X
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */. C' u6 N# a  |) K& ?2 L1 X
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;& y; J. T. r& C2 ~8 W3 [9 _: o- I1 b
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
. W" y' U9 i1 I+ f! x+ q//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
, B8 f, s8 G+ h% m//                                        yiDuanShuJu_LowMean[ixstart];
- }4 I0 X& y4 l8 M- d) A//                }
! x0 @! z' B; U- f. u! i  A//2 ?( ?5 r  O( b0 i  O2 H  S
//                youxiao_k++;- n# Q0 Q. ~3 I# V! j4 F- W
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==  i9 u: @* F. C& p# l+ y, P. i% }
//                        /* 感觉要取21个数,即0-20, */
- P. K5 s3 U; v* i5 C: t//                        enough_data = 10;//有效是10,无效是03 i( C: e$ V7 T# k
//                }" i9 H* t; d% [* v& N3 e% t, T. J
        }
6 u" C+ y; l4 i# Y9 ^' s/ @) Y; e- r
$ n$ Z& L6 z0 s% @
        enoughDataFlag = 100;
' s( F1 |1 o# a, R! \        enoughDataFlag = 1000;
" i5 t$ E, V) \        enoughDataFlag = 0x02;
" @9 t& [) I+ t  S6 p) e3 w) X) U        enoughDataFlag = 200;
/ `" v3 V' S6 L! I/ j0 K, }* J
3 V  D- z2 L! a& n        int myfuvk1;; I+ w6 F4 j' C* M
        myfuvk1 =11;  M& I; Q  f) i" v6 X! Y$ T

2 I- [# P0 q6 _" j* @# n  F1 H- g; |. E/ `$ m
        enough_data = 0;
" Y7 q2 d$ t9 d" X+ Y/ N  e% K0 Y) Y/ n6 }3 H
//        if(enough_data>50){
* P, `: q, I2 b+ j  d7 B//                enoughDataFlag=0x01;+ ~+ h& H: `5 g  U9 h/ h$ _5 V
//        }else if(enough_data<50){
- L9 _: c" x* x) b//                enoughDataFlag=0x00;//0x00还是不行
; q$ j, {* f: @//        }6 `1 C7 w/ w$ o* d2 _- t
; _: f% `, {9 k% e6 X! ~
: A7 N  n. ^1 Q' [: Q) y: L
        oo=10;/ V0 ]  w- B9 }+ }; y7 \- r1 b- F
        oo = oo  <  5;
" b2 U# i" A+ c8 v, d        if(oo){1 s+ W& i9 H8 ]4 b
                ii=0;
) {  |5 H7 `% z6 t: H7 x        }" ]6 a) Z" o/ I) H/ c
        if(oo  <  5){& d: C  r; t4 c. n. d
                ii=0;6 s* T) r, b2 Q' d7 s
        }  a0 S* f* }, R8 \  b4 }4 q1 ~8 ~
        if(oo  >  5){0 k5 S: s/ l# n2 f, f
                ii=0;! n: A! H* {7 S
        }0 u/ ^2 |4 ^9 ?# f9 Y

, |6 n/ Y" n1 X8 p: v7 S        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */. X* }, s( Z/ G7 `) C' |6 v1 U, o# T
        /*  如果数据足够才执行主程序 */: Q5 m, z0 K- G9 k  P5 v
        oo = oo  <  5;
- K; F4 u( ^1 I        enoughDataFlag = enoughDataFlag  <  5;
; f: J' T9 A5 c0 T8 {        if (enoughDataFlag  <  5) {+ ~3 Y: E0 H( L
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
3 f/ g+ ^; ]. I                AGC_AGC(&pAGC);
8 w1 J$ }/ l! Q+ J/ J8 g# k1 r+ {4 V" k/ V2 T6 N& z! Z+ E
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);  z3 X+ U$ x/ f, M- l; a' d
                FIRDecimator_FIRDecimator(&pRxFilter);
' z% v1 p, v4 K' X' B
6 M' T8 |1 N$ K7 V4 L9 q3 ^- Z                /* Downsampling */
6 U, B4 W1 p" i0 D: O* p                c_SymbolSynchronizer_SymbolSync(&pTimingRec);. q7 X& R. _1 {% e: W& ~; j9 B! [
4 M$ i$ z- n7 B
                c_PreambleDetector_PreambleDete(&pPrbDet);
8 @* }6 q& \8 Y# t' C- W" G: n  d
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */( u9 Q# m0 \# l( j+ V
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */0 v4 z) w. f7 N1 d) ?
                /*     %帧数量=100 */
' M7 P% J- C1 g4 U3 V* \' D7 U                pFrameSync.isInitialized = 0;
# u2 a3 u7 `: `; _& |) ]1 j. |# C$ r0 r
                /*  [EOF] */! v" q/ v% E) H% a: _( c
                /* 前导码长度是13 */
( |% U, {# G( d# Y                /*    %qpsk */( j3 u, ~/ U7 g  n
                pDataDecod.isInitialized = 0;) S0 G; s7 K& Y9 N1 q
- e- I# j5 K* a+ k
                /*  end */
& a" e# Z2 O3 t; U8 M  g" P* C                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
( h# W$ @' |% J- p* u" J1 g                /* Convert 3-dB frequency */% Z4 r+ s- J4 @
                /* Convert 3-dB frequency */: l' F' Q' q; @0 @6 G
                filtfilt(save_buffer, usable_left_filtfilt);* ?6 h% Q6 ~3 i
                for (ixstart = 0; ixstart < 81000; ixstart++) {( D+ X" A; O: b4 f7 f
                        usable_left_filtfilt[ixstart] *= 2.0;/ i! y, P& K* u- B9 M$ h
                }
1 d, u4 |7 g5 d+ ~2 a
( u# I; O: x# L" C                /* 注意乘2,处理幅度 */
% i+ o# C0 ?" G1 B1 M3 }( \                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */9 r6 Z: Z6 F6 H# l  S
                /*     %% 行列转换 */2 ^/ {$ n8 E2 @2 ^8 q
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);$ `7 s- x; Y8 y8 W
                for (ixstart = 0; ixstart < 81000; ixstart++) {8 V) A# b0 l3 g+ f: i9 g$ a
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]& u7 e, h4 H  K' _9 q. r
                                        - yiDuanShuJu_mean;& _1 }+ K$ n2 h$ q4 ]/ B3 M
                }5 w) r( J- [, z% x4 L+ w
8 Y! ]4 c+ n& s5 ~1 J
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */; \2 S1 Y0 G" B% _) G: n3 W; f& U% U
                ixstart = 1;& ~& R/ R3 N# G7 \  p
                mtmp = youXiaoShuJu_QuZhiLiu[0];
% e+ Q* b2 Y; g3 D! f3 K% E) J3 ]! V                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; P$ J. I/ S5 k) M
                        ix = 2;
$ M2 G$ u8 \4 Q1 W* M( f8 m% [                        exitg2 = false;
) C9 F; Q  ~+ _: }. N7 Q8 N# A2 b                        while ((!exitg2) && (ix < 81001)) {6 l* _, `5 k1 D5 [/ H
                                ixstart = ix;# `7 z* n! W1 q# B0 K5 \
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
; W7 E. F% ^5 p- |                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
  H( d2 B: E# C" G8 ]' L8 U* z+ A$ T, S                                        exitg2 = true;; J% y* N1 ?" `1 i1 `1 S/ a
                                } else {! {+ s. \' x% m, j8 L
                                        ix++;  t- B5 x, O! ~" u: T3 b$ r
                                }
. @+ F; y- G/ G, p' o9 C                        }: A2 n' v3 P. r
                }$ w# i8 \! c. F% ?5 z. c1 k

  p+ _& D/ c7 G' _) U                if (ixstart < 81000) {4 v* L( H7 z1 {3 \9 }  p1 R0 u  Y
                        while (ixstart + 1 < 81001) {
3 M5 [2 f: {3 `$ T                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {; D8 w2 Y5 D: ^; L0 P
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
+ Q1 l3 r+ Z7 N: @1 M; s3 [                                }' @8 M( r3 u1 l' C4 d

9 Q" {  W: w' a- U7 ^0 z- p1 H                                ixstart++;
7 y0 X: Q  q, _2 ~7 N1 k' s7 b                        }0 E! R7 _$ I* O: Z) l; S
                }
' w# b3 X6 r- {+ @- J/ O3 y7 q9 v& x, n' ?
                ixstart = 1;" T$ R! a+ t1 F
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
% q# C* g  O# O) c                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {; [- m4 ^. s7 d1 E3 V1 r
                        ix = 2;. S5 C6 e5 V9 B
                        exitg1 = false;2 ~0 T  C# E0 y7 e8 t3 T6 Q% f8 @
                        while ((!exitg1) && (ix < 81001)) {- O+ ^' Q" m7 O
                                ixstart = ix;2 M3 \( i5 x, M3 [: V) l6 ]
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
% M  Q2 p& z. b# S                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];1 a9 q1 n. l" B0 Q9 |
                                        exitg1 = true;0 K! ?+ z" B0 \3 H, W1 x
                                } else {+ i: i/ t0 M! G# ^6 c; ^( R
                                        ix++;7 l( b! I6 |4 N& h4 C
                                }# W5 \0 G2 r3 y# e2 y6 l% m
                        }
: g" I, Q) F. A                }
: N5 z2 s: L, X6 f
+ ?4 p$ m3 m  ^* w7 C, Y/ T                if (ixstart < 81000) {% m) P. [& Q# x* R& p! S8 O+ M
                        while (ixstart + 1 < 81001) {
" D. r$ \( c# A! r& L0 `* V. N                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {9 Q( k& n9 @! o* W& Q
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];; _! J% M3 @" Y; |/ ]
                                }
0 |$ ]0 R3 i) Y/ ]. |
5 r) G/ k- N, g" K$ V6 b                                ixstart++;
& q" c9 Q+ I- y' K3 v- E/ [9 K                        }
7 a. z; k# y( s9 a                }
2 ^% C* j+ \5 W8 ?$ y! Z; y2 P. g7 {8 T2 p
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
0 I5 i$ I/ [( l5 U. g5 W5 ]                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {- F; {, A3 M% f: F, [7 U
                        yiDuanShuJu_mean = mtmp;
2 O( Z/ \* t4 I. Q5 f                }
6 m! d" K# a* [) j) z$ e% k- u, r: o" B- _5 H8 ]# L
                /*  找出极值 */
+ r$ Y& i& c2 O+ B                for (ixstart = 0; ixstart < 81000; ixstart++) {
! `: R2 f$ Z  K. d. E; d3 {                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;5 k0 D9 `4 A& z+ g- J: \( n
                }
) g, r: `$ }. f- P: ?; u
! }8 a- J" j  s        --------------帖子字数限制------------------
4 v) W0 X' v: n0 y( b& S5 R  {3 b}
# b1 O1 Y8 u3 v4 D, D; b4 }6 O% R  E' E# S! Q% s  B- M+ j

( O/ f$ Q2 x/ {( g# H

本帖子中包含更多资源

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

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-17 07:56 , Processed in 0.049838 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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