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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 2 q2 t  m3 X* z. _
2 ^8 h, q5 E6 T' o3 N! H
各位大神:
  Q8 M. Z7 G5 _; `1 x2 O" _' c+ z     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~). r+ ]9 X/ x. C" ~
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
4 \7 P2 K3 o) H' c# P5 y. Y7 u3 q# ~* m
     & l2 ~' y  ~. P+ T4 R
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。: r; C. A4 L+ Q, k3 s" P
: j$ t; }# x) W( N* p+ p
并没有其他线程
3 }# U9 @9 J0 H! u反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。- n8 e0 E3 |; K, l
也说不定是和堆栈有关系。。。。。。& f: T( e# k" |) [" B7 I' w: p+ X
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
$ A* P- w* o/ g9 }1 C6 E
! ?! m* r* Q% l7 Y, [$ I, T* n/ a0 T) R0 H; N+ {
4 A: R' j2 s$ x, G& }8 R
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
% g) e8 L' V4 X6 x- A8 E5 h+ m0 k, w* i; E$ p

( g: A. M. }0 M& d& c# i4 O附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];, j4 ?. h( u* ]
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
5 I2 D. N- H$ c- o
* t7 Y/ m- H* t) Nboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
( d; |# o2 e" t# r# Z2 D) ~                const double data1000[1000]) {
5 \, n3 P  ?' d) |
8 I) e8 e- e3 w4 G0 c) x% s        int myfuck;
2 i, S5 F7 |1 U" [' Q9 ]! W* e        double yiDuanShuJu_mean;
! |3 [0 W: v. P- K  |# N, M        double yiDuanShuJu_LowMean[1000];! Q  A: t2 ^6 f$ k* J
        int ixstart;; S  I/ _; g1 j7 W
        double dv0[1000];" v0 W+ w/ C$ }  [
        comm_AGC pAGC;% _9 C. I/ ^/ {7 w
        comm_CarrierSynchronizer pFineFreqCompensator;
' A- ~# g3 L# ?  m7 \" `        dspcodegen_FIRDecimator pRxFilter;. I" g* q$ w- ~
        comm_SymbolSynchronizer pTimingRec;8 l8 l2 C' O5 }9 ~0 j7 s8 |2 k6 D
        comm_PreambleDetector pPrbDet;9 l: u. H, [  I; p+ n, B+ m
        FrameSynchronizer pFrameSync;
& o$ n) z  O& g4 [. @        QPSKDataDecoder pDataDecod;
( |4 |: y- w) o% Z! G        static double usable_left_filtfilt[81000];
. h7 r% o' I% B+ h2 L- w# U        static double youXiaoShuJu_QuZhiLiu[81000];
# L0 W1 y- E8 S" {        double mtmp;
: A) t0 `, \" u, {6 o        int ix;$ u" I5 B* T" o8 h
        boolean_T exitg2;" P# O. }" n/ E2 A# T/ S
        boolean_T exitg1;
9 P7 Q7 V  P) j" V' l! n- P        double YiZhenShuJu[800];
  m8 Y+ T7 m9 i- T  T: D' b2 Y6 \        double dv1[800];2 m) C+ r5 Z5 c3 z5 C( C0 Q2 u
. m5 E: k% b) C0 t, g* F; B# H

% b$ f. A- {& c9 E% @        double b_YiZhenShuJu[800];
' L) u6 h8 @) ^+ G9 q* K1 d, D        double I_filtfilt[800];
# [! R2 h5 A2 m: _0 ^        double Q_filtfilt[800];& B8 n- e- D, S$ Y$ O' O8 ^9 U7 @
        creal_T b_I_filtfilt[800];3 e. D( E+ G$ E, t
        creal_T b[800];
  p, _# `9 [6 B6 R- ]9 G* a        creal_T RCRxSignal[50];* w) E  e# p6 n3 T& W
        creal_T fineCompSignal[50];. s) ]) L  i3 K# F8 P7 F9 B8 |7 k
        double phError[50];4 O9 w/ U; F% I5 E  i' N! v* z
        creal_T timingRecSignal_data[28];) b! `% {2 c& c
        int timingRecSignal_size[1];
3 R  y$ F* g3 S        double prbIdx_data[28];1 b% [0 ?/ k& u" i" ~
        int prbIdx_size[1];
4 P8 U0 L' A6 Z9 i& h4 e0 @% r3 j        double dtMt_data[28];  ^7 f$ K+ P. \2 m) n4 I* R0 L
        int dtMt_size[1];
0 k6 m7 ]3 e1 O2 d' t+ _5 ~        creal_T symFrame[25];
3 ^. G# }- N0 m" ~7 w0 q/ O4 e7 k        boolean_T isFrameValid;
. S5 z+ G* j' E$ a- Q        double unusedU0[3];! h" v/ q  V  }; b

2 Q/ y+ Z# l$ f% E% P$ w4 A; u        //调试过程中的变量2 z* s. N1 q& d* T; y
        int  enough_data;/ c7 i/ l/ @4 B* {6 \

7 g' C/ i1 z; b5 E( t9 j- S! Q        int enoughDataFlag;
& z! _- k- G# B' R        int yiDuanShuJu_mean_int;
9 j5 C8 z3 w! E2 ]. K3 o        int int_sum_dv0;
; \) V7 Q$ v# D* N# S+ P        int oo;
6 y7 Z' B) Y7 [) q3 Z7 o- }: N  K        int ii;
$ I' ~5 s/ l! P  ~7 g0 r" n        myfuck=10;
' K9 s9 D; c0 e        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
8 @2 \# Q9 p/ {* R        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */1 L: U$ B! _' D+ o3 W

- P6 u0 B0 _2 n$ Y  o        yiDuanShuJu_mean = mean(data1000);
" }) v* S  B0 O+ O, K9 j, j& M: t5 a* [7 f
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;- F; R+ {* A9 p% L  Q3 @1 [+ R1 J
        UARTPutc('A');- U+ n$ Q1 h: E7 D- `
        UARTPutNum(yiDuanShuJu_mean_int);% Z1 n/ R* O' Y2 _
        UARTPutc('\r');
