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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 - h& o- F1 ?" O* E4 e9 V% I9 o' d# B
0 P- j2 H! I- p: D: ~% L
各位大神:+ w9 `0 _/ H4 K# f' l6 O
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)1 L0 }' d7 D& [+ U, I
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:7 H: }/ c  G2 }; {
7 r9 b8 L0 C3 N: J! x+ K. r
     ) S7 U8 A! A6 p  _& _1 u0 ?
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
! ~7 B" z2 E# r3 l, t& L& q; v9 j. @$ W6 T
并没有其他线程5 c$ u$ |8 w/ Z5 Z" A2 \4 X  G: d8 F
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。% }: @4 ~- B. p7 @
也说不定是和堆栈有关系。。。。。。
5 {3 e& k0 ]; K6 U请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 H9 |2 k! [9 s( k' i8 r: _; W; I3 D: {) v* X7 l, w1 h& a3 A
! c$ N0 J+ O1 b# L( d; B8 _. O

' k0 K8 p$ M) p5 E, {我也很绝望啊,希望大神能帮帮忙,感激不尽,!( A) ^* L; _' K4 b1 I2 A

& N) l5 ]  W5 X& Z8 E
1 x4 t: L" d4 q4 R2 e/ j8 g- Y附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];3 \' b3 T5 n/ j8 o
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
# M- D' M. S; `5 {, I) Y3 F  Z, l+ ?( g% J; p
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(; h5 u9 g+ u. }
                const double data1000[1000]) {9 N- J) U" w% r6 Q" e3 e8 y9 R

5 ~. G, Y- u7 R2 g8 L        int myfuck;! C' U& W( A) @* K& q5 U5 D# T( |
        double yiDuanShuJu_mean;% p6 F8 m' j* @/ W( r
        double yiDuanShuJu_LowMean[1000];4 L3 v9 Q7 u7 O1 V) s
        int ixstart;
