Author Archives: admin

Visual Studio在Release模式下开启Debug调试的方法

Visual Studio在Release模式下开启Debug调试,该模式在保留Release模式下运行快速的前提下,又可以给特定的工程开启Debug模式,进行针对性的调试。这样比整个项目都采用Debug模式进行编译,在调试时会提高效率。Visual Studio在Release模式下开启Debug调试的方法如下:

1、 项目 ——> 属性 ——> C/C++ ——> 常规 ——> 调试信息格式 ——> 程序数据库 (/Zi) 。

2、 项目 ——> 属性 ——> C/C++ ——> 常规 ——> 优化 ——> 优化 ——> 已禁用 (/Od)。

3、 项目 ——> 属性 ——> 链接器 ——> 调试 ——> 生成调试信息 ——> 生成调试信息 (/DEBUG)。

C++语言程序设计之处理复合表达式的两条经验准则

在C++语言中,以下两条经验准则对书写复合表达式有益:

1、拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。

2、如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。

第2条规则有个重要的例外,当改变运算对象的子表达式本身就是另外一个子表达式的运算对象时该规则无效。例如,在表达式*++iter中,递增运算符改变了iter的值,求值的顺序不会成为问题,因为递增运算(即改变运算对象的子表达式)必须先求值,然后才轮到解引用运算。显然,这是一种很常见的用法,不会造成什么问题。

C++语言程序设计之智能指针基本规范和陷阱

智能指针可以提供对动态分配的内存安全而又方便的管理,但这建立在正确使用的前提下。为了正确使用智能指针,我们必须坚持一些基本规范:

1、不使用相同的内置指针值初始化(或reset)多个智能指针。
2、不delete get()返回的指针。
3、不使用get()初始化或reset另一个智能指针。
4、如果你使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了。
5、如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。

C++语言程序设计之map和unordered_map的下标操作

在C++语言中,对于一个map使用下标操作,其行为与数组或vector上的下标操作很不相同:使用一个不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中。

一、c[k]
返回关键字为k的元素;如果k不在c中,添加一个关键字为k的元素,对其进行值初始化。

二、c.at(k)
访问关键字为k的元素,带参数检查;若k不在c中,抛出一个out_of_range异常。

C++语言之new和delete管理动态内存的三个常见问题

在C++语言中,使用new和delete管理动态内存存在的三个常见问题:

1、忘记delete内存
忘记释放动态内存会导致人们常说的“内存泄露”问题,因为这种内存永远不可能被归还给自由空间了。查找内存泄露错误是非常困难的,因为通常应用程序运行很长时间后,真正耗尽内存时,才能检测到这种错误。

2、使用已经释放的对象
通过在释放内存后将指针置为空,有时可以检测出这种错误。
Continue reading

STM32微控制器之直接内存访问DMA的使用方法

直接内存访问(Direct Memory Access,DMA)是微控制器的一个外设,它的主要功能是用来搬运数据,而不需要占用CPU,即在传输数据的时候,CPU可以干其他的事情。

STM32F103微控制器的两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。

仿真软件:Proteus 8.11 SP0,仿真STM32F103R6微处理器的DMA:内存到外设USART1,代码如下:
Continue reading

STM32微控制器之全双工串口通信USART的使用方法

USART:通用同步/异步串行接收/发送器(Universal Synchronous/Asynchronous Receiver/Transmitter),通常称作USART。是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。
UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它是在USART 基础上裁剪掉了同步通信功能,只有异步通信。
简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本上都是UART。
Continue reading

STM32微控制器之系统滴答定时器SysTick的使用方法

系统滴答定时器(System tick timer,简称SysTick),属于STM32微控制器内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit向下递减的计数器,计数器每计数一次的时间为1/SYSCLK。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。

实验程序:利用SysTick,设置微处理器1ms产生一次中断,并实现精确延时函数,控制LED灯开关状态的反转。
Continue reading

STM32微控制器之外部中断/事件控制器EXTI的使用方法

STM32微控制器的外部中断/事件控制器(External Interrupt/Event Controller,EXTI)管理了控制器的中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。
Continue reading

STM32微控制器之GPIO按键控制LED灯开关状态的反转

Proteus仿真STM32F103R6微控制器GPIO的输入与输出,循环检测按键状态,控制LED灯开关状态的反转。GPIO输入:按键检测;GPIO输出:高低电平,点亮或关闭LED灯。

一、实验环境
微控制器:STM32F103R6;仿真软件:Proteus 8.11;开发工具:Keil MDK 5.33。

二、原理图
实验所用的8个LED灯,分别接在STM32微控制器的PB0,PB1,…,PB7,通过IO端口的高低电平控制;一个按键接在PC0,同时给按键并联一个小电容,实现硬件消抖。
Continue reading