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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
9 @. e' a% `6 M& ]. J+ `; H% @* X  g6 ]% T0 p  M. @9 p
各位大神:
1 R1 P- |% g+ y- o+ U     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)& H6 W: n# G. ~' i2 V
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:( d# M3 \3 y7 N( v) L9 c' D

- }, l( Y1 ]1 I% F8 q9 Y( b     
1 H9 M/ m% u$ d; ~6 ~这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。# o: `1 Z+ e' _' b6 r2 p1 h! ?

; o1 K1 E9 T2 H. ^$ R并没有其他线程
; }* W5 J; c) [$ U6 \0 ~$ s& D  ^3 e反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
! W* {: R/ Q- k8 \9 |也说不定是和堆栈有关系。。。。。。+ J' E( B5 M! A" T8 Q. {
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....( |5 c7 {. I; l
- V. |0 c0 {* }
- W3 k7 [1 x/ l6 x& e

( d. ~$ x  A1 s: [/ {3 J: l) M我也很绝望啊,希望大神能帮帮忙,感激不尽,!3 f. c- y! ~0 R- L
& T, k- h/ P9 ~. ^, [. D# G+ H

7 k$ R: y9 y1 S) c: _+ ]* i, V% ]/ G附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
4 y# _+ f% O6 g& w! B        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。/ K) F4 M6 ]5 j6 ]

4 {0 K2 a& s1 O& P. _boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
0 j6 u. z5 f7 l$ J2 t7 b                const double data1000[1000]) {  Z2 P' ]7 {$ @% ?
/ i5 [- c0 [, l2 W/ H* t) }
        int myfuck;, a" A* J1 g) ~  g+ h
        double yiDuanShuJu_mean;* N( J7 q% \& Z4 ~
        double yiDuanShuJu_LowMean[1000];! _2 \4 t1 Q' a3 _! k1 a
        int ixstart;
3 D" @+ L3 A% l- O( E& ~. j        double dv0[1000];
+ @7 g6 U* `8 g7 d        comm_AGC pAGC;
5 V0 `( z" ^' }( W- L: f        comm_CarrierSynchronizer pFineFreqCompensator;
5 [$ C! g* w  b        dspcodegen_FIRDecimator pRxFilter;3 y& {7 s: b, p( b; u8 B5 f
        comm_SymbolSynchronizer pTimingRec;1 R' [) C! T6 G( R, T2 I
        comm_PreambleDetector pPrbDet;7 N& S# E. a; V- }
        FrameSynchronizer pFrameSync;2 Y+ X; P. D1 {: \& k: v' [
        QPSKDataDecoder pDataDecod;
8 V1 Z* l2 ]" s; E/ G+ p- z% p4 Y        static double usable_left_filtfilt[81000];
5 k4 c0 R- X# I4 @- K3 j        static double youXiaoShuJu_QuZhiLiu[81000];
- G3 g# u6 o. p4 L. g        double mtmp;% l8 u$ v. _5 L
        int ix;
+ I& Z* l, H& e2 u        boolean_T exitg2;
6 x% m9 l3 ~3 k6 }        boolean_T exitg1;5 K, J- u" X- R) l/ y+ q6 e0 U
        double YiZhenShuJu[800];- S+ ?2 i8 c- f- T
        double dv1[800];; b/ C/ |9 d! A4 g8 X' h
8 a1 s( T# o; T
6 c' f" u/ f, B
        double b_YiZhenShuJu[800];5 U6 X* p/ B$ l5 a. q' \5 M
        double I_filtfilt[800];
7 k5 i: V. Z; p$ S        double Q_filtfilt[800];! i' b# g0 W, k' P- @# A
        creal_T b_I_filtfilt[800];
2 P- u- z2 J$ E: f& z8 X* @        creal_T b[800];
! g  R( j2 Z* n! \* i7 z        creal_T RCRxSignal[50];
1 b8 m+ M4 s0 r- V# m7 N        creal_T fineCompSignal[50];
" i) G+ i& m# Z9 m7 }        double phError[50];
! `6 I! @( Y. G, c, y2 O8 |        creal_T timingRecSignal_data[28];3 B1 z) M7 V6 i8 x/ K* M
        int timingRecSignal_size[1];
# ]1 H; {, ~9 R" n! o0 Y- y- }        double prbIdx_data[28];8 \. \6 T) r5 A# t& b: c' n
        int prbIdx_size[1];5 U1 n* ]2 Z" \4 E* }
        double dtMt_data[28];
( f7 X8 U5 ^' S; @        int dtMt_size[1];8 }8 p; v2 V! J/ ?% f+ A  u
        creal_T symFrame[25];$ m; i2 C3 E+ w' \
        boolean_T isFrameValid;4 z  ?$ ?8 s8 O% V) _' z- D4 s9 R; k7 |
        double unusedU0[3];
0 y! v1 u  d; ?- ?9 X/ P, b7 d% K
        //调试过程中的变量
4 `5 V0 x' B% q, c$ Y        int  enough_data;9 t, F( l1 x0 Q* q( b: [5 l3 B3 s
3 E5 ?; r, `$ Y# R* |, ^1 i
        int enoughDataFlag;
7 j- I9 j; Z) D        int yiDuanShuJu_mean_int;/ w+ {2 `+ B8 i/ \4 I2 h
        int int_sum_dv0;
6 ^" F6 I' y# }/ p1 D/ n, I7 w        int oo;( X: x& _! o2 h4 }
        int ii;1 p- d# d4 `) P. v
        myfuck=10;# Y% A( }6 K6 W0 [  [
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */( A3 Y7 X/ d# ]; R2 W' J( @+ U
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */( S" o$ V( g5 s8 h6 d
7 l3 k) Y6 ?( j6 x) v
        yiDuanShuJu_mean = mean(data1000);
- n' b4 X7 w8 F3 c' Q  j, }) R( H% t7 L8 q; H
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;) S; V1 V) b5 i+ n/ b5 M
        UARTPutc('A');
" T! m: c5 }  T/ T+ s        UARTPutNum(yiDuanShuJu_mean_int);. Q4 w8 T9 o2 `
        UARTPutc('\r');
6 ^  F! u" M' O* Z9 ?" c4 V        UARTPutc('\n');
0 B" m" O+ W2 \. T) a3 d* F
' G' c  J9 V' B, K- c        for (ixstart = 0; ixstart < 1000; ixstart++) {" N  M& K7 \6 a; Z0 e" |
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;2 b$ x/ @& J0 C* e1 Y9 a% X$ z( ]
        }/ h) C8 x6 _4 p" i
. d# z. y" C" ~9 _! C, Y! _' Z8 j
        power(yiDuanShuJu_LowMean, dv0);* K- F0 d& P4 `
0 A9 P* }" ?( K, v
        int_sum_dv0 = (int) sum(dv0);$ @- W! R/ M( W1 H

! B! m1 C9 q0 r+ X, K8 J        UARTPutc('B');  ?9 ?. i# a4 {
        UARTPutNum(int_sum_dv0);
  ^( y+ U: X8 f0 N0 K        UARTPutc('\r');( R# [7 R+ w% E! d' f9 ?
        UARTPutc('\n');* t# J$ d. Z+ U7 m
7 a) b6 l; V, O6 g' |; s
//        int compareFlag = int_sum_dv0 > 1.0E+8;  B( X# m6 ?) B. f. g5 f, s
$ y) V# ^: R/ @& c5 H5 [4 V" f, u
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
, }- w4 i) D& c                UARTPutc('C');
2 u% z2 f) i% G" y                /*  比较信号能量 */
- q! R6 y- ^- e/ m                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
' N1 S. {/ e& M+ W( l" k//                yiDuanShuJu_mean = 1000.0 * youxiao_k;  a7 {1 o5 Y! s  b5 I
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
5 k& P, C& e+ o1 w) ^1 F  [//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
- _" d4 [+ P. \, c% v//                                        yiDuanShuJu_LowMean[ixstart];& I" U4 u1 l9 B* u6 Y
//                }# F/ H+ t, p2 ]' |
//( Z* M, A# ^0 ]6 q, |% b
//                youxiao_k++;
2 B5 r& S3 t) ?/ g0 S* ]8 |+ D6 F: T//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==, Y0 w7 l. [6 U6 M
//                        /* 感觉要取21个数,即0-20, */* Y& p' b/ d/ F9 J: L6 D$ l
//                        enough_data = 10;//有效是10,无效是0
$ j. n$ t+ d: I# a7 Q- c- T7 V- b//                }
9 G9 u1 y2 u8 E9 g; ?+ B  b        }  u9 _$ f5 f" ]8 Z# q

4 k6 j1 o: j" m( T) |8 H; j$ m- Q# }9 y8 z
        enoughDataFlag = 100;
& w& t4 g  E1 G3 E% `        enoughDataFlag = 1000;
0 X8 M6 ]0 d3 a        enoughDataFlag = 0x02;
: O$ c8 }8 h- a9 r        enoughDataFlag = 200;
+ s! X% A: X& f2 U* o# O- {; y7 A0 ^$ G7 ~5 G- p) \0 P* a
        int myfuvk1;3 ]' U) a7 y$ ]0 ^
        myfuvk1 =11;& B% t7 e+ e5 F+ _: W: P: k2 K3 E0 ~
  Z+ Z5 w, A3 ]8 _% U
/ ]& |+ w, T  s8 A; j: I4 t
        enough_data = 0;: A9 K( h+ ]+ {6 i5 x" X

! g# k6 m  u- c4 N, Q/ e/ J! |//        if(enough_data>50){
6 r2 \6 _( \. _7 b/ A# d9 k//                enoughDataFlag=0x01;/ `+ K& r& H) {8 |) U! M
//        }else if(enough_data<50){
8 E; g7 @7 b: g" e//                enoughDataFlag=0x00;//0x00还是不行
9 O, d, C6 {. k) F1 y- e& U; J//        }
( L+ J3 e9 ?4 o) Z/ C8 T0 Q3 X0 {: h: m' Z. G
& b# I8 w. p2 ?, I" u
        oo=10;0 k3 a% z, ^! y$ o1 A
        oo = oo  <  5;$ h4 Y0 u0 U: W9 |  r
        if(oo){+ J$ P' |2 v( H
                ii=0;
6 X, b" E1 v1 A% B' x0 P4 h        }
2 R7 Q( ^( _) ?. M, k        if(oo  <  5){+ E* Q& V, [) l* c
                ii=0;0 a* b7 B0 q, B4 d
        }
0 J1 `5 r, }3 E; n" u6 r        if(oo  >  5){8 c" s  G# C. @- }0 r0 w& X1 P
                ii=0;
) ]# v( T5 {0 J0 e* F  V0 H( ~        }
; A/ M. }' W- |
# M' k6 G# r6 ~9 z4 k6 P, b# Z        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
% ^6 I; Y' Q3 F        /*  如果数据足够才执行主程序 */8 O2 y; U; p0 o0 [6 l4 F
        oo = oo  <  5;  L/ G: ^+ b* W
        enoughDataFlag = enoughDataFlag  <  5;4 m, i7 C5 a' G
        if (enoughDataFlag  <  5) {6 ], R, g6 j; o( q5 D; M1 L4 d
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
- K7 ]/ v* i- ]9 \, A, a1 @% U                AGC_AGC(&pAGC);
& y; N0 J+ }  a! |% V! ^
% c, O7 D! [  _9 n! E+ Q                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 o2 o9 J( y- [
                FIRDecimator_FIRDecimator(&pRxFilter);1 x9 r% h, A/ Q6 L0 Q) K6 z

+ x6 f) Z/ e5 I8 u7 Q. w8 z                /* Downsampling */
- P& C- S2 y. V- P4 {8 a( h7 Y+ N                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
! ]' c# W# ^# }$ ?6 G5 V  K, I0 _/ v" A
                c_PreambleDetector_PreambleDete(&pPrbDet);
3 }4 L: E5 }/ M" {0 [
* R* P" h% w5 w* G, G                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */2 x5 O; q" z+ V( ^' R
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
; @# w9 T. K' y8 s- |$ W                /*     %帧数量=100 */
5 G6 ]5 a/ {# W) b$ @' g0 `                pFrameSync.isInitialized = 0;
6 D/ h7 |# F8 v  P* H0 A; {
$ Y; s7 P5 q) t3 o% m, ?                /*  [EOF] */
* f% V3 C& ]' b! c9 p6 y3 E& R* O                /* 前导码长度是13 */2 t7 M$ L# O. ]; t
                /*    %qpsk */
, ]& s4 j2 ~9 O! ?* s& ^                pDataDecod.isInitialized = 0;
& M  _, g1 \7 b3 ]% ]7 l. J' M- H/ h; @8 ]' j& v
                /*  end */$ x0 J: R6 B' r; d3 N0 H
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */7 P5 Z: x3 U- y  n" \$ R, T
                /* Convert 3-dB frequency */' ]/ X2 B8 |  Z; L+ }  |
                /* Convert 3-dB frequency */
# ^% L/ U: g, E) X8 v0 V1 @                filtfilt(save_buffer, usable_left_filtfilt);
5 v; _2 h) }( m                for (ixstart = 0; ixstart < 81000; ixstart++) {
& z3 o+ r% F0 a6 ~                        usable_left_filtfilt[ixstart] *= 2.0;2 b  H) F2 C+ J6 j2 O8 u# u4 G
                }: n6 y6 p2 `' f; ^" |+ q
, J7 u& S& J) A$ c2 D  A; |6 @
                /* 注意乘2,处理幅度 */
) l1 q* u6 h) Q2 I- s4 ]% f                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */- Y& K( f8 Q/ a9 }+ C2 I5 i5 m
                /*     %% 行列转换 */2 H& l) X; O0 Y8 f- d0 P
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
6 w0 M" k  b  x: O+ V                for (ixstart = 0; ixstart < 81000; ixstart++) {
5 @6 F+ V8 S2 H- c5 F                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
( G4 y6 [5 y  K! v0 e0 L                                        - yiDuanShuJu_mean;7 `. ]' \" q2 ^8 ~% }* B. }
                }3 a: O* i/ _; y. g! C- _

