历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2021年09月03日 | STM32—常用的几种伪指令宏

发布者:jingyan 来源: eefocus关键字:STM32  伪指令 手机看文章 扫描二维码
随时随地手机看文章
  1. 说到伪指令宏一般就会联想到指令、宏指令和伪指令。


先借用别人的话简单介绍一下三者之间的关联和区别(看到一个博主写的很不错):

我们使用的各种指令,都是写给“编译软件”看的。


要由“编译软件”翻译成计算机可以识别的机器语言,即机器码。


通俗地讲:

就好像召开新闻发布会,主持人用中文讲话,由一个翻译,现场翻译成英文,讲给外国记者听。


主持人说的中文,大部分都是要翻译成英文的;少数几句,是说给翻译听的,告诉他如何翻译。


我们写的指令,由“编译软件”翻译成机器码的,称为指令语句;

有一些是写给“编译软件”看的,不翻译成机器码,这样的就是“伪指令”。


一条条计算机的指令,一般来说,功能都是极为简单的。我们可以把几条、几十条指令,编写成一个“宏指令”,来完成一个比较复杂的任务。


在这样“一批指令”的前面,要用一条“伪指令”来命名这个“宏指令”;

在后面,要用一条“伪指令”说明结尾。


以后,这个“宏指令”,就可以当成 正式指令 来使用了。


2.伪指令宏分为简单宏、参数宏、条件宏、预定义宏和宏释放


简单宏:

定义格式: #define 宏标识符 宏体

是最常见的宏,在宏体长的时候使用续行符“”连接宏体,如示


#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) ||

                                    ((PERIPH) == GPIOB) ||

                                    ((PERIPH) == GPIOC) ||

                                    ((PERIPH) == GPIOD) ||

                                    ((PERIPH) == GPIOE) ||

                                    ((PERIPH) == GPIOF) ||

                                    ((PERIPH) == GPIOG))


宏的用法:在源文件中,用预处理器伪指令定义过宏标识符后,就可以用宏标识符编写程序。当源文件被预处理器处理时,每遇到该宏标识符,预处理器便在宏的所在处将宏扩展为宏体。


参数宏:

定义格式:#define 宏标识符(形式参数表) 宏体

形式参数表为逗号分割的形式参数,宏体可以用“”进行续行,使用参数宏时形式参数被换为相同个数的实参数表。(类似于函数的调用,实际上许多库函数时用参数宏编写的。二者区别是参数宏的形式参数表中没有类型说明符)

举例如示


#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) ||

                              ((PIN) == GPIO_Pin_1) ||

                              ((PIN) == GPIO_Pin_2) ||

                              ((PIN) == GPIO_Pin_3) ||

                              ((PIN) == GPIO_Pin_4) ||

                              ((PIN) == GPIO_Pin_5) ||

                              ((PIN) == GPIO_Pin_6) ||

                              ((PIN) == GPIO_Pin_7) ||

                              ((PIN) == GPIO_Pin_8) ||

                              ((PIN) == GPIO_Pin_9) ||

                              ((PIN) == GPIO_Pin_10) ||

                              ((PIN) == GPIO_Pin_11) ||

                              ((PIN) == GPIO_Pin_12) ||

                              ((PIN) == GPIO_Pin_13) ||

                              ((PIN) == GPIO_Pin_14) ||

                              ((PIN) == GPIO_Pin_15))


预处理器在处理参数宏时使用俩次宏展开。第一次展开宏体,第二次对展开的宏体用实参数替换形式参数。


宏释放:

定义格式: #undef 宏标识符

用于释放原定义的宏标识符,释放后的宏标识符可以再次用于定义其他宏体。

条件宏定义:

条件宏定义主要是用来测试是否定义过某宏标识符,以及决定如何处理宏标识符,具体格式有俩种:


\测试存在情况

#ifdef  宏标识符

#undef  宏标识符

#define  宏标识符  宏体

#else

#define  宏标识符  宏体

#endif


\测试不存在情况

#ifndef  宏标识符

#define  宏标识符  宏体

#else

#undef  宏标识符

#define  宏标识符  宏体

#endif


常用于头文件中。

预定义宏:

预定义宏基本莫得存在感,其特征就是标识符前后都有双下划线。如


__DATE__     __TIME__

__FILE__     __LINE__

__STDC__


这些预定义宏的宏体分别是当时的日期、时间、所在文件名、所在文件的行数。


这些宏在后续的学习阶段会频繁出现,在此总结一下。

关键字:STM32  伪指令 引用地址:STM32—常用的几种伪指令宏

