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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
: `( E9 K4 L. o2 S. D8 R2 Z7 }3 [' M- n. k8 B& Y: A
各位大神:7 Z% S4 l  ]& c" {+ r
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
: Y' H8 `% u/ b7 |      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
" W5 ]' }, t; G5 x7 [; L9 q1 Y% i& X# S2 Z0 a* l/ C
     
! c5 s3 E3 y) C* l3 e  r这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。% x0 c2 i6 ^0 [  Z  Y

* C: h7 g: X. P4 j" ~& f并没有其他线程
  C5 S6 e4 \- L% W反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
7 q* e3 b+ @9 |/ h6 L7 m也说不定是和堆栈有关系。。。。。。# e& `' [  p9 F9 L5 {$ H
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
& t2 ?, T; |$ W8 m6 g7 z" u! h& e: O" @2 X% ~. l( o
/ C# S8 t# p3 x2 h. \: k# ^7 M

  F0 w3 I* Q# B. |! b3 x我也很绝望啊,希望大神能帮帮忙,感激不尽,!) }+ W9 V( f4 u3 Z
. B: A! F# Z6 g/ `5 i# Z( y8 g

) \+ g' P$ I* E6 |附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];6 t! q. w1 M. ?% g1 N
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。, Q4 E3 a$ o) Z0 l1 B3 n( T. S7 V& F
, k! O7 {+ a' E
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
9 C! l% z$ k( Q1 Q                const double data1000[1000]) {1 i( F: F5 \+ c) z

. d. L% l: W0 V0 ^) e        int myfuck;
+ T" D, p3 |% ^9 \5 U* A+ g& l' b7 \        double yiDuanShuJu_mean;' J8 g6 h1 i" f7 b; w
        double yiDuanShuJu_LowMean[1000];
6 U. ^% x1 R. k' s        int ixstart;
9 [3 q5 t3 M: v" d        double dv0[1000];
  e# O- C  b! n( p        comm_AGC pAGC;' d; v& W4 j( _; w/ Y6 r' \
        comm_CarrierSynchronizer pFineFreqCompensator;
9 `. s) m- n( @# _0 ^/ Q        dspcodegen_FIRDecimator pRxFilter;
! F5 \* C2 `( T* H- O; b8 m( J        comm_SymbolSynchronizer pTimingRec;
, j  k% b: S9 V" |5 u6 j' O        comm_PreambleDetector pPrbDet;* z7 y5 f3 s% M( x, p
        FrameSynchronizer pFrameSync;; E# L9 V, s( X& g3 g& s2 A
        QPSKDataDecoder pDataDecod;
& F9 a; r0 ?5 r# m        static double usable_left_filtfilt[81000];; v% Y; R% w0 c9 n) h/ q
        static double youXiaoShuJu_QuZhiLiu[81000];. }+ F$ w( O# h, H) X% F9 A
        double mtmp;! K. Z# M) K- k1 U* T: X
        int ix;# c  H8 K' T% T# i
        boolean_T exitg2;
; ^, e8 {2 ~7 S( @) F" w        boolean_T exitg1;' x: N* c4 X1 w4 \& K9 r4 z/ j
        double YiZhenShuJu[800];4 d- }5 L: m9 D
        double dv1[800];
& e9 P3 p5 c* S2 _% v) v, H! r* K
+ Y  c$ q4 ^; r9 l
6 z9 P% E  Q- j& N8 ?7 J! K. d        double b_YiZhenShuJu[800];" Y; n8 E* Q! Y% y7 G9 t
        double I_filtfilt[800];
/ n: m9 f0 o7 G2 M  C' E' o+ b; R3 c        double Q_filtfilt[800];5 M- B6 l+ K8 b3 R* _$ O; p
        creal_T b_I_filtfilt[800];
6 {0 R6 I- ]3 V. Q  P        creal_T b[800];( ~2 ~% p( P# u6 ]0 N2 g% T9 B2 X
        creal_T RCRxSignal[50];
2 M* ?) T& m5 n" s' b        creal_T fineCompSignal[50];
5 ~* ~/ |. A& j0 @# M& Q        double phError[50];  [) R9 J2 w5 O
        creal_T timingRecSignal_data[28];
7 w& e/ Z! \- @" o' A        int timingRecSignal_size[1];
$ \: [# i3 x8 p, o# r! C6 {        double prbIdx_data[28];
) p8 H$ b& ?+ E( X$ H* L3 |        int prbIdx_size[1];
0 j9 x3 I1 T) k: W5 {0 N" R  f        double dtMt_data[28];
9 U8 P( v& E1 y        int dtMt_size[1];/ ^! S% W6 a$ R! W8 o
        creal_T symFrame[25];. W+ E( J2 c8 ?0 j! O7 s5 g
        boolean_T isFrameValid;( k) d# M" [' W
        double unusedU0[3];- M8 y7 x, z, z. q8 ?! M. p
; B5 q* T' m4 T. V0 X7 W7 w
        //调试过程中的变量% f5 w- X2 e3 z1 M  `' q5 P
        int  enough_data;
8 p( D) D3 e- w5 G+ S7 d
8 N1 |3 Y2 z4 \5 p2 A+ t4 ?( ]        int enoughDataFlag;
/ X% j: u- Y" q& e# h8 L) L* I        int yiDuanShuJu_mean_int;
! G. z- P4 g- l/ Y( i$ j8 F        int int_sum_dv0;
' c9 |- f. |( k  }$ Q0 n        int oo;& C: x! o1 s' A3 C) U  P( w" H
        int ii;* z) _/ `9 X7 d
        myfuck=10;
9 I: P/ N2 J$ L/ [# I        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
7 J. a9 V. g9 W        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */7 `' _6 c$ T" F# Q) S- Y
) `5 ^! @; w2 z6 Q/ P& M
        yiDuanShuJu_mean = mean(data1000);" S, R1 `& D) B
( @" k( d4 [! K6 ^: A: W' o5 z
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;3 E9 Y8 u/ q3 g
        UARTPutc('A');# f. a8 M6 M6 K* G
        UARTPutNum(yiDuanShuJu_mean_int);: w8 V9 c1 e: G. f
        UARTPutc('\r');
+ i) T0 m% M/ e4 |; @2 L, o1 {        UARTPutc('\n');
0 z0 w$ l  V+ g3 p1 }& A5 s# _4 C1 P6 i# d7 z. |( F6 ?& D
        for (ixstart = 0; ixstart < 1000; ixstart++) {- g) g6 U7 N2 D* l
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
0 o. x; K1 N+ x6 x        }9 c5 T+ V, t1 p: V6 ]
. p! ^& Z4 q+ q- O; H
        power(yiDuanShuJu_LowMean, dv0);) \: h0 C% }( C

0 A7 I$ t8 b: h$ j3 n4 W8 l        int_sum_dv0 = (int) sum(dv0);2 S: B# G: h9 i0 x' \/ G6 G: |" x

- m/ L. c- F, d) B9 s        UARTPutc('B');9 _( `+ g9 V1 O
        UARTPutNum(int_sum_dv0);8 ^% f  V! f" A2 f+ v( }
        UARTPutc('\r');
4 Z. l4 j) g5 I2 X        UARTPutc('\n');( n; R8 t4 r  P" n6 S, @8 K

6 l5 p: X; I, a, x/ f% h# ~; h+ G//        int compareFlag = int_sum_dv0 > 1.0E+8;
7 Z6 I  {0 I) _- T$ x
1 q. @. w. c2 P( h2 n" z8 C; c0 W        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
) e2 ~" U4 D4 d$ [  `                UARTPutc('C');
  S9 H1 R3 v7 C8 m% }                /*  比较信号能量 */- }- C$ G( @- B* c8 `% z8 U- ^
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */7 h6 q+ X  [& U* x. m* }$ u
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;/ }" D' ]2 @( x$ ?
//                for (ixstart = 0; ixstart < 1000; ixstart++) {! z3 J  j6 M% p" U' z- i% i, j
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =* O0 M$ K' }* y6 u$ s( ^
//                                        yiDuanShuJu_LowMean[ixstart];
8 M& f0 x8 L4 A# X. [//                }
- D5 D. J! Z6 c6 `* A$ S! V4 ]//
! V* T, E: S; ~3 d" p! [3 y5 g4 i1 m//                youxiao_k++;
1 F% }# t/ \6 T8 V" [//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==& f1 d4 R2 c5 P) e" D9 Y; x
//                        /* 感觉要取21个数,即0-20, */1 |$ m" S. }' l1 A0 M" y  l
//                        enough_data = 10;//有效是10,无效是0
- P" E$ X5 U0 J+ N4 w& _7 Y7 K0 }//                }
+ M+ Y# q. a& p- t4 d        }
) h: q7 I6 Z# O6 \' a* H" h! r/ W, W9 S
+ `4 K  n' z0 p2 W
        enoughDataFlag = 100;8 O0 F3 g; q  f/ {4 G- P9 {
        enoughDataFlag = 1000;
& X8 d5 R# W2 ~* n! ?: O" P        enoughDataFlag = 0x02;" e2 }4 u6 I" I3 g( w* N5 N, t! V0 f
        enoughDataFlag = 200;  n4 [" i9 I1 G

) |4 t2 d5 x! @0 f4 N7 }- \% A# E0 y        int myfuvk1;" E0 J' u! `2 j
        myfuvk1 =11;
) K' O- F5 |* P& N' n" P# n7 {  e% n# z$ Y& L- y0 d! D6 ?" t/ ]
8 L+ v7 v! B3 ?. }& \
        enough_data = 0;
