嵌入式C语言基础-创新互联

1.位操作

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的堆龙德庆网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

(1)位设值

 清零:GPIOA->BSRRL &=0XFF0F; //将第 4-7 位清 0

 设值:GPIOA->BSRRL |=0X0040;//设置相应位的值,不改变其他位的值

(2)移位提高代码的可读性

将 ODR 寄存器的第 pinpos 位设置为 1

 GPIOx->ODR = (((uint32_t)0x01)<< pinpos);

(3)~取反操作使用技巧

设置某一位的值为 0,同时 其他位都保留为 1。

  TIMx->SR = (uint16_t)~TIM_FLAG;

2.define 宏定义

define 是 C 语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供 方便。常见的格式:

#define 标识符 字符串

定义标识符 PLL_M 的值为 8。

#define PLL_M 8

3.ifdef 条件编译

单片机程序开发过程中,经常会遇到一种情况,当满足某条件时对一组语句进行编译,而 当条件不满足时则编译另一组语句。条件编译命令最常见的形式为:

#ifdef         标识符

程序段 1

#else

程序段 2

#endif

它的作用是:当标识符已经被定义过(一般是用#define 命令定义),则对程序段 1 进行编译, 否则编译程序段 2。 其中#else 部分也可以没有,即:

4.extern 变量申明

C 语言中 extern 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编 译器遇到此变量和函数时在其他模块中寻找其定义。

extern  u16  USART_RX_STA;

这个语句是申明 USART_RX_STA 变量在其他文件中已经定义了,在这里要使用到。所以,你肯定 可以找到在某个地方有变量定义的语句:

u16  USART_RX_STA;

我们希望在main.c的 changeId(void)函数中使用变量id,这个时候我们就需要在main.c 里面去申明变量 id 是外部定义的了,因为如果不申明,变量 id 的作用域是到不了 main.c 文件 中。

5.typedef 类型别名

typedef 用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。 typedef 在 MDK 用得最多的就是定义结构体的类型别名和枚举类型了。

typedef struct 

{

__IO uint32_t MODER;

__IO uint32_t OTYPER;

  ......

}GPIO_TypeDef;

Typedef 为结构体定义一个别名 GPIO_TypeDef,这样我们可以通过 GPIO_TypeDef 来定义结构体 变量:

GPIO_TypeDef _GPIOA,_GPIOB;

6. 结构体

(1)结构体定义

  结构体就是将多个变量组合为一个有机的整体。

typedef  struct

{

uint32_t USART_BaudRate;

uint16_t USART_WordLength;

  。。。

}USART_InitTypeDef;

(2)结构体使用

我们在初始化串口的时候入口参数就可以是 USART_InitTypeDef 类型的变量或者指针变 量了,MDK 中是这样做的:

 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

使用结构体组合参数,可以提高代码的可读性,不会觉得变量定义混乱。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:嵌入式C语言基础-创新互联
文章链接:http://scyanting.com/article/csgpsg.html