有关嵌入式的C语言知识

有关嵌入式的C语言知识

一. __I,__O,__IO

首先需要了解,改变变量的两种方式:一种是通过人为修改;另一种是通过读出寄存器中的值。

这是ST库里面的宏定义,定义如下:  
#define __I volatile const  /*!< defines 'read only' permissions*/
#define  __O  volatile      /*  !< defines 'write only' permissions  */
#define __IO  volatile      /* !< defines 'read / write' permissions */

__I: 表示输入(即只读),即人为不能修改这个变量的值,但是可以通过读出寄存器中的值而改变

__O: 表示输出(即只写),它可以通过人为修改这个变量值,也可通过寄存器里面的值变化而变化

__IO: 表示输入输出(即可读写),功能与__O 功能一样

注意: volatile表示该变量值能够任意的变化!!!!!

int square(volatile int *ptr)   
{   
    inta,b;   
    a =*ptr;   
    b =*ptr;   
    return a *b;   
}   

即表示最后返回的值表示的不是a的平方,因为a和b的值是不一样的

二. 关键字

extern

extern可以置于变量或者函数之前,以表示变量或者函数再别的文件中进行的定义,提示编译器遇到此变量和函数时需要在其他文件中去寻找定义。

extern int a;
或者
extern int show();

注意:
extern是一种声明关键字,而不是定义关键字。即extern能够声明多次,但是只能定义一次。声明不会在内存中给函数或者变量分配空间;而定义会在内存中分配空间

即 extern int a=2;

枚举类型enum

enum{
    a=1,
    b,
    c,
}number;

大家通常可能看到的是每一个变量都赋值了。这种枚举类型含义是,b会在a的基础上+1,而c会在b的基础上+1。

注意:

一个整形变量不能直接赋值枚举类型,需要进行类型转换

int d;
b=(enum number)d;

register

功能:声明寄存器变量

volatile

功能:声明变量在程序执行中可被隐含地改变

三. 宏定义

使用宏定义可以提高源代码的可读性,为编程提供方便。

关键字是 define

#define 宏名 字符串

#:表示这是一条预处理命令,所有以#开头的都是预处理命令
宏名:是标识符的一种,命名规则与变量相同
字符串:可以是常数数字,格式串,表达式,if语句,函数等

例如:

#define INT_LEAST8_MAX        127
#define __stdint_h
 #define __PASTE(x, y) __PASTE2(x, y)
#define LED_ONOFF(GPIOX,Pin,n) GPIO_WriteBit(GPIOX,Pin,(BitAction)n)

注意:
宏名可以带参数,此时就是带参数的宏定义,宏名中不能有空格,宏名与形参表之间也不能有空格,而形参表之间可以有空格。

四. 条件编译

#ifdef 标识符
 程序段1
#else
 程序段2
#endif

功能:当标识符被定义了之后,执行程序段1,否则执行程序段2.

在头文件中常见的格式:

#ifndef __LED_H
#define __LED_H

#endif
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值