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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
9 y8 j3 o6 p" `: {: N1 |& A5 t9 f( \& p
8 D: V5 J. d/ ]  r- R  z0 M" M各位大神:6 ^0 R" k& Q8 y6 a4 i1 E
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)1 b4 \& n8 A: v3 G* z
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:0 Z0 r" D2 T+ N0 C2 _- a

" A: R! `$ T& F     5 Z  g$ l" K! s2 t
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。7 h& Q+ L' _$ y+ [% m0 G
' y9 t+ j0 Y! }% @. y5 U' ~
并没有其他线程4 b* l. f& f+ B% C7 E
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
) K# C% L: R, F& @也说不定是和堆栈有关系。。。。。。
, i& T" s& t% P6 V+ N6 W( S0 b& e请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....) A; P* p) G& {- l. Y* K
$ b2 Q8 }4 _2 {1 C( d1 i2 S4 E
1 ~" `7 w1 z, v

) V$ F7 e5 U+ q1 T: I我也很绝望啊,希望大神能帮帮忙,感激不尽,!
( K. W8 o; C, Z0 O
  O3 w' E+ l/ b" u8 y8 J; v7 R9 A4 f, r2 s4 n7 o3 Q. K
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];$ {! ]; t. g0 K3 U; s6 @
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
. f5 Q7 Y5 S5 B" e/ Q/ a" ?- U# K9 q) O+ O( O
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(1 y( |  o9 v% O# F6 t
                const double data1000[1000]) {/ k5 x( a+ E( J; i2 u
! F4 B1 p1 a5 i/ H$ I
        int myfuck;9 E+ w" V" `6 X7 Y( D
        double yiDuanShuJu_mean;
6 {$ ]( g8 r1 \/ P2 B& S        double yiDuanShuJu_LowMean[1000];
. M% j, a/ D6 K! A6 A, S; _# V5 f5 ]        int ixstart;+ ^, |0 v0 P) q1 Z% N- o
        double dv0[1000];( y' w' a' e' F" R0 P* w: W8 m
        comm_AGC pAGC;9 }$ s6 F, C% b) k
        comm_CarrierSynchronizer pFineFreqCompensator;' a1 _/ w% u0 B* s  A
        dspcodegen_FIRDecimator pRxFilter;
; w8 M  r/ l( i0 L        comm_SymbolSynchronizer pTimingRec;- t$ E/ y: V5 ?. Z$ ~  `
        comm_PreambleDetector pPrbDet;# H. M6 S* Q( j5 Q6 u
        FrameSynchronizer pFrameSync;
( Z- y# g5 ^3 C# G        QPSKDataDecoder pDataDecod;4 a0 J% h9 {# H7 I2 o9 k
        static double usable_left_filtfilt[81000];8 M* o# M0 T, m6 e4 b/ X
        static double youXiaoShuJu_QuZhiLiu[81000];9 ^# f5 f, A* V
        double mtmp;
( o' g/ A4 N( y- i) y        int ix;4 p2 X; s6 a* u% Z. Q) h9 \; M
        boolean_T exitg2;) H* |5 \' ?  _* L6 b6 z
        boolean_T exitg1;1 y4 V) V: Z8 x! p
        double YiZhenShuJu[800];  s: F' l, r2 \$ y& u+ {
        double dv1[800];
6 N7 L' k! U$ Y; W5 C8 t3 t
" ~3 x* ^0 g* T! O3 Z& A$ ~0 {5 [4 I! ?+ K. a8 @7 M* N( s, x$ d+ E
        double b_YiZhenShuJu[800];
& F/ ?" V$ @7 g0 @$ Z! H1 c" _$ E        double I_filtfilt[800];0 e1 o( N1 K* I4 h3 ?
        double Q_filtfilt[800];
2 {# S9 s! v3 J6 u5 n        creal_T b_I_filtfilt[800];
8 m  l) J7 ~7 m$ K2 ?# P3 A* S        creal_T b[800];
4 R' j- P  X( N7 m( W  ~% d6 I+ B% j        creal_T RCRxSignal[50];# I% j( V8 [( l) p* U7 y8 a9 w
        creal_T fineCompSignal[50];
- Z" M$ T7 T1 G6 W9 x/ w        double phError[50];. R$ I& x! [+ k7 F! B$ `! q8 j& l
        creal_T timingRecSignal_data[28];1 }, ~* [9 d% P5 O. N- F
        int timingRecSignal_size[1];
. q3 K/ g5 T' T' T) o        double prbIdx_data[28];4 U. ]- i$ K1 _; K6 L
        int prbIdx_size[1];0 H- _9 ?: d3 O( p1 Q% j( G! k
        double dtMt_data[28];
. Y9 ?- P9 x) D+ _        int dtMt_size[1];
+ O& Y! T- L$ V. \; `+ l7 o# c        creal_T symFrame[25];
/ f* m) a6 ]( K; ~; _0 t        boolean_T isFrameValid;
5 i( k* Y( e5 M  s4 ~& F' x: Y/ U        double unusedU0[3];; k! c7 V3 {: s  x' m) F5 H) b1 o
, u7 U9 `1 ~# v3 g$ ~9 z" P
        //调试过程中的变量
  x* x& _% ^# g        int  enough_data;8 I7 ]) _4 a# Z. e  p0 y9 z, B
# T6 z+ w' ~- r: s5 K
        int enoughDataFlag;2 f6 X. c% z7 Y: A% G
        int yiDuanShuJu_mean_int;- a; D" M' |& c8 N
        int int_sum_dv0;
! H7 r9 G' B9 z. x        int oo;/ ^# A! y' m0 W3 f& i
        int ii;
" N6 x+ o; C8 e8 R2 K        myfuck=10;7 p; D' s7 e: D9 S8 s& f( I0 }
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
% M0 j/ t9 T& o5 c/ h& A        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
+ }: a0 U% J9 w, c1 A- }7 C) M4 K9 O/ ?: [5 j+ K
        yiDuanShuJu_mean = mean(data1000);
& z9 z* O) I' G. ~  N$ R' z6 t  D) r! {' |9 D! c  E( e  t: b, B  j
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;9 k% i: y0 W" N' I% t# H" s) Y
        UARTPutc('A');1 R3 G% E  _* z
        UARTPutNum(yiDuanShuJu_mean_int);$ \( h+ e+ g8 F, Y: g
        UARTPutc('\r');  `* U6 L  `7 F  r: P
        UARTPutc('\n');
2 {4 y% y  k" }" G  P: t: ?. v0 h4 X  h
        for (ixstart = 0; ixstart < 1000; ixstart++) {/ ^% x3 ]: c2 H) X  t& r. ?" T
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;3 V  x1 p+ U' Z' v* T
        }
- k6 V" ^5 O, m2 y9 p% x( y/ L5 I6 [8 E2 q/ J$ R3 V
        power(yiDuanShuJu_LowMean, dv0);( n) W3 y' T, |' }1 S4 b" q
