宏定义

math与qmath宏定义重复

假装没事ソ 提交于 2020-02-21 06:59:41
warning C4005: “M_SQRT1_2”: 宏重定义 解决方法: 1.需要在“项目”右键单击,选择“属性”,然后在“C/C++”中的“预处理器”配置组中的“预处理器定义”中加入“_USE_MATH_DEFINES”。 2.在相应的头文件中添加 #define _USE_MATH_DEFINES。 来源: CSDN 作者: STL_LOVE 链接: https://blog.csdn.net/STL_LOVE/article/details/104416446

MSP430程序库<九>数码管显示

帅比萌擦擦* 提交于 2020-02-19 10:36:33
数码管也是单片机系统最常用的输出设备之一(还有液晶、发光二极管等)。七段(这里用的是8段,有小数点)数码管可以完成显示0-9数字和一部分的英文字符如:A、b。本文实现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的printf函数的移植,以支持printf的格式化字符等好用的特点(我用的数码管8个排为一排,方便数字等的显示)。 硬件介绍: 这里所用到的硬件资源包括8个数码管、和msp430单片机的两个8位IO口(这里用的是P3和P5口,如有改变,可以通过宏定义更改)。 数码管是8个共阴的数码管,a-h 8段通过一个200Ω的电阻接到430单片机的P5口。共阴端是由单片机的P3口控制,单片机的一位IO通过一个三极管接到数码管的共阴端,以完成位选。 单片机的P3口时数码管的位选口,某位为高则选中;P5口时段选口;要数码管显示时,通过P3位选,选中某个数码管亮,P5段选选择8段(a-h)中的那些亮,从而控制某一位显示数字或字符。 要同时显示多个数码管,就要动态扫描;动态扫描时,本程序选用的是由看门狗的中断扫描显示:每1.9ms显示其中的一位,动态扫描显示每一位,从而让数码管看起来是同时亮的。 程序实现: 数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表),程序中采用了《MSP430系列单片机系统工程设计与实践》这本书推荐的方式实现的这个数码表

【C语言零基础教程】- 预处理指令1 - 宏定义!

回眸只為那壹抹淺笑 提交于 2020-02-19 07:08:56
预处理指令简介 1. C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2. 为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3. 预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4. C语言提供的预处理指令主要有: 宏定义 、 文件包含 、 条件编译 这一篇先介绍一下宏定义,宏定义可以分为2种:不带参数的宏定义 和 带参数的宏定义。 一、不带参数的宏定义 1.一般形式 #define 宏名 字符串 比如#define ABC 10 右边的字符串也可以省略,比如#define ABC 2.作用 它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。 接下来写个程序根据圆的半径计算周长 转存失败 重新上传 取消 在第4行定义了一个叫PI的宏,在编译预处理之后,第8行中的2 * PI *radius就会变成2 * 3.14 * radius。 输出结果: 3.使用习惯与注意 1> 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误 2>

C语言的编译预处理

本秂侑毒 提交于 2020-02-17 09:27:42
C语言的编译预处理命令主要包括:宏定义、文件包含和条件编译。预处理命令均以“#”开始,命令的结尾没有分号,每条预处理命令必须占用单独一行。 1.宏定义 (1) 无参宏定义 无参宏定义的一般形式如下: #define 宏名 字符序列 如果源程序中使用了宏定义,编译预处理过程中,自动把源程序中出现的所有“宏名”替换为“字符序列”,这是一个纯文本替换,也称为宏替换。 例如下面定义了3个无参宏名: #define PI 3.14 #define R 10 #define AREA PI R R (2) 有参宏定义 有参宏定义的一般形式如下: #define 宏名(参数表) 字符序列 有参宏定义在进行宏替换时,源程序出现宏名的地方都使用字符序列替换,替换时使用宏引用中的实参去替换宏定义中的形参。 例如,如下定义了一个有参的宏名。 #define MUL(a,b) (a)*(b) 源程序中可以使用如下语句使用有参的宏: int x=3, y=4, z; z=MUL(x,y); 注意:通常需要在有参宏定义时,字符序列中参数要加上圆括号,以免进行宏替换时出现错误,如z=MUL(x+3,y-1) 10,进行宏替换后的语句为:z=x+3 y-1*10;。 2、文件包含 文件包含也是一种编译预处理命令,其作用是把被包含的文件的内容全部引入到使用文件包含命令的源程序文件中。文件包含命令有以下2种形式:

1-32、讯为驱动-字符类GPIO

雨燕双飞 提交于 2020-02-06 08:51:44
驱动源码 /*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/ #include <linux/init.h> /*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/ #include <linux/module.h> /*定义module_param module_param_array的头文件*/ #include <linux/moduleparam.h> /*定义module_param module_param_array中perm的头文件*/ #include <linux/stat.h> /*三个字符设备函数*/ #include <linux/fs.h> /*MKDEV转换设备号数据类型的宏定义*/ #include <linux/kdev_t.h> /*定义字符设备的结构体*/ #include <linux/cdev.h> /*分配内存空间函数头文件*/ #include <linux/slab.h> /*包含函数device_create 结构体class等头文件*/ #include <linux/device.h> /*自定义头文件*/ #include "char_driver_leds.h" /*Linux中申请GPIO的头文件*/ #include <linux/gpio.h

C++宏定义命令和条件编译命令