2 U5 X$ E: N3 |8 g        UARTPutc('\n');3 {9 R6 J0 c5 _
2 t* H* B0 {7 F* n5 X
        for (ixstart = 0; ixstart < 1000; ixstart++) {; c) K3 ~( S3 i% `# _& D, R% V
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
5 `& q/ R% w3 f        }
: g& B% h8 Z% B2 l! w0 Q4 G) m0 i$ E7 `7 i
        power(yiDuanShuJu_LowMean, dv0);
5 W1 d( I" V6 l, a
: y) t- L) `  m  @, M0 V        int_sum_dv0 = (int) sum(dv0);
+ G( ~$ O  h/ r! g9 |
9 [" Y8 x, u% B) b: J) S        UARTPutc('B');$ C; T1 b' B. g. r5 L  Y
        UARTPutNum(int_sum_dv0);
* n1 G: f8 T& i        UARTPutc('\r');3 i& s: q! m  }" F4 J" k
        UARTPutc('\n');
- v' B, j9 j- E7 |, z0 {
% V9 n$ P- D5 `, \! g  c//        int compareFlag = int_sum_dv0 > 1.0E+8;
! L. D8 C( X. R+ _7 \1 j) M
$ _( I, s) E- O        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
- e( l1 |1 [' K7 K! k2 d8 a                UARTPutc('C');4 m4 I& t  T. J0 i+ x% V, M! G* K
                /*  比较信号能量 */. V* ?, P/ ~7 p- g* G
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */* c5 i4 B! ~  W1 N/ X. n* F1 L) S
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
. \. t" |% S! A/ s//                for (ixstart = 0; ixstart < 1000; ixstart++) {
" S) U, ]9 w% w* O//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =, g& b, |+ `; Y3 K- O5 p
//                                        yiDuanShuJu_LowMean[ixstart];7 U" |# r( O% @+ {8 W/ Z
//                }
' n8 M! t; s8 H9 p' h" W//
; A' i3 W. v- @% A- n# N0 e* J+ m//                youxiao_k++;
9 F" E3 W0 a7 A+ m% E+ j7 x//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
- L* \/ ?" L( g6 C( E3 r5 t//                        /* 感觉要取21个数,即0-20, */
5 D$ m) o5 e. J8 x4 |! W//                        enough_data = 10;//有效是10,无效是0
- D* n" M; B' X2 _  M8 h* _- }1 Q//                }6 H% J3 Y( |8 z  {# \$ z5 m+ c
        }( T) K! E  d+ v. S* r5 k