' L2 r4 m  a: F7 J# U1 @                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */3 L! \9 E2 G; C, \  [/ f/ L
                ixstart = 1;
. O7 T  e7 [5 n) F/ I: _                mtmp = youXiaoShuJu_QuZhiLiu[0];& n  C7 E; d" [, n7 B% j
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
8 T9 _6 h1 p- ?$ M                        ix = 2;
2 H+ i( H! a# |$ q. }. O% C                        exitg2 = false;9 `5 b) g- W6 O) B$ x
                        while ((!exitg2) && (ix < 81001)) {. r' b9 A3 Y" P1 S$ G6 i" `$ L
                                ixstart = ix;
7 e" }* B/ A$ F                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
: N3 g1 i1 W: J# S+ Y5 F9 g1 O/ k                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
6 L; Q8 g2 V9 Q                                        exitg2 = true;6 N! {) V9 G. C# J! r, j
                                } else {0 X' R1 U/ @* |  V4 Z6 p0 [
                                        ix++;& S/ S3 r, J6 [% N6 Y: X
                                }
9 ^' L% [. u' j3 g" R. G1 b                        }
) \# n5 k) W& ?9 _$ e                }
3 J2 H0 W4 z* ^# t! n) x* e% X/ B# h: l3 K/ q( c) j
                if (ixstart < 81000) {
; M% b8 u) D1 H6 z                        while (ixstart + 1 < 81001) {7 W% h5 x7 B( L6 f
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
( l1 b9 K( n/ J. @; D# k. x                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];5 u! d- u6 i% p3 P3 b, ]8 h( b2 V( t
                                }
* r+ ~9 s) E7 A& x( R# F# W& T# r, G6 W
                                ixstart++;
+ k; X1 l& b/ v$ X6 e+ h; z! m                        }
9 \/ w7 s$ k4 y                }6 h# v8 n7 `. t4 z: u: h+ X  F
& r+ m! e, W) t* `
                ixstart = 1;$ X$ ], v7 J# b/ ~& [% f. }
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
8 J3 B2 z/ C* x                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {& A$ K; O9 F  S: o) Z9 t; E# k
                        ix = 2;& @$ {* c2 Q% J% v: V
                        exitg1 = false;
3 i5 \+ N5 e- \7 ~                        while ((!exitg1) && (ix < 81001)) {
0 X: ]4 p& [! f3 h                                ixstart = ix;+ i9 ?1 P+ V. G
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {5 e9 G3 a! b6 I$ P- ]2 a
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];2 \/ Q2 B) ~# H2 p+ t1 x
                                        exitg1 = true;
, L7 D2 [3 I" e: h                                } else {, E; h" |. ]! z1 O8 f" ?+ @
                                        ix++;
% H' K8 m) B( N2 b: L( J                                }1 a* G" E- D0 Z$ U3 ^( X% P  a
                        }
# n) K  y- s' ]# R9 w                }
; [3 Q, Q4 d! ?" O. Z( l, h0 t! x# o! w9 c1 d( G+ t
                if (ixstart < 81000) {$ N# x1 J2 L* h6 y; x2 b, J) k
                        while (ixstart + 1 < 81001) {; V4 w6 b" e5 k. H9 q8 P2 n
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
4 n" G2 K3 Z; y; I# z: S# S                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
1 E4 P7 J4 q( ~2 J1 L' Q                                }( f5 T/ Z2 i& E/ o
/ q* S. ]6 C& f  J: ~1 E
                                ixstart++;
7 A' w- W6 w' h  ~. Q! H! I                        }0 }, s9 T6 `* |% Y/ P* [! ]
                }; `, C2 Q+ z# x+ X7 G' d
$ V  v3 S8 [  k% _" U
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);! o& {) Y; Y+ t6 [
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {1 ]8 c- ], S% m% ]6 A
                        yiDuanShuJu_mean = mtmp;
7 ?4 j6 t) P$ r# X( L* z6 Y3 q3 w                }
  q0 ^- M- P7 i
4 Y% D6 t* M8 B                /*  找出极值 */" E8 ~. z0 _, W- C7 b) p4 I' t8 d" o
                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 q  @% P$ q8 J; u4 f& ?5 @/ w- ^( U                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
2 C# {& G; S' F7 t+ X( U, v& o                }
3 p! M; j! V( ?
) g, D1 J7 n# ^8 Q        --------------帖子字数限制------------------4 }  C& K8 r- K; s4 t6 z; j
}& I+ S5 `3 Q1 o
5 i+ ?. }' x; H, C

% k7 w7 w5 C+ u

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 10:21 , Processed in 0.077228 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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