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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 + u) K- s+ D" F
9 `- y+ B8 w$ `3 a" c8 ~
各位大神:
0 [: H3 {3 \! R/ s% _& _     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)( l/ p! p& p3 K* A  I# `' C% ^
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:0 n* o8 l( y9 W; L) B

! M2 U$ V3 F: Q4 X+ Q0 O     
2 r- y1 s6 D  B3 ?( ?0 H, u这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。4 t/ S1 ^% F* a* }

# h2 ~" a, S; Y. l; [并没有其他线程
4 s# [. t6 n2 Y) ?# w. G反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。2 B. q- K/ v% q3 A; P
也说不定是和堆栈有关系。。。。。。
5 k/ t! R/ g4 T' [/ e/ \" n请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
1 I5 E5 ~% S! ~3 s6 _! U1 }" @' w' h8 R( g$ P# N5 v

" L4 Q7 g, L' s, b8 @, @, J5 P! x1 K; K) d1 v3 a
我也很绝望啊,希望大神能帮帮忙,感激不尽,!$ B0 z! _2 M9 {6 l, `

' ~5 ?3 d8 q& H, T8 ?6 a( J  O- n, z3 a! v9 j8 B% b# l( S
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];3 ]1 ~8 T0 T1 Y& r8 a4 F) m
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) B# Z" h( E7 `4 |% I; ^

& P! i1 ^$ g+ |; k2 Uboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
7 N+ g6 \- z  |) F1 O! X$ r4 _                const double data1000[1000]) {
5 E" d4 S$ N4 E9 m8 O: K1 P2 L5 o8 j9 b$ ]8 t
        int myfuck;* u9 O2 g9 \+ I: p9 I
        double yiDuanShuJu_mean;7 B# J. Y( u8 {" L5 `& g2 Y2 N
        double yiDuanShuJu_LowMean[1000];, w' V: f4 S- b  |9 N. c$ U
        int ixstart;
; X5 l1 e8 @# B: J9 o& N; y  M7 _        double dv0[1000];
+ Y3 \1 G: u% r2 r5 X; I% B: |        comm_AGC pAGC;
# |1 D# E5 {6 \0 t9 O8 Y        comm_CarrierSynchronizer pFineFreqCompensator;
: p% N/ l$ J' K! y# V        dspcodegen_FIRDecimator pRxFilter;; v$ r" v2 {4 G) z  F$ H( Y
        comm_SymbolSynchronizer pTimingRec;
, V( G2 N8 s$ T5 l! `        comm_PreambleDetector pPrbDet;
' o( W: I/ n$ |- d+ d' p% o: K        FrameSynchronizer pFrameSync;
9 L9 n' U7 S) e. q6 X+ V# {) h        QPSKDataDecoder pDataDecod;
, D: z1 W( m( l% ~, |) n# N  s+ Q        static double usable_left_filtfilt[81000];
& o/ g2 o% M) ^+ {        static double youXiaoShuJu_QuZhiLiu[81000];
! q+ I" a, {  K/ o. d5 e5 L        double mtmp;
) t% Y5 S4 x0 l) }" J        int ix;* z/ y2 j, D: R* v4 W* N
        boolean_T exitg2;
8 L) u& E2 L' d# E! k0 \1 O4 ]        boolean_T exitg1;
$ D, r4 c/ ~$ H1 B( N/ ~1 P, }        double YiZhenShuJu[800];
, f+ d% G7 g+ f' `: A$ P! Z! w        double dv1[800];
& [1 A! O/ d, d/ L% L! q3 z+ u, a9 O0 ]- d* U( C
' }% _5 r( y1 N3 m* r1 @
        double b_YiZhenShuJu[800];- d: X. ~+ q% F" v/ M: M0 K, G$ o
        double I_filtfilt[800];. Q4 m: b5 M: N) u9 O, z
        double Q_filtfilt[800];
/ p# {5 k) e3 g0 g9 }1 s  ^        creal_T b_I_filtfilt[800];
- u: v) g/ U+ a, X" D. L        creal_T b[800];
6 S8 A; F- L' n6 @        creal_T RCRxSignal[50];3 C# m0 b$ K0 `6 P2 C) v$ S3 i
        creal_T fineCompSignal[50];3 H) H  y. a- l/ E" d2 K/ P( }) \
        double phError[50];8 F$ x  Q/ J# P- A" @# B
        creal_T timingRecSignal_data[28];' b. `% Q% h. S! {
        int timingRecSignal_size[1];
