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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
; t  D, s0 Z$ R4 A! k0 S
3 K! g3 ~" }, c. T: ?各位大神:
& d1 H+ D9 S! X     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)
9 Y/ h3 ]+ u3 p  E' }      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:7 o: [. e6 {& T7 q" V9 k

0 z! p* x& R0 \+ |8 R/ g4 Z( O     7 S& D4 N6 V8 b1 N* C
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。1 z) F" M2 ]0 ~1 b, n  D# U

+ G$ C5 p0 `/ e; |, g1 [并没有其他线程
( Q: M! c$ U8 a2 o3 X反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。5 G3 |3 F) W9 y) ?5 i
也说不定是和堆栈有关系。。。。。。
4 C( N- J. T0 R- t9 {请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
3 d4 t: [3 I. Z% q# R) ~4 m7 d- [0 H  x- B& D: p3 U5 K& s) y

& {! I! @7 ]9 e+ N  j: K. `6 Z, x- {
我也很绝望啊,希望大神能帮帮忙,感激不尽,!( r; Y9 `% I5 [+ {. p
6 c, F/ X$ u1 M+ q5 {" S
# l+ w% f$ R1 k- V
附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];2 c9 B' x, `! P
        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。) Q2 c' ]' S; D) w* L1 }: e7 V
+ ~& c9 b& `3 P- B. k9 L7 K; Y
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(3 z3 c8 {) b; e/ m& h
                const double data1000[1000]) {1 r: J/ b6 C) i7 \% b

' }/ j* W1 {" k" m, B# y        int myfuck;  b/ X: v& \" J1 E
        double yiDuanShuJu_mean;
. J# Z2 q. O3 d# Z' s% A1 ^        double yiDuanShuJu_LowMean[1000];5 |' s" X: I# P* m
        int ixstart;
9 V7 E- P: r% C) C6 @, P: j2 Y        double dv0[1000];: b* j8 H. [& T
        comm_AGC pAGC;
" [$ I% W: l- C1 R& u1 D8 ]! b7 ]        comm_CarrierSynchronizer pFineFreqCompensator;! h( z: f' x; v8 |
        dspcodegen_FIRDecimator pRxFilter;
. e- ?6 C5 V6 i0 ^& M: X/ I; @        comm_SymbolSynchronizer pTimingRec;& i$ M  W6 I- O- v: j8 `
        comm_PreambleDetector pPrbDet;  @( |5 o" i% |1 x1 w
        FrameSynchronizer pFrameSync;
+ S" k2 r+ \1 v3 Z( G0 z        QPSKDataDecoder pDataDecod;
6 j9 w$ j6 _) |+ P        static double usable_left_filtfilt[81000];
% |' i+ O  M* `3 N+ ]1 I8 A- z        static double youXiaoShuJu_QuZhiLiu[81000];5 e/ Q0 h/ |  N' r9 n# L0 ~
        double mtmp;
' C+ o9 e- B8 S. K  c. T3 K1 H0 ^7 f* i        int ix;
2 G+ H) _* Q& p+ m8 p        boolean_T exitg2;
5 ?9 ?5 F/ a, u        boolean_T exitg1;) ^# s7 H2 \& q7 j' @8 J6 I
        double YiZhenShuJu[800];& ?9 {, P  D& ?6 y0 e
        double dv1[800];
% K/ s: q1 W+ G! e7 T, t4 z- Z( J& \4 Y

+ g6 P: Z5 a; W) F" k" z        double b_YiZhenShuJu[800];1 S3 j- H& m9 k* w) Y
        double I_filtfilt[800];, q5 C, M5 J+ d) q
        double Q_filtfilt[800];
; _4 |" e2 B  F9 `  k) r        creal_T b_I_filtfilt[800];
/ p# A3 B/ i: c) H! i0 \, ]        creal_T b[800];8 F% \7 `$ M& ?1 E- l8 r% h/ u
        creal_T RCRxSignal[50];* C0 J# N* L4 u5 x1 P7 c
        creal_T fineCompSignal[50];
9 `* F4 J3 f4 j3 U9 T4 I, X/ B. ~        double phError[50];' m; k+ w4 g& }+ F- L
        creal_T timingRecSignal_data[28];
5 \) m( K4 h8 f2 {7 `! X        int timingRecSignal_size[1];
& G. _' g3 v; G) W7 ]        double prbIdx_data[28];
" X! M- P; R& n+ U. D        int prbIdx_size[1];$ A; ^* M% l5 M7 m3 j$ J5 x7 k
        double dtMt_data[28];
0 s7 Z- i  r$ g, q7 B/ I        int dtMt_size[1];7 G8 j, L; X, Z8 ^
        creal_T symFrame[25];  M# z* N! W5 _
        boolean_T isFrameValid;
