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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 1 e  u% t! a* r  b0 g( d

* {* f5 f& ]% T- X, s% f各位大神:9 B) |0 t$ ?7 V8 D. O/ b4 K
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
1 W1 p8 q/ I5 ~" i- S& }      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
% s% Q) B5 d) f' z$ A/ t" _+ U# I# Y  X0 S* I  ?( I
     
1 A. {2 i4 _# U* c这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。( x3 i9 i% Y, z

* {4 U: i$ k8 r9 |& r; \  z并没有其他线程
1 C* W2 _/ y: y: k反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
$ c3 U2 [* r4 ]: g) ^' v1 m也说不定是和堆栈有关系。。。。。。
6 O2 T3 w. N3 i( z# E请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
5 Q. j* q( Z1 h% s: o& Q5 Q1 Z4 a; |
8 B& h6 R( O. Z! @% x0 P& [

' ~# c2 z0 I4 b$ h& B我也很绝望啊,希望大神能帮帮忙,感激不尽,!
* B5 h8 W6 x: c! h2 J* H$ D. w7 `$ T& ~# }  a: L- c/ E1 q; \0 t
! j/ _- [; k% h. [
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
- n- H3 ^1 h3 W7 ]  z4 z& A        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
2 R; @7 P/ \1 K# u2 Y: x  e- f' q( d0 L6 s/ t# a4 F) Y
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(- r: n3 y: ~% m
                const double data1000[1000]) {4 x8 g* |% J* ?' w

5 E6 q0 p0 T7 b) b( r$ n+ u/ j) B        int myfuck;
: ]% Q, h7 N. U: [+ T6 H. N        double yiDuanShuJu_mean;
9 O3 U: m) m! B+ {  o: k; {        double yiDuanShuJu_LowMean[1000];
+ |* X: s, U( L8 M) ^: H8 r        int ixstart;
$ H8 ^8 v9 Q5 t( m        double dv0[1000];
: }# D9 W0 U, b1 j        comm_AGC pAGC;
" s! G7 Y* a3 O1 X        comm_CarrierSynchronizer pFineFreqCompensator;
& p+ g# C. [, q+ `* b        dspcodegen_FIRDecimator pRxFilter;+ b% Z; t+ {- D) Z4 ^* x% @* @
        comm_SymbolSynchronizer pTimingRec;% N: \* y8 H/ ], j6 F0 N" Y
        comm_PreambleDetector pPrbDet;) g. s8 x- W1 ]4 b8 _% F7 ~. Z" u
        FrameSynchronizer pFrameSync;
* V7 {2 M5 G, n2 a5 c        QPSKDataDecoder pDataDecod;, g6 C) t; M1 ?5 n- ]% q  ]) S
        static double usable_left_filtfilt[81000];1 s8 |. m; i: h# [6 c
        static double youXiaoShuJu_QuZhiLiu[81000];0 N# x2 O, ]2 ]' @4 s- z
        double mtmp;
/ |, o8 h' l5 U' z% D1 s; ^7 K        int ix;3 K: o& N0 C  u; \9 ^: Y/ ^' ]- v
        boolean_T exitg2;6 b3 Y" s6 x" |3 b
        boolean_T exitg1;  L, X" b# \6 n/ Z7 @& r
        double YiZhenShuJu[800];5 @* n, v. [5 s2 O# g
        double dv1[800];
0 }1 D, z! B7 Q
9 h# G1 u2 S9 D# z. x  _# {
; l/ A$ _6 P' h7 {  T" A        double b_YiZhenShuJu[800];8 c2 O& v4 B. _7 i5 D0 D
        double I_filtfilt[800];
7 _; ?2 t- i7 V( z4 b$ O) i        double Q_filtfilt[800];
% `7 f1 Y5 N: ~        creal_T b_I_filtfilt[800];2 u4 g% t* G# q, W  q
        creal_T b[800];
. h" L! x) g, H2 n0 e# @9 Q        creal_T RCRxSignal[50];
" G: x. g- o0 d2 G" s8 G* @        creal_T fineCompSignal[50];! Y0 i6 E# q2 o) ^: i# o; b- e
        double phError[50];5 g  K* X+ H9 d2 O
        creal_T timingRecSignal_data[28];+ v/ p2 w  J* b0 \9 `, A
        int timingRecSignal_size[1];
