打印

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

[复制链接]
5027|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 | 只看该作者
楼主有个小疑问:对于芯片每部分外设都应该对应固定的地址,那自己定义的结构体该映射到哪里去?新手初学,有扰见谅。。。

使用特权

评论回复
5
zhangmangui| | 2015-2-9 22:31 | 只看该作者
杉树林罗 发表于 2015-2-9 09:33
楼主有个小疑问:对于芯片每部分外设都应该对应固定的地址,那自己定义的结构体该映射到哪里去?新手初学, ...

你看过CMD没    寄存器最后都是映射到一定的地址上去了

使用特权

评论回复
6
杉树林罗| | 2015-2-9 23:02 | 只看该作者
zhangmangui 发表于 2015-2-9 22:31
你看过CMD没    寄存器最后都是映射到一定的地址上去了

看过了,但就是不知道自己定义的结构体该映射到什么地方去,或者说DSP有专门留给开发者使用的内存映射区域吗?有的话该是在哪里?

使用特权

评论回复
7
zhangmangui| | 2015-2-9 23:22 | 只看该作者
杉树林罗 发表于 2015-2-9 23:02
看过了,但就是不知道自己定义的结构体该映射到什么地方去,或者说DSP有专门留给开发者使用的内存映射区 ...

DSP中TI提供的都是对寄存器操作的  这些都是固定的地址  所以需要去映射到对于的地址上
也就是对于的寄存器上
你自己定义的结构体  不需要指定地址啊   编译器自动给你分配
如果你需要指定  也可以  通过CMD中   指定

使用特权

评论回复
8
vivilzb1985| | 2015-2-10 22:36 | 只看该作者
这个结构体的应用还是蛮广泛的。。

使用特权

评论回复
9
木棉海| | 2015-3-14 14:31 | 只看该作者
mark

使用特权

评论回复
10
wkwangke123| | 2015-8-28 16:06 | 只看该作者
UserDIORegFile :> PAR_REG, PAGE = 1,我不太理解你这个PAR_REG是什么,你程序中只有这样一段提到了这三个字母,struct PARAMETER{}。楼主能否解释一下。

使用特权

评论回复
11
wkwangke123| | 2015-8-28 18:51 | 只看该作者
我按照你说的方法定义了一个结构体,在MEMORY定义了一段存储空间,但是为什么我赋值给结构体变量一直为0.也就是说无法赋值给结构体变量。

使用特权

评论回复
12
cwma| | 2015-11-19 18:58 | 只看该作者
谢谢楼主的分享,我也出现了11楼的问题,不知楼上解决没有。

使用特权

评论回复
13
wsdymg| | 2015-11-26 20:47 | 只看该作者
学习啦,谢谢分享

使用特权

评论回复
14
andyjian| | 2015-11-27 09:01 | 只看该作者
为什么要分配地址呢,编译器自动分配不好吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

893

帖子

7

粉丝