dsp28335程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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程序中 自定义的结构体变量为零,
{
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改大一些就可以了。