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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 2 Y$ z! U9 A9 M' I" c
- {' S6 G2 q9 q7 ]+ h. a
各位大神:/ d2 c6 ~0 N' J! L, p# e  a; d
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)  U: h* }& m$ `5 Y$ [  k
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:. r2 [3 J' r$ k
) x! i& a5 h% P
     ; f. q" ~' ?! @3 l4 r
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
, L* q6 w0 x; R# x8 H1 q: `0 P3 Y* l# r' H* S! p, c# K$ x4 e
并没有其他线程
) X$ p) A& m, g3 u5 O反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
$ P& t. B+ \. v  ?也说不定是和堆栈有关系。。。。。。% f" V; g. S* [5 H
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....- Z% m5 ]& k. ^; c9 J; L& Q8 u
8 J" z; h' m* B7 Q1 B
7 G; i* o5 K: X; X: ]# k

) N# H. i0 r( R我也很绝望啊,希望大神能帮帮忙,感激不尽,!
- W1 T- Y, G5 L* Z0 b: Q
% o* y& b' I" r) @: _4 v
) I; P8 d/ N! t6 h. O: O( U) K! }: W附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
0 F  F- L0 u' U  A# s9 ~6 ~  O* M0 {        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
2 l) I. o. r" @7 @7 k; o6 u+ m6 B, q4 Z! H5 T9 H
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
. |% C7 \7 d' X4 m; I6 N                const double data1000[1000]) {' [( X; {$ d1 l* f6 N: h
$ C' U% J. u, _3 v; s5 d
        int myfuck;
: n# X& T# t0 e* D        double yiDuanShuJu_mean;
" i4 y! e- o! |7 u! N/ z6 h        double yiDuanShuJu_LowMean[1000];# ]" V) S, O5 d- t
        int ixstart;* y8 u3 J$ ^/ [0 q# R. T$ L
        double dv0[1000];
. [, Q: |9 G5 u1 O4 [        comm_AGC pAGC;
+ m1 _( ]% ^: F$ d7 n7 h        comm_CarrierSynchronizer pFineFreqCompensator;$ o& I1 R7 O5 @% T( h
        dspcodegen_FIRDecimator pRxFilter;
3 k! B) t: ~# H- n        comm_SymbolSynchronizer pTimingRec;* N5 o* Y6 ^' ?: c
        comm_PreambleDetector pPrbDet;
5 [% v' H. t. j' Q; b& Y        FrameSynchronizer pFrameSync;
# c  K; w9 n% R        QPSKDataDecoder pDataDecod;
. @. r% w( g# h9 e3 F3 ]( X        static double usable_left_filtfilt[81000];$ f8 ]9 ^. J0 O/ }4 u! V
        static double youXiaoShuJu_QuZhiLiu[81000];
. T5 Q. {; W( J% c; r        double mtmp;5 c6 Y- \$ @2 G. ^
        int ix;
9 x" q  Z. W9 ^+ O+ b1 ]2 V        boolean_T exitg2;
- H  F. {8 {6 Y+ k; J        boolean_T exitg1;
( D) k1 X7 q% F! ^3 P        double YiZhenShuJu[800];; c- u9 d3 L  f  ]( n3 A
        double dv1[800];, W+ O+ a* z6 v! z: z% J
8 r% R! _2 x4 X: ^! b. M
/ D9 v/ I, h  D7 a  Z8 B
        double b_YiZhenShuJu[800];) D! X0 M* l/ P
        double I_filtfilt[800];
! N& v8 x  \6 |        double Q_filtfilt[800];7 F( L( J" l- I. u, F( B
        creal_T b_I_filtfilt[800];
4 {( G; ?( k( j# K$ x- @; p- Q        creal_T b[800];
3 m1 ^2 }9 ^5 S$ L8 o" x, q        creal_T RCRxSignal[50];
* o0 w* b2 X8 n" b4 K4 F$ D% _        creal_T fineCompSignal[50];
- l1 N5 U1 K( E- [) |) r0 y        double phError[50];% ^: X# m: W2 k+ b
        creal_T timingRecSignal_data[28];# c8 L( O/ x( b
        int timingRecSignal_size[1];3 v+ n) v: d. f- J9 g; T5 j$ |
        double prbIdx_data[28];
3 Y3 M. r, D5 \# v& }        int prbIdx_size[1];
3 ~0 o/ ^  a: g; n9 r, C1 B+ X        double dtMt_data[28];* C. h/ P  N& ?
        int dtMt_size[1];/ x9 E; [, ?- S
        creal_T symFrame[25];# ]( R# {2 {2 n- b7 [5 n
        boolean_T isFrameValid;4 |: j/ o- Z  K0 x0 b
        double unusedU0[3];! z& ]; R& D7 D' L: W

& |1 f& V7 ?# o        //调试过程中的变量7 q$ V1 d) _( q" l/ Y$ P; J7 [
        int  enough_data;# d* F5 t+ e- L
4 G0 C7 t& ]7 L+ d" O6 \
        int enoughDataFlag;. J. Q  c: u4 B  }( x. g. w
        int yiDuanShuJu_mean_int;, ]4 {4 e& g' K" P- j0 G  |
        int int_sum_dv0;" i4 `9 b9 O! b  Z
        int oo;
' Q- ?1 R! i( f; i0 k1 q        int ii;
0 h9 d( o1 M2 l        myfuck=10;- u1 _  G( r# H: [* ]
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */* h1 u8 d& x4 B( h- w) E$ Z
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */1 X* J" W, p, }" A' z8 K
: H( t% S. X0 D( D# |
        yiDuanShuJu_mean = mean(data1000);" w; {- \' I& e* X

* s: q4 `9 N- u* M0 s7 O        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
3 c) v/ Z  e3 ^) Y9 }1 W        UARTPutc('A');
  q" d' T, Y! a4 X1 b- K        UARTPutNum(yiDuanShuJu_mean_int);) N5 r3 _' g+ J, ^6 p! c6 x' x
        UARTPutc('\r');
) L- g  |; J/ x        UARTPutc('\n');
" s" T( w% X: I% C5 K8 H4 M, ^- k, B, s
        for (ixstart = 0; ixstart < 1000; ixstart++) {# ^$ ], R4 z6 h1 P9 O' c
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
9 U- q6 b$ A& K$ f6 @8 O1 ~        }& I5 z$ w9 s2 k2 i, F
- b7 a5 N; O) I" J
        power(yiDuanShuJu_LowMean, dv0);2 e7 G* _. C* v. q* A
4 a4 P) E- p/ f$ n$ Y% d6 K( p1 b
        int_sum_dv0 = (int) sum(dv0);9 N! E5 C+ g/ j" m- U

6 B1 d  }! h* E0 }! c        UARTPutc('B');
8 Z; }) v7 o( |: i* n* {        UARTPutNum(int_sum_dv0);
  B: K, `4 t! _/ z& c2 s9 M2 g        UARTPutc('\r');
" b, E" y5 T. w2 M! [        UARTPutc('\n');
* z8 L( J" R! I* ^9 H6 w; s/ N0 S. f. ?! n5 E8 q$ G) T$ o, X
//        int compareFlag = int_sum_dv0 > 1.0E+8;
# k" J) t; d( r4 N9 o3 U
! \. V6 Z) w3 g5 ~! ^        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
! W. x6 I. d# K# A0 h) A  [; ~                UARTPutc('C');% a. K* ~; Y* \0 \. V" i$ [3 N: |
                /*  比较信号能量 */
! g* n4 t" l5 i                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
8 R* A3 D4 n) k' A! W//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
6 g9 A" f. X0 ^. G9 K//                for (ixstart = 0; ixstart < 1000; ixstart++) {, z  G3 {+ w8 C) i& [
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =' C" ~1 m0 P% G* R& i
//                                        yiDuanShuJu_LowMean[ixstart];  }: r2 ~" ?; R+ p+ X
//                }3 m. I6 _0 {/ M
//
! |0 _& b2 f2 V& U4 x0 K3 x//                youxiao_k++;
3 v' I" Y2 N! L  ?( ?# {' q, F//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
& X; r7 E1 @% I5 e5 B//                        /* 感觉要取21个数,即0-20, */
0 u8 N. J) U7 q" V( ?: C- Q//                        enough_data = 10;//有效是10,无效是0
3 Z2 e! e1 w$ J//                }% d" z% W/ d- m) i' F; C
        }
& U9 k: F* e0 n6 [! k& V; z: ~. N% y- k; K+ [
7 F% ?9 ]2 o! u* @- g
        enoughDataFlag = 100;" G2 S3 Z/ i+ W9 |9 s: Y
        enoughDataFlag = 1000;! p6 R2 P: a& t+ E7 M
        enoughDataFlag = 0x02;
. }6 M- f3 G$ i8 ^' p  m        enoughDataFlag = 200;
/ |  i. O; ^6 H2 c) B* K& G
; Q/ \6 D7 `, ?2 [7 Y& c        int myfuvk1;
# S! F$ `$ f. b/ T, k1 E        myfuvk1 =11;7 S: p1 r7 z4 w# v
! Y8 |: _3 e3 L) X& j" q+ b8 m/ N

: \7 l1 l4 m* s0 d        enough_data = 0;6 u0 O) A  _# H. Z, j1 g$ x8 c# m
0 \: O) b3 p* ^
//        if(enough_data>50){
7 Y' x+ L' k4 s, ?//                enoughDataFlag=0x01;" [0 z2 _8 ?2 f2 s
//        }else if(enough_data<50){. m6 Q' x9 ?" b" z& }
//                enoughDataFlag=0x00;//0x00还是不行
0 l2 v5 O% H* @2 z. G//        }
- z0 X$ X) t! S3 F! T  Z) p; m; }
: V2 @  V0 p6 E6 [( C
        oo=10;
! f4 R7 _: R7 i+ d        oo = oo  <  5;, r4 M" ?% [& O/ D! c+ x
        if(oo){# V) q9 {, J8 f+ B: k  \
                ii=0;
9 c% [+ E7 u+ ~( P: D2 W        }! Z2 Z2 u0 P* v
        if(oo  <  5){/ U4 {# Z1 ^# n, d
                ii=0;
; J, F5 T2 g4 Z9 X( s8 x) T0 l# E        }
+ `: ]) R- `3 z: N6 b        if(oo  >  5){
+ l2 l" g" W- g, W0 I                ii=0;
5 n9 b  f1 e6 T0 u4 F+ R        }/ y) {. G8 W* n$ H9 Y) }

  o& w3 J1 K5 G        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */- T# p7 T# Y2 |  Q" }
        /*  如果数据足够才执行主程序 */
  M& n$ c2 \$ _; d0 O" [' I3 M+ W) h        oo = oo  <  5;7 d6 O$ @/ i2 \$ O. X
        enoughDataFlag = enoughDataFlag  <  5;
) L- C$ S( f6 O1 s8 Z5 `        if (enoughDataFlag  <  5) {1 o; @! Q4 l1 q* S
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0# C3 K7 L9 c' L) h% i$ I0 W% h* T0 ~
                AGC_AGC(&pAGC);
0 O& E, J1 d, U- K; @
! e% U5 ^' ?% D5 g7 j                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);7 Y# C3 s. \- `
                FIRDecimator_FIRDecimator(&pRxFilter);) ^0 X/ C4 t2 D" E: G7 v  O
9 t# K6 ]. g5 ?: t7 v2 ]! t" _
                /* Downsampling */  V- }4 w  f0 w+ ~$ c8 b4 Z
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
% Y3 A: X0 P" U2 v% d' L
. p: X9 e2 z5 u% h) S0 u! k2 s$ L                c_PreambleDetector_PreambleDete(&pPrbDet);7 b1 M7 e0 Z- r2 z4 c6 G/ W

( i! S/ l2 z5 K, N5 r                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */) y) [7 j2 s7 o
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
% }* h& o/ d1 E7 l) S' a* m( p' b# K( G  W                /*     %帧数量=100 */4 \( l1 U$ T1 M& r/ \
                pFrameSync.isInitialized = 0;  \) L1 E& }3 c: u( k# D3 }

$ E' H6 ]: l: A/ W                /*  [EOF] */6 }5 z3 b; O- X' N9 Y
                /* 前导码长度是13 */, ^. o; t* A& R0 w3 {! q  p
                /*    %qpsk */' t% J6 Q" ?. I
                pDataDecod.isInitialized = 0;
0 ?1 [8 D/ Y+ X- e3 S, o
$ h4 U2 P8 n4 T5 B' R6 J- e                /*  end */
5 ]! E: A- C$ D                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
8 k' o! j5 s6 n+ o5 }( N                /* Convert 3-dB frequency */8 y' T* {, K4 B1 L* C  P3 k
                /* Convert 3-dB frequency */% X3 s8 |- t+ H
                filtfilt(save_buffer, usable_left_filtfilt);% b) t" Y7 c' _$ }
                for (ixstart = 0; ixstart < 81000; ixstart++) {
7 N6 C7 d7 B, ^$ K- j                        usable_left_filtfilt[ixstart] *= 2.0;$ M5 p: L5 h: g9 g, K! L
                }
* S$ n1 r; N# R% z  N0 F( h7 e8 H* b5 l, \4 G! X
                /* 注意乘2,处理幅度 */9 ]& N, Q1 v* Y- c" j: g( ^
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */2 C) M3 j9 c" i3 M. i+ P. B
                /*     %% 行列转换 */+ [0 L: u/ ^' `( G
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
% U3 J: x0 S. ^0 q$ |6 v; @) K                for (ixstart = 0; ixstart < 81000; ixstart++) {9 Y7 B7 L, Y" [' M5 |
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
. ^( t9 e' {5 j6 c, V' d  S% D                                        - yiDuanShuJu_mean;& {- N% a- K8 I% X5 e
                }
5 B# `* T$ B# |4 n2 W9 }) s* B- g0 L4 N+ m* N4 U
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */2 T8 z9 z8 d8 d- }) m
                ixstart = 1;1 G) @$ h9 S  z4 ]
                mtmp = youXiaoShuJu_QuZhiLiu[0];
/ v' Q. D* O7 i" h! F8 R8 U" @                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
8 R3 Z' k, i5 g, s1 c% P* [% S                        ix = 2;4 I% ^: ]  o( v8 j( }5 t0 l
                        exitg2 = false;
% V& v& g( E5 \' ]2 _, y& x2 u                        while ((!exitg2) && (ix < 81001)) {
* G- T1 j, D3 k  x/ l# }! o1 R* \% ^                                ixstart = ix;
6 ~8 u& g. r: T8 q. C4 o, U                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {1 W" o' G+ _8 m+ y0 m
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];0 E+ a! L9 ?; I: U6 k# X  m
                                        exitg2 = true;! v0 v5 D  u$ B
                                } else {
3 n" c! G/ k- I$ b4 b* v                                        ix++;+ h( U& K/ e# s
                                }
* o8 l  v* Z  O! x                        }. u0 H! J6 V9 g0 Z' z2 F
                }6 {) j2 Q: ~# Y7 y& Y5 d& u

3 o- h! {( W2 C/ ]$ m! U. W. W, A                if (ixstart < 81000) {3 |0 B$ L3 A* O# R3 s! X: X
                        while (ixstart + 1 < 81001) {
& t- d2 D0 ?1 `. Q' y: s                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
  d+ C% l" P2 r, D: H+ y                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];/ x7 E2 j# O- H
                                }  d) n' a5 [0 ?6 @0 P: g0 z

: x$ z, ]2 Z; S6 A9 U9 n                                ixstart++;
3 _5 j; u+ Q1 R) {. J  m: |0 _                        }" A; y2 b5 G/ }2 g4 t/ A* B
                }1 M) P, ]! {$ i: W, Z  F& G
5 J- S. ~1 W. ^( _
                ixstart = 1;
4 o& I# N& e1 m! @                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
- u8 A9 s" ?4 r5 w                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {2 \6 p2 D# U/ C- G8 ^
                        ix = 2;* I$ q2 Y, n. z
                        exitg1 = false;
' ]0 l; J2 s% F' o: T. O* A3 n                        while ((!exitg1) && (ix < 81001)) {5 ?+ ^0 o* k( b2 \; @' T
                                ixstart = ix;
/ g$ D! n# [# }6 I* j$ V                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
0 X4 X1 z9 h- Y' v                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
$ ~9 s& Y# y" I* v                                        exitg1 = true;/ r; L" n9 M8 F/ K
                                } else {
  h# d" x9 _  I9 p8 d. E: I                                        ix++;
$ B1 j$ i3 A, V$ ]4 y                                }, t& V" c. @4 |
                        }
  F- ]$ b9 \+ K& i2 j+ i; n- V+ j                }
, z" l7 \( {7 ?- m$ n
# l# C% h# N# n% T# Y                if (ixstart < 81000) {& D6 T0 r( r0 e9 J7 F: y9 O$ i; \
                        while (ixstart + 1 < 81001) {1 A. b# f' K- [+ D) b/ Y
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
8 x2 j) T# q$ r% \! _- v: {                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( B) C4 N3 |  C" c                                }+ O& \! n$ c% V2 p7 V. W" W0 C

' a8 Y" U0 j- c! m7 c' g' R. }                                ixstart++;
) b8 Q  u0 w, [                        }
/ j! E, v. L- e) A                }0 s2 i# ~0 e" _1 c! g- O" }
1 O$ t/ N* O# G( q
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);& V+ Y" I  l( I5 i2 R8 L& s7 G5 L4 q
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {6 O- G& f* |3 S0 n4 p
                        yiDuanShuJu_mean = mtmp;8 ?) c9 Z+ Y1 t( M
                }
9 {4 t' j* D$ h& i# ^# ]
2 `& a! {' {$ w( L! P6 q( U( J, D# s                /*  找出极值 */  u( w; a5 f7 l/ |- T
                for (ixstart = 0; ixstart < 81000; ixstart++) {# W& @+ f- H4 ^  X4 B4 U. t( C
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
; W5 A% Z' \: a/ D                }
  i5 B5 H0 D5 V) i: D. a5 u  `- q$ {
        --------------帖子字数限制------------------
+ n8 C9 V/ [+ Z7 A, M2 T}! \$ ]; z: p7 f( C* P

; W! b! E  j8 R! D( H" l5 H5 `  R/ L; u& w" I. x% Y

本帖子中包含更多资源

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

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-19 02:15 , Processed in 0.050509 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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