6 Z; {  _; f) R+ ]        double prbIdx_data[28];& U0 X, y5 |$ P  `6 i4 B
        int prbIdx_size[1];
  s% m4 L' [# f6 _8 m/ b0 @- L        double dtMt_data[28];. P/ a: G' X6 Y, {
        int dtMt_size[1];
8 o& ~# K. V, r5 S& o1 u) F        creal_T symFrame[25];
3 ^0 ], V$ @; H5 X        boolean_T isFrameValid;
3 A, H0 H6 L- L; Y% w# P7 X        double unusedU0[3];; u& u4 d& v5 d
& q* h% V2 Y/ W2 G+ J# o8 R
        //调试过程中的变量" A2 R' W5 r% B; S" t
        int  enough_data;
* g  `& Q$ F( V# J" M2 m
! _' ^( n2 W$ v. g. K4 D0 V        int enoughDataFlag;5 J. D5 N: @( m6 }/ N! b/ ~& R
        int yiDuanShuJu_mean_int;
; W# d# S$ Y' V! w1 L0 `8 i        int int_sum_dv0;: g: X1 `9 f* r2 F( g8 G" I9 B/ X
        int oo;
( \. d  b5 t0 c$ Z7 g        int ii;8 n9 j! v) \5 D  m
        myfuck=10;
3 L; |8 H4 Q" f        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
/ K( |1 y* \8 d4 R) w& ^0 c        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */6 U) t0 A7 f& l. m! S9 v

' P9 o8 k! l( b/ T3 ^, ~0 L        yiDuanShuJu_mean = mean(data1000);
. p9 n7 F# T6 B- e& Y
  R3 a6 f( ]% O  i9 `        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
' f; t' E3 y3 K* B& y        UARTPutc('A');0 v1 n! u; P: d  m/ r! m  |# u
        UARTPutNum(yiDuanShuJu_mean_int);
6 q  f8 F- H6 W4 y        UARTPutc('\r');6 w. ^, ?4 e3 G6 _: G2 c
        UARTPutc('\n');( Q0 w! E  h/ B4 Y
' N: F  B3 w5 V- P3 I
        for (ixstart = 0; ixstart < 1000; ixstart++) {( F$ \+ X' A$ a# O; O% Z$ }9 G
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
7 V1 q8 N' w& W6 N; X        }- c2 q2 t$ I0 s% B1 ~& T; l
( \! R. R" L* f- L, J* Z$ [
        power(yiDuanShuJu_LowMean, dv0);. W, t+ ?# U% |4 E9 E+ n  R
. r, N5 Q3 |$ D' f
        int_sum_dv0 = (int) sum(dv0);* W  h+ }4 }; d) Q( B8 U- _
5 G7 p7 M% p0 g: G5 T0 X0 M! F
        UARTPutc('B');
2 [  m' y. p) w# a8 j/ ~% \$ k        UARTPutNum(int_sum_dv0);
1 R5 Z2 u( s5 H' C1 n; \' X        UARTPutc('\r');3 \1 G$ w3 W9 w) U
        UARTPutc('\n');
* v/ s/ W5 X# I7 M" \
! `7 J* G5 D& I5 M' q1 D# u//        int compareFlag = int_sum_dv0 > 1.0E+8;% a7 O4 a, y/ ]1 ~3 ]$ ^- t9 |
$ F* r" y7 a5 G- k
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?" y/ ^" w, {- N+ E# w8 g
                UARTPutc('C');
1 k/ v3 M) C+ T3 V, M9 ~( e                /*  比较信号能量 */
+ `. Y! ?3 S  X. ^+ {                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */. U7 O/ o# B$ [; F" w
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
* A( ^$ g' x' m* S9 c1 y//                for (ixstart = 0; ixstart < 1000; ixstart++) {
. L) V7 R8 g9 A4 l1 @$ {: t* d//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =' ~2 D; e2 Q# j7 I
//                                        yiDuanShuJu_LowMean[ixstart];# \! f% p0 O( o! G( n
//                }, [7 ^4 m8 N/ e$ r' P! S7 T
//- q; D; E& G3 x( J0 s6 d
//                youxiao_k++;5 J6 Q# o* Y# y7 C4 M0 }
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
4 r+ V' `$ r- R$ }& N% v3 |, t) j//                        /* 感觉要取21个数,即0-20, */
/ X7 w# t: z" c//                        enough_data = 10;//有效是10,无效是0
$ A; `) w  y4 h$ p//                }; C  m, `! }9 u" v: P7 p
        }5 F, p, ?1 m& H# V; R1 i

. Q: c8 S& p. h& ^+ ^" W+ ]# M+ F2 P2 L) O6 e: T* i
        enoughDataFlag = 100;
7 |  e& t% m( F, C$ P        enoughDataFlag = 1000;: T9 x) E8 J3 |+ V
        enoughDataFlag = 0x02;0 p% i: y/ R' U) k- L/ G
        enoughDataFlag = 200;8 R7 [% k& T: h2 q0 H0 w- E) J! y

