避免重复包含头文件的做法 众所周知,为了避免重复包含头文集,会使用这样的用定义来避免重复包含头文件。 #ifndef xxx_H #define xxx_H //头文件内容 #endif 在第一次#include这个头文件时,会#define xxx_H,在之后的重复包含的头文件时会由于#ifndef xxx_H不再包含头文件的内容,从而避免头文件重复包含。需要注意的是不同头文件#define xxx_H的内容需要不同,不然只能包含第一个头文件。 嵌套包含导致缺少定义 例如这三个文件有这样的包含…
发生隐式转换的情形 指定转换的类型 赋值运算 变量初始化 调用函数时的参数 return语句返回的数值 未指定转换的类型 算数 转换原则 指定转换的类型 在可以明确转换后的类型时,会隐式转换到该类型,并且若类型缩小,则会直接截断高位,仅保留低位,符号位也由新的低位决定,这一过程类似于强制类型转换。 uint16_t a = -1;//a=0xffff(65535) uint16_t a = 0xffffffff;//a=0xffff(65535) int16_t a = 0xffff0001;/…
引子 在windows专业版及以上版本有远程桌面的功能,但是这个远程桌面在同一时刻只能一个用户使用,而使用RDP Wrapper Library by Stas'M可以通过传入参数的方式修改这个限制,并且它支持同时使用同一用户登录。RDP Wrapper Library支持Windows Vista到Windows 10,并且它的工作方式并不是修改远程桌面的程序(termsrv.dll),而是使用不同的参数加载这个程序。 安装方法 在Release中下载最新的版本,解压并运行install.ba…
W25Qxxjv系列最高频率可以达到133MHz,并且支持QPI的使用,但在移植时遇到了很多无语的问题。 复位 在使用过程中发现,上电不会导致Flash复位,也就是说Flash既可能在SPI模式也可能在QPI模式,需要在两个模式下都发送一个复位使能和复位指令Enable Reset (66h) and Reset Device (99h),复位后,Flash默认在SPI模式下。 SPI和QPI 在使用QPI之前,需要将状态寄存器2(Status Register-2)中的QE(Quad Enab…
今天在调试代码时,发现注释掉某些初始化部分就会导致HardFault,查看相关寄存器发现是BusFault的IMPRECISERR引起的,在ARM的手册中是这么描述这个东西的: a data bus error has occurred, but the return address in the stack frame is not related to the instruction that caused the error. When the processor sets this bi…
引子 还记得在给WS2812B写驱动时,最开始采用的方式是使用DMA向定时器传输数据以满足WS2812B单极性归零码的传输要求,但是实际运行时却发现第一个灯珠的颜色出现了异常,当时真的耽搁了很久,最后也没有找出来是为什么,现在我想就很可能是在配置DMA时发生了中断引起了许多不可控的因素。 中断概述 简单来说,中断及其外围部件包含了中断向量表(用于储存中断的入口地址),NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器,用于控制中断使能、优先级等…