2 v' d3 s6 B/ H        double unusedU0[3];# f6 Z: V% v+ f/ o; j9 J
7 O0 _4 l) A2 U/ k0 h$ |
        //调试过程中的变量
9 z. y/ l, c5 I" n/ F3 l        int  enough_data;
( e; h% d5 {% Z' R
' j; b7 t5 R9 q" R* }, j- a8 _        int enoughDataFlag;
9 G4 K. u3 A. [1 m4 h        int yiDuanShuJu_mean_int;2 e- n  k8 T7 g- k
        int int_sum_dv0;
% z2 s$ T" d9 p$ u7 c7 T3 n  @2 m        int oo;
2 a+ s( ?8 k7 n: H" l        int ii;
4 ~' V. \* _3 C        myfuck=10;" O3 i7 R) F& q" }$ T( u  X
        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
* R) c: v$ ~, o- b' H% E6 j        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */* Q; `- K& I0 W/ i

! D; i  I4 g6 E- }7 P2 r# ^        yiDuanShuJu_mean = mean(data1000);: J) h) N8 a. z& M- L

5 [/ i7 n! I% U  W        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;
$ g2 p$ N% Y0 U, b* L" N) ^        UARTPutc('A');! q: H8 m0 g1 ]
        UARTPutNum(yiDuanShuJu_mean_int);
& r& I( R* w; b: y  s. f9 c) e        UARTPutc('\r');
2 m* p+ g6 k( l8 I* _; o        UARTPutc('\n');
# u( {& w$ O0 j. `8 j* V$ Q8 H$ |/ `; N, i# k$ M& L
        for (ixstart = 0; ixstart < 1000; ixstart++) {
! H! k# ^/ g  v' o: x                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;% f$ n/ {( h6 W
        }
- L5 {/ ~$ q9 {( {6 _
- ], [& O+ a+ f6 Q+ E        power(yiDuanShuJu_LowMean, dv0);
3 |6 K) }  f+ L4 k4 {: T$ J7 n2 o8 ^) W! c8 c
        int_sum_dv0 = (int) sum(dv0);
+ e+ {" u! V' E0 d6 i
% Y7 p% C6 U' o( h: X4 C. x4 i. k        UARTPutc('B');! I; C. B2 R6 w0 ?. Z$ [- Q
        UARTPutNum(int_sum_dv0);6 g3 B+ F0 H" A
        UARTPutc('\r');
( @  X, B+ G& p" x7 M2 l" Q  U  C4 Y+ f/ V        UARTPutc('\n');0 P; D# W! u7 W) w+ C- s

2 ~) H' [2 h8 \; K1 ?//        int compareFlag = int_sum_dv0 > 1.0E+8;
+ i, j' H( }) z. }) P$ H0 v1 Q8 I( c" b) @
        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?/ a& f1 L2 n: P: S5 Z. R8 Q) T
                UARTPutc('C');7 c! J5 }3 O2 \- a5 q
                /*  比较信号能量 */- f1 \/ K) C- N( B$ i$ \  Z( w9 e
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */( u3 h6 ]3 d! k
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;
" e% l  M/ r. k! Q//                for (ixstart = 0; ixstart < 1000; ixstart++) {, ]3 n1 }  o% e9 L
//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =, u6 B3 R2 S! r, W/ i$ D
//                                        yiDuanShuJu_LowMean[ixstart];/ D; I/ _6 t, Z5 {
//                }; H  g- }4 F" E  ~& s5 A
//) |0 ~0 |$ F6 a% W( m$ e% d2 U
//                youxiao_k++;
4 X" ~9 {. u  h0 _//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==
7 D, }8 [& L+ T! T# S+ u% H//                        /* 感觉要取21个数,即0-20, */( w, G: e- K8 l( h! R2 e
//                        enough_data = 10;//有效是10,无效是0
) s! k8 v# b0 D; M5 H//                }
% Z; y4 P7 l3 D/ v% S        }
  |9 Z9 p+ q$ J2 t+ t: O% {* ^' U% `- E% C, J+ V* }
1 Q/ S9 s7 x" k" [- p& b) B6 b
        enoughDataFlag = 100;
+ D2 a; |* g. v: j5 L( h" r: k        enoughDataFlag = 1000;
# A8 `3 ?5 r) y        enoughDataFlag = 0x02;
0 N4 S" _8 F0 [: e        enoughDataFlag = 200;
( E5 y2 c7 I  P" {9 p* ~5 v8 l1 \& A. A8 P
        int myfuvk1;& |' W2 x% O  g+ J" n
        myfuvk1 =11;
$ C/ ^( `5 A1 j/ r
' j& Q5 s4 H( l5 r" U0 M# l- W/ E- u  V3 O# S" t1 N
        enough_data = 0;8 M1 x0 |2 x' n; ?9 u
3 X% T# L* y, O! U& Y& Z/ x
//        if(enough_data>50){; `) `3 R" {$ v; w
//                enoughDataFlag=0x01;1 U" Y# H/ C( w3 w0 k" f) m- I
//        }else if(enough_data<50){
% |1 L( G( B, Q0 i- z, e7 v/ C//                enoughDataFlag=0x00;//0x00还是不行( _2 T+ V# e7 G! a* k$ v
//        }3 e4 g* G  @6 e$ [

  R/ C3 e6 Q0 X0 E1 k2 m8 Z. Q7 P* y% ~) P3 k8 ~
        oo=10;* y, p7 M% E, f, t9 E4 C
        oo = oo  <  5;
7 D$ R- L  u" T2 c        if(oo){
0 m% ~% m+ F! p) n                ii=0;
" H# _" P  n; J/ o5 b        }
* F# d1 G' s( ^        if(oo  <  5){
" V- u" x0 D7 l; o                ii=0;
, a' b- f4 \; R( Z. @2 x+ s* B        }2 Z0 T* C3 i- |$ v5 s4 L+ G
        if(oo  >  5){0 d" b( H9 p# V3 a: u9 r$ t% y
                ii=0;
8 b: z8 |: w' e4 U        }# e% S, l& w" w3 Z5 o. P! t

( L5 ?: h5 W2 y. c& H5 F9 O; @        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */8 K* u6 c  c4 s5 A- E  j4 d/ `
        /*  如果数据足够才执行主程序 */
' L' Q/ s5 k# S0 C3 |        oo = oo  <  5;% H+ ^+ Z  m5 h  J
        enoughDataFlag = enoughDataFlag  <  5;
, A2 B8 }: Q9 c8 p: P6 S0 O$ y9 J        if (enoughDataFlag  <  5) {
  {- s* U6 M' i# H) g0 |* I//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0- F/ O5 y1 L1 F( y& m$ I
                AGC_AGC(&pAGC);2 C1 x% W/ V; ?* _$ u
1 j8 N' ?/ T. n; W3 p7 i
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);* z/ \$ y2 n5 U
                FIRDecimator_FIRDecimator(&pRxFilter);, z8 Y8 G+ H; H, u  L$ q' \8 ~5 i

; k4 W3 h  t+ n1 N9 Q- I9 W                /* Downsampling */  w5 }3 g4 O& ]2 F1 H
                c_SymbolSynchronizer_SymbolSync(&pTimingRec);6 k% G( ~7 I/ y

7 X9 ?4 G& u6 j; ?$ m) q8 \3 ~. e                c_PreambleDetector_PreambleDete(&pPrbDet);
- Y8 w# V4 U4 Y- i/ o) X6 n! L3 M7 o
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */
* t& b2 c' e: ?6 ], X& a$ c% ~                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */
5 J# R: m8 r$ r6 q: \5 t                /*     %帧数量=100 */
/ {9 O; X4 |7 I$ ~4 m" D: y                pFrameSync.isInitialized = 0;  o( C8 H" j3 [* S0 {6 C# n6 y

7 ~' k( |/ B9 V- C* \                /*  [EOF] */
) o! c$ e7 Q. K( Y                /* 前导码长度是13 */
: r! d# p( J4 A( c: f8 p                /*    %qpsk */; \% r6 a- T, y+ r* ~2 D  z
                pDataDecod.isInitialized = 0;2 B* Z: a* [9 U

( i. `5 a+ p) {$ {                /*  end */) T' l5 s6 U5 q, _
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */  Z" E  W4 o2 N
                /* Convert 3-dB frequency */
0 A6 u( v( B0 ~; M. c/ S2 X                /* Convert 3-dB frequency */
  p: v- r9 J4 h9 @' d                filtfilt(save_buffer, usable_left_filtfilt);' n5 T9 @$ o. p0 z
                for (ixstart = 0; ixstart < 81000; ixstart++) {
# C3 {0 e3 l- K" @  l                        usable_left_filtfilt[ixstart] *= 2.0;9 }# z( H. f% P9 L& w: r0 z! W
                }& y" i$ u' z0 o, x+ x- i
7 Z' T$ x! M& m5 O
                /* 注意乘2,处理幅度 */) s  K- {' |( X0 O9 D
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */" v0 R3 G/ V& ]
                /*     %% 行列转换 */
2 w6 u2 d; ^- K( ^/ t* z) X6 c                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);$ w5 s( z$ H2 O" D7 E
                for (ixstart = 0; ixstart < 81000; ixstart++) {, v' n1 p. C+ e, O/ I! f
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]
# O: b; D- I) n; s                                        - yiDuanShuJu_mean;
0 Z3 I- s* y( x8 F% A                }
3 a( X; O$ G8 r) z! p) N
3 s) o& }0 \8 b# \. C                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */
$ y9 G0 j: w( a8 A, {! x                ixstart = 1;0 G4 a8 j- h0 M) s+ |" U( U
                mtmp = youXiaoShuJu_QuZhiLiu[0];' J; P& A) q; j) L3 X
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {/ Z6 B% Y+ q3 R. m& N- x- `4 L
                        ix = 2;2 a6 |8 f, D4 K) Y2 o8 P) Q- ~  w
                        exitg2 = false;
& _' Y6 \: S5 _: ^% [9 l7 Y                        while ((!exitg2) && (ix < 81001)) {
# K6 X: c/ |0 M                                ixstart = ix;. x0 R+ j3 F& i6 D$ N# T
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {* B' j* E& ^2 X+ S. Y3 f
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];% g+ G+ t  {4 l1 U
                                        exitg2 = true;1 {  V6 Y" }: P* Y; U" \5 [
                                } else {
) l; A3 [9 I" Q% [5 Y- b' ^- Y6 i                                        ix++;
( w& Q  Y$ P% M3 `4 E' i% ]                                }
( E! Y, v: m# h4 Y8 h& f                        }. d6 V- N/ X& V
                }: H! s; _0 p0 I( F: c

7 E) ^( y$ a3 F8 J- h) I4 M                if (ixstart < 81000) {( V1 ?6 Q7 g* E; P; P" T) B
                        while (ixstart + 1 < 81001) {
0 `: G* k3 z# l: a5 U: d- h8 O+ X4 d                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {& o  h: f( D' o3 |
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];$ \! U7 |7 w  V/ t  \! ?
                                }3 ~  e$ d5 ^* j: @$ c5 {, v* V, u4 y

' }% ^; c# _4 z9 }. j                                ixstart++;
: i# q+ V! t( X% A                        }- u1 _& O' _) X$ J  R
                }9 G$ [/ S1 ~& e  `
6 d" N$ E2 `3 I* ^. F
                ixstart = 1;6 t7 b. l* i& ~- J( B: r/ V0 J8 ?
                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
2 Q+ n% L& f1 Z' s1 O                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
. M1 i, ]# D9 s! C                        ix = 2;, o+ _7 [) v% i, t
                        exitg1 = false;
+ Q8 r8 g0 c% I                        while ((!exitg1) && (ix < 81001)) {2 D! ~1 d( u& i7 _) Y$ r' s
                                ixstart = ix;/ W' C% `* O6 t% C* n
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {
% g* c: c0 u: `                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];
0 d; x( ^  Y1 b$ C1 @8 M) [                                        exitg1 = true;
# ]8 J* T, g2 ^3 ^: `6 Q                                } else {; `0 v9 u/ ~2 y5 Y
                                        ix++;
' R3 ]% H, h5 Z/ h; O                                }
4 L4 }& h2 D- N, e" [$ D                        }
; j* G2 a9 i2 ]8 S                }
2 F% i" ]% o  \7 `6 b5 n( R0 a  K& [: H2 G% n* ~$ R  q2 r7 H' f4 z
                if (ixstart < 81000) {
# p6 m) ?8 ]$ j; Q3 X- [8 k                        while (ixstart + 1 < 81001) {
  ^0 l# S2 W; |3 Y3 _4 w                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {
8 k" s+ p' Z1 X                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];% P$ r& x+ i; |; u) U8 T
                                }
# u% I5 I. v, K9 f, n
0 T4 ?: F% x8 D1 Y$ F* A                                ixstart++;" S( ?4 r; ]6 l/ U
                        }
* t  `7 X: B$ U; x: o& T# p                }
& c7 [% r3 k) r, i% ^
1 A& E1 k# P- }6 F' T4 Q3 T                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);! w$ x- a$ Q! e* t2 G0 k  V' ]
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {2 ?; Z1 i8 J1 u" @2 D/ X) u
                        yiDuanShuJu_mean = mtmp;
. F, r" l5 b: o) d2 I/ F7 u. b                }
, Y% F' H7 K7 Q3 R- Q2 L
! V2 @% y  d$ g0 ~, N( S                /*  找出极值 */
; H3 g  m; H: y! b                for (ixstart = 0; ixstart < 81000; ixstart++) {& t6 e. M6 v. n6 ?' ?. j, G
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;* N# E( Z  P1 R- _
                }2 x0 e6 h; s3 A$ I5 k

& i/ y, p& x7 i$ d% |        --------------帖子字数限制------------------( r# o0 P: A0 K  f/ u; p
}
, w: a# l/ l  X% a7 A4 Y5 E9 D4 a2 z7 y" @9 K8 ~6 C% M. M; _. Q

, t  f' {' ?+ U: x: U/ |# V

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-8 00:53 , Processed in 0.050402 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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