自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

求知若渴,虚怀弱愚

技术的成长是一个过程

  • 博客(33)
  • 收藏
  • 关注

原创 C++析构函数

C++析构函数前言一、析构函数特点二、析构函数的使用1.析构函数的使用2.总结前言在构造函数的基础上有了析构函数,析构函数与构造函数密切相关的,析构函数的作用主要是执行清理任务,释放分配给对象的内存空间一、析构函数特点 析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~没有参数和返回值,在定义时,不能说明它的数据类型,甚至void类型也不可以析构函数没有参数,因此不能被重载一个类可以有多个构造函数,但是只能有一个析构函数撤销对象的时候,析构函数会被自动调

2021-05-09 15:50:30 1590

原创 No Cortex-M Device found in JTAG chain问题

No Cortex-M Device found in JTAG chain问题问题描述解决办法问题描述在使用JTAG下载的时候的时候出现该问题,排除了硬件连接以及下载器损坏的情况下,导致下载不成功。解决办法首先在Keil 中确认当前下载器选择是否正确之后查看下载方式是否正确,这是由于我们使用的是SW的接口但是选择的却是JTAG,因此需要修改接口问SW。完成如上操作即可成功解决该问题。...

2021-05-08 13:42:46 7603 2

原创 C++引用用于函数