3 x; S/ _( O9 F7 x7 n
        int_sum_dv0 = (int) sum(dv0);" @$ I+ W* W2 B
3 n& @6 o. L( {% D
        UARTPutc('B');1 R) y/ x# w6 f  W$ D! I
        UARTPutNum(int_sum_dv0);
7 f; T. M; t! x3 R: H& m/ s6 f1 X        UARTPutc('\r');6 o. A8 a3 ~* X3 ?( D& p* s
        UARTPutc('\n');
+ U5 `/ ?2 m2 ^1 }1 \' e: y7 \5 q+ l$ [3 u) N
//        int compareFlag = int_sum_dv0 > 1.0E+8;
3 b3 |5 Z7 g4 V" s) C$ F1 Q
) U7 L# [2 o% t        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?2 o0 p/ Q) L  c4 {2 @$ R
                UARTPutc('C');
* U3 g% |5 b3 `6 Q                /*  比较信号能量 *// J. A, w. U, e! d: U+ H, p
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
3 M& j! ?( o9 ~0 Y- W//                yiDuanShuJu_mean = 1000.0 * youxiao_k;- Z7 |- N3 K- \1 j
//                for (ixstart = 0; ixstart < 1000; ixstart++) {" F! P9 \& ~  m7 s, V
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =# c" g# L; S! _- q
//                                        yiDuanShuJu_LowMean[ixstart];1 M$ s2 I* x7 d5 J6 _9 v
//                }6 f/ [7 d1 \- T0 X4 n
//5 A4 d- k" H; ^6 `
//                youxiao_k++;
; |- p. P3 t2 y" h& J//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
7 d1 |: @$ Q! }0 G//                        /* 感觉要取21个数,即0-20, */& e' B# ^$ E/ g6 m
//                        enough_data = 10;//有效是10,无效是0
! `" C1 ]8 C* B5 u" Y- F- p9 {//                }
6 o  C5 T+ q3 B( `: T/ r. y        }
2 j6 a/ b8 Z# J" s4 p7 M. U# h7 b: y3 f( Y8 G, D
* x" c# |: p- B: p
        enoughDataFlag = 100;
8 P- N5 h- @0 u* L, O* z0 {        enoughDataFlag = 1000;
: ?; V/ E% A' [! a        enoughDataFlag = 0x02;& s; [* q. c4 E) E3 [
        enoughDataFlag = 200;+ l' B. d( r1 z! V
- P5 y. L( x4 k  l* M" U, w
        int myfuvk1;
& L' D4 l# ]' V# j( S: i        myfuvk1 =11;
( ?" k. S  @+ ^6 A, Y
! f% I! b- T3 K9 G: c9 k, d( ?* [$ W4 ?+ o6 |6 Q# W3 I
        enough_data = 0;# ~1 X" O" c  Q4 v# e
# z% E0 Q. s! i9 y4 m8 |
//        if(enough_data>50){
4 `# n" p; w& m3 c2 a$ p# M' b//                enoughDataFlag=0x01;) w) s2 _' L+ F& Z) Y$ k
//        }else if(enough_data<50){$ m; _+ m5 Z6 r. k+ _, i
//                enoughDataFlag=0x00;//0x00还是不行
- Z: {( T2 Q& c//        }
" k; R: F4 d+ \
2 j- x- b. R6 \* s- p) e
% F( Y) a/ P$ n3 a, b5 r7 w        oo=10;
" g0 K! t. L1 M3 S5 U# X! U        oo = oo  <  5;
3 V& V7 C3 N# Y        if(oo){
2 f- V. @/ d4 W. c                ii=0;
$ B# |: ~. w4 k; [0 }        }
$ W% R# ], w  A" {& |        if(oo  <  5){
, v, _* f% q7 E# S4 y                ii=0;' z% ]  y  c4 w" J1 M7 B
        }
% B) W4 \& y- N) r2 x5 \/ \        if(oo  >  5){
5 H& I* q. D0 w1 k) s                ii=0;4 T, D: d, ~  [
        }* D" }  j1 L1 {% z( o) C

4 N& f- F& Z& O; w$ Z3 F% B        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */3 ~5 Z- h) @( m8 m
        /*  如果数据足够才执行主程序 */
! U. K  J  ^* K: x" S" W% R        oo = oo  <  5;- h* t% |5 |+ i+ Z! E
        enoughDataFlag = enoughDataFlag  <  5;5 k4 d$ l- U1 o: @$ T2 e
        if (enoughDataFlag  <  5) {6 r/ k! w7 I0 S' i* z
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
/ \, O- E6 M. A0 e) Z                AGC_AGC(&pAGC);6 s  T( q# D0 w6 j' i1 q3 z, F
- ]1 H; r' A6 E, N. e  h
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);) T! L: y" M1 _, x+ U6 P! @
                FIRDecimator_FIRDecimator(&pRxFilter);( |5 {  r/ R% Y. j, {
6 I6 D" y/ ?  }. h2 j6 g
                /* Downsampling */9 n# w0 f+ l2 ~* K4 D
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
2 Y5 J  [) F# E, H6 x% i9 y" D$ k# J) e  F' e$ M
                c_PreambleDetector_PreambleDete(&pPrbDet);: U2 A0 n) u+ _( M
  A. ?6 Y% ?# e  y7 X6 N+ z
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */( {1 p# R0 I: o" g$ \$ R
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
: F/ J8 R1 A; }/ j) w$ J9 q- r- i                /*     %帧数量=100 */# b; a! R  |$ v2 t4 s( T8 n0 u8 R
                pFrameSync.isInitialized = 0;
; e; k" _; D) Y5 _) v/ ?% m
( X: C! D4 a: b+ ^6 R                /*  [EOF] */
2 I$ ]9 f$ w% M6 {                /* 前导码长度是13 */8 o/ D0 @: f$ p) C# j
                /*    %qpsk */" s4 T( S, F  i
                pDataDecod.isInitialized = 0;
1 ^: h& Q4 n5 z/ p1 y7 \% e4 U# l' x
2 V8 T( Y& ~# Q, ^3 r6 ^. Z' r* M                /*  end */
0 N# }7 b7 ^2 m7 C8 U                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
. ^! S5 l3 c& @3 o+ v: g; Y8 v                /* Convert 3-dB frequency */' p) W8 p1 I- x& g
                /* Convert 3-dB frequency */0 E6 ], t3 a6 d4 T4 ~  l% {
                filtfilt(save_buffer, usable_left_filtfilt);
& T; U6 E. p! ?6 ~" U$ ?/ k; y% q                for (ixstart = 0; ixstart < 81000; ixstart++) {
! c1 s( \+ Y" J                        usable_left_filtfilt[ixstart] *= 2.0;
( c0 l3 c; s) W# E! o* x, S$ b                }1 t+ w. N9 Q5 `& s1 g  H

% x+ T3 G. ]# V                /* 注意乘2,处理幅度 */9 ~! Y9 V, L7 Z
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */; ]- u9 L. t" z/ w: h
                /*     %% 行列转换 */
8 Q( {8 }3 P' o% v- Y& R3 E                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);0 _5 F8 C/ M3 [) l6 C1 K9 y
                for (ixstart = 0; ixstart < 81000; ixstart++) {: o' H* G0 t) k7 h3 V$ U8 A' `
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
( B3 J5 h, m# v4 Q: Z" g                                        - yiDuanShuJu_mean;
* U/ d4 x+ V: s) @                }
# |$ O' a, Y# o2 _1 f, s0 e% u+ {6 X" Y; n  [- }
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */" R5 w# G& y5 Y% C6 y* |
                ixstart = 1;/ q4 G4 i4 t+ r. U- u: d# }/ _4 t
                mtmp = youXiaoShuJu_QuZhiLiu[0];
, q; n+ V8 w7 v* O5 c4 `: b5 N                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
& u1 {( t4 Z3 b  S5 o                        ix = 2;
+ k% ~" `. W8 }, i5 ?                        exitg2 = false;
6 u( q3 }1 B5 G  M8 w( e" y                        while ((!exitg2) && (ix < 81001)) {  J" y% }# X3 V! p; U1 \
                                ixstart = ix;
" V# \; C7 N' d                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
/ S; H! I3 C& W% ~2 U. b                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
& z9 s1 j3 a; p0 G: G, z5 B2 m                                        exitg2 = true;
* R$ h) q0 m+ z; M5 |                                } else {
9 C' a4 R, s9 l2 ~4 c                                        ix++;- Q$ v. z1 ]% _1 Y3 t+ C
                                }7 R3 i0 j5 X7 V
                        }
9 I8 d1 Z0 ^  s0 C' D                }
1 l+ E6 J* d; l1 Y3 ^$ r
4 X6 s  r' P3 s+ ]8 }                if (ixstart < 81000) {
7 }' H) P, U. v4 I                        while (ixstart + 1 < 81001) {
% i* c1 J# x6 Z9 v' ^                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {4 m. t' T6 s3 D' E/ I. ?
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
! o; U( T1 a' k/ e, _) V) ^                                }) O! A9 G$ }- B% f# Y

9 @; q5 c4 n( q. M# l- ?                                ixstart++;
" o/ c: ^3 A) I/ k' v1 g, k# J& n                        }2 Y  u  c& p# B
                }
. ]/ |, E( ~/ V4 c$ x, M  e
6 y4 {1 [3 q4 X# _: H8 N                ixstart = 1;7 m+ `$ U- [$ \1 W
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
" L5 e# y  l7 z5 S1 M0 x                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
" o& w2 ]  Z5 H3 o4 S# y                        ix = 2;
" S6 `, u6 q, {+ |0 P! L2 _                        exitg1 = false;7 \5 k0 {7 C: u. m4 t: Y% }
                        while ((!exitg1) && (ix < 81001)) {6 Q. z4 M; A8 A" x( S+ d: ?5 U5 _
                                ixstart = ix;* b% \! R6 Y  G# m! y
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {) E1 n8 Y/ w3 [5 ^3 J* i
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];% R  H2 y: F7 f7 a$ M/ [
                                        exitg1 = true;2 C9 G# e" ]; o: T9 D! ~" [: |, R
                                } else {; k; p9 i0 F7 C. a8 n; k
                                        ix++;5 Y- m, [5 U+ ?) ]" a. A
                                }
" ?  H$ V) K6 d; Q6 A! X4 Z                        }
( U& e; G5 y/ p  D6 T2 _) E                }
8 \+ l8 @0 ^5 T' Z/ O
& d! x1 L9 V# T" w. |2 Z                if (ixstart < 81000) {, ]) e/ p  d$ E, V7 Z' b8 C9 E) C
                        while (ixstart + 1 < 81001) {; }( U" _* x: S9 y5 V* p
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
9 J8 s+ A% E' z, I- p( B                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];5 b3 d* S& M6 h9 r, r  Q
                                }
4 A/ X* X4 C3 e: X1 Q3 h& q% L( ^) C- _
                                ixstart++;# R$ x2 U# ?* ?6 M/ T7 Y
                        }
3 b( U* E1 N1 N0 l0 ]9 c* g                }. [! f- P4 ~7 ?! u3 S

. l; c8 N- D$ x2 r/ q- m$ F! Z+ L                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
1 h8 A- g; x8 p& V% ]3 t                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {: U8 l( E- i! A% U0 A
                        yiDuanShuJu_mean = mtmp;" v- _( j  g. e6 B) y+ q
                }
2 z4 e0 s: d. G1 w* S1 v3 ]4 p, b2 F1 `+ q$ U8 y4 }: u
                /*  找出极值 */
* U0 H' a; _% \4 a; X9 G, x                for (ixstart = 0; ixstart < 81000; ixstart++) {/ e  j% ^, f$ x  R; e
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;- u7 e9 B' m) F2 u2 t5 L
                }
6 I8 x; d& T1 B. K1 ~
, q6 Y; {- o1 G, Q/ m9 K/ A+ q) `        --------------帖子字数限制------------------  z& m- d0 z. [& J2 W; X
}
+ Y! P3 K, @8 n" h5 x3 q: C8 e6 I  n6 T/ m0 w1 r# D0 a4 |; j
- f& O6 Z. o$ f- o% {- |# X: R

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 23:38 , Processed in 0.060685 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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