DSP-F2812的C语言--如何使用自己所定义的结构体变量

[复制链接]
5779|13
 楼主| GG_GG 发表于 2012-8-1 12:52 | 显示全部楼层 |阅读模式
在一个".h"文件中定义的一个结构体:////////////////////////数字输入输出功能定义的结构体////////////////////////////////
struct PARAMETER{
Uint16 VALUE;
Uint16 DEFAULT ;
Uint16 INDEX ; // can be saved to EEPROM by this
Uint16 TYPE ; // 0: cann't be modified when motor running 1: can be modified in anytime
Uint16 SCALE ; // 0: VALUE need not recalculate when using ; >0 Real Value = (VALUE / SCALE);
};
struct DIO_REG{
struct PARAMETER DIProp; //F3.16,输入端子极性设定
struct PARAMETER DI1; //F3.8,输入端子X1功能选择
struct PARAMETER DI2; //F3.9,输入端子X2功能选择
struct PARAMETER DI3; //F3.10,输入端子X3功能选择
struct PARAMETER DI4; //F3.11,输入端子X4功能选择
struct PARAMETER DI5; //F3.12,输入端子X5功能选择
struct PARAMETER DI6; //F3.13,输入端子X6功能选择
struct PARAMETER DI7; //F3.14,输入端子X7功能选择
struct PARAMETER DI8; //F3.15,输入端子X8功能选择

struct PARAMETER DOProp; //F3.25,输出端子极性设定
struct PARAMETER DO1; //F3.17,输出端子Y1功能选择
struct PARAMETER DO2; //F3.18,输出端子Y2功能选择
struct PARAMETER DO3; //F3.19,输出端子Y3功能选择
struct PARAMETER DO4; //F3.20,输出端子Y4功能选择
struct PARAMETER DO5; //F3.21,输出端子Y5功能选择
struct PARAMETER DO6; //F3.22,输出端子Y6功能选择
struct PARAMETER DO7; //F3.23,输出端子Y7功能选择
struct PARAMETER DO8; //F3.24,输出端子Y8功能选择
};
 楼主| GG_GG 发表于 2012-8-1 12:52 | 显示全部楼层
struct USERDIO_BITS{
Uint16 bit00:1;
Uint16 bit01:1;
Uint16 bit02:1;
Uint16 bit03:1;
Uint16 bit04:1;
Uint16 bit05:1;
Uint16 bit06:1;
Uint16 bit07:1;

Uint16 bit10:1; // 0: low level active 1: high level active
Uint16 bit11:1; // 0: low level active 1: high level active
Uint16 bit12:1; // 0: low level active 1: high level active
Uint16 bit13:1; // 0: low level active 1: high level active
Uint16 bit14:1; // 0: low level active 1: high level active
Uint16 bit15:1; // 0: low level active 1: high level active
Uint16 bit16:1; // 0: low level active 1: high level active
Uint16 bit17:1; // 0: low level active 1: high level active
};

union USERDI_REG
{
Uint16 word;
struct USERDIO_BITS bit;
};

union USERDO_REG
{
Uint16 word;
struct USERDIO_BITS bit;
};
 楼主| GG_GG 发表于 2012-8-1 12:52 | 显示全部楼层
struct UserDIO_REGS
{
union USERDI_REG UserDI_reg;
union USERDO_REG UserDO_reg;
struct DIO_REG DIO_reg;
Uint16 RUN; //数字输出功能表中,变频器正在运行的标志位
Uint16 FG; //数字输出功能表中,频率到达信号的标志位
Uint16 FGT1; //数字输出功能表中,频率水平检测信号1的标志位
Uint16 FGT2; //数字输出功能表中,频率水平检测信号2的标志位
Uint16 OL; //数字输出功能表中,过载信号的标志位
Uint16 UV; //数字输出功能表中,欠压脉冲封锁的标志位
Uint16 EF; //数字输出功能表中,外部故障停机的标志位
Uint16 UF; //数字输出功能表中,到达频率上限的标志位
Uint16 BF; //数字输出功能表中,到达频率下限的标志位
Uint16 STANDBy; //数字输出功能表中,变频器准备好运行的标志位
Uint16 Fault; //数字输出功能表中,变频器故障的标志位
};

extern volatile struct UserDIO_REGS UserDIORegs;
void Figure_InputFunction(void); //数字输入函数
void Figure_OutputFunction(void); //数字输出函数
//////////////////////////////////////////////////////////////////////////////

定义完后还需要在DSP28_GlobalVariableDefs.c中加入的语句是:

#pragma DATA_SECTION(UserDIORegs,"UserDIORegFile");
volatile struct UserDIO_REGS UserDIORegs;

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

UserDIORegFile :> PAR_REG, PAGE = 1

**************************************************************************************************************

以上都编写进DSP的程序后就可以使用自己所定义的结构体作变量了...
杉树林罗 发表于 2015-2-9 09:33 | 显示全部楼层
楼主有个小疑问:对于芯片每部分外设都应该对应固定的地址,那自己定义的结构体该映射到哪里去?新手初学,有扰见谅。。。
zhangmangui 发表于 2015-2-9 22:31 | 显示全部楼层
杉树林罗 发表于 2015-2-9 09:33
楼主有个小疑问:对于芯片每部分外设都应该对应固定的地址,那自己定义的结构体该映射到哪里去?新手初学, ...

你看过CMD没    寄存器最后都是映射到一定的地址上去了
杉树林罗 发表于 2015-2-9 23:02 | 显示全部楼层
zhangmangui 发表于 2015-2-9 22:31
你看过CMD没    寄存器最后都是映射到一定的地址上去了

看过了,但就是不知道自己定义的结构体该映射到什么地方去,或者说DSP有专门留给开发者使用的内存映射区域吗?有的话该是在哪里?
zhangmangui 发表于 2015-2-9 23:22 | 显示全部楼层
杉树林罗 发表于 2015-2-9 23:02
看过了,但就是不知道自己定义的结构体该映射到什么地方去,或者说DSP有专门留给开发者使用的内存映射区 ...

DSP中TI提供的都是对寄存器操作的  这些都是固定的地址  所以需要去映射到对于的地址上
也就是对于的寄存器上
你自己定义的结构体  不需要指定地址啊   编译器自动给你分配
如果你需要指定  也可以  通过CMD中   指定
vivilzb1985 发表于 2015-2-10 22:36 | 显示全部楼层
这个结构体的应用还是蛮广泛的。。
木棉海 发表于 2015-3-14 14:31 | 显示全部楼层
wkwangke123 发表于 2015-8-28 16:06 | 显示全部楼层
UserDIORegFile :> PAR_REG, PAGE = 1,我不太理解你这个PAR_REG是什么,你程序中只有这样一段提到了这三个字母,struct PARAMETER{}。楼主能否解释一下。
wkwangke123 发表于 2015-8-28 18:51 | 显示全部楼层
我按照你说的方法定义了一个结构体,在MEMORY定义了一段存储空间,但是为什么我赋值给结构体变量一直为0.也就是说无法赋值给结构体变量。
cwma 发表于 2015-11-19 18:58 | 显示全部楼层
谢谢楼主的分享,我也出现了11楼的问题,不知楼上解决没有。
wsdymg 发表于 2015-11-26 20:47 | 显示全部楼层
学习啦,谢谢分享
andyjian 发表于 2015-11-27 09:01 | 显示全部楼层
为什么要分配地址呢,编译器自动分配不好吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

893

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部