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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
7 D7 W5 F; T! w; u! K4 _: B! s0 @. r2 Y) d# G
各位大神:$ h! n* z& X  K: n
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)4 h# l# X. n+ U. O' K
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:
. w0 f. ^3 @+ s0 ?7 X* t( i8 b
2 t1 }/ C0 ~9 h8 U1 I     
4 o5 y- I7 R1 h这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
7 K* W+ {$ a2 S  e( U3 i; g4 I% `5 _( M# [7 j7 s
并没有其他线程
) c7 u. p3 f! [) m! N! I" R( ]* G) p; g反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
- p* T9 n  M" J" c" R也说不定是和堆栈有关系。。。。。。5 N1 v% s& ?# f# ]' ?0 _2 P
请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
7 q- H! R) }: Q: S1 y4 D# {* J  [0 W% r. d

4 s& M7 Z, ]4 H) r. v6 ~- `9 @* H) x6 b
我也很绝望啊,希望大神能帮帮忙,感激不尽,!5 G& V& q- a* Y' A6 A8 A

+ l, R8 y5 M6 j7 ^! k7 s/ F' u- ]7 \; U& ~2 E
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
' e" G; a8 a) a, F7 V$ l6 `7 l; U        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
0 n' d" ^( |; D- m# B
7 v" H8 ~+ h  S/ ?& O- `2 cboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC($ s' r0 \  \* y! L; x
                const double data1000[1000]) {+ `4 {3 j* ~8 Z( |7 a- V
7 v: C/ s% D, ~3 O+ @, S) {3 ?
        int myfuck;
+ y0 P- {" }4 y, S$ s$ G. q1 a2 k        double yiDuanShuJu_mean;7 x# H2 k) l+ V. A" U
        double yiDuanShuJu_LowMean[1000];
# E- d5 X! O/ l        int ixstart;1 O1 l& l8 ~; Z% `
        double dv0[1000];
$ s  U: O9 x0 w- q0 l/ O4 `        comm_AGC pAGC;+ K1 G1 z1 o1 y
        comm_CarrierSynchronizer pFineFreqCompensator;) P- i) ]. x9 B2 T. ~$ ~$ [
        dspcodegen_FIRDecimator pRxFilter;. }- \/ T& f7 R- D& }, U
        comm_SymbolSynchronizer pTimingRec;/ t% b% t6 `0 {  n& i# U! ?4 S* Y
        comm_PreambleDetector pPrbDet;
' e$ }8 Y5 j9 [. [2 @) w! M- }7 C) v+ C        FrameSynchronizer pFrameSync;% P% R3 N* L5 G1 o
        QPSKDataDecoder pDataDecod;
' F1 R4 ^* @% _& R4 w+ M: i        static double usable_left_filtfilt[81000];
; n. Y: O! X; G/ V) k; `        static double youXiaoShuJu_QuZhiLiu[81000];* Q/ K7 ?4 t3 m
        double mtmp;5 |9 [8 T# }# I1 w
        int ix;, a4 J  g& P6 N/ d  U1 G  ]5 ~
        boolean_T exitg2;3 p0 G' p. r; }6 N5 Y: M  y
        boolean_T exitg1;
0 m/ g  G1 B* ~5 ?, U3 w6 ?        double YiZhenShuJu[800];
! x: B- x' h$ u) @6 s& ^% g        double dv1[800];
$ L: g  ?% T# N& s0 x7 a+ `$ i
' Y: P, v' @) P, |) y
  r4 a" w% m: c1 P. e        double b_YiZhenShuJu[800];
& A) D0 f1 K' y# l% n: \        double I_filtfilt[800];
8 f$ w2 O6 h, N: P8 E' B        double Q_filtfilt[800];3 C- D4 b3 c. J  m0 V& P# F
        creal_T b_I_filtfilt[800];
" J9 l* ]& G$ z1 {        creal_T b[800];
4 H+ J" ^0 p' F        creal_T RCRxSignal[50];% n6 k, V2 H4 p/ O+ S$ j) v
        creal_T fineCompSignal[50];# [4 E- b! O/ |7 w+ K" ?  p
        double phError[50];
