- 博客(40)
- 资源 (1)
- 收藏
- 关注
原创 关于C/C++语言重复包含头文件,编译时报错已定义的宏未定义的原因及解决方法
在编写一个文件较多的单片机程序时,为了在一个文件中定义的变量或宏能被另一个文件使用,经常会写成在多个头文件相互包含,由此将可能会导致明明已经定义的宏,且已经将宏所在的文件使用 #include 包含,编译时仍会报错未定义。
2023-05-13 18:27:41
7415
1
转载 MDK优化等级说明
原文0 Minimum optimization. Turns off most optimizations.It gives the best possible debug view and the lowest level of optimization. 近乎不优化,用于调试代码。出现代码行不能设置断点可如此设置试试。1 Restrictedoptimization. Removes unused inline functions and u...
2021-07-31 10:40:18
861
转载 KCV值 - 3DES加密
KCV值 - 3DES加密3-DES加密环境中的KCV(密钥检查值)是什么?关于什么是KCV以及它如何在3-DES加密中使用,是否有很好的文档?“6.15钥匙检查值目的:该数据用于证明卡/处理器可以访问特定的DES密钥值 格式:二进制,3个字节内容:DES密钥加密八个字节的零结果的最左边三个字节“(source)__“任何DES密钥的密钥检查值将通过使用ECB 3DES加密8字节'00'来计算,并使用相关密钥”(source)__“DES / 3DES密钥的密钥检查值(缩写为KCV或C.
2021-01-20 22:58:12
7893
转载 旋转编码开关 EC11 的工作原理
EC11旋转编码开关:带有左转、右转、按下三个功能。我只需要使用左右转功能,这里只需要使用A、B引脚。1. 引脚设置:使用的是A B 引脚,设置为上拉输入。因为需要通过检测A、B两个引脚的电平变化,所以设置为上拉输入状态。2.左转(逆时针)、右转(顺时针)的电平状态变化电平变化,这里指的是一个周期中的高低电平变化情况。如下输出信号图:从左往右的第一根虚线到第三个虚线中,A、B间的电平状态。逆时针时(一个周期):11、01、00、10、11、01、00、10...
2020-07-20 21:18:51
14496
3
原创 六轴加速陀螺仪MPU6500/MPU6050使用及DMP库移植,含记步器功能
本篇博客为博主学习使用MPU6500完成后的学习记录,故在这只做主要讲解,如有博友看完后仍不知如何使用,可在下方留言问我,或发邮件问我(dayou1024@qq.com),因邮件有QQ和微信提示,故我能更快看到.1、MPU6500/MPU6050是一个6轴的传感器,及加速度和角速度各有 x,y,z轴相关数据手册可在网上找到,如立创商城2、我这里使用I2C总线驱动MPU6500,要想后面的程序能调通,首先要确保I2C连续读写都正确,能读写MPU6500一两个寄存器正确并不能说明你的I2C一定.
2020-07-06 22:05:58
34188
6
转载 【C语言】函数定义时前加static 作用
C语言中函数定义时前加static 作用1.作用函数中加“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。2.好处使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。3.根本原因根本原因是C语言中同一个工程中不能有同名函数。定义静态函数的好处:其他文件中可以定义相同名字的函数,不会发生冲突静态函数不能被工程内其他文件所用。拓展:关于内联函数内联函数是在函数的前面加“inline”,意思
2020-06-30 09:57:11
6648
转载 #ifdef __cplusplus extern “C”的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写...
2020-06-29 11:50:10
14647
6
转载 C语言函数中的3个点 ...有什么作用
转载于网友的一片文章,写的很好! 标准库提供的一些参数的数目可以有变化的函数。例如我们很熟悉的printf,它需要有一个格式串,还应根据需要为它提供任意多个“其他参数”。这种函数被称作“具有变长度参数表的函数”,或简称为“变参数函数”。我们写程序中有时也可能需要定义这种函数。要定义这类函数,就必须使用标准头文件<stdarg.h>,使用该文件提供的一套机制,并需要按照规定的定义方式工作。本节介绍这个头文件提供的有关功能,它们的意义和使用,并用例子说明这类函数的定义方法。 ...
2020-06-28 20:44:31
4289
转载 C语言中定义变量“#X”,”X##”, “##X” 和“##X##”解析
关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:1. #使用#define WARN_IF(EXP) /do{ if (EXP) /fprintf(stderr, "Warning: " #EXP "/n"); } /while(0)那么实际使用中会出现下面所示的替换过程:WARN_IF (divider );其中div...
2020-06-26 20:14:06
4118
转载 C语言中的内联函数inline
本文链接:https://blog.youkuaiyun.com/lufeiop02/article/details/6526499在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来看一个例子#include <stdio.h
2020-06-26 19:51:17
315
原创 C语言中申请变量顺序不同而导致占用内存大小不同的问题
C语言中申请变量时顺序不同,会导致占用的内存不能,特别是在使用结构体时,结构体内的变量是连续存放的,使用不当,将会浪费大量内存空间,下面以代码说说明1、#include <stdio.h>#include <string.h>#define u8 unsigned char#define u16 unsigned short int#define u32 unsigned inttypedef struct{ u16 a; u8 b; u16 c; u
2020-06-16 20:27:11
724
原创 I2C连续读写E2PROM例程
本例程主要作为作者的学习记录,意义在于E2PROM使用页缓冲器连续读写,基于STM32,作用51也很好移植,只需改动端口定义头文件#ifndef AT24CXX_H#define AT24CXX_H#include "stm32f10x.h"#include "sys.h"#include "delay.h"#include "stdio.h"#define E2PROM_I2C_SDA_RE PBin(11) #define E2PROM_I2C_SDA_WR PBout.
2020-06-15 19:54:05
2565
原创 I2C协议代码的实现关键
I2C总线我已经用很久了,也用了很多次,但每到下一次使用时,都会或多或少的发现一些小问题,比如读写单个字节时没有问题,在连续读写大量数据时却出现读写不正确的现象,下面来总结一下模拟I2C驱动代码的实现关键1、起始信号start:这个一般不会出错,在SCL=1时,让SDA出现一个下降沿,即SDA=1 --->SDA=0;2、停止信号stop:这个一般也不会出错,在SCL=1时,让SDA出现一个上升沿,即SDA=0--->SDA=1;3、主机(如单片机)检测应答信号:I2C要求...
2020-06-15 11:04:22
1197
转载 c语言中__align()关键字的作用与内存对齐的原理
32位cpu为例,cpu在访问内存的时候是以一个字进行传输的(计算机中,一个机器字长就是cpu位数,32位cpu,四个字节为一个字),那么也就是说cpu读取数据每次都是四个字节四个字节的读取,计算机最初是从地址0开始寻址,那么寻址也就是4个字节4个字节的地址依次往后找。如果我们只需要读取一个字节的char型变量,那么计算机也是读取它所在的4个字节出来,然后提取出那个目标字节就行了,因为32位计算机...
2020-04-09 11:53:47
1424
转载 ST LINK维修经验
转发一个ST LINK维修经验,本人未验证1.我是用的网上买的ST-LINK V2,结果在插拔时突然连不上了,主芯片发烫,万用表一量,烧坏,3.3V回路短路 2.从网上买了五片STM32F103C8T6,把原来芯片焊下来,板子不短路了,证明是芯片烧坏 再把新芯片焊上去 3.网上下载STLinkV2.J16.S4.bin 文件,然后用JLINK的SWD口下载,当JLINK打开S...
2020-02-28 22:07:58
6389
转载 #define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作
问题:#define assert_param(expr) ((void)0) 这是个宏定义,但是我真是不知道(void)0能执行什么操作具体的定义和用法在下面void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset){ assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); assert_pa...
2020-01-06 20:06:34
888
原创 RFID,RC522教程
B站视频教程(教程一般):https://www.bilibili.com/video/av73409046?p=14相关文档资料(含代码):https://pan.baidu.com/s/1xEKybpw5C62c6P5rzpAJ-Q主要看红框的文件代码mfrc522.h#ifndef __MRRC522_H__#define __MRRC522_H_...
2019-12-25 19:36:16
6298
1
原创 C语言中bdata的用法
unsigned char bdata sta;sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;如同89c51单片机中 sbit LED=P1^0; 一样,可以单独使用P1口的位0
2019-11-27 16:38:23
3166
2
转载 超声波模块HC-SR04简介
、本模块性能稳定,测度距离精确,模块高精度,盲区小。产品应用领域:机器人避障物体测距液位检测公共安防停车场检测。2、主要技术参数:1:使用电压:DC---5V2:静态电流:小于2mA3:电平输出:高5V4:电平输出:底0V5:感应角度:不大于15度6:探测距离:2cm-450cm7...
2019-10-25 02:42:14
24840
3
转载 #pragma 的几种用法
转自:https://blog.youkuaiyun.com/houyichaochao/article/details/80555218预编译指令#pragma有很多种用法,我敢保证很多程序员即使是一辈子也不会碰到其中的有些用法,是的,他们的确很偏僻,我们也没有用他们的需求。所以,本文不会面面俱到,只是把几种常用的几种汇总了一下。1. #pragma once保证头文件只被include一...
2019-05-23 10:15:30
2658
转载 TTL和CMOS的区别
什么是TTL电平,什么是CMOS电平,他们的区别(一)TTL高电平3.6~5V,低电平0V~2.4VCMOS电平Vcc可达到12VCMOS电路输出高电平约为0.9Vcc,而输出低电平约为0.1Vcc。CMOS电路不使用的输入端不能悬空,会造成逻辑混乱。TTL电路不使用的输入端悬空为高电平另外,CMOS集成电路电源电压可以在较大范围内变化,因而对电源的要求不像TTL集成电路...
2019-05-15 19:34:17
50003
5
转载 const在C语言中的用法
在C语言中,const修饰的变量具有常属性,不可以修改它的值。例如:const int num=10;int const num=10;//变量num的值不可以被改变但是它又和变量有一些区别,例如:#define line 10const int num=10;虽然它们的值都是10,而且都不能改变,但是用在数组中就不一样了。例如:int arr[li...
2019-04-07 11:43:55
441
转载 Ubuntu安装已下载了.deb文件的软件 以及dpkg命令
1、转到安装包所在目录 cd 目录名/...2、用dpkg命令运行安装包 sudo dpkg -i 安装包名称.debdpkg常用命令: sudo dpkg -I 文件名.deb //查看iptux.deb软件包的详细信息,包括软件名称、版本以及大小等(其中-I等价于--info) sudo dpkg -c 文件名.deb...
2019-04-05 02:14:22
1518
转载 ((unsigned char volatile code *) 0) 解析
#define CBYTE ((unsigned char volatile code *) 0)#define DBYTE ((unsigned char volatile data *) 0)#define PBYTE ((unsigned char volatile pdata *) 0)#define XBYTE ((unsigned char volatile xdata *) ...
2018-10-08 11:10:25
2270
转载 NOR flash 和NAND flash区别深入分析
闪存芯片读写的基本单位不同 应用程序对NOR芯片操作以“字”为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。读写时需要同时指定逻辑块号和块内偏移。应用程序对NAND芯片操作是以“块”为基本单位。NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。要修改NAND芯片中一个字节,必须重...
2018-09-08 21:40:55
213
转载 USB走线要求
USB是一种快速、双向、同步传输、廉价、方便使用的可热拔插的串行接口。由于数据传输快,接口方便,支持热插拔等优点使USB设备得到广泛应用。目前,市场上以USB2.0为接口的产品居多,但很多硬件新手在USB应用中遇到很多困扰,往往PCB装配完之后USB接口出现各种问题 比如通讯不稳定或是无法通讯,检查原理图和焊接都无问题,或许这个时候就需怀疑PCB设计不合理。绘制满足USB2.0数据传输要求...
2018-08-31 15:13:59
8556
原创 各种锂电池的放电倍率和计算方法
一般锂电池分类ICR=锂钴(1-2C放电)IMR=锂锰(10-15C)INR=三元锂(5-7C)IFR=磷酸铁锂(可25-35C)一般锂电池分类ICR=锂钴(1-2C放电)IMR=锂锰(10-15C)INR=三元锂(5-7C)IFR=磷酸铁锂(可25-35C)说明:https://wenku.baidu.com/view/22dff480ec3a87c24028c4d...
2018-08-15 15:04:01
82240
转载 STlinkSWD模式连线方式
若使用SWD模式,则只需要连接4根线,7,9,12,1即SWDCLK,SWDIO,GND,VCC.如下图所示 VCC为3.3V 原文链接:https://blog.youkuaiyun.com/kekehuhu21/article/details/73826939
2018-07-24 14:46:35
12585
1
转载 Keil STM32调试,使用ST-Link下载程序时提示“flash timeout.reset the target and try it again”
参考:很郁闷,买来没多久的 STM32F4-DISCOVERY 就挂了?STM32F103RB Jlink调试的时候出现flash timeout.reset the target and try it again 看完以上网友的方案后本人使用FlyMcu读芯片,内容提示芯片被锁。遂想下载一个程序试试,不想程序可以下载,然后再读芯片时已正常。返回Keil使用ST-Link也...
2018-07-23 14:07:32
15378
1
转载 SVN使用教程总结
转载地址SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。Subversion是什么? 它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subversion可...
2018-06-01 15:10:11
820
转载 ARM Cortex-M3的startup.s文件详解
ARM Cortex-M3的startup.s文件详解原文地址链接以LM3S9B90为例。Startup.s文件是系统的启动文件,主要包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main( )函数等。Startup.s主要完成三个工作:栈和堆的初始化、定位中断向量表、调用Reset Handler。a)堆和栈的初始化Startup.s中的代码如下图所示: 1.程序分别对堆和栈进行了大...
2018-06-01 15:05:15
2042
转载 开关升压电路原理
开关升压电路原理 假定那个开关(三极管或者mos管)已经断开了很长时间,所有的元件都处于理想状态,电容电压等于输入电压。下面要分充电和放电两个部分来说明这个电路。 充电过程 在充电过程中,开关闭合(三极管导通),等效电路如图二,开关(三极管)处用导线代替。这时,输入电压流过电感。二极管防止电容对地放电。由于输入是直流电,所以电感上的电流以一定的比率线性增加,这个比率跟电感大小有关...
2018-06-01 14:57:07
8683
4
原创 PADS显示元件值并打印贴片图
PADS显示元件值并打印贴片图1、首先,可以设置只显示顶层和顶层丝印层Ctrl+Alt+C,在“显示颜色设置”中,把不想显示的层前面的勾去掉,点“确定”。2、选择显示顶层丝印层空白处鼠标右击->选择元器件,选择要显示的元件,鼠标右击->特性3、选择“元器件特性”框中的“标签”,选择下拉箭头的“NEW”,再点下面的图标,在弹出的对话框中的属性中,选“value”(如果不对则选“comme...
2018-06-01 14:53:26
16134
转载 解决Keil 搜索关键字时不能跳转到所在位置的问题
问题:KEIL搜索结果不能跳转的问题分析过程:最近遇到一个问题:在keil5.1中ctrl+shift+s全局搜索,双击搜索结果后无法跳转。重装软件,换版本,修复电脑我都试了,都没用。最后发现,原先的程序可以跳转,而后来修改的不行。相同的工程在相同的目录下为什么一个可以一个不行呢?发现唯一的区别就是两个工程文件夹名称不同,由于修改过的版本我在工程文件名附加了 “(0922)”,我把括号去掉后就可以...
2018-06-01 14:42:07
7768
3
转载 头文件中#ifndef后面的如何写及什么作用
在头文件中加入#ifndef或#ifdef等宏定义,是为了防止重复声明。我们知道,头文件一般是用来声明的,会被其他的源文件和头文件include,当被多个文件include的时候就会造成重复声明。 为了使得只声明一次,引入前面所说的宏定义,一般以文件名大写和_来当宏的名字。这个宏是给预处理器用的,通常预处理变量用大写,所以这些宏定义都用大写。为了方便,一般将大写的文件名作为预处理器变量,其实在#i...
2018-06-01 14:39:57
10904
1
转载 MOS管防止电源反接的原理
一般可以使用在电源的正极串入一个二极管解决,不过,由于二极管有压降,会给电路造成不必要的损耗,尤其是电池供电场合,本来电池电压就3.7V,你就用二极管降了0.6V,使得电池使用时间大减。MOS管防反接,好处就是压降小,小到几乎可以忽略不计。现在的MOS管可以做到几个毫欧的内阻,假设是6.5毫欧,通过的电流为1A(这个电流已经很大了),在他上面的压降只有6.5毫伏。由于MOS管越来越便宜,所以人们逐...
2018-06-01 14:38:59
10862
1
转载 STM32中GPIO的8种工作模式!
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。...
2018-06-01 14:26:44
589
六轴传感器MPU6XXX例程及开发资料.rar
2020-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人