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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
6 Q% D5 I( a7 y* P4 Q- h
' P- B# k' f: v2 m2 F5 F各位大神:8 m7 y2 a) A3 {6 U4 \
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)4 u# J6 p  Z1 C+ s$ T
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:5 Z9 [% @5 Y/ U* H  z% ~# |$ g
3 L) C/ {! \+ i/ A: K
     ( S. ~( H0 D& G7 ~. z1 b8 `
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
+ x& q8 \! h! g3 P/ b+ _1 N0 U
- V! {% x9 {4 S' z# q) s% V5 H并没有其他线程
+ N5 {( v; d3 c反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
8 Q9 G& P, D/ C' A8 V& F也说不定是和堆栈有关系。。。。。。% f2 E; D9 T4 g" A! b  X' [
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
9 }8 m: M% m- P' _! Q/ E
& p$ d. f" P) `8 q( L% R/ c5 ^, \, X4 U4 g6 a1 b0 L# E

. L- ]0 B* u& l6 O5 D! U我也很绝望啊,希望大神能帮帮忙,感激不尽,!
: z) W' h0 N% w( a1 H* G% _% X' Q5 {9 v

( {9 ]( F$ T+ f) b附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
+ ^* e6 U  u' {2 T        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
5 K& F( Z4 d. I; o' M* e1 h  u: g& [5 V
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
4 `* C; |" g  C. V# V2 l" v                const double data1000[1000]) {
9 I! n! o* c, l9 {2 U  [# w3 {/ z( \1 L- q" w$ w; P; X
        int myfuck;
1 `. a/ f; G; {- Y+ u        double yiDuanShuJu_mean;
- c5 n( u' [7 d3 ^9 D& J; p, \        double yiDuanShuJu_LowMean[1000];3 `& r; v5 X" u
        int ixstart;8 h. o  J' n/ o1 C
        double dv0[1000];
, U& \( y+ b' J+ t7 Y3 e4 u        comm_AGC pAGC;6 D& e# A4 x. S& |$ b
        comm_CarrierSynchronizer pFineFreqCompensator;$ t! z, K4 o4 d2 w. v! P( q3 H
        dspcodegen_FIRDecimator pRxFilter;
6 L5 F: c# C" a  c. z. B' A6 Q        comm_SymbolSynchronizer pTimingRec;- ?! v( \' m$ K; v( S$ z
        comm_PreambleDetector pPrbDet;7 j- [- k, F9 K8 b, j2 @/ L; v
        FrameSynchronizer pFrameSync;  C4 P; y$ R" \& X* R3 n
        QPSKDataDecoder pDataDecod;
. K- [" O) i! L# `" m* C        static double usable_left_filtfilt[81000];
% h; E  q* C" k9 {        static double youXiaoShuJu_QuZhiLiu[81000];
6 Y# v" p$ S7 T8 C' e        double mtmp;
9 o+ J% q" O! b  l  P        int ix;; o) b$ y/ p* v  g, H; g
        boolean_T exitg2;6 f  v- k$ Q- T# y1 w' ]+ w2 S% s$ j
        boolean_T exitg1;
( C" N# R* o, x0 p        double YiZhenShuJu[800];
: V* U! w; r0 _& X/ A0 _        double dv1[800];
1 S# d  X/ {, d( s& P+ A7 |5 g1 Z$ c! v

) Z4 K$ f/ b6 L, T% |% b( m        double b_YiZhenShuJu[800];
7 {+ _1 T% p7 S1 O        double I_filtfilt[800];
* Y: O$ X2 w% J+ {1 ~5 k( r7 R        double Q_filtfilt[800];7 X7 D* c1 {" f' ?$ F  U# ]4 A
        creal_T b_I_filtfilt[800];
, v: V" x* m# P+ J        creal_T b[800];
3 s$ L- v9 K* t        creal_T RCRxSignal[50];
" [; G# M; b$ {7 ?: D) z        creal_T fineCompSignal[50];$ H& o! _% D" W- B2 _0 z- t2 N3 f# ]+ O' L
        double phError[50];
( ^0 e+ O- R  M8 T8 o        creal_T timingRecSignal_data[28];
* l% m3 ?. G- A: P+ b        int timingRecSignal_size[1];
; A# ?4 n* i/ L' C$ m        double prbIdx_data[28];3 T, R" ]2 d+ g/ A9 e4 |* \$ A6 a
        int prbIdx_size[1];
8 d, X/ O# g- s        double dtMt_data[28];
, k3 u7 u! {1 n        int dtMt_size[1];, Q  m- C2 m6 a$ u% F
        creal_T symFrame[25];: w! F% P1 ~6 M* L0 G/ f
        boolean_T isFrameValid;; \8 b& m4 g, ?9 O
        double unusedU0[3];
. @# p, l. f! ?3 L+ j5 x
- @' u# p( a' e        //调试过程中的变量
% r2 @* Y' Q: L) A        int  enough_data;
7 d0 e0 q- }! I- L7 G2 H4 ]1 b
7 K, J- C1 m" D        int enoughDataFlag;
* s6 ^$ {8 l' m4 S  j7 C0 `9 L8 T        int yiDuanShuJu_mean_int;! L/ ?$ T; f2 \
        int int_sum_dv0;
# c: i% |% A6 b+ B" M. u0 z! [; E        int oo;' M) E0 s7 G$ O
        int ii;
6 J2 Z4 d  J) h, a- _0 _        myfuck=10;
% ?1 p7 |4 R6 d% o) _  Q        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */4 {( ^# I4 X6 r+ @: a( N
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
) j3 |* T) v. A  r
- }; N0 e5 Q* j        yiDuanShuJu_mean = mean(data1000);
: F! a8 t. G) R( W# w" k
2 f* t+ {* a( ]9 V        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;2 h- t: ?1 v0 R9 U
        UARTPutc('A');2 i5 z# c* o, ?. w6 s! z5 v3 H
        UARTPutNum(yiDuanShuJu_mean_int);
9 y2 _9 ~' \0 `        UARTPutc('\r');
6 ^/ P( A; q9 ?& ~' K4 h        UARTPutc('\n');  b7 J4 @# U0 J& Q4 N5 i5 P
( D9 L8 m. s5 {/ ~* Z4 p4 W* x
        for (ixstart = 0; ixstart < 1000; ixstart++) {# f+ J" j2 T% a  g1 b9 p+ ^
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
) R: L; Z& x1 S6 `: ^; N        }
% f! z3 E7 r% {3 K8 g% w( G" H& ?8 _# b# e2 U  c  s$ ]: e
        power(yiDuanShuJu_LowMean, dv0);$ c* U: p! K" H* g7 [3 U
! ~& j' {7 l! ]* g0 p' f
        int_sum_dv0 = (int) sum(dv0);
* T. C5 }* P8 A; q/ M' q5 r% j/ s1 w4 ~( J, f. m: H8 N: D4 e0 W
        UARTPutc('B');% M+ j2 c% m) W9 O4 M$ g0 |
        UARTPutNum(int_sum_dv0);
3 }# P. d# E( Y& I        UARTPutc('\r');# A' `! M. Q2 T
        UARTPutc('\n');7 P2 N4 _' e; G8 h2 ^0 V+ z# P" M

% ^8 ~! I2 L, e  _" Q) b//        int compareFlag = int_sum_dv0 > 1.0E+8;+ P; Y  P! n% \; R. L) }2 h0 p
; N& E6 o9 X4 r' c
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?/ B; i) v6 u/ F+ ?
                UARTPutc('C');
$ n1 d3 f) d3 {                /*  比较信号能量 */; W0 k$ i# u$ x2 [5 U, G
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */4 B# u# L1 d& g2 d% b
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
, X! ^0 |) [1 v: d9 m//                for (ixstart = 0; ixstart < 1000; ixstart++) {7 G2 X. i5 y5 I
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =/ }$ W' M# @: r- Q8 F3 _  n2 c
//                                        yiDuanShuJu_LowMean[ixstart];8 Q5 q+ t# r2 j% X/ K! x5 j
//                }
" a% }& ~+ U+ f4 c, I  ^: d//
1 W6 A* t% H) _" B3 A. Z//                youxiao_k++;* Z( L3 W" z4 r" I% g0 z8 G+ p3 V
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==4 Q  U  l0 v; `
//                        /* 感觉要取21个数,即0-20, */! J3 w* w' F4 Q5 \9 C, z
//                        enough_data = 10;//有效是10,无效是01 y4 O/ t& b4 }3 |/ J7 @3 m9 V& D7 u1 s
//                }- A. p. u4 M# R4 X0 y; }6 }' R5 v
        }
$ e9 [3 ]' H: ?( ?
" j" J/ \8 l: S0 }3 I# z( t  l' Y. c( u" g& X* Q: z9 N1 D
        enoughDataFlag = 100;
4 e; v- [4 \) Z8 [3 x( O) L. P        enoughDataFlag = 1000;+ r$ n" b' l% q3 F$ f* j  ]" o( G7 F
        enoughDataFlag = 0x02;
/ }4 N1 \; R$ q; x0 R        enoughDataFlag = 200;( O) A4 ^0 V! b* }. q, X4 {
, U! w0 E. V3 ]9 ^1 z
        int myfuvk1;; n4 s( x$ d; k0 h. z
        myfuvk1 =11;6 A/ _# }8 A$ g; o! J5 `+ Q
$ ?3 c' ~$ @% h3 N) R1 P/ e+ m
9 n3 V6 `/ F+ f
        enough_data = 0;
! [' y/ g4 o6 ~! Z# G* O$ T) U
1 F) e# `3 @7 l//        if(enough_data>50){
3 c3 T/ V/ J: r! l9 ]; H//                enoughDataFlag=0x01;
2 p8 p3 Z7 v. H( W* |8 c$ G/ h7 I//        }else if(enough_data<50){
& |0 D0 C. Q" }5 g  E//                enoughDataFlag=0x00;//0x00还是不行: L5 ?" w( G4 e1 q. c) {  i; O
//        }$ w5 S7 Z5 i5 r  s

9 p. q1 d+ p! B0 ]% ^9 `& t4 i* }$ G# q" [* J7 C0 U
        oo=10;
' o2 {4 B, J- U$ n+ q! t, p        oo = oo  <  5;1 F/ M3 `1 O, o
        if(oo){
/ u# w2 ]! c* c; ]8 S                ii=0;
# O9 [# Q8 N7 q. m: v        }
( \  y5 ~( f8 P% P- O        if(oo  <  5){
! D9 k$ D. ]& A0 r4 k, Y                ii=0;5 s: K0 A2 A7 F
        }
! v$ i- {3 Y! l) I% b2 x        if(oo  >  5){# u! e. u9 S( C9 S2 n9 M! f* y
                ii=0;: E" J& Z/ b. ], U  @0 D6 E, K
        }+ [1 z/ p; [2 j; R9 z4 e& Q$ m

8 V& W5 W( i+ @+ g* s        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */6 M4 B8 S: W0 s% ~4 Q
        /*  如果数据足够才执行主程序 */
4 S* S3 T" {' |' G8 `; K7 D        oo = oo  <  5;5 C4 r% C0 Y' r
        enoughDataFlag = enoughDataFlag  <  5;/ y" s0 v8 u6 G9 h
        if (enoughDataFlag  <  5) {7 u+ E* |* }" B5 V0 C
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
* p4 B, h* t, d0 ^                AGC_AGC(&pAGC);7 |8 i  d, B! ?

! l, A/ V7 A- O% M                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);" d8 I: b. ^$ b
                FIRDecimator_FIRDecimator(&pRxFilter);
/ a5 ?, C! P; |1 p0 M: U  C. J) |
                /* Downsampling */
& m9 x) T: Y" e' X                c_SymbolSynchronizer_SymbolSync(&pTimingRec);/ N2 q8 ^- F* g8 V5 O9 M  H
% f! L, A" x0 f; r
                c_PreambleDetector_PreambleDete(&pPrbDet);
. {* v' H8 {. U% |& h
3 l. M" e% T( L4 W- M                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */: w1 [# U& Y0 D$ Z
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */1 Z- L% Z: d6 B( n# P4 T  p
                /*     %帧数量=100 */
2 O% J  Q0 z5 q! v3 E: `: l                pFrameSync.isInitialized = 0;# R7 ?3 n7 A. w) E
4 s# |$ k7 ~. P  D
                /*  [EOF] */3 V7 K; R9 H4 ?4 [- \
                /* 前导码长度是13 */7 f* O/ s2 J6 g  x4 T( I* m
                /*    %qpsk */
6 `2 e6 F' S4 C2 t# V! q+ l                pDataDecod.isInitialized = 0;
8 L7 F5 w" O; _0 N
4 r1 W- W1 c7 S; W8 _                /*  end */  e$ a0 K# ^' A; q2 @3 w* H# d; C+ [
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
, r( Q1 Y! V. \# V                /* Convert 3-dB frequency */) J' S  j' m2 H; ]3 e
                /* Convert 3-dB frequency */
) Q& ~$ @" e2 t2 r9 P& A4 Y                filtfilt(save_buffer, usable_left_filtfilt);4 J5 T# r6 U, o9 ~" q
                for (ixstart = 0; ixstart < 81000; ixstart++) {) k" K0 H6 p: D3 N2 I) g; I8 k1 o
                        usable_left_filtfilt[ixstart] *= 2.0;- H; y1 n( |* H8 ^/ T. W
                }& d% j; F5 ?2 k! V2 l5 _

7 U; Y9 O; O$ K# h7 I                /* 注意乘2,处理幅度 */- s7 z6 Q' R5 A& J. y
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */. ^5 y# N$ c$ I6 _3 E" ^
                /*     %% 行列转换 */' S. l7 u7 X8 M+ W+ k1 @% f4 @
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
0 ^! A$ D. E" t- D# M& I$ o                for (ixstart = 0; ixstart < 81000; ixstart++) {
. a1 a( _+ ~9 z. Z                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
$ w' ?0 h0 Z) d9 r$ o% v5 O4 |7 ?1 u                                        - yiDuanShuJu_mean;
4 z6 D  |3 p/ M/ W3 H: d) n                }6 n) U$ N: u- h; X: m
* j( x( ]( C# k8 k( K9 a) A* K
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */" r$ S/ V9 }+ h" M# ~
                ixstart = 1;/ L0 V/ s  r' g9 J8 Z
                mtmp = youXiaoShuJu_QuZhiLiu[0];" Z+ k, Q' I! J* Y# B/ D9 [1 u7 Y
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {6 Z! m2 S" ~, \1 z( W9 |
                        ix = 2;' f% a2 e% |! w! ^
                        exitg2 = false;
3 u% e; _/ V% y/ z' `  A( h# `                        while ((!exitg2) && (ix < 81001)) {2 z) F  |4 K2 T; W3 F, p& n
                                ixstart = ix;
# i. j9 O) N& p) R. Y' a                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {% H  V4 F* J$ ~& X
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];
3 y$ q( R8 J- ^2 q5 s' W3 C                                        exitg2 = true;' t8 `- V# U% m8 d; _; ]$ z9 ?
                                } else {
- c( x9 j& c  o                                        ix++;
+ \. s! P6 _7 Q8 ~8 }% @                                }
! {5 |) C5 W  y                        }, R, B# Z9 `/ `% _% B4 M, X3 Y
                }' B4 D& _7 N- m. q; w4 s: c
  s/ H5 Z- L. N1 a+ |
                if (ixstart < 81000) {0 E' y; t' s% l5 O" h; q* b' H
                        while (ixstart + 1 < 81001) {
! T9 O& Q3 Z+ M                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {& Z: s: Z- v" i9 P
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
* e9 x, d; o  N* y                                }; r; H7 K) q8 K0 q8 z

. L$ q* X" n3 n9 T: `- m* }                                ixstart++;
% i) P  H% g# c! K3 c                        }  h+ Z1 m* {: N. r7 `0 h7 i
                }
( p. Q0 c2 G' I. I7 E
% i6 t8 a' f, {5 a9 N( k9 a0 O" H2 ?                ixstart = 1;
2 d+ `$ L" p, I7 r+ W; Z4 p& N                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];' E  t9 }  Z- E$ y5 k
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
5 _2 v+ _( d' f+ I! j6 i                        ix = 2;
8 K2 E, i: R, g% L4 h, v                        exitg1 = false;$ l# }9 M# T. ^, |6 @
                        while ((!exitg1) && (ix < 81001)) {
  l1 t3 J4 a/ z& j                                ixstart = ix;) a+ G, z; @9 O' x: T- ^$ J
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
* Z- y5 y7 v/ b4 k, Y9 w                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
0 E* h5 Y9 ^3 O3 `                                        exitg1 = true;- t8 V- k: T8 W4 M2 |3 B5 X
                                } else {) T( G* c8 F$ G
                                        ix++;
, D6 D5 }2 y* i* k2 O                                }
- }/ ]- {8 O' C2 Y0 e  I' L                        }' B5 I. L- @, T9 ?) E3 j
                }
2 d1 I1 e% s  A2 f) o' k/ ]) f2 N
                if (ixstart < 81000) {
5 n3 H/ [& S  B1 V, H7 X                        while (ixstart + 1 < 81001) {
( h8 o) L8 L; c                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
% c( m* K% }( }' H                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];* z+ T1 _1 y: U0 W. f- U' I
                                }
4 Z! `8 f  e, `. @# N& o
$ n+ |- c! ^4 k: V" n' N3 p) V                                ixstart++;
, M# w3 p& U0 K% R3 o& S                        }4 v5 g2 {0 U* g' K0 l! E
                }8 I& d5 D8 ~! A4 d, a; Y
6 h7 y' |2 c  ~* ]- J( h! ?$ ^; }
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);+ a/ v( j9 J- x: n* G1 C
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
! v, k8 W( J" C6 k                        yiDuanShuJu_mean = mtmp;" T& t& C0 @6 S. T8 u' f4 f
                }2 R+ N7 ^  _! ^# l0 N

! q  d. S7 f' z& N' u  s                /*  找出极值 */
- z# m+ Y) Q5 ^& T                for (ixstart = 0; ixstart < 81000; ixstart++) {6 ?; {' ^5 N" F! ?  n
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;( I; x6 ]* E. L5 c
                }
# c  |5 F( K7 l9 C- E) Y4 G& r: a0 B9 `
7 p% B: b* O0 x1 J        --------------帖子字数限制------------------
$ s$ I. e6 C; U- U  S}
2 O6 I+ ^' s! s: N1 w. }& d
& x5 J, K, a; ]7 C2 R6 Z8 b$ X8 x( [# {' J

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 18:58 , Processed in 0.048444 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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