; E$ {/ H1 m. L        double prbIdx_data[28];
/ q3 y: r1 Z7 `        int prbIdx_size[1];& i0 |2 m, F& `7 [: T/ @! W8 @
        double dtMt_data[28];
6 a; w1 ~# {+ R        int dtMt_size[1];3 l& A  j! n! ?* h0 ~) r5 E& i- m. P
        creal_T symFrame[25];
1 C  K. J3 r. F. Z8 j( J        boolean_T isFrameValid;: l  y0 n- u+ n) ~0 A$ o0 u
        double unusedU0[3];8 v6 D. D3 y% ]; i4 Z5 I+ x9 ~/ F

: \6 s2 J! I! ^6 j8 Y        //调试过程中的变量
+ r7 E. E% E; H/ H. O  g        int  enough_data;" i+ g- D/ T0 v1 Z: F

9 `4 i  C* E& w. k- [4 b9 S: `+ e        int enoughDataFlag;
4 G* c: l5 c: k  n  Z9 u/ O  E+ K        int yiDuanShuJu_mean_int;6 Z  M& [0 r6 O& u" j3 r% t4 I/ o
        int int_sum_dv0;6 N3 G, c& d: u3 Q& h% f5 [
        int oo;; T& J+ G+ _+ Y
        int ii;* e( F. j1 H; H9 ]/ S; U, h0 `% x
        myfuck=10;2 s" f! z" I9 N; Q
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */) f& N5 n- ]; H! @
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
* N# Q4 L, O2 e' ^7 w
' S" f7 Z. I, ^; ]& T        yiDuanShuJu_mean = mean(data1000);
. q/ ?9 `5 c# @3 M1 K2 f: C
" v! R: l' ?6 _7 l* q6 h        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;# x" l! F  _& o4 w9 F2 B, ?& j7 f9 C
        UARTPutc('A');' e9 T; h7 i7 \8 d/ C8 b+ T
        UARTPutNum(yiDuanShuJu_mean_int);. j2 v5 F6 o- @) v: v0 q
        UARTPutc('\r');. V* J/ |6 Q) I* q% f! I7 N# w
        UARTPutc('\n');+ S4 S: b5 S$ N$ N) g3 t
