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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
6 t0 \! B" Y5 x
* P4 D; W) R) {各位大神:7 p3 I# C# Q, q% _* O
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
5 u/ M: g/ l6 j2 l) A  n      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
: [. Y0 @; e3 J" n. I+ ?
6 j' q" Q; _" U0 i$ l# e     ; n5 J7 w+ X3 B2 D& e, E! l
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。2 y- g9 ]3 s' T+ S
/ {3 d0 x# l. W
并没有其他线程4 s9 L1 v& m& ~& u! g& ^3 x
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
4 |: J, R8 o6 Y: o1 T6 T/ r* F也说不定是和堆栈有关系。。。。。。/ C8 O. e6 ?8 t- K& o
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
$ Q6 L3 i8 d! t0 @; i3 s
$ O7 M9 P* I, V6 y5 \  a. _( Q1 H) `, r

& P4 Q# \7 ]$ F! Y$ F1 B我也很绝望啊,希望大神能帮帮忙,感激不尽,!5 U6 _+ D5 A" F" `
$ |1 O4 n* i* n* u  u5 J; n0 U1 S2 e

; d2 Y! m- m' {" q& V附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
  S8 e4 y4 y; l; a7 w        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
3 K0 L. r0 o; Z: ^) O3 ?) n
$ X9 u0 r+ Y% j$ j! n8 Bboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(; q8 O9 E0 s, ?1 R0 X
                const double data1000[1000]) {9 {! J$ Q, f, f! Y: f6 P5 p6 G

; [& b$ K( \2 L1 {: B$ h. v        int myfuck;/ [( \  U. j/ y& d  L+ M
        double yiDuanShuJu_mean;
3 m' M& k( b7 l        double yiDuanShuJu_LowMean[1000];
2 y% _" ?) @- m2 x        int ixstart;! z6 k) Q/ T) s9 H  D
        double dv0[1000];
2 b4 g2 ]# z8 \        comm_AGC pAGC;
1 p6 n1 @3 T/ O! }. o        comm_CarrierSynchronizer pFineFreqCompensator;& j$ D! Z3 D0 r% d2 y4 l
        dspcodegen_FIRDecimator pRxFilter;: r( g" w6 m2 L7 M. j8 J& @9 W0 ?
        comm_SymbolSynchronizer pTimingRec;
- t% M  @9 d, R# I$ p# Z        comm_PreambleDetector pPrbDet;5 s- A% p2 v* W8 K
        FrameSynchronizer pFrameSync;# T# T2 z. O" R
        QPSKDataDecoder pDataDecod;
5 d! A2 Y2 l/ c2 y. H  R) }        static double usable_left_filtfilt[81000];
' t! }0 ~0 y4 L4 z9 _# b        static double youXiaoShuJu_QuZhiLiu[81000];* n0 ?6 g8 M: v0 O& i# M" s
        double mtmp;# z+ H; t- l2 o& }8 {! M
        int ix;/ _2 m& ^* |+ C* C( Q/ d" B
        boolean_T exitg2;
  {. g2 [# E4 I; s0 X        boolean_T exitg1;7 i  H7 g3 m+ v; _* t; i( @
        double YiZhenShuJu[800];4 \( w6 V0 s) `6 H$ y+ N& L
        double dv1[800];5 ?- Q2 l; f% r. J- d
% C5 X- ]# l, |( S4 k2 e
  F1 |2 X0 l) K; I& V
        double b_YiZhenShuJu[800];( ^1 X5 {4 ]& z$ |5 \0 D
        double I_filtfilt[800];
2 V# z( }7 Z" ]  K7 q- }        double Q_filtfilt[800];- M2 G, t/ J2 o* m; x$ A) w- b
        creal_T b_I_filtfilt[800];
1 B* A% T8 L- J8 U( N. d        creal_T b[800];
# O/ {) o% c8 W6 h* ~        creal_T RCRxSignal[50];
* V0 E) l8 ?) h' I        creal_T fineCompSignal[50];
  j: _5 }" B5 e$ U        double phError[50];, ~, I6 p. e2 m8 C
        creal_T timingRecSignal_data[28];
- ?% h( x+ F  J4 L        int timingRecSignal_size[1];
- t, |$ r# A; N7 b7 J  `% ]        double prbIdx_data[28];( S' h7 J4 l# L3 z" Z. w
        int prbIdx_size[1];
5 C7 v& b: U9 Y/ J4 B: f6 m$ J4 r        double dtMt_data[28];' o8 U' T1 @& ]- F
        int dtMt_size[1];2 ?; |  A" A0 l) Q! u
        creal_T symFrame[25];
- D, i* s4 }5 K! [, {        boolean_T isFrameValid;
9 V  g3 j$ R% L' Y        double unusedU0[3];. |  |- z9 [+ i  O+ {

1 {( r/ i  v1 f- e        //调试过程中的变量
7 v4 K& V  c# }' M        int  enough_data;
4 ?: o9 D/ s9 n; X3 n+ {6 u5 _3 v/ S8 [7 w
        int enoughDataFlag;% j4 t$ U  C6 _3 E/ s0 ^
        int yiDuanShuJu_mean_int;
6 P9 m* F) E2 l$ U/ U        int int_sum_dv0;# B' v( d% ^2 f5 d
        int oo;
$ y$ Z# U9 x# u! K; r6 ?- ^        int ii;6 k/ G- o; G* B' Z
        myfuck=10;
, g2 E2 L/ B2 z        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */3 u3 I2 k& O8 d
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */' e/ F2 R' X9 n1 o

1 K" `+ B; Q$ G- R3 ~        yiDuanShuJu_mean = mean(data1000);
7 _* x7 c- r  s- D: N+ |
9 `4 _# L6 U2 A4 N9 n; }        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
1 M+ N3 D) M, u: D& W& W        UARTPutc('A');0 D$ P  P1 V6 \$ x: o% \( e4 @( u
        UARTPutNum(yiDuanShuJu_mean_int);" e, X- f1 \: T* n
        UARTPutc('\r');; o; q) u/ `# x
        UARTPutc('\n');. v9 h3 `2 n2 P7 i0 K
$ B5 \9 o( M$ D+ d- T3 L- W5 a
        for (ixstart = 0; ixstart < 1000; ixstart++) {, r3 C1 Z9 O; }$ q( V
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
6 N* x" ^( j' m! E3 p5 k        }9 ?& e$ r: e3 H' h5 O

) q; Y2 N- V8 k$ L        power(yiDuanShuJu_LowMean, dv0);
9 ~% m5 l( R5 C/ r2 j+ R' A7 g( y# p* I# J9 D( @" W% N
        int_sum_dv0 = (int) sum(dv0);
- g8 R, c, g3 W! x8 U) d6 v+ h4 g* R8 [
        UARTPutc('B');% P! I  {" {1 J/ b
        UARTPutNum(int_sum_dv0);% f" f! M" {- Y+ f7 O
        UARTPutc('\r');! c& X, i/ |% U; l( y. f% K
        UARTPutc('\n');: n8 g5 k: j4 Z' `' O( N& U- t

4 G, E8 F3 u" H2 ~//        int compareFlag = int_sum_dv0 > 1.0E+8;6 C/ @3 C2 i* q
1 }8 v3 f0 e: }4 Z7 p# Q4 ?' {
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?4 a, |8 I$ J5 h8 `" b
                UARTPutc('C');1 N  u, b( k- @
                /*  比较信号能量 */; i4 u4 f* W4 }7 V3 m; Y
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
# G6 B/ N4 j. @" D# H. @7 _6 D8 h* t//                yiDuanShuJu_mean = 1000.0 * youxiao_k;* d% P$ M( @4 |! s7 K2 [
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
/ q! ^, s5 Q9 a& @3 [( N2 R//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
7 R" V2 |0 E7 b1 I6 u  p6 B//                                        yiDuanShuJu_LowMean[ixstart];
$ `! ?! c2 P1 z, P" t% E//                }& @+ Q: d( f2 |" v
//
4 Q8 I1 X; D3 P! a, I7 S! ?//                youxiao_k++;: B, N3 Q0 R: O2 o0 ?; g
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
% O- a6 ^" c  |  b5 }//                        /* 感觉要取21个数,即0-20, */6 x7 r3 d! u0 |
//                        enough_data = 10;//有效是10,无效是0
: C4 H( l/ @  k//                }
$ V' f# {* T9 S- g( o* v+ V# p+ M( X        }9 K/ N& T3 c- ?+ F0 `7 _4 C, o2 t

0 p9 A' R8 `. B# v0 J* |: o6 C7 n& i* N" F; Y
        enoughDataFlag = 100;
7 J" c# n( a2 R8 j0 w+ ], f8 F        enoughDataFlag = 1000;
$ [% N$ `7 k# r9 P: i        enoughDataFlag = 0x02;
: e- |2 q1 T! }        enoughDataFlag = 200;
; f% B- t2 F1 \5 o1 {% g# A* f1 Q2 F$ ?: ?% T, x
        int myfuvk1;  R8 b6 ~- ]( b( q  T
        myfuvk1 =11;1 q( j! ]+ \+ l# M6 a7 v' F# N$ @
5 e* g3 h2 u. s, v+ s  P; S
  v* m7 h* s  r  @
        enough_data = 0;
4 E6 Y, q  E+ }# B
! [, b- x1 _7 e3 K" e1 @( r5 o//        if(enough_data>50){
5 F% n! h4 i6 [. @2 W$ `//                enoughDataFlag=0x01;
& m) l7 U. a1 O5 B//        }else if(enough_data<50){
7 y0 `6 `$ `" U//                enoughDataFlag=0x00;//0x00还是不行
5 C! H% q* ?( W$ Q//        }* s7 c# E# S, @9 `/ l# e4 |

) }1 h* r1 A2 o8 L$ w# V5 h- ]( B8 m
1 J1 @; d! a# {7 u; [        oo=10;
* `- `. {9 h+ x" O* ~        oo = oo  <  5;
" E" z2 S  e0 Y# ]9 q; |+ F        if(oo){6 W, ]8 H1 L% {  i
                ii=0;# n3 Q2 z( Z) K/ N, I
        }
6 o2 h, P0 H7 g( Z        if(oo  <  5){
& M# G- u1 g) |+ {1 }& ?                ii=0;
5 b" _, l) |4 L3 L; e9 `        }
9 V' F( `( D" E* N0 l        if(oo  >  5){$ v) |9 T; M6 d) _% D- w
                ii=0;
3 g  G3 c5 D1 q" O1 V# ^) G  g5 g( d- d; _        }
5 Y4 [, U) s% w
' m( e7 h! M! n8 ]! g$ D( @: S1 b+ N* a) ^        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */0 l% m' y- a- t- E) a3 ~) F
        /*  如果数据足够才执行主程序 */
7 D# `& [. k1 U% m8 \8 ^* R5 N- e        oo = oo  <  5;
3 q' V( }8 Q7 r* S9 b9 V        enoughDataFlag = enoughDataFlag  <  5;7 b! l" U: Q: e- e* g
        if (enoughDataFlag  <  5) {" F/ l& `% ?: o2 s2 R+ o0 b$ r" z1 ]
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是07 \6 t) v' q, j8 L& ?/ Y0 n6 y$ L9 x
                AGC_AGC(&pAGC);4 h; {9 {9 G# n9 ?2 W9 A

* U6 }2 p; Q% ^5 Y; m- A. C                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);: _0 d% Y/ |, M
                FIRDecimator_FIRDecimator(&pRxFilter);
& {( T# K% B9 H' S& _1 R
) G" k: i2 o  R% Z                /* Downsampling */
1 B4 X3 O, ^" T5 M! ^0 I& K                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
/ d0 E& h# B: U- G
2 \$ N' l. s- s7 ^                c_PreambleDetector_PreambleDete(&pPrbDet);
+ Q4 D' y$ c: q' ~
. W  Y4 K7 W: n/ b- Z2 L; t                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
  Y' O5 f$ S! V$ u5 r                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
$ n. S9 d7 R2 L3 Y* K. _1 s                /*     %帧数量=100 */* k8 S5 R  J0 G2 s3 I) o
                pFrameSync.isInitialized = 0;
, r/ }4 O; j2 ]" O2 ?) P
5 ~  v5 z( C/ d$ P/ \                /*  [EOF] */! w! }, o$ e7 e$ }2 c# m3 X
                /* 前导码长度是13 */
8 P: x  m' a$ r) t% d                /*    %qpsk *// V4 Y8 N4 s- d# y
                pDataDecod.isInitialized = 0;8 |: P* Z- i) N8 c. t& h' a, E
, b% D) ]3 V5 o( ^) n6 \1 l/ M
                /*  end *// e- S" H% X2 b5 y1 P
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */, F5 G+ @( N# D+ e
                /* Convert 3-dB frequency */0 v- [; B) W) |/ g4 \6 f
                /* Convert 3-dB frequency */