上一篇:STM32—ADC多通道采集电压
下一篇:【FDCAN】STM32G0B1+FDCAN+HAL库调试记录

推荐阅读

    不知不觉又到了开学季,新学期伊始,同学们都会为新的征程购置自己的新装备,而手机无疑就是他们的购物清单上出现最多的一个词。学生作为年轻时尚的群体,外观是他们选择手机最直观的要素,毕竟这是个看脸的社会,手机也要彰显学生党的年轻活力和与众不同的个性。下面新浪手机就为学生党推荐几款学生党高颜值手机,为新学期开一个好头。OPPO R17...
最近大半个月,腾讯音乐遭到中国反垄断部门 —— 国家市场监督管理总局反垄断调查的传闻,在各大媒体网上可以说是传得沸沸扬扬。 消息已经从 8 月中旬由 “ 据知情人士透露 ”,腾讯相关员工出面辟谣,陆陆续续发展到了国外法律咨询机构 Mlex market insight 对此调查的报告曝光和彭博社( 全球最大的财经资讯公司 )在 8 月 27 日再对此...
距离1946年第一台电脑“ENIAC”诞生已经过去了74年,而距离上世纪70年代Intel发明第一代微处理器芯片Intel 4004同样也过去了四十年之久,目前处理器内部的晶体管数量基本都是以“亿”来计算,而性能相对之前的处理器不知提升了多少倍。在目前PC处理器战场上,英特尔和AMD,是CPU供应商里的两大王牌,两家不断更新自己的产品性能,不可有半点松懈。 近日,...
近期,A股芯片设计龙头汇顶科技发布了半年报,据半年报显示,汇顶科技实现营业收入29.1亿元,实现归母净利润4.21亿元。截至9月2日,汇顶科技报收103.9元/股,总市值为475亿元,这较汇顶科技此前高位市值缩水明显,汇顶科技何时能重回巅峰? 汇顶科技总裁胡煜华在业绩说明会上表示,估值是评判公司内在价值的指标之一,会随着各种因素波动,甚至偏离合理的...

史海拾趣

问答坊 | AI 解惑

2.4G天线信号传输损耗

损耗是指在传输过程中因传输介质等因素引起的能力损失。…

查看全部问答∨

二极管her307能不能用her308代替

望高手解答一下,在此先谢谢了!!!…

查看全部问答∨

pdu usc-2 中文编码

我在linux下开发短信,使用开源的smstools来开发。 使用pdu模式时,发现对英语与数字可以很简单地实现。 但使用中文信息时,发现移动发过来的pdu报文解不正确。 如报文:测试 =“6D4B8BD5” 将两位一组转换为16进制数值,再转换为无符号字符。 ...…

查看全部问答∨

各位大哥,你们好,我的朋友想学习plc但不知道用什么开发工具,希望你们能提供一些信息!谢谢

各位大哥,你们好,我的朋友想学习plc但不知道用什么开发工具,希望你们能提供一些信息!谢谢…

查看全部问答∨

想应聘嵌入式软件开发工程师,不知道看些什么书好

对嵌入式系统几乎知道很少知识     但是想应聘嵌入式软件开发工程师,不知道临时补充些什么知识,并且希望大家能推荐出书目来,谢谢 …

查看全部问答∨

gps记录器进度:已能够将主要的数据写入sd卡

已上传工程文件。这个程序会在写入三十行数据都自动停止,以便将书库卡拔出读取,利用库写入sd卡是很简单的…

查看全部问答∨

STM8S常见问题大杂烩

最近再使用STM8S207RB进行开发,以下是自己使用cosmic时遇到的一些常见问题: 1.printf/sprintf入口参数必须是u16类型,否则打印结果不正确,很奇怪 2.u32位类型的判断if ((val%0x1000) == 0)此判断前必须强制转换,即     if ((u ...…

查看全部问答∨

变压器制作知识

本帖最后由 paulhyde 于 2014-9-15 04:02 编辑 变压器制作大家一起学  …

查看全部问答∨

笔试的一个题,挂了!回家的路上突然想到答案,呜呼哀哉~~请各路诸侯给出高见

问题:执行下列代码会有什么结果 #include <stdio.h> char *fun(void) {         char p[] = "hello, world";         return p; } void main() {    &nb ...…

查看全部问答∨

【好书推荐】感悟设计电子设计的经验与哲理

本帖最后由 dontium 于 2015-1-23 11:26 编辑 内容推荐 本书主要从设计者的思维的角度来展开叙述。但和别的讲设计的书籍显著的不同的在于:本书不讲某个专题,而是注重描述设计的整个过程的思维方式和解决问题的方法。本书作为一个讲述电子 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved