美文网首页嵌牛IT观察
嵌入式系统中的宏定义

嵌入式系统中的宏定义

作者: 风雨无阻59 | 来源:发表于2017-10-29 21:35 被阅读0次

姓名:殷晨阳

转载自:http://mp.weixin.qq.com/s/HiDXJYJi-nwn9ZQBkgJ0aA有改动

【嵌牛导读】:在嵌入式系统中,软件编写过程中经常会用到宏定义,本文将对宏定义进行诠释,并给出宏定义的使用例子。

【嵌牛鼻子】:宏定义

【嵌牛提问】:

除了文中给出的几种情况之外,还有其他情况下需要使用宏定义吗?

在其他情况之下宏定义分别起到了什么样的作用?

【嵌牛正文】:

宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。宏定义又称为宏代换、宏替换,简称“宏”。在 C 语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。

宏定义的格式:#DEFINE 标识符 字符串

掌握"宏"概念的关键是“换”,一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”,即在对相关命令或语句的含义和功能作具体分析之前就要换。

定义宏需要注意以下几点:

(1)宏名一般用大写;

(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义;

(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查;

(4)宏定义末尾不加分号;

(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头;

(6)可以用#undef命令终止宏定义的作用域;

(7)宏定义允许嵌套;

(8)字符串( " " )中永远不包含宏;

(9)宏定义不分配内存,变量定义分配内存;

(10)宏定义不存在类型问题,它的参数也是无类型的。

在C语言/类C语言环境中,宏的作用有如下几种:

1.取代Magic Number

这个作用在嵌入式开发时太重要了。一个SoC 50多页的datasheet,上百个寄存器的位操作,如果没有很好的语义宏定义,调程序查手册绝对是崩溃的节奏!

2.防止重复定义

#ifndef XXXX

#define XXXX

#endif

3.快速控制代码编译

#define SIMULATION_DEBUG 1

#if SIMULATION_DEBUG

use simulated data

#else

real data

#endif

4.编译系统控制链

在某些系统下,可以把宏定义传递给编译器,从而通过编译脚本(makefile)来控制编译选项,例如,配合上面代码,就可以在Makefile里定义:

CDEFINES=$(CDEFINES) /SIMULATION_DEBUG

说到编译,自然还要提一下 ANSI C中预定义的几个非常有用的编译宏:

• _ L I N E _

• _ F I L E _

• _ D A T E _

• _ T I M E _

• _ S T D C _

例如

#define DEBUGMSG(msg,date) printf(msg);

printf(“%d%d%d”,date,_LINE_,_FILE_)

5.使用typedef

C语言下typedef也是属于宏定义,我会告诉你C语言下struct+typedef+函数指针可以做到面向对象的继承,重载和多态吗?(有兴趣可以看一下MFC的源码实现,把传统的C风格的Windows API各种包装修饰和装逼。)

typedef int (*PFFunc1)(int);

6.简化操作

得到一个字的高位和低位字节

#define WORD_LO(xxx) ((byte) ((word)(xxx) & 255))

#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))

相关文章

  • 嵌入式系统中的宏定义

    姓名:殷晨阳 转载自:http://mp.weixin.qq.com/s/HiDXJYJi-nwn9ZQBkgJ0...

  • iOS 一些常用的宏定义

    规范 宏定义 系统中自带的宏 系统中宏使用零碎

  • 必读:嵌入式系统基础知识总结

    ​​​本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:...

  • 嵌入式系统基础知识总结

    本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:以应用...

  • Qt中各个系统的宏定义

    Qt中各个系统的宏定义

  • swift&&OC

    宏定义 OC中的宏定义 swift中的宏定义 OC中宏定义的方式,在swift中是不可用的,在swift中,宏定义...

  • 什么是嵌入式系统?嵌入式系统的概念

    摘要: 什么是嵌入式系统?随着嵌入式系统在人们实际生活中的应用越来越广泛,这个基本问题的确切定义引发了许多争论。 ...

  • 什么是嵌入式系统

    科技在进步,社会在发展。科技不停地更新导致嵌入式系统的定义在不断地变化。因此,嵌入式系统没有具体的定义。但是,嵌入...

  • 10.19

    今天的嵌入式课程我们学习了C语言宏定义技巧,也就是我们常说的宏定义。防止一个头文件被重复包含。重新定义一些类型,防...

  • iOS_仿照frameworks的一些写法

    枚举定义 一些系统宏定义

网友评论

    本文标题:嵌入式系统中的宏定义

    本文链接:https://www.haomeiwen.com/subject/onlupxtx.html