# }  l# c( i5 q
3 o( g( F$ @7 m' g//        if(enough_data>50){
& n6 J3 H1 I2 ]0 l: f' U* S* _//                enoughDataFlag=0x01;
9 T. s4 w4 l' a  u; `//        }else if(enough_data<50){0 `, ]8 {+ J* p* x% V
//                enoughDataFlag=0x00;//0x00还是不行
1 V0 b1 z; A5 n1 i0 F( X8 }//        }" `2 u8 {1 a! M& [( H6 H6 D
4 Q7 U% W" G0 x( F
: m/ Q- J: E" O! W
        oo=10;
& ^9 m2 M* z2 z( K& Z9 p7 j) n6 T$ J        oo = oo  <  5;; A& v6 O3 y2 ^! \: T) f
        if(oo){( V4 l4 J$ {/ T: s
                ii=0;
) n2 n/ x6 ]5 ^' V4 h: @8 x" M: H        }. U* I" y% o; I; A: F8 y; y, f
        if(oo  <  5){0 h9 |7 Z! W6 v
                ii=0;
/ W& L: [$ [$ A  s0 d, Q4 L        }
! \+ o. U/ n# F1 @        if(oo  >  5){
& V8 L' Z8 l  _& M                ii=0;
4 w3 p3 y( }5 I        }
5 W7 C# y5 |4 }4 H9 E6 t( R& Q3 _$ {/ f% f, K2 {, W
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
3 L/ z) i) T9 @* Q        /*  如果数据足够才执行主程序 */
8 p# c9 A! a, Z7 u        oo = oo  <  5;$ S  y5 q% w. f' T% |' _% @+ ^
        enoughDataFlag = enoughDataFlag  <  5;9 G9 d- Z# t7 y( z
        if (enoughDataFlag  <  5) {: \5 g4 r+ e1 k9 g8 e; n: R9 U7 \/ `
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
% l6 \# E& I- R0 K                AGC_AGC(&pAGC);% B$ M; d) H% H3 D$ d
& `1 X" [; F/ G2 K& c9 k
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
' M( N' }: c( F! k( G                FIRDecimator_FIRDecimator(&pRxFilter);
1 X- `, d/ f4 P; o) Z4 N, U7 ]' H0 O% Z
                /* Downsampling */5 R  N+ ?6 K, ]! e' T
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
9 t* N0 p/ q' p8 L$ P: ^( k2 D
& f; _- x# c, X7 w; V                c_PreambleDetector_PreambleDete(&pPrbDet);
6 l6 R' W; n+ d1 h  r) ?
+ b& a- Y+ _4 J4 h                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */) v% M: [6 t3 ?/ v" A/ k, A
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
6 _$ E/ O! a" U; i% w+ J  u                /*     %帧数量=100 */
4 U5 b( y' l! _" T                pFrameSync.isInitialized = 0;7 O" s4 _! ~- x4 s. @% e
2 D0 [( l( I# `5 h
                /*  [EOF] */# Z, s  o; l( r. e: U
                /* 前导码长度是13 */
: @/ k1 c. }# M/ f' \2 E  o' P% u* D# O                /*    %qpsk */& t$ L( p% L! Z7 P0 r
                pDataDecod.isInitialized = 0;$ r7 a6 [- U. B
* b6 |' u5 a7 n$ F/ u+ q% Q
                /*  end */8 |2 x! D  Y7 G2 m2 q* A  [2 M! k
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */7 q' y" b+ ]" f  m5 m* u
                /* Convert 3-dB frequency */# T" N2 \$ N3 H+ `6 ?# a
                /* Convert 3-dB frequency */
( v$ ]" ]/ b! \0 f0 X9 p* e9 x                filtfilt(save_buffer, usable_left_filtfilt);* i- F+ S' y0 T0 q. ?: P5 M8 r
                for (ixstart = 0; ixstart < 81000; ixstart++) {) s  q7 I$ \; m" ]; C2 X$ |  k0 s
                        usable_left_filtfilt[ixstart] *= 2.0;7 Z4 A3 I( |" [2 E! ~$ L% F, u0 C
                }) V! |+ T4 c3 }. i

: l0 X% g( D1 e' q' y, ~                /* 注意乘2,处理幅度 */
) G5 ~! T+ j, `2 B/ x( @/ J4 V+ R, q; |. x                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */4 W2 R( s/ ^; Z& D
                /*     %% 行列转换 */
7 k3 T) c( h( F# D                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
9 H( G: g) x7 T0 k" z                for (ixstart = 0; ixstart < 81000; ixstart++) {
* u' C, l% e0 I; }                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]% V. c: b6 W- t* s/ F4 c- n" F
                                        - yiDuanShuJu_mean;3 f9 J5 |2 |- O0 k5 j& C
                }
2 x/ r6 e, }6 i- w: W4 s) x: a) i# @
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
" A% [" N4 C0 j9 w& m4 i! [                ixstart = 1;
5 a/ S, Z% b1 i4 q$ A                mtmp = youXiaoShuJu_QuZhiLiu[0];
+ y: d6 R# p9 R' M" w# I3 I) V                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
- `; N1 `0 M. w  w. b                        ix = 2;
- f4 i. [# H! Z! p4 E& |0 D0 e% V                        exitg2 = false;
# E5 i0 v) h* d/ ^                        while ((!exitg2) && (ix < 81001)) {
8 u( W: U/ G; ~- T2 @; |                                ixstart = ix;
) T7 r- q' F& o& v7 n) {9 E7 ]                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
9 ^9 B( ]- c: n                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
% g/ R. ]& f( b* S4 F$ d                                        exitg2 = true;
! }- r* P! `- ?* u# h' t$ L* a9 k" {                                } else {5 h, V7 Z/ C1 \, V0 d2 U9 K
                                        ix++;
  ]( ~# O6 ^  \0 d7 J                                }! B4 t+ a% y% L) V5 ?, r" }8 T
                        }