& J6 G! ], Z6 Y        creal_T timingRecSignal_data[28];
; `* P) M  |2 S7 p% i6 J        int timingRecSignal_size[1];8 |' W9 v3 c6 @' u% M2 D
        double prbIdx_data[28];
( @: i5 _) U4 I5 p$ i& [        int prbIdx_size[1];
4 s4 B; W5 Q6 }% d8 w4 N5 m        double dtMt_data[28];0 [2 w) H$ A" i7 |& i7 l
        int dtMt_size[1];9 |/ G  G! S; U, j, j
        creal_T symFrame[25];# g8 s) D- c8 m, y+ A; r5 k  J0 Z
        boolean_T isFrameValid;# W; n( Z4 l2 W( I; P- c: C
        double unusedU0[3];
* X: |6 L5 e- U$ N
' Y7 Q6 k3 V6 v" E4 z4 V) m        //调试过程中的变量8 c+ Y9 F; q/ h8 i& W
        int  enough_data;
: a7 i' |% u, Q( C- O# N0 O& r- E
        int enoughDataFlag;! C1 k6 S2 \* j8 d& [7 f  \
        int yiDuanShuJu_mean_int;
# L8 C* H6 S8 t5 x- i+ J        int int_sum_dv0;
; c) L, x6 t* N; j1 D        int oo;
# F3 D; S7 _/ C5 m  E        int ii;
3 W, ?0 v4 v$ ?& T5 Q# |        myfuck=10;$ U. X8 T' x% L( t7 \, i0 {4 R2 E8 J
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */8 W. S9 r+ v- k; X
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
5 O* G" W) K! B- p5 O* Z' ~+ Z$ H: X" _/ \3 ^# [
        yiDuanShuJu_mean = mean(data1000);
7 k9 Y0 u4 L3 l9 h% C8 T* H2 Y2 p
' I1 g, Z" s' P4 w. I, `. [9 A        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;& P- `  x9 D1 \9 ^$ ^5 O4 ^
        UARTPutc('A');
$ x- P+ y4 o4 P        UARTPutNum(yiDuanShuJu_mean_int);
$ v/ J# f' ~+ }  l        UARTPutc('\r');
, F7 b8 H9 h& ^7 N- }        UARTPutc('\n');& g: B+ W% o0 y% _

0 G3 B8 G! m1 v6 y; m2 L7 M( [        for (ixstart = 0; ixstart < 1000; ixstart++) {8 i! v1 F  Y3 y( h+ d" ^* ?
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;: k0 c# P& I" \/ W4 w7 V$ ]
        }
' A; E) X2 j) N  [) S3 e( ~8 M# G( Y
        power(yiDuanShuJu_LowMean, dv0);  e/ Z& ]" ^" Z- m' |: X

  [, M5 Z# P3 h3 e: g5 B8 A        int_sum_dv0 = (int) sum(dv0);
" B3 [* b; u- C0 X4 S0 g
/ E0 B4 T# {# G. z* p        UARTPutc('B');& D/ G8 ^2 y- m0 u
        UARTPutNum(int_sum_dv0);  y+ F8 m4 l2 Y+ F) F
        UARTPutc('\r');- f" n! n7 n3 b4 B; Z' ~
        UARTPutc('\n');
# ]% B4 P  g, P7 k# A
1 Z; v2 {" S% m* k2 {//        int compareFlag = int_sum_dv0 > 1.0E+8;. \$ G% k5 d8 ~# K

4 e' y: D9 V+ J, L7 g- x7 v3 J        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?; Y2 C7 f+ U9 O9 z6 f2 `; n
                UARTPutc('C');7 P! A. e' _! `/ ]' D% z
                /*  比较信号能量 */0 E5 f" |' [/ Y& N5 X
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
$ h+ P& O" k$ _1 \6 b) q& X5 V//                yiDuanShuJu_mean = 1000.0 * youxiao_k;! g; O, K$ i! s$ k; ^& Q! a
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
/ a4 \, V3 q3 z//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =
+ d- z. x! o& X+ v+ a//                                        yiDuanShuJu_LowMean[ixstart];
* Q* T3 H9 o9 L) x5 ~/ E//                }- C5 h; z2 d) W9 ]& h
//, J* X5 B3 S* S; j% }
//                youxiao_k++;
' S" m# M5 i+ o2 K( ]6 s4 J; k//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
4 R. U5 s5 m: P* E, w: \//                        /* 感觉要取21个数,即0-20, */
1 p: H9 Y( P; a3 d" u" X, y//                        enough_data = 10;//有效是10,无效是0, r% I  L% m5 }2 f" Y
//                }
5 S/ w3 K! s: Z& {) u        }
+ S, o" R% {; c% f' f( ^6 `* M! ?3 t  @+ x
) E. H* H3 {; u% w, ~" f9 ?
        enoughDataFlag = 100;
% o: b, `! F% |# D) s; L4 f: N        enoughDataFlag = 1000;, q' \% _, j. O3 n9 S* Q6 l# m
        enoughDataFlag = 0x02;
- y# v1 u4 T3 @) p        enoughDataFlag = 200;* v2 g/ s4 G. W( ^: c$ j
7 n4 t& t& a" ~5 j
        int myfuvk1;
. o, R  r8 B! [% {* `  k$ |        myfuvk1 =11;  m& u+ w/ A/ ?5 ^9 x

0 v" E: g+ F- G: l5 O+ }
1 m/ ?( |5 N& p  {& g        enough_data = 0;
" l9 ]" m- R+ Z0 g6 J
( U5 b2 i* N6 j$ K' W  O) s//        if(enough_data>50){+ H* k$ d: d: r! E" @
//                enoughDataFlag=0x01;
' \; B' h( R4 Z5 O! m//        }else if(enough_data<50){
$ |$ H; N( J9 c% U, }. }//                enoughDataFlag=0x00;//0x00还是不行
- i8 c3 [4 |, `/ @$ L7 L//        }- S( Z$ W2 Z7 X# T

  j$ D! i& y& U5 c0 i0 W
+ n( R/ u5 q( H        oo=10;  M( D# C! u9 ^6 |
        oo = oo  <  5;( m- p8 {. v0 W
        if(oo){2 c& {# I3 ]8 q  t, I
                ii=0;- }& C6 ^7 ~4 ]) H7 u8 _
        }5 t6 G$ s1 q, ?6 n8 F
        if(oo  <  5){
$ J9 `8 t. u! R0 b                ii=0;
. t- n) y+ k, m! l9 L, V6 `        }" g, ~) ?5 B( w3 X, I8 @* r, O
        if(oo  >  5){
" x9 n: B: k- V0 L4 z: C                ii=0;
1 k) \* J4 `' A) R) L5 Z' c# a        }+ i5 T: i% [) j

* K" P7 Y% v5 b3 N        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */0 i2 |5 T7 T; A8 k7 @) {( C1 A% I
        /*  如果数据足够才执行主程序 */1 l( O, P0 N8 ~# i2 c
        oo = oo  <  5;
' K# f( A" F8 ~# [        enoughDataFlag = enoughDataFlag  <  5;
, [9 W8 u2 h& M$ _        if (enoughDataFlag  <  5) {
5 ^0 i" W0 K9 {* [1 z+ G2 p4 t% y//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是06 Q) [% H# J$ j, L4 v
                AGC_AGC(&pAGC);
; z# q9 i( `$ m7 ^% n1 l
7 F' v( [. `6 P9 L9 Y                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);
/ {- B; P9 _& q8 g& ^                FIRDecimator_FIRDecimator(&pRxFilter);
1 ]9 F" N7 M1 H! e! E) ^/ C) V2 f9 u4 {1 R) ?& F
                /* Downsampling */6 s1 E* \% m6 m6 K9 q+ n" I
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);4 v- P; k- [" Q3 M- r
+ B. D' W7 p3 q6 B8 P( ]
                c_PreambleDetector_PreambleDete(&pPrbDet);1 i( G9 M+ b# W/ I# d+ N

3 e$ M3 j0 G* T+ X, S8 x5 \9 ^                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */! U) @% k5 i1 v  M+ n% s
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
4 f( |+ Y! R: E0 |                /*     %帧数量=100 */
7 Z$ [  R6 [4 z2 |                pFrameSync.isInitialized = 0;3 }( Q1 J6 J& B5 E2 e2 a0 ]

- `$ a; b* }% H1 e' V                /*  [EOF] */* C/ B+ ], R' R/ ^9 W. Q1 l1 m+ s
                /* 前导码长度是13 */9 g  Y/ Q/ h4 N* J
                /*    %qpsk */. G8 q1 ?6 M+ ?7 N# U$ P
                pDataDecod.isInitialized = 0;8 Z6 i8 T0 a; ~+ w7 x

0 `7 z- k3 q& ^' @+ ^                /*  end */) n* }- M- ^9 S3 W3 h2 P
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
' K6 C1 u/ y1 X                /* Convert 3-dB frequency */
( N& {1 P; r8 k8 \- r9 M                /* Convert 3-dB frequency */
1 g! V4 s8 c3 r6 D" k                filtfilt(save_buffer, usable_left_filtfilt);
( Y& K" j- w5 c3 R                for (ixstart = 0; ixstart < 81000; ixstart++) {
% ?0 ^2 \4 x/ N; H1 m' s                        usable_left_filtfilt[ixstart] *= 2.0;2 i: J9 _0 R0 d
                }
3 ]( U5 x  P: W- X! y* _  w& T0 ^
                /* 注意乘2,处理幅度 */  f+ F" A# j& |5 Q
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */; h# N6 n( c' T9 P; K
                /*     %% 行列转换 */" w6 d' Y/ D% b) @6 m
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);  W9 x: `$ u% o! V8 K
                for (ixstart = 0; ixstart < 81000; ixstart++) {/ O  ]9 a  J( c/ T* k) j$ y$ U
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]" ^7 J2 R- n; U" s4 u( m
                                        - yiDuanShuJu_mean;. e3 R( r0 R) |
                }
4 Y: [' r) N' a0 S* p) x; T3 j7 i) q$ w/ q4 A
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 *// q6 d7 j- N2 c  W" ]- \' q4 |0 }
                ixstart = 1;
3 n% H4 }6 W- t% t' M: I! @  v                mtmp = youXiaoShuJu_QuZhiLiu[0];* [3 v: ]( @- S+ r. U- Y# P
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {' |3 k1 L+ i0 F" O  M( G
                        ix = 2;' K2 }2 z5 m  w( x; G: F3 a: O% t
                        exitg2 = false;2 K" d( ^6 C, b0 L, X$ y" ?: w
                        while ((!exitg2) && (ix < 81001)) {0 H9 T* [. j% S0 d
                                ixstart = ix;* D- I1 p# y. @5 h* g! A
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {& B% c/ o: o3 ]# C( F/ _) W% J
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];% U$ c1 p( c/ W# Q+ Y
                                        exitg2 = true;
1 q( h: B2 ?# R8 s% ]% k' i  P6 `                                } else {- C  e$ t& D$ P% Q# h
                                        ix++;
+ u7 V" |. q. Z8 J! V- K! b) p5 N                                }0 C/ x2 p9 X; G0 C
                        }
- N" F. @) v8 |* B: o1 i                }  E; F% W* c1 Q+ U

5 X8 p3 z( Q8 W) C9 y. G  r                if (ixstart < 81000) {+ Y/ i3 B# A- R- K+ V
                        while (ixstart + 1 < 81001) {5 _. N9 d+ J7 |" f: k& I) G
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {( _- s2 O' g2 C, D+ G
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];
6 k. l8 {- R  B) h) f6 J$ E2 G# f                                }
5 g3 X) L5 I' M, _2 c1 g8 p. Z6 F
                                ixstart++;. R- }; I9 Q& m0 J5 V1 f0 _
                        }, F% k% ]" G( Z" p: v% p6 F+ m+ \
                }5 d$ [' ~0 Q/ K# c

/ \1 K3 R: c% M" `% U, i- q                ixstart = 1;
8 y* N6 j# [7 a1 i$ e                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];( w1 h: r+ \. ]
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
+ t4 c# |$ f; h* x                        ix = 2;5 K- U. A% Y# q! d2 p  e
                        exitg1 = false;" Y3 u9 ~" y7 L1 X+ S3 A
                        while ((!exitg1) && (ix < 81001)) {
3 w( x: Z4 @5 P2 y0 Q- f4 |5 {; c                                ixstart = ix;
- D; h6 j9 C+ N: K1 X; A                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {6 v# o' _9 t, I
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];: g4 Y( u' g! g5 `7 @# Q
                                        exitg1 = true;
7 d  B% p2 q5 J* n. o. h7 W                                } else {0 P# i1 t3 t  o" h
                                        ix++;9 f4 K7 X& L! ?/ }: `/ d
                                }$ J, q3 k! P# P& j2 M: ^
                        }- S0 v0 q5 o' x) I
                }
1 F% i. E: Z# G: M, L' x
$ Q6 z. R2 `/ \" m+ _& u4 z6 |                if (ixstart < 81000) {" }4 s& C$ |, [$ K8 F8 w5 _
                        while (ixstart + 1 < 81001) {4 F5 K, ^1 a& o: v
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {7 o" z7 }1 N/ }+ I! n
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
! `, m% k6 k* X                                }5 g7 r  H/ X+ P. b6 S0 S& C

; W- Y- y$ Z- M1 A, O                                ixstart++;
4 h9 i' g- }8 Q                        }
4 G9 d0 o6 i8 f/ t                }5 x4 b, f' s4 G% |, y8 M$ v0 n

2 n" }9 P+ s! [$ K, T                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
/ E* j- K& E* _# i, ?; o                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
6 T4 V' H. h( y) C8 T( i                        yiDuanShuJu_mean = mtmp;
8 `2 M( H9 |) D* y7 x7 V0 b2 G                }# c, u. u: `4 y. a

6 R6 V# l6 c7 [                /*  找出极值 */8 |' V: g6 O3 l& ^' K/ h3 G
                for (ixstart = 0; ixstart < 81000; ixstart++) {: b' t+ K* [% v2 d8 G; `8 i
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;" k- j9 T  [: }) o, W
                }
6 a" S* q* I2 N6 v5 W5 h( K' o0 S4 \- }5 |
        --------------帖子字数限制------------------
3 l+ K* v, p5 W8 W( w1 f0 `- f}
; n0 q, w; }# a8 H
9 ?0 P' z- y) J2 G1 a
& j, s, e7 t- {1 S

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 19:36 , Processed in 0.043209 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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