" }2 R5 ~' a) D- w# }1 s                filtfilt(save_buffer, usable_left_filtfilt);! K7 ?( z8 y" w0 g$ `
                for (ixstart = 0; ixstart < 81000; ixstart++) {
: M$ ~7 r" D' U2 I: G0 R! [" q                        usable_left_filtfilt[ixstart] *= 2.0;9 E) B: w% A5 ~1 }4 T& S& v
                }
7 M* t* B, \& B! n6 A# H8 @( h) w* U9 W$ O+ B  x
                /* 注意乘2,处理幅度 */9 h( k2 t- l0 e0 J
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */3 V2 m/ k2 d! @$ F
                /*     %% 行列转换 */
' W- U+ ]  M! k+ m, o                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
: a* u: i! M9 y6 M                for (ixstart = 0; ixstart < 81000; ixstart++) {
* ^' ^9 K; d2 t                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
+ ]: x& Z6 s) @: @& R  g                                        - yiDuanShuJu_mean;! J0 x  S5 F! h+ G) f" |+ p
                }. P: N0 `) B& q+ f
' o% W3 N3 p  I# m
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
+ E7 G* o+ i$ D                ixstart = 1;
) c( D) m' K+ g) p* u0 X                mtmp = youXiaoShuJu_QuZhiLiu[0];
0 g! e5 V2 p0 |                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
& w8 W  X$ x2 Z                        ix = 2;8 X" r2 j6 F9 d) y4 X" W
                        exitg2 = false;+ ^& U* A) @) z5 f
                        while ((!exitg2) && (ix < 81001)) {
, t% b( [6 o' V$ x                                ixstart = ix;
2 g1 K$ j' X- O                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {" e% o# ?9 i3 `# H" P7 N+ a/ s- q
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
9 f5 `. e' D0 V% X/ K                                        exitg2 = true;
9 f" x+ j/ t0 E" K$ z+ l                                } else {
" {2 m( F$ S$ s* {7 g  v                                        ix++;
% y- b& J) f" R. x' o9 \                                }& ?& e8 G! F7 c+ q# O& n' _" S
                        }
% k( b, w. f  B                }
/ O; c( O. }; n& P% B
- e& D4 v) ?$ `. o: b6 X4 ?0 b                if (ixstart < 81000) {2 [" A* T1 m. l4 l, R3 P+ B( t  ^0 G- M
                        while (ixstart + 1 < 81001) {
  [) R. y$ U  _                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {2 D/ {/ \" W0 j/ R8 J# d
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];* ?' w5 o& y( X# f( S( d* j! ~3 }
                                }6 S4 q% \3 ~6 u+ y4 A* a$ E
2 q( R0 F( N3 J7 {) L5 U
                                ixstart++;- }. z" `- b6 b
                        }  O8 ~, ?+ q4 e$ t
                }# p. J; Z$ `+ G9 F
4 i0 e3 B  ]& [" }% j; f
                ixstart = 1;' t: v2 X; @. d: N7 Z3 a
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];; `; @0 o$ D  z5 V0 b/ T, }/ F
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
, p" a2 z, v6 W                        ix = 2;$ z8 j/ G3 B. D  Q" l
                        exitg1 = false;
) U) R' y7 _/ X9 k3 T7 l. f. M( y                        while ((!exitg1) && (ix < 81001)) {
* p* i- A+ p% c3 n' E                                ixstart = ix;1 O+ {8 ^, E+ U# T" S
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 o2 v5 p. U' \# A* l- m2 o- @
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];$ Y/ G' z  ^) s+ O6 F+ o
                                        exitg1 = true;  d; n/ {2 k' M, T8 Z; R
                                } else {
5 L( k# [# v4 ~& `, {# ~                                        ix++;  ~# i5 u- ^- ?0 L; q8 `& S) F( h5 g
                                }
+ {/ Q/ \  p5 P/ H) I  s; g                        }
3 N" u5 U) V. L+ w                }
7 m/ d$ ?+ l; M0 E. x4 `  ^+ H! l. n- q% `' Y
                if (ixstart < 81000) {
! b: f: X/ `  T5 P2 w5 I$ A) E7 F                        while (ixstart + 1 < 81001) {7 C/ A, |6 `0 ~  T" n1 F1 }8 b/ s' B
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
7 Q0 \( b5 D: m1 G( o' [                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];) P' S0 w. L) i+ g6 l
                                }& C5 r2 h5 \9 g+ e6 K; X  x6 M

+ e# y2 A( h* r1 k                                ixstart++;
. |0 R  n6 [) B1 C' b                        }; H$ R. a, b: q' x. Q; `4 f0 C2 d
                }
- c; `0 W* W, E1 L" p# R/ ?0 D& f& F, x; A
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);; {3 N, x; K4 F9 J2 ?7 M
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
# M5 t* E+ A+ y9 q* B                        yiDuanShuJu_mean = mtmp;
( L) n1 A# N& Y6 p% j* P                }1 d2 G$ z! ^8 e& o8 l
# ^" v+ e- D6 H5 @; y9 _- B
                /*  找出极值 */
7 e0 Y, ^0 b* k- Y& K3 _0 d4 A                for (ixstart = 0; ixstart < 81000; ixstart++) {9 |& F& b) ~; v" L, h
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;4 W* [* H1 p5 v5 {+ O# n& j8 }
                }9 L$ k$ O# W" @4 A6 s% x# z2 w' Q8 R
* l  |' o& l4 h# P' b3 R
        --------------帖子字数限制------------------
5 j/ b, T1 }) I}# r' L7 B/ m0 K5 q! |
6 J' u8 s  A% t( g

7 o% A) C2 _- x7 |

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-26 03:06 , Processed in 0.049694 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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