This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28055:钻头感觉。

Guru**** 2042910 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568894/tms320f28055-bit-feelds

器件型号:TMS320F28055

你(们)好

我想在代码中执行位字段、如位字段 TI。

我这样做:
在我的 Global_VAR.c 文件中、我编写代码。

结构状态七透明度{
uint16 Enable_transmition :1;  
uint16 CH1_transmit :1;  
uint16 CH2_transmit :1;  
uint16 ch3_transmit:1;  
uint16通道4_transmit:1;  
uint16 rsv11:11;
};


联合转换 Service_REG{
uint16全部;
结构状态七 Transmition 位;
};

结构 Service_REG{
联合转换 Service_REG 转换 Service_REG;
};

结构 Service_REG SERVICE_REG;

那么、在我的 Global_Var.h 文件中、我接下来写入:

结构状态七透明度{
uint16 Enable_transmition :1;
uint16 CH1_transmit :1;  
uint16 CH2_transmit :1;  
uint16 ch3_transmit:1;  
uint16通道4_transmit:1;  
uint16 rsv11:11;
};

联合转换 Service_REG{
uint16全部;
结构状态七 Transmition 位;
};

结构 Service_REG{
联合转换 Service_REG 转换 Service_REG;
};

extern struct Service_REG service_REG;

在 main.c 文件中、我写入:  

Service_REG.TransmiionService_REG.bit.Enable_transmition = 1;

Code Composer 使构建和排序正常。 但我不确定我的位字段是否正确声明。  首先、在 Global_Var.h 文件中、我在 结构之间写入 extern、如下所示:

extern struct StatusSeviceTransmition{
uint16 Enable_transmition :1;
uint16 CH1_transmit :1;  
uint16 CH2_transmit :1;  
uint16 ch3_transmit:1;  
uint16通道4_transmit:1;  
uint16 rsv11:11;
};

生成器生成此警告: 警告#1054-D:可能未在此指定存储类。

请告诉我、我是否正确地声明了我的结构?  如果不是、那么它是如何正确的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您只需要在.h 文件中定义结构和联合体、而在.h 文件中需要为 extern 的唯一内容是 service_REG 的声明。  您唯一需要放入.c 文件的项是 service_REG 的声明(不带 extern)。

    此外、如果 TransmiionService_REG 是您计划放入 Service_REG 的唯一项、则可以跳过定义 Service_REG 并直接使用 UNION。 类似如下:

    在.h 中

       外部联合事务 Service_REG Service_REG;

    在.c 中

       UNION TransmiionService_REG SERVICE_REG;

    在 main.c 中

       SERVICE_REG.bit.Enable_transmition = 1;

    这不是必需的、但输入的时间更短、更少。

    惠特尼