喜欢而已 提交于 2020-02-06 04:42:59
1. 概念 宏定义命令和条件编译命令是都是预处理命令的一种 预处理命令:C++以#为开头的命令 解释:C++编译系统包含一个附加的编译预处理程序,在cpp正式被编译前,首先进行预处理。读取和识别程序中的预处理命令,并按预处理命令对编译的程序进行制定的预处理 预处理命令包含:文件嵌入命令、宏定义命令和条件编译命令 文件嵌入命令就是我们常用的include,这里只说一句 #include <A> #include "A" <>先从系统提供的include目录中搜索, 系统提供的用<> ""先从当前目录中查找,再去include目录搜索, 自己写的用"" ,减少搜索时间 2. 宏定义命令 宏定义命令又称宏替换命令,功能是用一个称为宏名的标识符代表一段字符串,#undef为取消宏定义命令 #define 宏名 宏替换体 #undef 宏名 例子 #define PI 3.1415926 #undef PI #define PI 3.14 #define OUTPUT std::cout<<"test\n" int main(int argc, char* argv[]){ std::cout<<PI<<std::endl; OUTPUT; } 3. 条件编译命令 条件编译命令可以决定哪部分程序编译,哪部分程序不编译 有这么几种写法: #if 和 #endif #ifdef 和 #endif

assert_param 函数,断言

寵の児 提交于 2020-02-04 23:23:45
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。在固件库中,它的作用就是 检测传递给函数的参数是否是有效 的参数。 这是一种常见的软件技术,可以在调试阶段帮助程序员快速地排除那些明显的错误。它确实在程序的运行上牺牲了效率(但只是在调试阶段),但在项目的开发上却帮助你提高了效率。 当你的项目开发成功,使用release模式编译之后,或在stm32f10x_conf.h文件中注释掉对USE_FULL_ASSERT的宏定义,所有的assert_param()检验都消失了,不会影响最终程序的运行效率。 assert_param函数在 stm32f0xx_conf.h 库函数中定义: /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* Uncomment the line below to expanse the "assert_param" macro in the Standard Peripheral Library drivers code */ /* #define

C++学习笔记2

China☆狼群 提交于 2020-02-04 00:12:26
二、C++基础知识 6、inline内联函数 在函数定义前冠以关键字 inline, 则该函数就被声明为内联函数 每当程序中出现对该函数的调用时, C++编译器使用函数体内的代码代替函数调用表达式。再编译过程替换 使用内联函数代替宏定义, 可以消除宏定义的不安全性。 内联函数具有宏定义的所有优点而没有缺点 浪费空间、节省时间 简单函数可以加上inline 7、缺省参数的函数 C++ 在声明函数原型时, 可为一个或多个参数指定缺省参数值, 以后调用此函数, 若省略其中某一参数, C++ 自动的以缺省值作为相应参数的值 int special(int x=5,float y=5.3); 当进行函数调用时, 可以有以下几种形式 1)special(100,79.8)//x=100, y=79.8 2)special(25);//x=25, y=5.3 3)special();//x=5,y=5.3 不能special(,25); 这是错误的 传实参的时候必须从左往右传,在设置缺省值的时候 必须 从右往左设置,有默认值的参数放在右边;没有缺省值的参数必须传参 #include<iostream> using namespace std; //函数声明, 缺省值在声明处设置 int my_add(int x=10,int y=20); int main() { cout<<"my_add()

04_ESP8266 NONOS_SDK GPIO

我的梦境 提交于 2020-02-01 01:37:54
相关资料准备: (1)GPIO相关API请查看2c-esp8266_non_os_sdk_api_reference_cn手册 (2)GPIO相关寄存器请查看 esp8266-technical_reference_cn 手册 (3)ESP8266 的 16 个通⽤ IO 的管脚位置和名称如下表所示: 图1.1-GPIO管脚定义 其中,在四线( QUAD)模式 Flash 下,有 6 个 IO 口用于 Flash 通讯。 在两线( DUAL)模式 Flash 下,有 4 个 IO 口用于与 Flash 通讯。 说明: 本说明如果对照以下资料阅读,会更有助理解: • “附录 1 - GPIO 寄存器” • 引脚功能复⽤表:《 ESP8266_Pin_List.xlsx》 https://www.espressif.com/sites/default/files/documentation/ESP8266_Pin_List.xls 一、GPIO 口输出 目标: 将GPIO2和GPIO4设置成IO口,将管脚设为输出模式,并输出对应电平,加入delay延时,使LED按照一定频率闪烁。步骤如下: 1 、首先将添加两个头文件: "eagle_soc.h"和 "gpio.h" 2 、管脚功能选择: 将GPIO2定义为IO口,PIN_FUNC_SELECT( PERIPHS_IO_MUX

宏定义的-函数类型的

穿精又带淫゛_ 提交于 2020-01-30 20:18:49
宏定义的-函数类型的 宏定义,在C语言中,仅仅是将其进行替换,这块的使用还是比较死板的 比较两个数据的大小,直接使用宏定义 上述代码,在宏定义阶段一定需要加上必要的括号 运行结果 下述代码,存在了不增加括号的情况,那么就会由于替换和运算符号优先级别的问题,造成计算结果的奇怪! 对于未加括号的情况,会出现将计算结果直接替换为:x+1 x+1 然后又是因为计算优先级别的问题,明明想计算5+1乘以5+1,可是按照上述替换情况就会变成:5+1 5+1=11,这显然不是6的平方和啊 运行结果 来源: CSDN 作者: 许多逗 链接: https://blog.csdn.net/qq_41274875/article/details/104115394