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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑 ( T- z8 a+ l' W+ l1 C* F

2 g3 ~. z( f6 b各位大神:
' m$ ~* F8 b* E1 }( c     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
( I# R* i4 w. d- ~  I7 [& [/ Z      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:1 T( x- w" A' L- n, _0 {
/ J. d( |3 W! m; `* J" @5 x
     : Z. ]- e/ t3 B& ]9 S* W
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
7 J- a& E  w% W% _5 Q; k8 x! l6 J" \
并没有其他线程1 p8 B& g4 X- \
反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。) I+ j3 D; k# S5 Z% J
也说不定是和堆栈有关系。。。。。。
2 N5 i% a7 j3 @: Y# b. A请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
. D! {1 `2 C2 F7 t$ {# d
0 I+ S/ o' c  g! i; j- y
/ W; V; |1 Y1 @- \9 m/ D4 J: F" _0 A& M/ f
我也很绝望啊,希望大神能帮帮忙,感激不尽,!
$ R! o2 @" P! ^0 |' [6 e* T; G, t, S5 k- E! b

$ Q  @2 z+ [; B8 Z附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];. U4 _2 \, d; H6 g6 z) ]$ P
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
# G8 g/ ]+ \1 U1 U1 Z$ d6 ~
3 R+ `1 Q/ j6 n/ Bboolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(& p% p$ o1 ]5 D& w+ Q8 R
                const double data1000[1000]) {
+ v; H3 S" d  Y3 p7 K. T8 T$ q/ N' K5 S
        int myfuck;
( h: k% j7 A; M) B( x        double yiDuanShuJu_mean;
% f! Q3 g9 c% L" ?        double yiDuanShuJu_LowMean[1000];
1 h+ L0 \9 f) Y% ^9 r        int ixstart;4 d% |& @$ x: i7 }
        double dv0[1000];
2 _8 w) X  C$ R, ^+ x2 a) T        comm_AGC pAGC;' c2 p8 u- q6 D
        comm_CarrierSynchronizer pFineFreqCompensator;- t: Q) }9 O  D; C7 f
        dspcodegen_FIRDecimator pRxFilter;" z4 |; f5 L! q. @* s
        comm_SymbolSynchronizer pTimingRec;  n; @) @% ?( c2 g; i6 k8 O
        comm_PreambleDetector pPrbDet;
/ X( ]+ X( {4 i  X1 S9 ]8 n        FrameSynchronizer pFrameSync;
- R. w7 |- _4 `' ~+ c* p        QPSKDataDecoder pDataDecod;
/ j! C  g% V1 `7 f' @        static double usable_left_filtfilt[81000];
0 s. O; l* s6 i& M4 _' x8 h# O        static double youXiaoShuJu_QuZhiLiu[81000];
7 T0 f2 q* c5 z, R# n; u        double mtmp;
1 K: k2 k$ {- R4 {        int ix;5 h, j/ U. s9 l' H" n2 ?
        boolean_T exitg2;0 U# A5 n: }4 G* ^
        boolean_T exitg1;0 i' a+ P0 Q  `5 Q, {/ G; \0 W
        double YiZhenShuJu[800];
  s5 X4 X6 H0 u9 B6 A( ^* z% w        double dv1[800];
$ P; s$ r) `3 q1 c
% E/ E: Q. V5 P3 X, ]; ~. K0 {. _. w; _  [  f
        double b_YiZhenShuJu[800];4 F7 |$ \% @! y8 {
        double I_filtfilt[800];7 o$ ]8 V! Q! A9 x+ ?& W+ v8 E, [( v
        double Q_filtfilt[800];% X2 Y$ G. x! N$ Y
        creal_T b_I_filtfilt[800];- U% R" e7 i- p. q
        creal_T b[800];
& v3 k9 {+ |+ Y/ n( w        creal_T RCRxSignal[50];
) @- c% n# X2 l. C; g6 ~        creal_T fineCompSignal[50];  U6 |* K6 d& d. t( x7 {
        double phError[50];/ B5 w7 z: V+ A) A! {& ^0 b) ]
        creal_T timingRecSignal_data[28];
$ o$ Y6 E0 u0 `3 b( Q4 E( ]  P        int timingRecSignal_size[1];
" ?9 C+ O4 Z+ s1 A2 {3 f        double prbIdx_data[28];4 v) E2 R3 q7 u* r' F3 g
        int prbIdx_size[1];4 r2 \0 c7 Z4 r4 Q' Y3 x
        double dtMt_data[28];3 F% \' K) r4 J$ v+ X2 P8 q# W2 Z
        int dtMt_size[1];
* C4 w' l/ w3 c+ c' ]+ x# |7 q# i        creal_T symFrame[25];
- L( R6 ^3 s) k( ^# p        boolean_T isFrameValid;
0 Y9 e4 v7 m9 @7 J+ B2 Q* q        double unusedU0[3];9 j6 |' E$ [7 O1 T) X9 @" u6 Q2 i
, R0 Q/ ]% U/ C7 ~" f# I# Q
        //调试过程中的变量
9 K5 E# M) M6 y        int  enough_data;5 \4 x; f8 [! Q4 f2 X
5 h9 K0 i& C- O9 `
        int enoughDataFlag;
3 S& J' R. A7 r+ o5 _        int yiDuanShuJu_mean_int;# p& Q- m) L$ F8 T% ^' _
        int int_sum_dv0;9 }" i9 X; T2 X! Q! j1 K
        int oo;
; W, n2 K. F( m- g/ U        int ii;
, f: b. X+ i' m/ E        myfuck=10;
* _/ A2 z" `& T+ P- w        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */  `: `: j. U! S5 x5 [6 Y" l7 b0 p: ~) R- q
        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
6 x# V' P# x5 e8 Y$ A
6 [7 @, r$ q( z" e3 V        yiDuanShuJu_mean = mean(data1000);+ R% M& G* F/ v* H  I7 n9 i! v
! `* \3 L4 S, P) ?
        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
8 S- Z3 D/ B* I7 o( i" E* x/ ~& N2 j, B        UARTPutc('A');( h2 w4 ?8 l' U( Z6 _6 s6 c
        UARTPutNum(yiDuanShuJu_mean_int);
: c5 B) B  v) ~7 t        UARTPutc('\r');5 C8 M/ l1 x6 q
        UARTPutc('\n');$ [" R4 L# m! x% S$ n% S% |# u( f
7 S6 `- E( w3 ^) d* Q' u  Q
        for (ixstart = 0; ixstart < 1000; ixstart++) {
! D+ V7 [& ]. U0 u7 G8 I                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;7 d+ J5 ~( Z8 F
        }! j( K% \  M; j6 u6 X- c
; I2 d% w+ F3 G& B& Q
        power(yiDuanShuJu_LowMean, dv0);; `/ }+ R% U% p& p' U5 Z5 f' V/ o

1 u  b9 h3 _0 K4 l        int_sum_dv0 = (int) sum(dv0);
/ Z- t& Y$ N" \* C) y% g
5 [( W$ N! a' B4 t0 B0 |        UARTPutc('B');
, C+ y3 Y* j+ W; _        UARTPutNum(int_sum_dv0);) M$ r1 S+ o3 \# U. N6 K6 A
        UARTPutc('\r');
4 |( ^7 h5 \6 x/ H* E6 b        UARTPutc('\n');
( [+ G  H2 G) G1 H; y1 T+ c9 Z
' I0 ]" j+ x+ r) V* v//        int compareFlag = int_sum_dv0 > 1.0E+8;( Q. l9 O$ k, _

" d# I: S" ^% `6 o" g2 m" k, |        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?
2 {& `% }) n# O' Q5 |" B                UARTPutc('C');
  M8 I' z$ ]9 n6 D6 q8 _% v0 E                /*  比较信号能量 */
2 s: I8 c+ u& o) Z8 ]& O                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */
* H! q& Y5 t; ]3 z7 M//                yiDuanShuJu_mean = 1000.0 * youxiao_k;) w, S" t" D7 ^, e- n8 _
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
: D2 `! z) Z7 Y1 @5 |" a0 k//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =3 [; B: ]# G) y. m, D
//                                        yiDuanShuJu_LowMean[ixstart];& i" H3 d4 }) i- ~4 U
//                }  F" W" S& b- G8 p! J. s$ l1 D
//! J: [5 ~* N+ d& T0 ~
//                youxiao_k++;
7 d# d. ?& `8 j//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==) ~% G4 }; l/ e  |7 v- e: F: w
//                        /* 感觉要取21个数,即0-20, */
& ^% V3 w1 w! Z  e( c//                        enough_data = 10;//有效是10,无效是0
( d2 N+ U' h: n( l//                }: t: H1 I, e: D$ L, c8 l2 {7 q5 G0 e
        }
! g" D# I# _8 x# t
  g0 z1 H! s9 {
" H' B3 o& q$ L' R& p" V        enoughDataFlag = 100;! i  V$ n7 s8 {3 f
        enoughDataFlag = 1000;
; A8 m* P2 d& E& [2 b/ l        enoughDataFlag = 0x02;3 M( M/ F; z# J( w& p% p
        enoughDataFlag = 200;* G' H& q( G$ n( J

) C$ Y3 Z( }3 Z* Y5 z8 e3 d        int myfuvk1;
1 V$ g7 H- Y! O5 |/ |/ T        myfuvk1 =11;6 _( R0 x4 ?4 n  ~" G& ?
% \; l/ W! V# ?9 I3 D6 J

+ Q4 C' S5 r/ {" W, k        enough_data = 0;
' q# H; B" Y8 z" N& \: t; @8 \$ f6 w! R6 A' C
//        if(enough_data>50){
" h9 o8 r0 X" S# t8 g- t//                enoughDataFlag=0x01;. _+ F: H3 m& \$ Q/ P: F- u
//        }else if(enough_data<50){. ^4 D& W; F& A* M5 L
//                enoughDataFlag=0x00;//0x00还是不行
4 k: e  S9 Q" R/ b6 t9 H; s//        }9 A: n7 M0 @3 R1 W7 p
( V5 {% d; b- m. P; ~% A- O
6 n4 Z+ H( R+ ?; d: [5 M# u% D
        oo=10;1 _9 d: a' k, e0 n
        oo = oo  <  5;) S$ T/ Y, o7 @2 s" r3 c
        if(oo){
/ s/ [4 K3 S: ]                ii=0;: G, [+ ^5 m6 v
        }
- B* V5 |: }* ?6 n( e" [        if(oo  <  5){
3 _7 U( V+ c4 b# [                ii=0;  J6 a6 i6 O7 D' C" |% J4 \- R' k: Y" K
        }
; Z3 _) ^! l0 c! B+ x' `        if(oo  >  5){# i8 k( w* |! i2 F) A  u
                ii=0;3 g& a( `8 J1 r; q7 d4 C, }* c" R) A
        }
: w* f2 h" X( a* [7 l% N) V' h6 ?, P
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
) b# W- l. P( b* U+ Y        /*  如果数据足够才执行主程序 */
0 W) `6 E) Y8 F/ C        oo = oo  <  5;
& H* M9 {5 v4 _. k; o6 j: {) {        enoughDataFlag = enoughDataFlag  <  5;% S0 `2 h" U' U4 Q# f0 b
        if (enoughDataFlag  <  5) {$ ^4 T; s* ]3 R; U' h4 A
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
: N& B( Y3 {- `5 K" [6 i                AGC_AGC(&pAGC);
% `6 }$ b# _4 Y$ i" Q9 I' I: r5 b* Y: r1 y" s
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);" H6 S' w7 \; U; R; x
                FIRDecimator_FIRDecimator(&pRxFilter);* m2 ^( a# Y+ ^- Y6 L% p

  K; P& ?% m8 t6 B  B# B8 B5 d                /* Downsampling */( [9 I( f+ B, X% o
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
8 j5 ?8 x! Q+ ]/ B1 b
7 ?" F$ O0 ^9 F  _! ~                c_PreambleDetector_PreambleDete(&pPrbDet);3 W% b3 p; U7 Q* Z) w
! r0 p2 z& L: o/ m
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
/ |1 V/ w. ~! q' Q7 Z# B                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */$ O' Y7 l3 ?- h8 C3 l! k9 _6 }* [0 ^
                /*     %帧数量=100 */
. a8 w  E2 w9 [                pFrameSync.isInitialized = 0;% _/ c4 p3 n* O% L( c; v2 Q+ T
& S8 k5 s1 Z8 W
                /*  [EOF] */
' v- {8 `( f% A4 |6 o; C) u) R5 \                /* 前导码长度是13 */4 O: s% X8 `( Y; F$ E2 |- J
                /*    %qpsk */0 \, l: k; S; x7 ?4 Q4 [
                pDataDecod.isInitialized = 0;; h6 G9 r2 T3 V8 I+ L+ x/ f9 g
& C5 h' k3 q+ W+ p5 o, N
                /*  end */. [* @! Z& y; J: q+ b  A) t
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
* K. X- c- Z( h& N9 b                /* Convert 3-dB frequency */
" d, x* k+ A6 D8 f% e                /* Convert 3-dB frequency */1 {8 ~3 ?) I9 K6 j$ _
                filtfilt(save_buffer, usable_left_filtfilt);
9 i. ]9 Z( D1 g5 y) H  G  L! }# D$ W                for (ixstart = 0; ixstart < 81000; ixstart++) {
& F' U3 C1 y  }+ I1 K                        usable_left_filtfilt[ixstart] *= 2.0;, q+ `$ G- e( B: T
                }
/ e8 ~7 p1 p9 k9 F
* N: @- v' V" x- O                /* 注意乘2,处理幅度 */2 i  C; j% @! {& l
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */7 ]9 ?) H- w3 X2 }9 K5 B1 b3 b2 D
                /*     %% 行列转换 */$ \2 q8 I6 b+ a! Y: _/ D7 j
                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
( D( L7 j. I6 Z& y% o. q5 B                for (ixstart = 0; ixstart < 81000; ixstart++) {
7 B7 q2 M7 T7 H( }  N9 [( {                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]$ o+ u* ?2 [% @/ y4 Y
                                        - yiDuanShuJu_mean;
: \2 P9 i/ h3 x6 D3 X  \; Z1 `                }
+ B7 L5 h+ ]2 @1 W$ F" A/ u  }3 R" p
: I/ H- P: K8 I1 k: Y2 p+ d1 M                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */* L& M' F* ^- J1 V4 {& v
                ixstart = 1;2 o* I( k+ O$ k) e# r
                mtmp = youXiaoShuJu_QuZhiLiu[0];
0 T2 n: X7 ?7 L/ v+ n* S# m! T                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
3 r  d/ g$ e7 I' N                        ix = 2;5 H# H* ~' Z  M: {
                        exitg2 = false;" O3 b( T9 a4 K# [0 V6 n' q0 ~/ W
                        while ((!exitg2) && (ix < 81001)) {
/ [, k( s- y! v3 P                                ixstart = ix;; ~3 r) q" k% N: x
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {+ G. n0 r( o7 W" L# \  o
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];7 b1 x% H" i; w8 j9 d1 g
                                        exitg2 = true;
2 i! U! D( `0 x3 O- C                                } else {8 p" |7 d% [) i# |* w
                                        ix++;8 n4 q# S" J' d& E% c% n5 _, u
                                }& l( ^8 J5 c; e/ o
                        }1 ?* m3 }9 p3 t% K6 d1 ?4 i
                }
6 }6 Y: E& o9 ?& C3 ?" u, j2 g1 b* L: R4 L. e# M0 w) M; b" _
                if (ixstart < 81000) {9 t( C# V8 ~! U; P' L- p1 M+ r
                        while (ixstart + 1 < 81001) {
+ y' x, p4 a" ?5 c+ k8 t/ E                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {8 N7 O: V. O% W
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];; g5 k+ Y7 }% u) H+ H
                                }( D& X2 D# y2 u) [9 `, d: a
0 V$ X0 F' U" ?3 \  z
                                ixstart++;
2 X& h  W( G- u; t& W                        }* x" l( ]& w" r; s/ H+ H
                }
# I7 k9 i. n0 {/ {' m. u( p( h3 R; P7 v) a
                ixstart = 1;) ]  O2 O8 L! b0 @/ j6 s6 v) G
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
; }1 F  n! L+ z- f% v/ H                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {2 R- p" i% A/ I7 [4 M3 }6 W
                        ix = 2;
. U4 p6 }5 `  h; a0 g( G                        exitg1 = false;1 T* E9 U. m" s& }
                        while ((!exitg1) && (ix < 81001)) {
, t; ?5 Y5 k% n6 r) J( q                                ixstart = ix;% Y0 m7 T9 @) u' [' D
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {4 U9 ]+ P) }) `8 ]9 H* a+ {
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
! {# p! e# [6 e! m5 W                                        exitg1 = true;
2 B6 T. Q  l% @3 U$ }0 Q                                } else {# ^: o' |: J" \' U2 i
                                        ix++;
2 Q7 s8 K  |$ C  k$ B3 P                                }
3 I4 q: |/ f8 f; @" o+ Z. [                        }
3 j2 O! W# `$ R1 B1 u                }
0 l) U# k$ M. a
) l4 R9 W8 Y4 w; Y. @) F/ `                if (ixstart < 81000) {8 e5 u% H( L0 y0 K
                        while (ixstart + 1 < 81001) {
8 G# z* d+ C  G                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
5 b& ~8 @. x) U9 j7 l  Q                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];. _4 p. z4 S  e
                                }
; {: t6 E7 s5 O3 l- _$ C! Y, R
# @- F  f: F8 G. S! f! ]: }& e                                ixstart++;' n9 N5 h6 n4 \$ q
                        }1 A1 I# s6 U/ M1 P) o5 Z* c) [
                }
, _& |3 }' c! q& A2 D9 W4 X: q+ I0 g# H
                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);5 ]- B  S; B. e+ q7 ?0 y2 P+ G
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {
/ _) n$ B7 ^! Q8 w" M                        yiDuanShuJu_mean = mtmp;, s/ B# u# N: g3 V5 U
                }) Q& |: I( ^6 Y0 h8 B4 N# w5 J

7 ?$ w) P% J" H" L* D8 ?9 y                /*  找出极值 */
: i6 \" ?$ c$ o( f                for (ixstart = 0; ixstart < 81000; ixstart++) {
# J( K1 a* b6 ?                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
" w/ n% ^' f/ ~) V8 O+ s                }0 i1 S* r( W- M6 {

% a( V/ f; {4 |1 F/ j6 I        --------------帖子字数限制------------------
/ ]4 I; E& Z' u3 q  Z9 C, u3 ^}) w$ z( l0 E5 R

3 d  @4 K; v; m" ~) ]* M# \/ c, W: h( k* p3 J: Q4 K8 ]  b

本帖子中包含更多资源

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

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-17 06:22 , Processed in 0.050966 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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