将引用作为函数参数进行传参的方式叫做引用传参。按照引用传递允许被调用的函数访问函数中的变量。使用引用交换两个数。 void refrece_swap(int &a,int &b) { int temp; temp = a; a = b; b = temp; } int main() { int a = 10,b = 20; cout<<"a...

2021-04-21 10:27:37 925

原创 C++引用之引用语法

引用是C++提供了一种给函数传递地址的途径,引用的本质就是给一个已经定义好的变量取一个别名。语法:(1) &和别名结合表示引用(2) 给某个变量去别名就定义某个变量(3) 从上往下替换(4) 引用必须初始化(5) 引用一旦初始化就不能再次修改别名程序实例: #include <iostream> using namespace std; int main() { int i; int &j...

2021-04-20 00:33:22 497

原创 C++函数重载

函数参数的类型不同,或这种参数的个数不同,或者二者都有,两个或者两个函数可以使用相同的函数名,当两个或者两个以上的函数共用一个函数名时,称为函数的重载,被重载的函数称为重载函数。(1)调用重载函数时,两个函数仅返回值类型不同不能作为重载函数,例如int mul(int x,int y);double mul(int x,int y);由于函数参数和个数完全相同,因此编译器无法判断哪个函数进行匹配操作。(2)函数的重载与带默认值的函数一起使用的时候,有可能有二义性,例如void dra

2021-04-20 00:29:29 221

原创 C语言进阶[2]:字符串常量

C语言中的字符串是一串以NUL字符结尾的零个或多个字符,字符串通常存储在字符数组中。 由于NUL字节是用于终结字符串的,因此,在字符串内部不能有NUL字节,之所以选择用NUL作为字符串的终止符是因为它是一个不可打印的字符。 字符串的NUL结束符并不是显示的出现在字符串中,而是每个字符串的最后都有一个隐式的NUL结束符。 字符串是一个常量,无法对其进行修改。在程序中使用字符串常量会生成一个“指向字符的常量指针”,当一个字符串常量出现在一个表达式中,表达式所使用的值就是这些字符串所存储...

2020-11-18 23:27:40 222

原创 C语言整型数据类型

1.1数据类型的本质数据类型的本质就是固定内存大小的别名,因为每个数据类型编译器都规定了其占用内存空间的大小,在此基础上才衍生除了变量的大小,因此,变量的本质就是一段连续内存空间的别名。对变量的操作最终都是转换位对内存的操作。1.2整型的分类? 整型分为字符,短整型,整型,长整型。同时有无符号和有符号之分。 数据类型划分以及其表示数据范围如下长整型至少要和整型一样长,而整型至少应该和短整型一样长。 在实际开发过程中,short int 至少是16bit的,而l...

2020-11-16 23:14:42 684

原创 如何在Keil中获取当前时间

在Keil中如何调用系统的时间。(1) 使用下面两个宏,一个是日期,一个是时间const u8 gSystemDate[12] = __DATE__;//注意,是两个下划线__const u8 gSystemTime[16] = __TIME__;(2)使用打印函数打印出当前的时间printf("date:%s \r\n",gSystemDate);printf("time:%s \r\n",gSystemTime);(3) 结果显示date:Jul 11 2020 ..

2020-07-11 11:42:39 8519 2

原创 ADC参数详解

ADC 的主要参数(1) ADC 的时钟。时钟是ADC能正常工作的基础,一般情况下,ADC的时钟频率越高,ADC采样的速度越快。但是,这个时钟并不是越高越好,一般的MCU都会设定一个建议的最高ADC工作频率,在合理的工作频率范围内有助于提高ADC的采样精确度。(2)ADC的采样率。采样率就是ADC 采样的速率。它是指在规定的时间内可以采集的次数,采样率越高,采集到的点数就越多,那么对原始信号的还原率就越高。采样率的单位是SPS(sample per sencond),每秒采样次数。这个值越大,采样速

2020-07-10 22:19:04 13627

原创 STM32F407使用FSMC驱动ILI9486显示

昨天使用探索者STM32F407将ILI9486 TFTLCD显示屏驱动已经正常调通,下面将附上所有的程序代码//tftlcd.c 文件程序如下所示/***************************************************************************************** 函 数 名: TFTLCD_GPIO_Init* 函数功能: tft lcd 显示屏初始化函数* 输 入: 无* 输 出: 无* ...

2020-06-23 19:15:35 2922 3

原创 STM32 静态全局变量值不正常问题

今天在调试按键驱动的过程中,使用Systick 定时器中断中每10ms 调用一次按键检测程序,在按键检测程序中按下时有一个定时器计时,具体程序如下所示。 void buttonScan(void){static u8 sLastButtonState = BUTTON_RELEASE;//初始状态为松开static u8 sButtonState;static u8 sButtonPreCnt; if(isButtonPressed()) { sButtonTick++...

2020-06-17 00:39:37 3019 1

原创 最好的芳华遇到你,余生都是你

2020年1月3日,我们终于办完了婚礼,虽然领证在2018年的9月30号都已经领了。但是,由于各种原因导致婚礼时间一直被滞后,很感谢能遇到你,你出现在我的生命中,第一次看到你就想能和你有未来。8年多的时间,从高中时期的青春年少再到出入社会之后的成熟稳重,时间在变,人在变,而你依据是我内心深处的那个人,从在一起开始我就幻想能和你白头偕老。我也在慢慢的去实现自己的理想,我深知自己没有什么优势...

2020-01-07 08:56:30 285

原创 单片机的内部结构

51单片机的内部结构包含了作为微型计算机的所具备的基本功能部件,如CPU,RAM,ROM,I/O等。CPU的主要功能是产生各种控制信号,控制存储器,I/O口的数据传送、数据运算,逻辑运算等。CPU由控制器和运算器组成。(1)控制器 作用:对指令进行译码,从而让CPU能识别 实现控制信号的操作 组成: ①程序计数器(PC) PC指针,存放下...

2019-07-16 00:04:38 3766

原创 将字符串IP地址解析成数组IP

uint8_t StrToIP(const int8_t* str, void *ip){ /* The count of the number of bytes processed. */ int i; /* A pointer to the next digit to process. */ const char * start; s...

2019-05-27 22:17:01 1114

原创 eclipse启动出现“An Error has Occurred. See the log file...”解决方法

当eclipse出现上面这种问题的时候一般是上次强制退出了eclipse时,比如软件没有关闭就直接电脑关机了。解决办法:(1) 删除你之前工程目录下的:“..\configuration\.settings\org.eclipse.ui.ide.prefs”文件,在你的eclpse的安装路径中找该路径(2) 重启软件;(3) 在软件打开不之后换一个workspace...

2019-05-19 21:10:30 8460

原创 STM32:Error:L6218E错误的解决方法

在调试STM32程序的过程中出现下面的这些错误提示..\OBJ\LED.axf: Error: L6218E: Undefined symbol PWR_ClearFlag (referred from main.o)...\OBJ\LED.axf: Error: L6218E: Undefined symbol PWR_EnterSTANDBYMode (referred from mai...

2019-03-30 21:42:25 20522

原创 给自己的七个切勿!!!

切勿眼高手低 不知从什么时候开始,觉得自己好像什么都会,看懂原理就觉得一切都OK,但是实际做开发的时候却发现莫名的出现了很多问题,其实自己并没有搞懂,只是觉得简单就不愿意去动手。 切勿三天打鱼两天晒网认准了的东西就一定要去不断的探索,学一会又不学,最终的结果就是什么都没有学到,还浪费时间与精力。 切勿沉迷游戏;游戏里面什么都没有,适度才能发挥其...

2019-03-11 19:53:58 161

原创 N76E003的输入捕获处理

       N76E003的输入捕获功能还是挺强大的,具体的说明在这里就不多讲,配置的步骤如下:      (1) 将要检测输入捕获的IO口配置成输入模式;      (2) 选择信道输入CAP0/1/2,在官方的例程中使用TIMER2_CAP1_Capture_Mode等该宏定义进行进行配置,但是在这里一定要注意,进入这个宏定义,是对T2CON和T2MOD的配置,而T2MOD是对定时器...

2019-01-04 18:46:53 3132 1

原创 新唐N76E003 ADC多通道采集处理(2)

     之前的一篇博文也是关于N76E003的ADC的多通道采集,但是该版本还是存在一些问题,后面也没有想起来去改它,所以,这里重新对这些处理的方法做一些完善。    首先是配置方面,配置是非常简单的,在初始化的时候先将一个通道初始化好,然后定义使用一个全局变量gAdcChannel用来作为轮流的标志位,该MCU的ADC的速度还是比较不错的,大概3-4us就能完成一次ADC的采样,但是建议不...

2019-01-04 15:18:26 4670 1

原创 2018年终总结

      时光不易,一年转逝。回首这一年,还是有许多需要记忆的。     这一年,定了自己的终身大事,将长跑了7年的爱情画上了圆满的句号,正月初二订婚,9月30日领取结婚证。感谢我的妻子和岳父岳母能看重我,同时也要感谢父母的艰辛付出,才使一切都变得水到渠成。     这一年,岳父岳母买了房子,想减轻一点我们两个人的负担,后面开始装修,置办家具,尽自己最大的努力减轻他们的一些负担,同时妻子...

2019-01-02 19:14:13 491 1

原创 从软件开发角度去看当前的市面上的电子烟

   从事电子烟的软件开发已有一年,对电子烟也算有了一定的了解,下面从开发者的角度去介绍一下电子烟。   1.原理       传统意义上的电子烟都是通过电池供电,现在市面上的大部分使用的是18650系列的一节或者两节电池,一节电池满电状态在4.20V左右,两节则在8.40V左右,通过驱动负载(也就是雾化芯)输出而将烟油雾化最终出烟。这是一个很广范围的概述,里面的技术则是设计到对PCBAB...

2018-10-19 09:42:25 2886 4

原创 C语言开发中对有关联宏定义的使用注意事项

    宏定义是我们在项目开发中经常会使用到的,尤其是在嵌入式开发中,比如针对IO口的宏定义。宏定义不会占据内存,宏定义只会在程序使用到的时候插入进来。   在开发过程中我们经常会将一些具有关联的数据使用宏定义,比如,在单片机的开发中,定时器是一个非常重要且几乎都要被使用到的外设,在项目中都会设定一个基准的定时时间假设是1ms,在此,我们可以将1ms这个计时基准设置成为一个宏定义,比如#...

2018-10-18 16:58:49 348

原创 位(bit)交换函数

/*bit交换函数,output[7:0] = input[0:7]*/static uint32_t swap_bits(uint32_t inp){ uint32_t i; uint32_t retval = 0; inp = (inp &amp; 0x000000FFUL); for(i = 0; i &lt; 8; i++) { retval |= ((inp &gt;...

2018-10-11 13:55:43 1695

原创 ADC均值滤波的方法

#define ADC_SAMPLE_NUM 10u16 adc_value[5*ADC_SAMPLE_NUM];//ADC采集值存放缓冲区void ADC_Filter(u16* adc_val){ u16 i=0; u32 sum[5]={0,0,0,0}; for(;i&lt;ADC_SAMPLE_NUM;i++) { sum[0]+=adc_value[5*i+...

2018-10-10 10:12:36 4234

原创 STM32DMA ADC配置方法

void Adc_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GP...

2018-10-10 10:07:42 3321

原创 C++派生类与构造函数示例代码

#pragma once//基类.hclass TabletennisPlayer{public: TabletennisPlayer(const char * fn = "none", const char *ln = "none", bool ht = false); void Name() const; bool isHasTable()const { retu...

2018-09-11 19:23:59 502

原创 C++ const 成员函数

在C语言中,已经有很多对const的知识介绍,而const在实际开发中用的也是比较多,在本人的开发过程中一般是在函数传值过程中,尤其是传一些字符串类型,可以参考C语言那些字符串的库函数的源码。下面我们说一下在C++中的成员函数。class Stock{ private: public: void show();//成员函数};int...

2018-09-11 09:57:34 280

原创 C++内联函数

内联函数:定义位于类声明中的函数都将自动成为内联函数,类声经常将短小的成员函数作为内联函数。内联函数使用inline关键字进行修饰​class Stock{ private: char company[20];//campany name int stockNum; double stockPrice; doubl...

2018-09-10 19:58:40 200

原创 KEIL5与Source Insight同一个工程在Source Insight中乱码的解决方法

    来源不仅仅是一个源码查看的好工具,同时也是编程的好工具。    出现注释乱码的解决办法    在SI中“FILE”--&gt;"Reload as Ecording"---&gt;选择与你的KEIL中一样的编码格式,确定。    如此则搞定。...

2018-05-09 23:30:14 1918

原创 浅谈单片机开发中宏定义的使用

    (1)IO口管脚使用见名知意的宏定义,比如LED1,LED_ONE_PIN    (2)IO口电平高低使用宏定义,例如PIN_ON/PIN_OFF    (3)某一个需要与变量进行比较的数值,使用宏定义    ...当然,我说的也只是一些很片面的,但是宏定义对于我们去修改程序就有了很大的便利之处,(1)将软件层与硬件层分割开,比如IO管脚使用宏定义,那么管脚变了,只要修改成另一个管脚,软件...

2018-04-26 17:20:15 3320

原创 N76E003低功耗的处理

    低功耗是项目中非常重要的一部分,尤其是对于一些使用电池供电的设备。    N76E003支持两种低功耗模式,一种是空闲模式,一种是掉电模式,从字面意思一看就知道如果要最求最低的功耗,一定是需要使用掉电模式。在掉电模式下,作者对当前的项目应用中测试出来的最低的功耗是5uA,这个值本人认为已经是非常不错的。针对N76E003如何实现低功耗谈谈个人的经验。    首先肯定是配置掉电模式,一条se...

2018-04-26 16:50:00 7564 2

原创 新唐N76E003AT20 多通道ADC采集方法

    不得不说N76E003的功能在8051内核单片机中功能已经是非常强大了,并且官方开提供了BSP 开发库,这些都是可以直接在官网中直接找到的。对于N76E003的ADC,因为作者没有用过很早之前的版本,作者使用的时候官方已经提供了VBG反推VDD的例程,但是这种做法还是有一些缺陷,因为内部的乘除法运算对于一个8位的单片机来说还是有一定的困难的。但是在实际项目中应该都是需要使用到多个通道轮流采...

2018-04-13 09:34:31 13942 3

原创 C语言中的声明优先级规则

A 声明从它的名字开始读取,然后按照优先级顺序依次读取B 优先级从高到低依次是:B. 1 声明中被括号括起来的那部分B. 2 后操作符: ()表示这是一个函数 []表示这是一个数组C. 3 前缀操作符:*表示“指向什么的指针”。C 如果const或volatie关键字后面紧跟类型说明符(int 、long等)说明它作用于类型说明符,在其他情况下,const vol

2017-03-17 19:31:06 403

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除