8 }0 G9 H0 ^) z8 H% R$ ]! [
: l* g# u4 P# f' q% p        enoughDataFlag = 100;- c4 U$ G+ w# \4 p5 U* P, o
        enoughDataFlag = 1000;6 `7 R3 y# t5 E, o0 U( F
        enoughDataFlag = 0x02;7 j0 S# Y9 o  @; e$ I. L% u, T; i
        enoughDataFlag = 200;
. ]) @) g! ~! e6 j- {( N+ c$ [# H% n9 w
        int myfuvk1;& a+ [1 \. G3 d& X; F0 L, M0 D
        myfuvk1 =11;
5 b' X0 B* n8 X0 k+ A4 J2 W1 Z& k  _; i& `/ _0 M1 O* D

! `) k: K9 f- t% a6 a& o) Y        enough_data = 0;% I, i% X, @7 W3 E7 G7 G7 K4 a7 ^
9 u, F* ^' V& B4 `7 G
//        if(enough_data>50){
/ q, U( ?/ d; h, m//                enoughDataFlag=0x01;
% v" _# W& I' H3 s7 y//        }else if(enough_data<50){! ^" L+ v! s- L3 z! r& r
//                enoughDataFlag=0x00;//0x00还是不行% [: _& ~- r7 u) `- l' t' r1 ~! Z
//        }
9 L2 \$ E% P6 g' C0 ?' k
' r5 y7 |* D: g4 I4 |0 t& p! X7 Y: j4 Y4 ]# Y. i1 j$ v
        oo=10;: m* W- N* n% |. o
        oo = oo  <  5;' B  z  c! f( d0 x5 v6 F4 B2 w
        if(oo){* a) c" I! B3 N( x) C' s/ d
                ii=0;
1 c( S# V0 E& i4 i& N        }
" @4 p2 B6 B% \$ |% j        if(oo  <  5){& T' e4 k$ W6 Y5 P  M
                ii=0;
( G& \0 N1 Q$ M2 ?5 z! _        }
+ d& u/ {, ?! ?: J6 ]8 H  E  V        if(oo  >  5){3 F3 G8 E: d: j# p0 q. g7 J5 _9 C3 p
                ii=0;
' R8 N3 x6 e+ I. m+ ~, j  [( t        }+ `3 H' i; T: v5 z8 K

& j) E" m1 n3 z# }# x% ?: r( k        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
7 n: r$ m7 b* V! G; j        /*  如果数据足够才执行主程序 */
2 i! O5 O4 r; K: B7 T9 q        oo = oo  <  5;0 N& B% d9 R- k, E) l9 g
        enoughDataFlag = enoughDataFlag  <  5;
5 Q: r6 v/ v$ a( m' o. s        if (enoughDataFlag  <  5) {
" k9 x+ I% ~1 _8 M: l& [( b! F//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
4 s4 X9 e, M8 A+ h/ f/ Y1 |                AGC_AGC(&pAGC);
" d# z- [: a' J* G9 {& g
7 T' q4 ^# J/ D. u2 O; d                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
! a" B2 j& w8 w6 F& O                FIRDecimator_FIRDecimator(&pRxFilter);4 ^& {6 y" {( g) q+ X" |8 u* t2 f5 ~

( X5 f2 }7 V+ ~# l. K2 k9 o2 s                /* Downsampling */! ~  {7 `; S( i- m& Q
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);, N4 P, T$ T+ W. s/ c

& u  Z2 c5 D2 y) y                c_PreambleDetector_PreambleDete(&pPrbDet);2 V2 t- A3 x% g5 D/ i" D9 t, r

" Q2 q4 [( W: E, J* X2 [  r                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
& v, D5 ?$ T2 M) u) B2 r" N                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */- D" Y! r* N. {! Q7 x: @
                /*     %帧数量=100 */
; F7 _2 O2 x# U4 \" w                pFrameSync.isInitialized = 0;% r) p+ H0 u8 o$ Q+ L2 v* A
1 N6 X- p6 c6 d5 a
                /*  [EOF] */
$ D8 E. j4 h/ B                /* 前导码长度是13 */5 S% v+ b5 a" P# b9 z2 _0 X
                /*    %qpsk */
1 u! ~* ~" J4 ^6 O                pDataDecod.isInitialized = 0;
4 O7 x0 D( f$ s' A: b
0 s4 T6 _* J/ ?                /*  end */
6 d( F0 t) j  a0 y. m5 U6 p1 J                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
& l1 {2 v) u  l# l+ a4 ?                /* Convert 3-dB frequency */
- w  z1 r! N( p+ K( h- m2 j. X7 v                /* Convert 3-dB frequency */& |* Q- I6 |' m% Z, N$ v
                filtfilt(save_buffer, usable_left_filtfilt);
8 I( o, ]- z$ e( X' S$ Q                for (ixstart = 0; ixstart < 81000; ixstart++) {
# N( t9 s. h& a' B8 ~                        usable_left_filtfilt[ixstart] *= 2.0;$ M2 a( X6 P. F5 c/ n4 c/ C0 a
                }, y  g: t- m  {! E- ?+ i
# V' i$ N$ S+ j. X* E+ G, F" M
                /* 注意乘2,处理幅度 */
- i# y* R. c5 p$ ~, z1 L9 ^                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
! c" }+ t1 W3 }  T( a                /*     %% 行列转换 */
- Y0 }1 a# f/ |# E                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
. ^1 L, L0 S* e$ h. W$ @                for (ixstart = 0; ixstart < 81000; ixstart++) {6 Y4 N; e/ z; ]; {8 ]+ Z
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]" i$ T" _3 d& O& K
                                        - yiDuanShuJu_mean;
0 h, x; n4 |9 r8 X# t* j7 C0 D                }- s; y/ s0 y+ u8 ?6 l0 C

, q. C1 w# C7 |- T$ t2 @2 d3 O- U                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */9 {8 O/ b7 \8 u' N% D: b: s. v/ w
                ixstart = 1;6 N1 B# P" P' r9 }6 O3 f3 ?8 [! W
                mtmp = youXiaoShuJu_QuZhiLiu[0];
0 G. q8 a2 C4 @/ Z                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
8 i  }- T% Z/ M2 W& F                        ix = 2;& f- y3 U! N! v
                        exitg2 = false;
1 x! `- L  @9 V                        while ((!exitg2) && (ix < 81001)) {
% j2 x6 k0 X& q; n# R8 s( z* `                                ixstart = ix;) s. M% J2 k* F9 Z' ?7 B3 _+ Y) z/ K! M
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 K4 [  Q- K; k2 v! R& w& Q
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
6 }6 v6 m3 |4 Q1 x; f                                        exitg2 = true;
  d" G* @. i2 d/ U* }                                } else {; X$ k; |6 v# |& e
                                        ix++;* O5 C( K8 l' I- G$ a" ~
                                }
! M& b/ i0 x/ @+ t$ R                        }
! q, {, X. h+ i) ]" k                }) B# V* g7 c1 Y  L9 K