, R( V3 |) U' E# T. [6 H! s* N        int myfuvk1;/ `9 M! f9 {0 ?5 j8 z, O  p
        myfuvk1 =11;8 E3 }: h, S; I; ]( F

5 S! K; g% I' k7 h# c' r
1 w, i5 Q6 g. p! b* O        enough_data = 0;
# \: d: ^) w* _6 E4 D& O6 Y9 K/ `) O* ^: J  g, u3 v
//        if(enough_data>50){8 q& u6 ~' a# l
//                enoughDataFlag=0x01;
/ {% s' h. \9 m% A//        }else if(enough_data<50){- w3 u6 S8 T" A6 r& `
//                enoughDataFlag=0x00;//0x00还是不行
; p/ `1 R- S, C' |5 ^//        }
8 M- [1 b( [) N
8 q: l: b) C: \% s& @# P# R
9 |% m1 ], y' y. T+ J& Z        oo=10;
1 R0 f+ F* P* [1 ]# n        oo = oo  <  5;1 M& @2 G) Q- s; \4 E- C
        if(oo){
- W: w  s+ d, V4 r                ii=0;* V# [9 h! }. v' ^
        }
, R$ L& C" o9 e3 x! e        if(oo  <  5){5 f. p5 q# O# {* U0 u/ l
                ii=0;. a# f9 D- `( r3 W8 j- }: q$ _8 s
        }
$ j! h/ c# y; k' {        if(oo  >  5){+ j. }/ c* V, B1 n1 N4 Z
                ii=0;
2 d4 d6 I1 ^+ {  l8 p& S0 x        }( A# r% O+ z6 q! q- s# i
/ n( A9 U9 Z3 m) b6 m
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */8 F3 [1 o8 b# N1 \2 s
        /*  如果数据足够才执行主程序 */( {. }9 q, ?9 K- L# y$ N4 k
        oo = oo  <  5;- t' `% a, i) v7 V- {
        enoughDataFlag = enoughDataFlag  <  5;
# r9 f9 U+ i" i, k1 T  q% S& K  V+ \        if (enoughDataFlag  <  5) {4 \* C; ?) z% T5 b7 g* i
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
9 x, @7 |, B: ]* X  F                AGC_AGC(&pAGC);
# v  s; ?$ }0 X0 b1 \
1 [" v+ g, l+ R6 }                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);0 F$ f: q* }3 t6 G  ~; G! @# m3 |
                FIRDecimator_FIRDecimator(&pRxFilter);
* l7 C! H0 m# ^6 I; G4 ?
3 ~7 E- X/ U) E( n. E3 ^4 i                /* Downsampling */; \" M! V: y+ l: V
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
5 I: Y5 q! M$ p+ T6 j  a7 G
: u6 _; n0 e' V1 ]                c_PreambleDetector_PreambleDete(&pPrbDet);  Y$ h; Q- a8 P! w- A- O/ u

2 h9 p8 w4 U& ]1 H5 o                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */' `( z) M6 W9 N$ p; W' u, w0 I& \
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
: ~6 c7 P* P0 ^. d6 \! a                /*     %帧数量=100 */0 p% ]5 n7 F& m
                pFrameSync.isInitialized = 0;. F( c; s3 n7 M0 G
5 Q: L5 G9 K- J1 m; V2 n: Q2 c
                /*  [EOF] */
0 S/ f. z) S8 d. s                /* 前导码长度是13 */
  b3 B2 B7 d! O+ }7 ?9 [9 ?                /*    %qpsk */
' F( j$ @3 `/ h: W& Z4 O                pDataDecod.isInitialized = 0;$ \% P* c% j% |% p8 Z  n- Y6 N
8 s, n/ P' P5 E( h& ^
                /*  end */8 |/ G, ^6 ^8 q, c4 c2 }/ {' g, |
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */  ~1 H) v' w6 F! Q
                /* Convert 3-dB frequency */4 d5 E9 u4 o& e& `7 y5 y, V) H' l
                /* Convert 3-dB frequency */
5 F% v5 a- _; F5 _$ H- P                filtfilt(save_buffer, usable_left_filtfilt);
0 `0 b5 P# Z* ^: |! Y                for (ixstart = 0; ixstart < 81000; ixstart++) {
6 u5 e: w( w  G0 R  U                        usable_left_filtfilt[ixstart] *= 2.0;+ v% X0 V! U. x5 L/ T$ l
                }
- ~) g1 M% {0 U1 \' K* O* ]  R7 m& K/ |$ g
                /* 注意乘2,处理幅度 */  S* z* \  u3 R4 m) O6 f1 @# p
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
/ C) M1 U5 k& ?: A1 V( T+ w                /*     %% 行列转换 */
, Y. _( K' D7 w- c+ n' g1 W5 i                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
+ I! J8 _: e' I                for (ixstart = 0; ixstart < 81000; ixstart++) {
! h/ F! H+ h' V4 W1 H; l$ f, g7 B                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
! g. K9 [0 W, g8 w0 Z% Z. W# }4 Z                                        - yiDuanShuJu_mean;9 t& y3 p. Y  ?# Q' V0 N
                }  Q& e7 U7 l6 @0 a; h

0 X2 b, n4 q5 b9 ~4 s                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */) l5 C' T0 \. j( e6 [  O' v% U* l
                ixstart = 1;+ `$ }+ z7 I" m% G5 g1 ^
                mtmp = youXiaoShuJu_QuZhiLiu[0];# G" O, E8 H+ S' j0 m9 j
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
, k7 P/ L/ [+ L$ n' I                        ix = 2;
; G7 J' H" ?0 A" }- {) L1 P                        exitg2 = false;
" s- [' y4 R+ Q- E( H                        while ((!exitg2) && (ix < 81001)) {
: A5 i6 T( A" P: M. E                                ixstart = ix;
# M+ W) T7 a# H% a9 N                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
6 L2 v; ^" {  B8 b                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];  u5 l  X- K% D; G2 f: X. a
                                        exitg2 = true;4 X7 q& G, r% r; ]9 X" [, ?
                                } else {# F1 G$ O) x" z# Z
                                        ix++;( M/ P4 N# s& f
                                }
  d, J! x# G+ I& L                        }
" y: u2 F/ {* z9 D                }% r' v3 V* Q3 T: n( R% |
- Z; O! ^: p- m* _7 t! o+ _
                if (ixstart < 81000) {
7 ~, f$ Q# F) U  ?) }$ c                        while (ixstart + 1 < 81001) {
, u- ]( ^$ W8 q5 }2 v% |* m                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
& o/ l( n6 I. ~+ {                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
0 v$ I! l) a6 P$ W' K                                }
- _" P9 |4 N* |5 [/ L2 H1 j5 G% M) J$ J" L
                                ixstart++;5 W5 j0 S- E+ ^( y
                        }' y) j( X3 K7 s' I8 F+ E: `! k6 x
                }
