自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 c++ constexpr用法

【代码】c++ constexpr用法。

2024-07-11 14:57:23 145

原创 编译器的隐式转换规则

【代码】编译器的隐式转换规则。

2024-06-26 09:21:18 151

转载 重载箭头运算符返回对象的地址而非对象?

的输出,因为 c-> 返回的是B类型而不是指针,所有程序会迭代操作B类型的->重载函数,此时返回的是A类型指针,那么此时不再迭代下去找到A的action()函数。在你的程序中如果返回的不是指针,那么程序会迭代查找 std::string的->操作 该操作返回的就是你执行 StrBlobPtr-> 操作的返回值,你觉得这是不是你希望的呢?定义了3个类,C包含B,B包含A。B和C都重载箭头操作符,不同的是B的重载箭头操作符返回的是A类对象的指针,而C的重载箭头操作符返回的是B类对象(也就是你的疑问所在地)

2024-05-27 11:58:22 50

原创 C++ constexpr

常量表达式:指值不会改变并且在编译过程就能得到计算结果的表达式;字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。查看汇编代码,大家可以通过汇编代码,很容易理解 **“在编译过程中是否得到计算结果”**这句话。

2024-04-24 19:47:07 430

原创 C++ 临时对象/隐式类型转换

临时对象:代码中看不见的,隐藏在后台,因此我们无法在程序代码中看见临时对象;

2024-04-23 23:51:13 370

原创 指针、常量、类型别名

【代码】指针、常量、类型别名。

2024-03-31 22:10:03 164 1

转载 不同编译器下,定义一个地址按x字节对齐的数组

不同编译器下,定义一个地址按x字节对齐的数组

2022-08-16 15:43:31 192

原创 ucos和freeRTOS两种临界段处理机制

首先了解一下和中断有关的三个寄存器ucos临界段CPU_CRITICAL_ENTER(); 关闭中断CPU_CRITICAL_EXIT(); 打开中断OS_CFG_ISR_POST_DEFERRED_EN == 1 OSSchedLockNestingCtr 用于中断嵌套由于OSSchedLockNestingCtr 属于共享资源 保证原子性 , 在进行操作之前需要进行关闭中断 OS_CRITICAL_ENTER()

2020-12-16 17:59:00 666 1

原创 esp8266获取天气信息

#include <ArduinoJson.h>#include <ESP8266WiFi.h>const char* ssid = "TP_link"; // 连接WiFi名 const char* password = "a135246789"; // 连接WiFi密码 const char* host = "api.seniverse.co.

2020-11-25 16:29:31 1477 1

原创 ESP8266的硬件资源

中断模式除了D0/GPIO16,中断可以绑定到任意GPIO的引脚上。```cattachInterrupt(digitalPinToInterrupt(D1), InterruptFunc, RISING);指定引脚设置为响应中断。digitalPinToInterrupt(D1) :获取指定GPIO5引脚的中断号 注意 这个不是引脚号而是中断号InterruptFunc : 回调函数 可以理解为中断响应函数RISING: 触发方式(RISING 上升沿 FALLING 下降沿 .

2020-11-18 15:44:51 1425 1

转载 12864为何个别汉字无法正常显示

http://www.51hei.com/bbs/dpj-28984-1.html

2020-10-23 19:24:14 766

原创 关于stm32内核外设Systick与普通外设中断优先级比较的验证实验

https://blog.youkuaiyun.com/To_be_a_fisher/article/details/84986790https://www.cnblogs.com/jieruishu/p/4444701.html

2020-10-17 20:37:18 287

原创 内联函数_inline

https://blog.youkuaiyun.com/qlexcel/article/details/79583301?biz_id=102&utm_term=keil%E4%B8%AD%E7%9A%84%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-79583301&spm=1018.2118.3001.418

2020-09-20 09:44:21 125

原创 union

union 共用体名{数据类型 成员名;数据类型 成员名;} 变量名;共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。即所有的数据成员具有相同的起始地址。大端模式  所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

2020-09-16 17:51:09 281

原创 基于码盘和JY901的全场定位

1、用JY901可以读出Z轴方向的偏航角。不用再做姿态解算,内置卡尔曼滤波。 使用前进行校准。2、用编码器读出脉冲数、进而算出位移3、通过位移和偏航角算出位置xy = sqrt{ (x2 + y2) } 通过左轮和右轮求出位移posion_x = posion_x + xycos((θ1 + θ2)/ 2)根据上一时刻的x位置求出当前时刻的位置posion_y= posion_y + xycos((θ1 + θ2)/ 2)根据上一时刻的y位置求出当前时刻的位置北科的全场定位系统的算法和实

2020-09-15 22:08:19 2586 1

原创 字节对齐

为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除,也即对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这

2020-09-08 19:18:28 425

转载 网上看到的一篇关于内存管理的博文(摘选)

伟大的Bill Gates 曾经失言:  640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。内存分配方式内存分配方式有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,stati

2020-09-07 18:23:27 143

原创 函数指针的使用

函数的函数名是函数的入口的地址函数指针是指向函数的指针变量不能修改函数的地址,不能对函数名进行赋值(可以理解为函数指针常量)我们可能对函数指针进行赋值(函数数指针变量)函数指针:它是一个指针,该指针存放的是一个函数的地址,而函数的名称就是该函数的入口,即地址。如: void (*pFunc) ( int a);指针函数:指带指针的函数,即本质是一个函数。指针函数返回指向某种类型指针(地址)的函数。int * pFunc(int a);通过上面的描述知道:函数指针是一个指针,只是该指针中存放的

2020-06-09 20:53:21 231

原创 git常用的命令总结

git init git add . / git add 文件名 git commit -m "描述信息" git reflog git log--- 回滚到指定的版本号 git resrt --hard 版本号 --- 查看分支 git branch--- 创建分支 git branch 分支名 --- 切换分支 git checkout 分支名--- 合并到之前切换的主分支上 git merge 分支名 --- 删除分支 g.

2020-05-29 19:10:57 176

原创 寄存器、内存和Cache的关系

RAM-memory即内存,是用于存放数据的单元。其作用是用于暂时存放CPU中的运算数据。Register寄存器是CPU的内部组成单元,是CPU运算时取指令和数据的地方,速度很快,寄存器可以用来暂存指令、数据和地址。在CPU中,通常有通用寄存器,如指令寄存器IR;特殊功能寄存器,如程序计数器PC、sp等CacheCache :即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU

2020-05-26 10:26:32 1669

原创 Volatile关键字总结

volatile用于防止相关变量被优化。例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加volatile,编译器会把这些寄存器作为普通变量处理,例如连续多次的对同一地址写入,会被优化为只有最后一次的写入。实际上,网卡的数据发送,就是按顺序连续往一个同地址写入数据,如果被优化,网卡将不能正常驱动。另一个使用场合是中断。如果一个全局变量,在中断函数和普通函数里都用到过,那最好对这个变量加volatile修饰。否则普通函数里,可能会仅从寄存器里读取这个变量

2020-05-26 08:58:20 232

空空如也

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

TA关注的人

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