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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

4

主题

8

帖子

1057

积分

金牌会员

Rank: 6Rank: 6

积分
1057
跳转到指定楼层
楼主
发表于 2017-6-8 15:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangsan1231 于 2017-6-8 16:54 编辑
. j/ y. r0 u/ O# u0 w' T
% ~$ ?0 H2 Z% E4 I7 u( E; V4 L7 C  ~各位大神:. z  D9 D4 G. p5 c% W% w( D
     你们好,这是我第3次在论坛提问了,感谢各位大神的帮忙,又要麻烦你们。(/(ㄒoㄒ)/~~)3 \% G6 p$ a5 \* N5 w( E9 @1 Q
      我遇到一个很怪的问题,就是在debug时程序运行的莫名其妙。上图:( m( [$ J8 b' z, e2 r9 ]

/ a( ~# x8 r; H% ]9 U0 v. C     ( Q' R) R6 F3 M9 ^
这debug时候,程序已经运行到左侧箭头所指向的位置了,按理说enoughDataFlag这个变量应该是已经赋值为1000了,但是右上角显示这个变量的值并不是1000。我是真的搞不懂了,多次测试也是这样。只能来求教各位大神。
9 f& f8 _5 n0 x. K
( |8 |' Z- T; c5 V/ x/ f1 ]9 f并没有其他线程
+ i+ C/ ^- B* p3 S7 c反复思考,观察,我感觉应该是程存溢出了,所以程序都在乱跑,没有任何规律可言。
" a3 I% l" h2 ?4 |0 G也说不定是和堆栈有关系。。。。。。
+ {9 {/ j7 ?, @7 {1 W请问各位大神,这里的堆和栈的大小应该设置成多少?我把栈设置成0x4ff,堆设置成0x3ff有没有问题?我随便写的数....
* i& e2 A8 `9 \2 {+ {0 Y& V! j  Y: r# ?8 J* s

9 F. U' C: r* B! ?: T* K, l  c4 O. ?
我也很绝望啊,希望大神能帮帮忙,感激不尽,!! z. d; a2 q' e7 w7 @. `

* T+ r6 B. M2 O8 `9 ?
. D# w4 }' Z2 N. n$ {7 }4 X附上代码部分:是关于QPSK通信的一个程序,在这个函数里有特别大的数组        static double usable_left_filtfilt[81000];
" X, Q1 [! @6 f( L& c        static double youXiaoShuJu_QuZhiLiu[81000];是不是这两个数组影响了程序?我也说不准。。。。。。
4 k4 ^. {. _2 h- n2 W) C' `. O. ]: t6 t( l" k, H
boolean_T runQPSKSystemUnderTest_KongQiXinDao_RX_v6_toC(
% z6 ^* f6 |# s1 @" {                const double data1000[1000]) {
8 b$ K( p. H' Y  ^) G& W4 `5 N: x; J# U( D. x
        int myfuck;
$ j0 k3 l& d  N2 W6 {! S" d% x        double yiDuanShuJu_mean;
& c" h2 j- K+ @/ L" T        double yiDuanShuJu_LowMean[1000];6 p" d6 d, k1 f3 _( T/ h- I0 N
        int ixstart;: G3 A7 l% _4 n
        double dv0[1000];, v% \. |  R6 v, v! f7 S6 ?
        comm_AGC pAGC;
; S! m( U; R1 H3 z        comm_CarrierSynchronizer pFineFreqCompensator;, ~' A, i4 O7 }4 w& D6 W# x
        dspcodegen_FIRDecimator pRxFilter;3 m7 z7 \7 L: q$ F
        comm_SymbolSynchronizer pTimingRec;  `: f# Z7 ~  y/ H5 g# U5 `/ R; E
        comm_PreambleDetector pPrbDet;% o6 C- P1 G% S2 X/ M
        FrameSynchronizer pFrameSync;
* L0 X' T9 m' P; x$ `        QPSKDataDecoder pDataDecod;
" M/ j& e) b6 M5 `* m9 V1 ^4 W        static double usable_left_filtfilt[81000];0 l1 c: G" ~8 p. O
        static double youXiaoShuJu_QuZhiLiu[81000];- w& L4 q3 w( ~) P+ ~5 a
        double mtmp;- U4 q0 M: `* O3 ^' L, k$ _8 [
        int ix;9 ~  X) C! N. l& ?  V0 ~2 ?/ F& t8 F
        boolean_T exitg2;5 A4 w5 D  c. ]6 \2 A( T
        boolean_T exitg1;
$ E4 N5 F0 O; \) t. X" B        double YiZhenShuJu[800];% \- D1 A$ x7 V" o) Z7 c
        double dv1[800];" e* K0 K' r) T8 ^3 U1 d! Y

9 T% `+ `/ H  b
0 y2 Y" i) A8 _0 D, y4 I        double b_YiZhenShuJu[800];
- Z7 v( u# H# {( ~& t5 ?; [        double I_filtfilt[800];
" C+ F% `$ Q4 l# x+ G! c+ u- {        double Q_filtfilt[800];3 }6 H+ C8 ]( D9 v/ ~1 x! v
        creal_T b_I_filtfilt[800];
& \# H+ O% _- `! C/ @9 i        creal_T b[800];0 h) F& X5 l9 W# `* E
        creal_T RCRxSignal[50];
& Q' }; u/ @, @% Q: C9 ?& h( N        creal_T fineCompSignal[50];+ s( I  u& g) }0 p7 Z  p4 x6 G- C
        double phError[50];2 I6 q* K0 @: Q, w
        creal_T timingRecSignal_data[28];) F8 r$ s$ J( t2 l1 U4 V' R
        int timingRecSignal_size[1];
/ n. P) K1 G" a2 z: R* c' O        double prbIdx_data[28];
$ ]# y" S' I6 B) o$ l: t4 l2 w% Z  i        int prbIdx_size[1];5 G9 B6 s4 I$ Z+ m+ F
        double dtMt_data[28];/ ~8 t+ q0 ^5 p7 ^& a9 @
        int dtMt_size[1];
- W9 N8 a. W, @" Q4 U5 k1 G7 |        creal_T symFrame[25];. C( p) W, ~/ M& [/ |
        boolean_T isFrameValid;
! a( O! I1 t) |( B        double unusedU0[3];
- r8 m) g8 Q% R+ K% b  L. K- ]2 W# |: I% `
        //调试过程中的变量# c8 v6 S& F$ X. S
        int  enough_data;! {" x  O6 r4 _; o7 Z6 U9 i2 k  q8 |
1 k, I0 x% ]' `" R, @
        int enoughDataFlag;& I0 W  ^( A/ }1 w
        int yiDuanShuJu_mean_int;* I6 [  c$ c9 [0 a4 T
        int int_sum_dv0;# R4 l" \" A. n; v5 }3 U% l4 ^
        int oo;
+ ~) \( o7 \8 m: @        int ii;% {1 k5 {1 L8 \( K: l% N5 A
        myfuck=10;
8 p* S2 K" T2 R7 M- g8 x        /*  模拟真实的DSP情况,确定信号的位置,计算能量,不要归一化,每次取4000个数据,第一个4000个还不能算数, */
, M8 \; t8 U1 B# C" x' j6 S        /*  考虑到最开始一帧,和最后一帧,可能取的不准,那就之后再考虑, */
% z: O% d. Q# a
0 g+ J% a2 R) F' w        yiDuanShuJu_mean = mean(data1000);) c/ ~9 k4 D& B: @" {) w# F' t

- _/ R  M: R! g        yiDuanShuJu_mean_int = (int) yiDuanShuJu_mean;* ?" ^4 Y5 e! I! P3 W1 c, |
        UARTPutc('A');3 \% V6 B2 p" G& o8 j3 k2 z
        UARTPutNum(yiDuanShuJu_mean_int);6 ?+ @% M  X. a2 |. c
        UARTPutc('\r');
/ e* i! E7 z+ `. i$ ~        UARTPutc('\n');4 h" X3 v# ^$ \

3 a) Z. S2 a% ]2 Q% w( U  j        for (ixstart = 0; ixstart < 1000; ixstart++) {
( G8 }3 f( C0 k( g  F                yiDuanShuJu_LowMean[ixstart] = data1000[ixstart] - yiDuanShuJu_mean;
* s# i' _/ o3 K, x        }
9 c$ Q6 C& _' c4 t2 T" G1 r( J; i& l
        power(yiDuanShuJu_LowMean, dv0);
+ s" j! C$ Y  z- f& h3 l# a+ D) e1 N- I+ e* W2 m
        int_sum_dv0 = (int) sum(dv0);; e4 y3 ?% v1 ^0 b$ M4 s
( A: j4 |1 Y$ s0 t
        UARTPutc('B');" L! @# B+ l6 m! Y
        UARTPutNum(int_sum_dv0);% x- c, r: H/ R* {3 o: C% W( o( i: J  W
        UARTPutc('\r');8 S: {' M9 t1 `  c  Y, c
        UARTPutc('\n');1 H' `# |6 L. W1 w  {
+ Q5 t& b: h! A
//        int compareFlag = int_sum_dv0 > 1.0E+8;
8 L4 U0 c. R3 Z8 ~# e- m5 x, t1 E
: [: [4 c- X1 B        if (int_sum_dv0 > 100000000) { //之前这里是double和int比较的,能行吗?: b+ P" q8 i$ |9 ^* X3 E) j
                UARTPutc('C');$ h  t: R7 `5 s2 n
                /*  比较信号能量 */) G  ~* T. f4 e8 p- y# p
                /*          fprintf(' signal_mean=%d signal_energy=%d \n',yiDuanShuJu_mean,EnergyOf_yiDuanShuJu_LowMean);%只有有效的部分才打印出来 */" a* o" q+ V8 J8 |# J7 ^
//                yiDuanShuJu_mean = 1000.0 * youxiao_k;' [1 H; i; f3 t1 c
//                for (ixstart = 0; ixstart < 1000; ixstart++) {
9 d7 e# Z9 N9 z; X8 P0 p  u//                        save_buffer[(int) (yiDuanShuJu_mean + (1.0 + (double) ixstart)) - 1] =4 G; e* T3 D7 Q" ~% X
//                                        yiDuanShuJu_LowMean[ixstart];
, V- ?5 r! W* ?//                }3 I$ w( ]! F  d
//+ y/ ~% H4 {; E( J! g( @# i
//                youxiao_k++;
# I( b. x: c# _* o3 x//                if (youxiao_k == 81.0) {//这个程序也是有问题的!不能用==" E2 b/ ]) d9 {8 `1 P. Q( {+ ^
//                        /* 感觉要取21个数,即0-20, */
3 ?* ?+ X" b4 |, H2 _3 l9 j# R//                        enough_data = 10;//有效是10,无效是0
/ ?& E& R7 z: F* K) b, M6 ~) \* W//                }
& X( _! k5 b$ n        }
9 D) v1 E! q5 i4 [4 v( C8 [/ [* G8 j3 ]- u+ l& y

4 B0 {- w& b, V- C4 C4 n        enoughDataFlag = 100;) a. F# e# \* m7 ]- ?6 c
        enoughDataFlag = 1000;' y4 J& L3 x- c* b7 M! T4 [
        enoughDataFlag = 0x02;
: J  |5 p( a4 ^        enoughDataFlag = 200;
9 N0 {5 ^" P* _3 A8 D
" \* g( p; H; H* B2 j, P+ A        int myfuvk1;
. ^" A9 C2 O( J7 _/ r# r4 i' i  A        myfuvk1 =11;/ ^$ w' G- r& O7 `. N3 w& V2 y) e3 f% f

$ }+ X/ l5 A* {$ T" E" ]( K5 I0 |" {* w. Q. u
        enough_data = 0;
# H; g! _; J# e
2 B" S4 z4 A6 t  `//        if(enough_data>50){! D% r* e. w7 [/ T% J
//                enoughDataFlag=0x01;
6 X% {' t$ J! ]2 i) d/ i- i: l6 `//        }else if(enough_data<50){
( @8 G9 P2 A9 i; N" ^; S//                enoughDataFlag=0x00;//0x00还是不行
; |0 H4 B* f9 P1 R//        }" p1 ^0 f( {" d  w+ V* d) E

6 F8 F9 A$ b4 o+ n& {; u: V- U! c1 z0 T, Y: c
        oo=10;
2 _$ ~# D) ]2 Q  W5 ]% d        oo = oo  <  5;5 A' U. h& N- C; m+ _+ w- V
        if(oo){
, X9 d; V- Q- j- @- T7 j                ii=0;$ T$ W6 J) }0 \/ P/ b+ B
        }
3 V* C: |' [9 B6 U. U/ h        if(oo  <  5){
- ^0 m6 S4 U) o  M  y( Q6 g" X                ii=0;
- j0 |/ j* F6 H  y# e        }) ^% l' P1 m- c9 L) i+ }
        if(oo  >  5){; }0 Z& _+ C# ]" X( ~: T
                ii=0;
# z5 f6 h. y+ S0 k6 Y3 q$ B( k9 b        }: q' p0 V" {9 `/ `3 F9 `  q
6 X  a) g) W9 \! p
        /*  save_buffer =usable_left(2.3e5+1:2.3e5+8e4+4000); */
( a# p+ Y, g0 M- j; n        /*  如果数据足够才执行主程序 */+ y) C" r& E; i5 n# L
        oo = oo  <  5;
) @6 I9 p. q% X        enoughDataFlag = enoughDataFlag  <  5;- \, e# f8 n7 \8 `0 \
        if (enoughDataFlag  <  5) {  \. S( s# L% g5 F, v8 O+ L
//        if (fabs(enoughDataFlag)>0.2) {//有效是10,无效是0
: l# c5 w8 @: j" s$ d; k8 [                AGC_AGC(&pAGC);5 O9 t% ^2 N8 j2 [! [7 G
+ o' r, ^( n$ @0 N6 f
                c_CarrierSynchronizer_CarrierSy(&pFineFreqCompensator);6 [- d6 \+ T( |5 o3 Y
                FIRDecimator_FIRDecimator(&pRxFilter);( l% V3 u9 p; G  e2 |$ \7 A6 G/ X

& e! a3 [% W$ }* T2 u                /* Downsampling */
- c" B) P. r, K& q; ~& k, R                c_SymbolSynchronizer_SymbolSync(&pTimingRec);
! G6 a' B3 W8 }5 c6 Z7 m# `. j
7 B1 P2 t. |* C' k; X; J! f                c_PreambleDetector_PreambleDete(&pPrbDet);
  x2 P- Z) |% }, |: j9 e! f& q4 j% q
                /*   'Threshold', 8);空气信道情况下,把阈值从8改成7 */3 ~0 Z( W6 M2 ?: A6 T- Z
                /*  %帧同步,第一次听说啊。。帧同步和前导码是相关的吗% */7 u3 e3 I2 u( H% D' g6 L
                /*     %帧数量=100 */# d. A# O- ~3 \# q" d( {
                pFrameSync.isInitialized = 0;
9 y. j( y' G( {# B0 j* q) L8 U8 V3 q7 m7 A2 z9 u, D
                /*  [EOF] */+ l9 ~; _  ^# t. N/ c
                /* 前导码长度是13 */5 M, e- p/ I; E+ Z4 ~
                /*    %qpsk */
  M4 t' E+ f# g, B/ C- A& p                pDataDecod.isInitialized = 0;
# W9 D, |( A' x, F3 q1 S: n& h7 }- G8 g
                /*  end */" ^# J1 a8 N5 Z: X3 q
                /*     %% 进来的数据先过带通滤波器,带通3k-21k(看音乐分析软件确定的这个值) */
- j. j* H: u& p! E" w- D                /* Convert 3-dB frequency */
& p! T8 K; D7 F- M6 o* p                /* Convert 3-dB frequency */
. j! }  q( k" j7 I* i                filtfilt(save_buffer, usable_left_filtfilt);* `7 M' H) b2 ~  A5 A$ C
                for (ixstart = 0; ixstart < 81000; ixstart++) {- D! ~& }6 @' h3 h& _# d
                        usable_left_filtfilt[ixstart] *= 2.0;
1 a2 g$ }2 Q& `! R" p                }" U- H; c3 H! A7 M3 M9 @# }
2 |0 f4 Q7 z  z
                /* 注意乘2,处理幅度 */& ^! ^$ @% G- _0 b
                /*     %% 我发现带通之后其实就均值为0了,不用这一步了 */8 w" P7 Q5 B/ m5 y3 i
                /*     %% 行列转换 */
7 s* v* \6 i2 U! V                yiDuanShuJu_mean = b_mean(usable_left_filtfilt);
  j( @, t( s$ D& B+ M4 y                for (ixstart = 0; ixstart < 81000; ixstart++) {- g; Q2 A" ~$ |1 f1 h
                        youXiaoShuJu_QuZhiLiu[ixstart] = usable_left_filtfilt[ixstart]: y. Z, c0 R. O6 p5 a4 k
                                        - yiDuanShuJu_mean;
8 R- }0 J; m& ]2 i9 Z                }9 s# A/ z! N+ e4 U1 Z

5 Y/ t$ }; r. {4 ^; w( `                /*     %% 应该对数据归一化,但是这一步放在哪比较好 */8 ~% t# D/ N6 t, m, u# J, W# v
                ixstart = 1;6 p# C, s, v# O" o8 i( c
                mtmp = youXiaoShuJu_QuZhiLiu[0];) E3 s# R5 Q& m  N" M1 W
                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
! ]: m! ^! F$ d4 s8 C" a5 u' Q! Q                        ix = 2;* q+ w" [0 U  p. i/ V  w
                        exitg2 = false;9 k" ~  `, f" ^; s; o+ ]
                        while ((!exitg2) && (ix < 81001)) {
4 p) |2 ~) u- f& f- D8 n- t                                ixstart = ix;4 @, l0 r- V( @6 G. V' ?7 D
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {+ m0 N. ]' b  t& @6 G3 [
                                        mtmp = youXiaoShuJu_QuZhiLiu[ix - 1];% S$ I0 Q, X- ?0 U. P6 `+ {2 i  U3 Y
                                        exitg2 = true;% V* ]- F6 h0 X( M* ~
                                } else {1 w0 L/ Z1 L9 f- }& [& `/ W5 A' n
                                        ix++;
" C& U4 o2 V5 z& p& a                                }0 U1 j* u7 b7 p( z
                        }" T9 W  ^3 |1 s5 C/ c
                }$ k8 @  m. M* p! N$ M5 u# T8 c

5 n3 k' ^4 b7 R- Q                if (ixstart < 81000) {
/ P; z! \" g' t9 J  b                        while (ixstart + 1 < 81001) {( L) }5 N! J- c0 L% Z
                                if (youXiaoShuJu_QuZhiLiu[ixstart] > mtmp) {5 Q- X4 M1 k, R6 b* ]: G
                                        mtmp = youXiaoShuJu_QuZhiLiu[ixstart];! o# {3 O! ]& d' M/ y8 D  U8 ~% \" I
                                }
: r. R# u1 g' m$ W
- ?; N' K! F  x9 l' q4 S" r                                ixstart++;
& k- u5 i. ^: |5 `                        }6 ^" L% X' O. O
                }
+ d/ V  d2 i! a. K3 g9 y& y
! C* s/ l" q1 x4 O  l                ixstart = 1;
; x; J1 V) O& T9 H. }8 p) H                yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[0];
  U+ }% f6 m' X. C8 H/ [                if (rtIsNaN(youXiaoShuJu_QuZhiLiu[0])) {
' }, s3 Z+ ]; p                        ix = 2;
! l  @, u  F- j( r! m2 H                        exitg1 = false;# x- i9 ~: Z3 ]8 d
                        while ((!exitg1) && (ix < 81001)) {
, N4 @' _* T  B% i. b                                ixstart = ix;/ n* Y6 R) [5 v
                                if (!rtIsNaN(youXiaoShuJu_QuZhiLiu[ix - 1])) {* L4 y  h) a1 k: u
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ix - 1];9 |8 b  s$ x) H8 a: }5 \& e4 Y6 U
                                        exitg1 = true;! ~7 X$ g7 d" q! T/ D
                                } else {
0 M3 p; @# v9 p8 w! L8 v5 D" t- U                                        ix++;
2 J" t0 U2 `* w4 d                                }
5 Q/ a6 ^& b& w+ n- \                        }
" u6 a( V' G& M2 a! B                }( z' C# Y* w' Y% D
1 \6 {  |' n( E1 a* Z8 ]& @: Z2 ^: d3 `
                if (ixstart < 81000) {
4 b. S2 [- J5 x                        while (ixstart + 1 < 81001) {# c! x6 p4 Z& t
                                if (youXiaoShuJu_QuZhiLiu[ixstart] < yiDuanShuJu_mean) {9 S# [  q% x: [/ e
                                        yiDuanShuJu_mean = youXiaoShuJu_QuZhiLiu[ixstart];$ w  C5 g# s8 _  }2 O
                                }
! O0 w# y$ F" j! b$ ?; {5 k. B! d; d
                                ixstart++;
6 d6 p5 O, w" K                        }0 m6 J2 r$ k* O6 ]
                }
9 {8 `1 J6 j0 l
! I# k2 D5 Q& B5 W                yiDuanShuJu_mean = fabs(yiDuanShuJu_mean);; ]  N; F; ?7 L+ @. {
                if ((mtmp >= yiDuanShuJu_mean) || rtIsNaN(yiDuanShuJu_mean)) {# X3 t0 H5 B9 K' ?- B( b" T& j
                        yiDuanShuJu_mean = mtmp;# I9 ^3 X" j5 d* C
                }
5 Z) n0 q3 ^! Q* F, T+ f8 c, M% y& K% ?) N4 D  a1 P
                /*  找出极值 */
3 P4 y- t9 Z, z- C2 o0 A0 j                for (ixstart = 0; ixstart < 81000; ixstart++) {5 [5 X) f4 q. F: q. `( v) }
                        youXiaoShuJu_QuZhiLiu[ixstart] /= yiDuanShuJu_mean;
( |. e# g: P; Z" o, Y2 y* z4 r  X                }. `- R2 R3 g3 |: ?# W

0 J9 o& K6 ?" ~; L        --------------帖子字数限制------------------
2 O9 z) z5 G+ A* Z}
4 k$ M; z7 b. w' D: ^! ?
" A9 y+ W: L9 s6 W% k! D( k; t$ s# c4 W0 `1 H' J- l. H# ~

本帖子中包含更多资源

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

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 10:06 , Processed in 0.047981 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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