关于结构体初始化

原创 2013年12月02日 15:47:37

我们一般见的结构体初始化有两种:

typedef struct
{
  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.
                                         This parameter must be set to a value lower than 400kHz */

  uint16_t I2C_Mode;                /*!< Specifies the I2C mode.
                                         This parameter can be a value of @ref I2C_mode */

  uint16_t I2C_DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
                                         This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */

  uint16_t I2C_OwnAddress1;         /*!< Specifies the first device own address.
                                         This parameter can be a 7-bit or 10-bit address. */

  uint16_t I2C_Ack;                 /*!< Enables or disables the acknowledgement.
                                         This parameter can be a value of @ref I2C_acknowledgement */

  uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
                                         This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;

比如这个结构体,我们一般这样初始化:

	I2C_InitTypeDef i2c;
	i2c.I2C_Ack = I2C_Ack_Enable;
	i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	i2c.I2C_ClockSpeed = clock*1000;
	i2c.I2C_DutyCycle = I2C_DutyCycle_2;
	i2c.I2C_Mode = I2C_Mode_I2C;
	i2c.I2C_OwnAddress1 = addr;

	I2C_InitTypeDef i2c = {
                    I2C_Ack_Enable,
                    I2C_AcknowledgedAddress_7bit,
                    clock*1000,
                    I2C_DutyCycle_2,
                    I2C_Mode_I2C,
                    addr};
希望大家不要纠结我这个结构体变量的顺序,肯定错了,我只是说下有这种方法!

但是在linux内核里面有这样一种初始化方法:

	I2C_InitTypeDef i2c = {
	.I2C_Ack = I2C_Ack_Enable ,
	.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit,
	.I2C_ClockSpeed = 40000,
	.I2C_DutyCycle = I2C_DutyCycle_2,
	.I2C_Mode = I2C_Mode_I2C ,
	.I2C_OwnAddress1 = 0x0a
	};
但是在keil里面默认是不可以用这种方法初始化的,他属于C99的标准,但是keil默认是C90的标准!

如果需要这样用的话,或者你拿到的工程代码里面有这样定义的,我们可以这样设置就可以了!

蓝桥杯-嵌入式交流群
 147520657


stm32f3的i2c使用小结

这几天拿到了stm32f3discovery,拿到手的第一件事就是测试了硬件i2c,使用stm32cube生成库,测试对象为AD5934与ADG715。经过两天的调试,完美调通。中间也碰到了些问题。 ...

STM8S_010_I2C读写EEPROM(硬件方式)

相关标题:STM8 I2C EEPROM 硬件I2CⅠ、写在前面相信看过前面那篇文章“更加深入理解I2C总线、协议及应用”的人对I2C都有一定的了解了。那篇文章是针对I2C,使用单片机IO模拟I2C方...

数组,结构体初始化 {0} (转载)

一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.调试的时查看内存发现不是那么一回事,翻了一下《The C++ Progra...
  • public
  • public
  • 2011年05月21日 10:57
  • 12841

转载部分代码,窗口点击问题,顺序,初始化数组,简单结构体

试题编号: 201403-2 试题名称: 窗口 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题...

C编译器剖析_4.4 语义检查_外部声明_结构体和数组的初始化

本节讨论标量类型、数组、结构体和联合体的初始化。 在C语言中,全局或静态变量的初始化应为常量;而局部变量没有此要求。...
  • SheIsC
  • SheIsC
  • 2015年03月26日 11:00
  • 913

C++结构体的定义、初始化和引用

定义: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。 声明一个结构体类型的形式是: struct Student{ //声明一个结构体类型Stud...

Linux GNU C结构体数组初始化示例

实然心血来潮,想学习一下结构体数组的初始化方面的知识。 以下是GCC实然心血来潮,想学习一下结构体数组的初始化方面的知识。...
  • subfate
  • subfate
  • 2016年10月13日 12:58
  • 2009

C++结构体类型的定义和初始化

今天在看《深入浅出MFC》时,看到了一个结构体的问题甚是不解,写法为: Struct MSGMAP_ENTRY _messageEntries[]= {        WM_CREATE,OnCrea...

Linux下C结构体初始化

1、前言   今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { in...

5、结构体、文字显示与GDT/IDT初始化

接收启动信息 bootpack.c节选void HariMain(void) //程序从此处开始运行,函数名不能改 { char *vram; //BYTE类型地址 int xs...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于结构体初始化
举报原因:
原因补充:

(最多只允许输入30个字)