TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp28335程序中 自定义的结构体变量为零

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

Igor An:

juntao dong

dsp28335程序中 自定义的结构��变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE{  Uint16 ADC_CHANEL0[10];  Uint16 ADC_CHANEL1[10];  Uint16 ADC_CHANEL2[10];  Uint16 ADC_CHANEL3[10];  Uint16 ADC_CHANEL4[10];  Uint16 ADC_CHANEL5[10];  Uint16 ADC_CHANEL6[10];  Uint16 ADC_CHANEL7[10];  Uint16 ADC_CHANEL8[10];  Uint16 ADC_CHANEL9[10];  Uint16 ADC_SAMPLETIMES;  Uint16 ADC_CHANNEL_NUM;} ADCSAMPLE;extern  ADCSAMPLE ADCSAMPLEDATA;2   DSP28_GlobalVariableDefs.c中加入的语句是:#ifdef __cplusplus#pragma DATA_SECTION("ADCSampleFile");#else#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");#endif ADCSAMPLE ADCSAMPLEDATA;3  在".cmd"文件中加入的区间定义:   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070
仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

juntao dong:

回复 Igor An:

我是想用结构体存变量比较方便,而且数据很对,很直观,不知道怎么操作?

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

Igor An:

回复 juntao dong:

你已经有

DSP28_GlobalVariableDefs.c

这个文件中已经定义了结构体访问的AdcResult结果寄存器了,你直接使用就可以了。

#ifdef __cplusplus#pragma DATA_SECTION("AdcResultFile")#else#pragma DATA_SECTION(AdcResult,"AdcResultFile");#endifvolatile struct ADC_RESULT_REGS AdcResult;

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

Seven Han:

你好,用断点查看这些值有变化吗?

或者,直接在memory window里修改这量的值看下

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

juntao dong:

回复 Igor An:

我知道,我现在采集的数据比较多10个通道数据而且采集10次,而且还要求平均值,所以我定义了10个通道的数组,,所以我定义了一个结构体,直观一些,但是现在定义的结构体

typedef struct ADC_SAMPLE{ Uint16 ADC_CHANEL0[10]; Uint16 ADC_CHANEL1[10]; Uint16 ADC_CHANEL2[10]; Uint16 ADC_CHANEL3[10]; Uint16 ADC_CHANEL4[10]; Uint16 ADC_CHANEL5[10]; Uint16 ADC_CHANEL6[10]; Uint16 ADC_CHANEL7[10]; Uint16 ADC_CHANEL8[10]; Uint16 ADC_CHANEL9[10]; Uint16 ADC_SAMPLETIMES; Uint16 ADC_CHANNEL_NUM;} ADCSAMPLE;,但是仿真的时候每次数据不变,ADC_SAMPLETIMES一直为零,不加,采集的数据也不是每一次都变化,所以

ADCSampleFile :> ADCSAMPLEDATA, PAGE = 1

ADCSAMPLEDATA : origin = 0x007A00, length = 0x000070是不是应该定义在.ebss里,如何定义?能不能说详细点

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

juntao dong:

回复 Seven Han:

我在开发板上仿真了,特别是采样次数一直为零,因为结构体很常用,所以没想到这样定义了数据一直为零,采样的数据也不发生变化,是不是在CMD FLASH  .ebss定义结构体

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

Igor An:

回复 juntao dong:

如果只是普通的结构体变量的话,就直接生命实体就好了,不需要手动指定地址。

如果想要手动指定地址的话,也不需要在GlobalVars那里,直接#program语句指定就好了。

另外,我注意到你的代码中,地址声明的名称和实体变量的名称用的同样的名字,这会有问题。

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

juntao dong:

回复 Igor An:

是普通的结构体,直接声明编译不通过,咨询了好多技术,都说.ebss中声明结构体就行了,可是.ebss中声明结构体的格式我不懂呀

dsp28335程序中 自定义的结构体变量为零,

1   我在ADC.h     typedef struct ADC_SAMPLE
{
  Uint16 ADC_CHANEL0[10];
  Uint16 ADC_CHANEL1[10];
  Uint16 ADC_CHANEL2[10];
  Uint16 ADC_CHANEL3[10];
  Uint16 ADC_CHANEL4[10];
  Uint16 ADC_CHANEL5[10];
  Uint16 ADC_CHANEL6[10];
  Uint16 ADC_CHANEL7[10];
  Uint16 ADC_CHANEL8[10];
  Uint16 ADC_CHANEL9[10];
  Uint16 ADC_SAMPLETIMES;
  Uint16 ADC_CHANNEL_NUM;
} ADCSAMPLE;
extern  ADCSAMPLE ADCSAMPLEDATA;

2   DSP28_GlobalVariableDefs.c中加入的语句是:
#ifdef __cplusplus
#pragma DATA_SECTION("ADCSampleFile");
#else
#pragma DATA_SECTION(ADCSAMPLEDATA,"ADCSampleFile");
#endif
 ADCSAMPLE ADCSAMPLEDATA;

3  在".cmd"文件中加入的区间定义:

   ADCSampleFile     :> ADCSAMPLEDATA,    PAGE = 1

ADCSAMPLEDATA   : origin = 0x007A00, length = 0x000070

仿真的时候结构体变量一直为零,不变化,怎么回事?特来求助

Igor An:

回复 juntao dong:

明白你的问题了。

这样直接声明结构体是不会有问题的,如果你面临报错的问题,那么可能是memory不够用了,所以可以先尝试不开那么多buff,先只开几个。

下面是我跑到一个测试代码:

在一个.h中typdef

typedef struct _BUFFSTRUC_Obj_{ uint16_t test_max_adc[10]; //!<Maximum value that is measured from the throttle. uint16_t test_min_adc[10]; //!<Minimum value that is measured from the throttle. uint16_t test_adc[10]; //!<Minimum value that is measured from the throttle.} BUFFSTRUC_Obj;

在一个.c中声明实体:

BUFFSTRUC_Obj   tBuffStruc;

不用做其他动作,编译就可以通过的。

如果确定是内存不够用的话,可以在cmd中吧.ebss改大一些就可以了。

赞(0)
未经允许不得转载:TI中文支持网 » dsp28335程序中 自定义的结构体变量为零
分享到: 更多 (0)