6 E( v+ Z- {. V0 M. E  b; L
        for (ixstart = 0; ixstart < 1000; ixstart++) {# Z# m+ k$ q' G& g4 I
                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;, x# W' K0 s8 e  I3 B
        }
+ _( R2 ^* I2 A1 Z: J) m4 ]3 A: D/ z5 P' k' G
        power(yiDuanShuJu_LowMean, dv0);! t9 A' A! x3 C3 O
& u! g% X- p% [& _: u6 ]
        int_sum_dv0 = (int) sum(dv0);
6 a+ `/ i$ ?  ^) `/ s5 {5 E- I+ K' Y5 E. D. L0 @+ f: ]+ q* X
        UARTPutc('B');  s3 E- l2 e$ P/ i% e# i1 X
        UARTPutNum(int_sum_dv0);
2 M5 V. l3 ~! v# ~( A        UARTPutc('\r');
7 K. X& `* a! e. l* r0 _& e        UARTPutc('\n');
+ A9 l. U7 g0 o. ]) _6 w
* G# z" D" A5 d$ Y# S2 R$ N//        int compareFlag = int_sum_dv0 > 1.0E+8;
% p- z7 H9 m6 G( h. D
0 B7 T( B0 u. V, P- |        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
; @. L0 l" I6 O$ ~) u( |* d* j, C                UARTPutc('C');
" C$ b; T1 E" Y+ \                /*  比较信号能量 */( v6 s7 w- M" {
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */" w; \, K7 w1 `: s
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;- b5 F; Q; [# N( D, R6 @
//                for (ixstart = 0; ixstart < 1000; ixstart++) {  v  f* g  w  A3 @7 [
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =6 ~6 i7 ^) R3 v2 d' n+ s  I4 r+ E
//                                        yiDuanShuJu_LowMean[ixstart];; S5 m) M+ T9 z/ t0 P
//                }
: H1 l$ Z" \! [  o//
$ O7 t* W' d6 d* ~" ]: p, H8 o//                youxiao_k++;$ A3 B/ Q" {4 k9 s7 @  o
//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==+ u* k& m8 u. U5 \8 r1 I) @
//                        /* 感觉要取21个数,即0-20, */
; J1 c9 t0 v+ J2 P/ t; E//                        enough_data = 10;//有效是10,无效是05 q4 {4 Q; m  D* U0 R( i
//                }
( Z, y9 n) |+ D& O# q% t        }
4 x# i) Q" W7 x9 r5 L+ K2 A( \

- D: J  m8 Q5 \1 t        enoughDataFlag = 100;7 f$ S/ G5 l. J3 F6 {- @- _, z
        enoughDataFlag = 1000;( z1 r& f+ S; }8 y4 O1 {
        enoughDataFlag = 0x02;
4 }# p! L8 B9 F' b: ?        enoughDataFlag = 200;
. n; d  i+ V' ]7 j& n5 P. \# @  G) n8 t# }
        int myfuvk1;
& \" m( H8 @$ t/ g4 I4 A. u( p1 _        myfuvk1 =11;
% R7 c3 P6 d1 I  M3 c; m) i- {$ o, q- P& A
9 R1 O3 L/ @$ o+ B, a; r2 a
        enough_data = 0;, B+ H/ o$ B% {: j& ~  I, g
/ Q$ V1 O1 z, n4 S) Y/ t
//        if(enough_data>50){
" P1 C* v* A/ {" _& D/ @5 m//                enoughDataFlag=0x01;- q, d/ L0 \+ p: j: r
//        }else if(enough_data<50){
* }6 {0 U; t4 _- a4 Q//                enoughDataFlag=0x00;//0x00还是不行3 k, v6 v  l" S; }
//        }; O+ r6 P4 M0 {) K. d; o, y& k6 o" J7 @
+ p, L- l* ?' Z! B/ g4 S; C, `

0 t& [; T. F9 R. u, o) V        oo=10;  t8 H, ?) b9 O: k& Y  A8 w! {, f
        oo = oo  <  5;! V/ s( P0 U* @* r; X& o4 a: u! A; I
        if(oo){
; s. u3 T, d! ^) ]: F( A                ii=0;' H5 r* a) L7 C, }) |& r. I
        }
7 E4 Q% a* u1 @+ z* ^% O) \        if(oo  <  5){
3 O' i; f% W# M* T7 j! D$ j& `                ii=0;
! x3 K# u; J3 q4 Z  d) _        }
' ?- |% G- \: B) y; l& x! q" I        if(oo  >  5){
$ j# g' {) I3 @5 X8 F8 r0 r                ii=0;
' b; m' x( n0 L' C3 x        }' [/ T2 S$ U1 ]( h1 q

$ p- M& ~0 B+ b7 q  i+ a. F        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */' y! n3 l& x, b
        /*  如果数据足够才执行主程序 */6 i$ e- R4 K2 g- Y! [1 I4 ]
        oo = oo  <  5;( Q" B( s' K( p8 m8 b
        enoughDataFlag = enoughDataFlag  <  5;/ m& L! |2 |& X
        if (enoughDataFlag  <  5) {0 n+ e1 K" l) L9 h- x! k6 r& X
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
; m: N" p, m) _0 e" {9 {# I                AGC_AGC(&pAGC);/ n- b7 Y5 s& J0 s* |- j
# T) B, N9 {3 e# t) d, Y1 X) L
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);2 \. k" M4 Y7 ~2 \, q0 U6 v+ d# K: ^
                FIRDecimator_FIRDecimator(&pRxFilter);
$ ]3 s( f+ O: p: t3 h$ m9 q4 A
6 k8 N7 i2 J, n, h, y                /* Downsampling */& u: M7 J8 _, e2 J
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
. k. K# T+ E6 k+ [" r8 L, n6 g! S" [8 w
( T1 S) k' g, `& U                c_PreambleDetector_PreambleDete(&pPrbDet);
8 L- y  N! V! M) q; b% `; a2 c/ l/ [
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
. _0 W( Q5 Z2 D# ]* z8 }$ F                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
, K0 f, q5 R( z: M% d9 E) t. r                /*     %帧数量=100 */1 d9 K  ]4 z8 L8 m* p4 U5 k& t! _
                pFrameSync.isInitialized = 0;5 r( J& N) S+ G6 n% ?
6 ]1 O9 @% E3 D% s9 J0 l+ {
                /*  [EOF] */1 y7 t5 R7 C9 a8 L& r6 x( R- l$ o
                /* 前导码长度是13 */
8 w0 {5 K+ J( A! {  l                /*    %qpsk */6 t" p9 e, F& F1 p5 b! h  F
                pDataDecod.isInitialized = 0;% l  N% e, Z8 L  K) t' ?
/ P; ]' G6 _8 x5 ^+ b, g
                /*  end */
9 C8 V/ p6 N  S" B1 B                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */" E# c. I" G) N
                /* Convert 3-dB frequency */) g% a7 u4 Z, q$ y5 }' D
                /* Convert 3-dB frequency */
3 }; p: _5 z2 w( V& m+ |& S8 l# o) ]                filtfilt(save_buffer, usable_left_filtfilt);
6 d) m2 w! B( g                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 e- e- S; c7 L1 `/ t' ]! f. a                        usable_left_filtfilt[ixstart] *= 2.0;
. f, W4 ?* b$ @                }
; R3 W" ~; s) L; I! ?' F$ {# N( ?' v. p. R  O
                /* 注意乘2,处理幅度 */
. S8 @8 d" X, I; g2 R: M7 j                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */
# O1 B2 `6 T6 v% d' i& r; }3 W7 W                /*     %% 行列转换 */
+ ?" U# y! E2 g" F' A2 p8 q                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);3 C. n, Z1 z, a( n' {
                for (ixstart = 0; ixstart < 81000; ixstart++) {
' b3 [4 i' B" I  ?+ p                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]; a9 i2 r* z4 i  o% S
                                        - yiDuanShuJu_mean;
9 v( Q, i- T. g, R$ d% l% [                }. Z( K4 ^* W: R+ I
8 |- p. R3 @5 |  W) |
                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */  x) h8 L' g6 \* y- ~7 y7 V  X
                ixstart = 1;' h* m/ d! R, r7 p& ]! K! R
                mtmp = youXiaoShuJu_QuZhiLiu[0];
8 g( f/ J' j0 T% C! {* V$ e                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
* `* v: g  i- I- P" V                        ix = 2;
: }) c& P0 z6 O4 q7 b                        exitg2 = false;
3 [+ z' H  J. J( z                        while ((!exitg2) && (ix < 81001)) {8 a. e; F! b: X8 r5 Q
                                ixstart = ix;! M" {, }8 L7 K4 \" t' O! r- A
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {, E1 K0 r- s# X+ a* Q
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];& k8 @+ R& S0 L/ `9 [* a3 m& e6 k7 s
                                        exitg2 = true;
2 u& K* Y/ Y  D; U  \$ z; }! ~                                } else {
  t2 c7 F# \0 }0 i( r                                        ix++;, U, c5 ~) T( B" d1 e, y1 N
                                }
1 `% a* I( ^. J- k" E' E                        }
8 ~0 f; Y; Q0 |" X6 i                }
! r5 J& i  C, f7 U' l
) q) m$ d) W/ S/ E- o7 T                if (ixstart < 81000) {; V% Z$ O7 ^* ~8 |( n' W
                        while (ixstart + 1 < 81001) {  e5 P- D+ f1 B  o: w. N$ V
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {! X. P' q- g( |5 t# V' `5 f, l7 p
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];. Y8 w' H% s' D# d1 M5 D4 o" K3 R
                                }
; {* Q2 C) b: G
  T% \' I0 |2 |# G3 r                                ixstart++;# [, d8 i1 ?# R: C  y, A
                        }
3 \6 m# p% b8 X" `' k4 N! Z9 ^* ]                }
3 w# G2 e8 [% o' c: b6 L3 l9 x, A5 A5 j! ?+ X1 z
                ixstart = 1;. {9 e: N$ g9 m; F2 i9 e- |
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];: }& ]* P% j0 Q0 p
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {/ V, Q! H. a+ B5 T7 q+ l; j% {, d# f
                        ix = 2;8 B- ?7 a5 j: Z( p
                        exitg1 = false;
! ^1 K! [" {3 z) i4 G7 ]& L                        while ((!exitg1) && (ix < 81001)) {( S5 N9 L: w  o% i& w
                                ixstart = ix;
1 l6 X, }0 M! f+ `4 u) V                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {( U$ L3 ^) Q# D6 {6 X; k9 ]% k5 F3 C
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
1 N$ `& |& M( w1 K2 M$ r; \( B4 A                                        exitg1 = true;
) p" \0 d5 J2 s6 f$ c6 @  R                                } else {
4 H) d2 Y1 w; S- N/ P+ Z" [                                        ix++;6 N9 k( h9 S% q5 Z4 G2 q- o
                                }- T4 k* c: V2 c! i0 [
                        }# `& M2 c) t7 ?6 l+ ?1 j
                }
# L" q+ `# w( A% o% ?
7 L1 \1 ~* `* {+ D, j" V5 E, Q0 H+ p                if (ixstart < 81000) {6 Q! F6 p5 L7 {$ r: l: R5 ?
                        while (ixstart + 1 < 81001) {
4 W) Y+ Z8 I8 |                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {- `! Z) m( Z6 s9 E3 d
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];
; g! @6 G$ [. A$ Y                                }/ f; J3 R$ ]) c0 X) V3 u

  P! S" x' o( C0 T6 _4 \5 a                                ixstart++;
$ G! y( m+ U0 O5 j$ B                        }
4 x8 U8 F! K; g0 v3 t                }( g0 g) f' b+ ?) ^
8 r/ J4 k& g! ^& i+ `- M1 t
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);
. n9 X; V. T  _$ ?  L' D                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {) a  F" Y7 I' r) ^% E
                        yiDuanShuJu_mean = mtmp;( n+ l9 ]: }: m+ C9 |
                }
$ A# @; s. J5 W! g, o' x' s9 ^/ M8 V8 e9 K7 l+ ]. b7 m
                /*  找出极值 */
' V# F7 a7 `' F" u                for (ixstart = 0; ixstart < 81000; ixstart++) {
9 Z$ r4 j- v8 w4 w2 U. p. L                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;' h0 P: c! Y  u- B  @+ r2 E
                }
6 C8 w# k. N; m; D9 O* W3 {8 d6 o/ l
        --------------帖子字数限制------------------
( F0 c+ Z  C; Q% d}
7 N% a. w3 O0 H* n  c& O% u/ p. I7 P+ F* f+ H. ~7 M

$ E3 G6 k# B8 B7 z/ p( Q

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-31 23:37 , Processed in 0.049117 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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