; o& ]& M' r: f2 Q* M6 P; {& o9 P/ n% s1 R                if (ixstart < 81000) {& ?9 v# G& `/ L$ k8 \, K
                        while (ixstart + 1 < 81001) {
5 V, G( N; {- T; F                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {% w4 C# }7 [2 T4 s$ A
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];3 T4 ~0 v& i' t+ q  E/ n
                                }* H4 F% M" i" F8 t; Z8 o

* k) t- l; w5 b3 N                                ixstart++;
+ c; R+ F! S2 X9 X+ k# B8 ^- p                        }/ }' C8 T* ^- j' ^/ V* i
                }
8 s3 q% ~$ Y+ b- g) S' v; s/ c" Q  R0 f, U# \
                ixstart = 1;
3 n7 R; S+ V! y0 [4 d( t. J9 I                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];1 J+ |& A5 E/ l8 ^
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {0 `* X) h% [8 s1 I1 I
                        ix = 2;- }  P  a! R$ s1 q* {
                        exitg1 = false;: `+ O2 @( F' f6 ]* V1 B" D
                        while ((!exitg1) && (ix < 81001)) {
: i6 R5 D  Y+ p2 t0 q                                ixstart = ix;! i1 ?' n3 U1 L8 z, n* c3 Y
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {, v( x8 |# X9 o0 I$ u) q+ M
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
1 L7 }1 J5 T" B: I                                        exitg1 = true;
+ ~3 k& I# u- j7 F4 k! b                                } else {* U) E9 E& Z- Q+ p, R
                                        ix++;- r8 A+ x5 ?$ Y6 w' ~
                                }
$ m( Y0 _3 w4 |/ u+ l                        }
$ i. X/ I7 j! X1 Y                }2 T. S- R% M1 i4 k, }5 r
# l! F2 G) Y) {) _
                if (ixstart < 81000) {
+ D: g$ N% C. Z% G2 Q                        while (ixstart + 1 < 81001) {2 Y' O6 b* \8 P5 S8 r) V# {
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
' r8 ~9 w; P7 p                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];0 j- `4 u4 K9 C
                                }
- u( u0 Y/ T! @2 A% R4 t) T
% t: Y' |1 w: W' R4 Z                                ixstart++;9 \; h, h) v6 d* b/ d
                        }/ l5 q7 w* y. ]
                }
4 U+ {5 ~! i8 L2 }7 r1 n, g! ~# Q  S9 ]
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
8 M& _% o5 I  m, m                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
* Z$ g1 F& W+ k" R                        yiDuanShuJu_mean = mtmp;# @6 N. _- ~% T( [+ J! L
                }
% s7 }2 [3 J8 ]! E
& o. `/ B# ?" y3 b! i% h                /*  找出极值 */
+ ?& M3 e( b' S: {5 g5 U* H                for (ixstart = 0; ixstart < 81000; ixstart++) {
; C( C7 ^9 p) @                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;$ e' Y1 e0 `8 l1 c/ B) e" }
                }
3 p- S% r$ q* I; P: h( D
% W* \# R( b  V1 B7 M- Y  d. t        --------------帖子字数限制------------------9 U2 ^* I" Q: }. D
}
6 y5 h+ p% Q/ o3 o1 G  N# t
+ f5 v/ h" j; V, D, D! s5 o/ x/ Z5 ]0 [4 S- W

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 11:26 , Processed in 0.042582 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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