, p- c5 q  `; a! V# I8 O3 z3 l1 K; F: v# D, V9 x
                ixstart = 1;7 _* |6 ^( C: _: ?& ]- s
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];2 T5 F7 E, P7 W) c) y" H
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {. F. g  K* c  L8 u% c, |4 v
                        ix = 2;$ y* q" V6 s; _/ V+ i: b6 h  D  z3 n
                        exitg1 = false;# }8 p8 {" P4 G/ I1 @, f! C
                        while ((!exitg1) && (ix < 81001)) {
' [* v  r8 ?" J* {5 Y/ q3 D& V                                ixstart = ix;1 f" h( [8 I" p7 ^
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 `. f; Y0 T7 v1 i$ ?3 D: I- [% F* y2 C                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];. T- G0 [: y5 \4 ?  |* p7 S( l
                                        exitg1 = true;
# R9 K; P9 E# O# T                                } else {
8 i' F" Y) @/ G1 R: Q0 O( s( |                                        ix++;
9 j& O& i0 \6 }" H, T! e& q& b& C" `                                }
7 Z' Q0 r+ @4 z- t                        }. ?; Y& I' A  b- \/ b  y8 z0 W6 F$ b+ L
                }
7 ]8 H0 V5 Z& Q+ N( K
+ a' W, Q1 x/ V                if (ixstart < 81000) {, }# N4 m, f, A
                        while (ixstart + 1 < 81001) {6 k& E0 C. O3 I+ |+ U
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
, W  k; O3 M& U# m; n# I! D                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
9 j; s8 d# [5 p/ O                                }
3 @4 A4 o8 s: }1 a) G
5 s  v" y( L) z" y                                ixstart++;
3 ]% }- x: W. r$ Z  O                        }
* Y' k) [, M7 G6 `7 m8 x1 ~" N* e                }% k& K. A8 s' a" u: K& ]0 w& v

# b- O! P/ V8 M1 o5 ]7 w. v                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);& L9 h* d2 M* s$ \2 [. V
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
- a0 M; e1 O" w% L, j4 J+ Z                        yiDuanShuJu_mean = mtmp;; H" K; Q# i) E& r
                }" E. f$ E2 p- H- W' n6 u+ @! V% F$ s
2 I8 T" j4 O7 O, c' G8 g
                /*  找出极值 */+ S* }+ R* E; n
                for (ixstart = 0; ixstart < 81000; ixstart++) {
& F) Y: b& z& R/ |, y$ S" v' [& [0 n                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
1 N+ |3 I& G# b) l. |  s0 Z                }
* e' }7 c4 |, |: _  s, Z5 v6 h0 z2 c; E. e% `9 c$ V7 U
        --------------帖子字数限制------------------
8 h4 I9 e" _1 E' ~9 _! s" a}' _8 p" H9 w; @; W5 F6 Z; S
8 J' X8 b2 ~3 }% R. L1 J
3 ]; d6 I) t! V# }' 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-24 22:35 , Processed in 0.048034 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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