9 d9 g+ e" ^5 o  U                }
7 n$ Z1 s5 n( q5 {  R+ {
% _  x0 L* l0 _1 O" Z+ r( z                if (ixstart < 81000) {) p, A5 l8 i" R
                        while (ixstart + 1 < 81001) {. L+ v# ^, H0 N
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {
4 H4 s  |/ _  J                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];* c$ }2 A! F+ g) e0 P/ C
                                }4 n& B  a. e/ A0 o
4 S5 M  E. \3 u3 F& u
                                ixstart++;
3 ]1 ?: |7 D4 o, N: X                        }  v9 t5 e# ]- z6 t& z6 ?7 \1 {: T1 t  b
                }1 e* ~* a  s3 F, c( S

0 w3 X) f, t& A) l8 y! r                ixstart = 1;1 b3 M4 e6 t/ ?4 a
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
( J/ }4 O( Z; G                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {- N/ s3 Q8 u% r  x9 V9 e9 V
                        ix = 2;
- b5 F  F% [6 d( o                        exitg1 = false;- Y. u! f+ b* t; q. a
                        while ((!exitg1) && (ix < 81001)) {
# p4 A, p" W" S                                ixstart = ix;
' s! T" c1 H' y2 {" `0 I                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
( `8 \; B* N1 t                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];! u! A# Q; a0 r( G
                                        exitg1 = true;* }4 m( V( G9 h# l
                                } else {
; F& T0 ?: T- C& j' x3 ]1 Y# O3 ?                                        ix++;$ z. I, z9 W- D: C" Z
                                }
( \% s- o. G$ p                        }7 v5 o* Y% _7 m8 z5 T5 Y) p/ v
                }5 m( K$ E  W* u" Y2 t
; e9 I+ k. [% t; Q2 V
                if (ixstart < 81000) {0 ]0 \% W4 g" l1 F% k( V
                        while (ixstart + 1 < 81001) {) H0 V5 e5 d& f, V
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {  ?! m9 P3 \) B2 }/ E
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
( P( ~% K8 B4 q4 p5 v                                }( x9 `0 \/ N& y
1 [0 o1 h. n- O2 }# ~& ], `! `7 P/ E
                                ixstart++;# K; i; D3 v1 \4 s
                        }
! \7 O9 p! Y, z2 ?! E                }
& a* u; A/ ^3 ?2 e& r- Y* w+ }3 s8 l6 r' X
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);: m- `) o$ Z8 V
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {9 q! z6 z& A+ U5 ~, |3 t" U
                        yiDuanShuJu_mean = mtmp;& R0 y' p+ p& t/ L
                }, S" ]5 T1 M2 M; E/ |$ [( S4 a# m
5 j& v/ y( f$ @8 l9 w6 B/ H1 b- T6 N
                /*  找出极值 */
- E' z: d: E$ [7 S1 u* b; ?  u                for (ixstart = 0; ixstart < 81000; ixstart++) {5 g4 l8 v, n" Y8 `7 {; `
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;# O. n! C* v* v9 E
                }
' }; ]' ^; q& K( _" {
8 _: B8 w5 s$ m! B' U" ^* A9 N8 Z        --------------帖子字数限制------------------2 W7 G& i( `( P- F6 J7 ~6 r% P( Y( |9 c  {
}; U: [: h# R# u. ~% C

% E% N. w! W/ d: X4 n
" T. b- P; u& k( u, y$ o3 a& \5 @

本帖子中包含更多资源

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

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-5 02:19 , Processed in 0.051698 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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