1 T4 s  x% x: @! i% [% k2 F' Z        double dv0[1000];
; U4 d6 S: o# N        comm_AGC pAGC;
; x  Y5 @) g" k+ ~0 r9 V) l        comm_CarrierSynchronizer pFineFreqCompensator;
8 F! e, B/ P0 s$ o' v& ?2 C, T        dspcodegen_FIRDecimator pRxFilter;
4 T0 N4 }6 S+ c        comm_SymbolSynchronizer pTimingRec;
: ?* G% t" x7 t8 Y7 b& D* P; i        comm_PreambleDetector pPrbDet;; i/ a4 w; X% _' Y6 P3 N
        FrameSynchronizer pFrameSync;; P1 o! q2 a  T  T
        QPSKDataDecoder pDataDecod;2 }! q2 T- D/ ^5 {
        static double usable_left_filtfilt[81000];
6 x5 n8 m# Q) y: O0 z- D        static double youXiaoShuJu_QuZhiLiu[81000];
9 m, p. Q0 k) Z        double mtmp;- {8 {6 E" v0 ]) _1 z2 j; R! G
        int ix;
+ h+ {3 W6 H9 Z        boolean_T exitg2;
" }: D* O! t) Y1 ~7 l        boolean_T exitg1;
4 r* C1 h' L, Y) f& W) i+ T        double YiZhenShuJu[800];
7 P% V0 Y- ]$ g; \5 M% f        double dv1[800];
9 e% n' D% f# R9 z1 o
3 |0 y6 F. V$ R. H) f# j4 `% R7 N% G; L0 r4 O
        double b_YiZhenShuJu[800];
* [/ Y  t. D8 |) J+ Q. s        double I_filtfilt[800];
$ a3 s: a, x( r, m, [+ p; ^        double Q_filtfilt[800];4 j6 Q% u5 s3 v8 s
        creal_T b_I_filtfilt[800];: u; \# |  M( [% N
        creal_T b[800];7 A' X% l' ?/ ]* b" _
        creal_T RCRxSignal[50];
/ Q" M% O$ z8 Z7 U1 K0 @: n  i        creal_T fineCompSignal[50];
9 b! K, g  o/ N        double phError[50];
5 I4 m" x9 b8 |' s6 \        creal_T timingRecSignal_data[28];
( t; u; N, m% w$ `        int timingRecSignal_size[1];
' _' R( w% d' U) l9 c" j( o        double prbIdx_data[28];
. Y$ r  N! t: l# X# O) ^/ D  h3 k1 C        int prbIdx_size[1];
6 T4 L- z1 W+ S9 v) v7 Y" y# ~9 n0 z        double dtMt_data[28];
5 m3 b5 C$ `% U: w, d        int dtMt_size[1];
' O$ J; R/ N& q& {2 j6 [, ~        creal_T symFrame[25];
6 w2 {9 B8 K- H        boolean_T isFrameValid;
* u. l" R: z2 F5 I- n/ g5 P6 y        double unusedU0[3];
' R) `: w) d. ~  O4 Y6 ^) P: }( ?1 ~8 N: ~, J8 W6 x
        //调试过程中的变量
( s* e: l2 ~% v1 p% y7 f, p        int  enough_data;
9 o% d- P9 }' s6 e: C4 V- |  K& G/ [# e8 g; M
        int enoughDataFlag;$ N4 A1 {" {2 k0 y7 T) E
        int yiDuanShuJu_mean_int;
/ d( D* _5 K4 ?* x; U* ?4 q        int int_sum_dv0;
9 h8 Z) a9 G' U        int oo;
4 {6 i+ P5 A0 @2 {        int ii;
* }# r5 U: {$ H! U# f0 p* c        myfuck=10;: v/ A+ }3 b! a2 s. m
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
2 k4 D% r; l7 N6 B: ^: X        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */* [9 p/ r% a5 q- @

( S. b7 a; I) u  {# s! Z        yiDuanShuJu_mean = mean(data1000);
1 m: x4 S: L- ~  ~* e
5 `* Q4 F" e  u+ U        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;7 }( |- }& H; p, O4 ?1 U4 {) U
        UARTPutc('A');8 L0 _& E4 T9 g: A% `3 f
        UARTPutNum(yiDuanShuJu_mean_int);, D# Z. [9 q6 f- p% |' `9 h
        UARTPutc('\r');
& X  |/ v' `" ~! w3 f( ^) s: S9 H4 c        UARTPutc('\n');
# Y  m/ V. F& Z/ `$ Y+ \! U
6 u7 m; d0 J$ ^) m  f+ l        for (ixstart = 0; ixstart < 1000; ixstart++) {
7 [- D' P. v8 ^1 a                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
  o5 z6 a) E9 V4 E        }4 _  C; U$ K  A5 z6 g

- Z$ ]" o# }9 y8 H        power(yiDuanShuJu_LowMean, dv0);8 k% d# `; f; g
" s* ^. X- b) J: n1 {9 `$ n
        int_sum_dv0 = (int) sum(dv0);
; O9 {: @9 {, d) X2 o2 k
& u! z' ]5 Q, ^) `; V8 m        UARTPutc('B');
' [5 y* l, D. I  A% J$ B        UARTPutNum(int_sum_dv0);- E$ Y; ~! E- D" y: I3 d; `
        UARTPutc('\r');
. A7 i9 V% k4 B8 i( Q% f7 ^$ r+ x        UARTPutc('\n');$ k! z- ]9 |5 @4 _4 e( v
/ M' ^; Y9 T; K+ G
//        int compareFlag = int_sum_dv0 > 1.0E+8;
' O$ n8 y5 b0 c+ L( m  L$ W* U' T
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?3 j2 {2 D) v6 N' j
                UARTPutc('C');
  N& _( x0 G+ J7 F  T                /*  比较信号能量 */  i" y6 b0 t# i4 U9 _
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
1 d3 @( s% W& o; Y1 D; X* P//                yiDuanShuJu_mean = 1000.0 * youxiao_k;2 t. M; v9 b6 \! f  v/ g
//                for (ixstart = 0; ixstart < 1000; ixstart++) {' Q8 N7 h' J& C. h6 r9 W
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =9 }1 a0 X) u9 m, j
//                                        yiDuanShuJu_LowMean[ixstart];
9 x. L% Z8 G2 O9 r( G3 ^4 }//                }2 Z6 A2 D- S' V$ \' m" P1 g
//
/ U( U! r7 d- v& }* x! ]1 ?+ E5 W, U//                youxiao_k++;& g  X" N% o& Q- S- I8 d4 }
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 `7 M4 y3 i  J+ H0 K
//                        /* 感觉要取21个数,即0-20, */
/ D4 ?* N( w5 _7 K. D& C7 L//                        enough_data = 10;//有效是10,无效是0* x9 @5 G, A9 e- l) E
//                }
/ v# O1 D$ [5 g( \        }
9 F8 J9 |# H# v
3 [- n: F. c  q1 v$ |% c  r. g  B' @) [* e
        enoughDataFlag = 100;0 }8 Q. s. j: X. A
        enoughDataFlag = 1000;
! M% L/ ~' v! n: Q1 m        enoughDataFlag = 0x02;
( |( g6 v3 e+ r$ B) m: H8 x        enoughDataFlag = 200;2 |/ T2 P  S' X" D) f- V6 G
7 J$ ~$ e8 l2 L4 K" }
        int myfuvk1;3 p& g* c* s0 g
        myfuvk1 =11;
7 s* P% M4 A+ G5 u$ p  w7 H! r) k0 P6 I

8 H/ ^8 s4 I( _0 F        enough_data = 0;
4 i' E! ^* ~0 Y6 C9 B) U3 Q) ?2 L; P. ]  ]3 s! k
//        if(enough_data>50){
5 I* y2 q' Q5 a) Z//                enoughDataFlag=0x01;
3 M5 v! v4 Q: |. S//        }else if(enough_data<50){
# P6 ^9 Q6 H4 O- b4 Y1 x5 k' y% Q1 R! N//                enoughDataFlag=0x00;//0x00还是不行
  C5 s- @2 e/ `0 x; r  P//        }7 C; ~) k- u& [6 e" Q; \

; s$ k* x; W4 u, L" D4 F+ K; j& X; H& r- h1 x! b7 q/ b( h
        oo=10;
8 V" O$ Q2 d" P" g2 r0 ~        oo = oo  <  5;
( F  Z8 F" o" C  ?. @        if(oo){  G4 E2 V: o2 K
                ii=0;
" c1 o) G' m- D$ q  Y0 b% [        }
1 L6 N& S/ ^1 r4 R# z# O        if(oo  <  5){
7 P1 W* ^7 Y8 s! V) ~: s9 B( [1 N                ii=0;
) e6 p9 w# Y( ~2 @' o* k  K; c* K        }
6 ~% f( X. s- _! S9 L7 }        if(oo  >  5){
& _, R" |2 ]1 Q- j# \                ii=0;
# |. L) i4 y6 G) o        }# |# |. N3 [# }+ f. o

+ {1 G  y$ v  H6 n  G" {        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */; O% J. z9 m. K7 _8 Q
        /*  如果数据足够才执行主程序 */0 N( [8 {+ h4 p- L) S) |$ `& j/ x
        oo = oo  <  5;
+ U7 b$ X+ R0 b! j4 s        enoughDataFlag = enoughDataFlag  <  5;3 P. p: q& {8 q
        if (enoughDataFlag  <  5) {* H* |" _& e  f. [
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
1 E- `! ^3 [$ y/ z                AGC_AGC(&pAGC);/ W6 n, E! V# ^

% ?1 i3 H3 d  x/ R# e3 D                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);3 x  w6 b3 V6 n* N" Q
                FIRDecimator_FIRDecimator(&pRxFilter);8 S3 M9 _; B5 v1 ]
' ^7 _- u6 W3 t2 c% g7 u( A: T# I
                /* Downsampling */
  o3 b5 X3 W5 v6 L2 {3 Z! p7 d$ b                c_SymbolSynchronizer_SymbolSync(&pTimingRec);, t, o! O3 Y) h4 u. }" E# j

6 y' N' S6 e$ `$ X                c_PreambleDetector_PreambleDete(&pPrbDet);" e9 n/ [  M/ N1 p
1 r/ M/ @1 V2 a/ U* T4 C3 U: l
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */% X& n$ `( O9 h/ j) e2 x; S& F
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */& x8 @) I% A; l) X+ |$ R+ }; ~# M
                /*     %帧数量=100 */& s  x% O; a) H
                pFrameSync.isInitialized = 0;
0 A8 U$ G0 x7 T$ C! ]: w* k* H3 u4 a* p4 h) i# R, z
                /*  [EOF] */! e4 j7 [$ [- |5 D& B6 @
                /* 前导码长度是13 */; {! {3 l  S0 s- D2 u
                /*    %qpsk */
! y4 i  s# ?; g! l$ j. H, b                pDataDecod.isInitialized = 0;
9 l/ w- ]/ S! G& X. @: g6 i) n1 R, G: F4 V1 @1 S0 @
                /*  end */! Q  W6 v' p' y! u+ w1 m. N
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */( \2 d, ?9 `  |/ S
                /* Convert 3-dB frequency */2 n) ~  g; @" J0 [; T. c0 ^7 M$ f/ k
                /* Convert 3-dB frequency */
' }  n5 ]& a, O* q                filtfilt(save_buffer, usable_left_filtfilt);/ z' b/ h- q; s/ e1 [
                for (ixstart = 0; ixstart < 81000; ixstart++) {9 s! F1 p1 G6 }$ \6 w) o
                        usable_left_filtfilt[ixstart] *= 2.0;
/ z+ d+ u. v1 x+ C, I                }' Z5 Z. {; V7 [3 {2 N' c. O7 h

' Q$ r( z6 P8 V$ Y, I5 `% i; o                /* 注意乘2,处理幅度 */( j; U6 S. M) ~# l0 m* `+ c! r' d
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */* U+ X  c5 L+ z: A/ H* [; Y! s: j
                /*     %% 行列转换 */
4 M+ b8 w7 G3 r6 x/ }                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( I- @0 z: `' v. E                for (ixstart = 0; ixstart < 81000; ixstart++) {% ^( G# k2 A8 ]  U
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
0 W* d( d( m( T( [' E                                        - yiDuanShuJu_mean;2 x# ]7 e; q) L" Z7 z- V5 U
                }2 A/ U+ y/ V, W2 x3 h/ \$ d+ r

5 Y; S- E! ^8 C# B+ q                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
; y1 Z7 w+ Y2 O: _# ?" z2 N8 C$ ^                ixstart = 1;8 Y4 W2 b3 e7 h. |
                mtmp = youXiaoShuJu_QuZhiLiu[0];
6 R. \) p3 n+ ]9 D! Q/ b& ?                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
: q( o6 G! [: d2 t3 U% n' t8 m% V                        ix = 2;2 p' F8 g3 X3 h- k! p& N
                        exitg2 = false;
& w* k- `+ t3 i6 _4 U: v3 r                        while ((!exitg2) && (ix < 81001)) {
4 e* |2 f4 e" D( E5 [+ \                                ixstart = ix;1 P* a0 e9 ]5 C: w$ L# H3 r5 k6 O" `5 ?
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
+ X  U7 s8 C8 n- K) ?                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
! z' D. I$ s& ^$ D) ]5 z* i9 S                                        exitg2 = true;# p" N2 L/ X0 u
                                } else {
) K3 l, g1 k  k% t- G- s# {3 }, Z* e                                        ix++;8 f% I2 _1 p& \0 Q
                                }9 l0 p$ s+ l0 ^4 J
                        }
$ M8 B3 R8 ~+ e9 J+ i  R                }/ n2 P) z$ a; f
( s* y) p/ X7 w& r, E
                if (ixstart < 81000) {! f# p% Z( b2 v* H. _) C; w
                        while (ixstart + 1 < 81001) {
% {$ M) h: G1 g. y! V0 {  A/ d                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
9 q: E9 r1 K7 I0 h9 I" C# J3 k                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];3 l3 p6 }3 o- i: _2 M
                                }
3 h, i/ J7 q; ?# f6 N( Q  k! |# X, h2 ^1 @  V
                                ixstart++;& e" V; g: }$ t7 r& r& A
                        }
, a# [( l% A/ i& r3 w9 U% _, j& W! [+ j                }
# G' ?7 p8 A+ {( I9 d/ C0 i" C! o' }4 [
                ixstart = 1;
6 A+ a5 s8 k4 f& N) w                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];3 B3 ]* ]6 p; r7 c  t9 e# x$ ~# C
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 L1 v8 O( P/ p                        ix = 2;0 w$ |  l$ g# P
                        exitg1 = false;$ D( _* X9 x5 w1 O: D! ~
                        while ((!exitg1) && (ix < 81001)) {
, A0 A/ W1 |7 w+ W/ _                                ixstart = ix;
) f* d0 L  k! I8 P3 ?$ B                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
2 M/ @+ y5 x6 V                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];+ x2 R6 b. d0 e# p: }, N
                                        exitg1 = true;
0 O9 Y5 ~$ ]% s                                } else {
1 X# E) M7 U/ U                                        ix++;% F; j! c5 C1 A" y  ~' @% I
                                }2 M  H2 g) S' W, i
                        }* e1 P" J$ z' w
                }% [" f$ ]- {0 v

: g6 Z( G. b0 v2 w7 X1 d+ U8 N                if (ixstart < 81000) {7 Z- B8 j: x. N$ a4 v; I
                        while (ixstart + 1 < 81001) {
+ @( b/ d, E& D, m                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {- ^& l0 t. u5 {
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
) l% A* m8 T# J6 J5 l7 s1 M                                }% ~/ v7 ^3 m" N+ F

7 Q3 N2 N( x0 u- ?' n  G4 J                                ixstart++;, z! g8 d+ q  |. `
                        }
$ \& e* q3 C* T                }) x5 c% r/ E4 B& Y+ \2 ~1 d
4 z; d4 N$ |1 v9 I
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);% z, h: Y$ \, M/ x
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
  P& p3 l, n2 d" ^9 g3 R                        yiDuanShuJu_mean = mtmp;
: Z3 t( j2 o+ `                }" [; n, u6 Z- k7 w( [$ X: W9 m

6 Q: p; p% j2 m" c% l0 D                /*  找出极值 */; ]/ I: j* S) o/ {. \6 o7 L: G
                for (ixstart = 0; ixstart < 81000; ixstart++) {8 d) d" _* _' K# J& g
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;- w/ f; m7 D8 d! D1 }4 Y3 f8 V
                }
/ M2 M' `9 \0 V
4 H9 A5 S7 e6 c, s% X% T% B& }        --------------帖子字数限制------------------
, F- G/ |# }4 I; K}
# |0 X! `  l+ X- F; q2 R, ?0 x9 O: K6 W9 J

7 }/ P3 y7 O! Y1 W. g' T

本帖子中包含更多资源

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

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-19 09:30 , Processed in 0.050178 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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