自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 volatile和原子量atomic如何对抗编译器优化?

废话文学上一次这么流行的时候,还是在上一次流行废话文学的时候。抖音上有个相声演员,每天的更新就是各种片汤话和废话,絮絮叨叨一大堆,一句有用的信息都没有。评论区都是调侃:“哎吓死我了,他差点就把正事说出来了”,“有领导开会那味儿了”。还有一个最近爆火的叫陈依涵的小姐姐,每天更新一款无用的软件,诸如输入自己身高就能得出自己身高的计算器、百进制的分秒转换器等,也是废话文学的另一种表现形式。​与热衷于废话文学,被各种无厘头戳中笑点的我们相比,编译器就像个严肃高冷,追求效率,没有任何生活情趣的老头子一样,极其讨厌废话

2022-07-05 13:29:13 1195 1

原创 C++原子量,内存序,无锁并发

之前的文章里,用罗小猪无缝切换多个女友的故事类比过多线程,并且说为了防止被女友发现可以采用互斥锁的机制来保证线程安全。但其实除了上锁之外,还有另外一种更高性能的方式也可以保证线程安全,叫做无锁并发。​谈无锁并发之前,我预设大家都是对多线程有基础的了解的,如果完全不了解的可以先移步这一篇文章《从罗小猪时间管理的角度剖析Linux线程锁》读一读罗小猪的风流韵事,品一品时间管理大师的秘术。于是我们知道,并发是大型软件不可避免会涉及到的一个问题。你可能要一边运行某个任务,一边还要监听别的任务的指令;或者作为服务端,

2022-07-04 12:04:15 806

原创 mmap在嵌入式中的应用

大概雍正皇帝怎么也不会想到,自己在西历2022年的男生和女生眼里,会是截然不同的两种形象。1以我对身边同学朋友的观察,男生们大多爱看《雍正王朝》,他们眼中的雍正,大约是个推行了“火耗归公”、“摊丁入亩”等遏制贪腐,减轻税收之类政策的改革家,是个经历了九子夺嫡的惊心动魄、腹黑深沉的政治家,是个登基后也兢兢业业,熬夜加班996的工作狂。而女生们大多爱看《甄嬛传》,她们眼里的雍正,是“大胖橘”,是“大猪蹄子”,是被后宫一众妃嫔玩弄于股掌之中,戴了N顶绿帽,最后还被钮钴禄甄嬛气死的渣男。我没完整的看过甄嬛传,但是有

2022-06-24 11:33:20 564

原创 父类和子类

尽管很多知名译本都把C++面向对象里有继承关系的类称作基类和派生类,但人们很多口语化的表达里还是叫他们父类和子类,毕竟...你继承了我嘛,非亲非故的,谁让你继承。恰逢今天父亲节,我们就来聊聊C++里对父亲和儿子这一关系的设计。读程序,品人生。什么东西你不能给儿子分享,却可以跟朋友一诉衷肠?当然是父辈间的一些隐私啦。1回想起我学C++面向对象的时候,正好是《琅琊榜》风靡全国之际。可惜我那会儿沉迷美剧《权力的游戏》,整体张口闭口兰尼斯特有债必偿,分析维斯特洛第一搅屎棍的阴险计谋,震惊血色婚礼的血腥绝望,感叹剧组

2022-06-24 11:28:53 1486

原创 C++异常处理

我好像认识很多个用C的方式写C++的人。难道是因为我圈子里大多是嵌入式工程师嘛?上周我跟北京研发的一个哥们合作,因为他提供的动态库总是段错误,我说你提供的这个接口没有做入参的检查吧,你发现入参不合法之后给我抛个异常出来吧,别让它再段错误了。他说我抛了啊,我怎么可能连异常都不知道呢?于是我说你让我看一眼你是怎么抛异常的。我tm想把他和追梦格林扔到八角笼中决斗一番。1一知半解有时候甚至还不如完全不懂,后者由于自知害怕出错,一般会采取比较稳妥的方式,前者经常不懂装懂贪功冒进。让我们拨动秒针,穿梭时空,回到自

2022-06-24 11:22:15 1021 1

原创 小鹏汽车面试经验分享

某个下午,小鹏汽车的HR在招聘软件上撩我,于是我决定去聊聊看。接触下来对他们的印象还不错,这家公司的面试风格非常的“美式”,二面三面的主考官都是美国人,有一个还是从苹果公司挖过来的,现在还在国外。面试出的题也很有意思,不考编程不问技术的,像三面就只考一道逻辑推理题,着实非常的有风格。总体经历跟上次哔哩哔哩面试非常相似,四面以后的就不涉及技术了,不过前三次技术面试还是很有价值的,跟大家分享一下,希望能对大家有一些帮助。面试岗位:小鹏汽车自动驾驶视觉方向C++岗一面:纯技术一面的面试官是个带广东口音的小哥,性格

2022-06-24 11:17:36 1919

原创 哔哩哔哩面试经验分享

一场突如其来的疫情席卷了上海,招聘季的金三银四也不复往年荣光。疫情,战争,坠机……2022年越来越魔幻了。今年的职场,旁人我不知道,身边的朋友都是求稳,同事也鲜有跳槽的。作为一名面试官,今年收到的简历总体质量也不如去年那么好。说了很多年的凛冬将至,现在是真的感受到了一丝寒冷。不过虽是寒冬,另一方面看其实竞争压力也相对小了些。风险之中也有机会,分享一次去年年底在B站面试的经验吧,准备跳槽的朋友或许用的上。那是一个没有疫情的上海,那天我闲来无事,刷刷Boss直聘,偶然弹出一条Bilibili的招聘信息,说道:不

2022-06-24 11:09:52 1703

原创 交叉编译时遇到的一个坑

交叉编译时碰到的一个坑动态编译静态编译一些错误的怀疑静态编译动态编译混合动态编译由于我们的板子是arm架构,而开发使用的pc机器是x86架构,所以在pc机上开发出来的程序要想在arm板子上运行,需要用交叉编译工具链,类似arm-linux-gcc这种,编译成arm平台上可运行的二进制文件才可以。如果你除了自己写的代码,还引用了一些第三方库,类似boost这种,你还得把boost库也用交叉编译工具重新编译下才能用。当然还要注意32位64位这种问题。我一开始只把g++换成了arm-linux-g++,编译

2021-02-20 18:16:59 1217 1

原创 完美解决:protoc-gen-go-grpc: program not found or is not executable

使用grpc时,通过protoc工具编译protobuf时,遇到了下面的问题:protoc-gen-go-grpc: program not found or is not executable上网搜索了很多教程,都不管用,要么说版本不对,要么说无法找到之类的最后还是通过下面的方法解决了:需要安装以下gRPC gen插件:go get -u google.golang.org/protobuf/cmd/protoc-gen-gogo install google.golang.o

2020-07-29 17:03:13 22505 7

原创 mysql教程-我自己的学习过程

1.mysql修改字段类型: --能修改字段类型、类型长度、默认值、注释--对某字段进行修改ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据类型 新类型长度 新默认值 新注释;-- COLUMN关键字可以省略不写alter table table1 modify column column1 decimal(10,1) DEFAULT NULL COMMENT '注释';-- 正常,能修改字段类型、类型长度、默认值、注释...

2020-06-05 17:05:41 405 1

原创 ubuntu系统下使用vivado SDK相关注意事项

环境:ubuntu16.04,zynq-7000开发板问题1:出现launch SDK无响应的情况解决方法:在你安装vivado的目录下找到这个文件:Xilinx/SDK/2016.3/eclipse/lnx64.o/eclipse.ini然后在这句话-vmargs前面加上--launcher.GTK_version2注意:这个“2”也是需要加上的哦...

2020-03-19 17:45:08 1346

转载 树莓派备份SD卡

一、准备工作1、已经配置启动的树莓派SD卡12、ubuntu系统的pc3、读卡器4、空白格式化的SD卡2二、检测SD卡1中内容在Ubuntu系统下使用命令:df -h可以看到/dev/sdb1和/deb/sdb2已经挂载到PC上了。接下来,对SD卡中的内容进行修改,进入7.2G分区(系统分区):并且使用命令行:sudo gedit test...

2019-12-09 10:13:01 673

原创 linux系统(ubuntu)调用科大讯飞SDK实现语音识别及语音合成

1.语音识别登录科大讯飞官网,注册账号后转到“语音识别”栏目,下载SDK,如图:我选择了 语音听写和语音合成,都是在线的。选好后生成SDK,下载到本地,然后在linux系统中解压,并进入sample目录的iat_online_record_sample目录下。执行 source 64bit_make.sh此时会提示“alsa/asound.h:没有那个文件或目录”。解决办法:...

2019-12-05 18:08:24 8254 9

原创 VS开发时的一些笔记

VS2013遇到 C1083: 无法打开预编译头文件:“XXX.PCH”: NO SUCH FILE OR DIRECTORY原因分析: 编译器一般都是以文件为单位进行编译,如果修改了工程中的一个文件,那么将导致所有文件都要从新编译,这样的编译将耗费很长时间。为了提高编译速度,将那些不常被修改,比较稳定,文件单独包含到一个指定的头文件中,然后生成一个预编译头文件...

2019-10-30 13:33:45 180

原创 linux系统提升硬盘写速度的方法

LINUX系统写速度问题解决过程问题描述:linux系统下写速度只有2GB/s左右,无法支持2.5G采样率连续采集,达不到预期的性能。而同样的代码在windows系统下,却可以支持2.5G采样率连续采集,因此这里需要解决Linux系统的写速度问题。尝试一:刚开始以为是API的问题,查看资料发现大部分说法是mmap写文件最快,实际测试下来发现效果一般,没有特别惊艳的表现。加上使用不太...

2019-09-26 14:37:29 5722

原创 AXI总线读写数据过程理解

在用zynq开发板玩FPGA时,经常会用到AXI总线。这里对AXI总线的读写过程做一个记录,备忘。一、AXI简介AXI协议是基于burst的传输,并且定义了以下5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。地址通道携带控制消息用于描述被传输的数据属性,数据传输使用写通道来实现“主”到“从”的传输,“从”使用写响应通道来完成一次写传输;读通道用来实现数据...

2019-08-08 17:13:07 7771

原创 记录自己哈啰单车面试经历--笔试题及自己的理解

当时去哈啰单车面试的时候,先做了一个笔试,笔试题有两道:1.自己写一个写队列的初始化,入队和出队。2.单片机A和B通信,写一个通信协议(串口和spi都可以),并简述通信流程。笔试题答完后提交,然后HR带我进了面试间,一会儿进来两个技术大佬开始面试。首先问了一些大家都会问的问题,包括自我介绍,工作经历,为啥想跳槽之类,关于技术的问题有以下几道:用过什么单片机?stm32和tiny...

2019-07-06 10:45:38 4325 1

原创 基于ARM+Linux系统的智能家居系统

先看我自己录制的视频,源码和技术细节这周末补充:https://www.bilibili.com/video/av46765664该项目为基于ARM的智能家居系统。系统采用Tiny4412开发板作为中控端,节点使用了两个stm32开发板,通信采用zigbee模块,包含了安防系统,照明系统,环境系统等,并且拥有良好的人机交互界面。功能简介1.安防系统1)智能门禁功能。实现刷卡和...

2019-04-09 13:54:55 5965 6

原创 微信小程序通过wifi和蓝牙控制树莓派

树莓派的远程控制自己9月份做的一个项目契机:xx公司借用设备,归还后没有人知道它的IP地址,需要拆机器。以及“云测试” 想法:远程获取树莓派信息 实现:树莓派能够上传cpu温度到移动云,可登录查看。 树莓派从移动云获取状态。 微信小程序控制树莓派开灯关灯弊端:研究所不让联网 受网速限制近场无线通信:蓝牙1.经典蓝牙手机客户端获树莓派IP地址 电脑串口调试助手获...

2019-04-08 21:38:40 10614 3

原创 linux基础知识---汇总

1.关键字static的作用是什么?1.限制变量的作用域1) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。2.设置变量的存储域static修饰的变量和全局变量一样,都存储在静态存储...

2019-04-06 17:58:47 296

原创 linux系统应用学习(六)--- 多进程

随着cpu执行效率的提高,为了提高cpu的使用率,引入多进程。进程是cpu调度的基本单位,也是资源分配的基本单位,每个进程都有自己0~3G的虚拟地址空间,都有栈区,堆区,数据区,代码区。进程是CPU一直运行着,程序静止的,是硬盘上一块可执行的二进制代码。一个程序可以运行多个进程。进程微观上是串行,宏观上是并行。一、进程号每启动一个进程,操作系统还会给进程分配唯一的pid号,...

2019-04-05 18:29:47 321

原创 linux系统应用学习(五)--- 基于非缓冲区的文件操作

一、系统调用系统调用 是内核提供给应用层的一系列接口函数,应用层调用接口函数让内核完成一定的任务。二、常用文件操作函数标C:fopen fread fwrite fgets fseek fclose(基于有缓冲区的)UC: open read write lseek close (非缓冲区)文件操作:1.打开文件 open #inc...

2019-04-05 18:26:02 840

原创 linux系统应用学习(四)--- shell 脚本和 makefile

一、shell脚本编程Shell脚本是一些命令的集合,可以实现一键处理。是一个文件(批处理文件)Shell javascript pythonshell编程--非编译型语言,必须有命令行解释器。Shell脚本文件是以xxx.sh结尾的。第一行 #!/bin/bash //指定命令行解释器(我们的终端是bin下的bash)# //注释每一行是一条语句...

2019-04-05 17:48:43 312

原创 linux系统应用学习(三)--- 动态库静态库

动态库静态库库文件:一般指第三方提供的可调用的库函数文件,库文件封存的是函数体,即.c文件里面的内容。动态库 静态库Windows下: xx.dll xx.libLinux 下:xx.so xx.a静态库和动态库都是已经编译好的目标文件静态库:在应用程序编译链接的时候,用到...

2019-04-05 17:15:36 224

原创 linux系统应用学习(二)---Vim编辑器、gcc编译过程、程序可传参数、环境变量

1.vim文本编辑器#vim b.txt 按“a或i”进入编辑模式 esc返回到命令模式:冒号进入底行命令模式 按wq保存退出。注意:只能从命令模式进入其他模式!1.命令模式 :打开文本时候的一开始的模式,也叫全局模式yy复制光标所在的一行数据P: 粘贴到光标所在行的下一行nyy:复制n行dd:剪切光标所在的一行数据ndd:剪切n行u:撤销Shi...

2019-04-05 16:55:51 241

原创 linux系统应用学习(一)---linux系统常用命令

linux系统常用命令终端:本质上是一个命令行解释器。[root@localhost ~]# | | |当前用户 主机名 当前光标所在的工作路径~:用户的家目录#:root用户命令行提示符 可以再后面跟输入命令$:其他用户的命令行提示符1.常用命令命令的组成#命令 选项 参数(参数可省略)2.显示目录文件 ls...

2019-04-05 16:24:58 384

原创 从零开始一起学stm32(十六)---我自己的总结

总结一、寄存器操作GPIO口GPIO口的操作是位操作。库函数不要手打,容易出错。最好是从.h文件里面找。可以将时钟比喻成脉搏,配电等等,要想用某个功能,要先打开它的时钟。 GPIO口需要配置成对应的模式才能实现相应的功能。GPIO口的输入输出是相对于CPU来说的。 复用--AF 寄存器:用来存放指令、地址等,可以理解为用来操作CPU。二、寄存器操作GPIO口GPIO口库函...

2019-03-19 21:43:09 2396

原创 从零开始一起学stm32(十五)---UCOS-II中断和时间管理

1.任务的延时2.中断3.UCOS-II系统时钟节拍1.任务的延时Delay_ms();2.中断:中断:由异步事件请求而中止当前任务,转而去执行这个事件请求的任务的过程中断服务子程序:执行中断请求的程序;中断的执行过程:接收到中断请求,系统会中止当前运行的任务,去运行中断服务子程序,运行结束后会根据情况返回被中止的任务继续运行,或者是运行更高优先级的就绪任...

2019-03-19 21:19:01 1093

原创 从零开始一起学stm32(十四)---UCOSII信号量 邮箱

UCOSII信号量 邮箱UCOSII中,使用信号量、邮箱(消息邮箱)和消息队列来实现任务之间的通信。信号量:信号量像一把钥匙,任务要运行下去,需先拿到这把钥匙。信号量是一个触发信号,也是一个计数器,等待接收信号的任务一般只有接收到信号才可以执行,否则任务一直暂停。在uCOSII里面,等待信号量的任务可以设置无限等待或等待若干个时钟节拍后,任务自动恢复执行。具体看自己的要求来设置...

2019-03-18 10:44:52 1084

原创 从零开始一起学stm32(十三)---UCOS-II实时操作系统

1.UCOS-II的概述2.UCOS-II的移植3.ucos-ii任务管理4.ucos-ii中断和时间管理5.任务之间的通信与同步1.操作系统:1.计算机操作系统1.什么是裸机,什么是计算机系统,操作系统的功能和作用?1.嵌入式系统什么是嵌入式系统,嵌入式系统的特点2.嵌入式操作系统什么是嵌入式操作系统,特点3.实时操作系统什么是实时操作系...

2019-03-18 09:54:51 3225

原创 从零开始一起学stm32(十二)---SPI协议

SPI通信 -- W25Q64 -- flash芯片的使用1、通信协议2、SPI通信3、STM32中SPI控制器的使用4、W25Q64的操作过程以及软件编程1.通信协议:协议:两个相互通信的设备之间,进行数据传输的一种规定!1.串口通信--物理层所接管脚:TX(发送管脚) RX(接收管脚) GND(接地)数据链接层---RS232协议开始...

2019-03-18 09:48:59 1126

原创 从零开始一起学stm32(十一)---IIC协议

1回顾:触摸屏:触摸屏按键:1 触摸屏和LCD屏的对应关系--3点校准2 校准完成---获得LCD屏和触摸屏对应关系LCD_X=(A*TP_X+B*TP_Y+C)/k;LCD_Y=(D*TP_X+E*TP_Y+F)/k;3 触摸屏按键3.1在LCD屏上显示一个按键3.2 点击触摸屏--通过上述关系--获得lcd屏坐标值3.3判断是否是该按键区域,如果是,那么...

2019-03-18 09:42:45 443

原创 从零开始一起学stm32(十)---触摸屏

触摸屏:1.触摸屏和LCD屏区别触摸屏:输入设备--使用的是模拟SPI协议去接收和发送数据LCD屏:显示设备--输出设备---使用8080并口协议进行数据传输2.触摸屏分类:电阻屏和电容屏3.四线电阻屏:X+ 、X- 、Y+、Y-4.工作原理:测量X轴坐标时,X+接VCC, X-接GND; Y+接ADC转换通道,Y-高阻态;5.ADC转换芯片--XPT204...

2019-03-18 09:38:55 2902 1

原创 从零开始一起学stm32(九)---LCD屏

LCD屏的知识1、常见的显示设备2、STM32上TFTLCD的介绍3、TFTLCD屏的工作原理4、ILI9341的操作过程5、STM32 LCD屏初始化6、显示一个字符,汉字,图片1、常见的显示设备和LCD屏 LED -- 广告牌(在项目板做指示灯) 数码管 - 电子称(数字) LED点阵屏 -- 8*8点阵(户外)--户外大型显示 LCD...

2019-03-18 09:35:48 11778 2

原创 从零开始一起学stm32(八)---通用定时器

1.基本定时器的回顾: 1.1基准时钟:计数器+分频器+重装载器 计数器:累加计数 分频器:得到你想要的时钟脉冲 重装载器:装载计数器的最大值; 1.2时钟:TIM6_CLK时钟---72MHz 1.3TIM6定时原理: 分频得到计数时钟,让计数器累加,到最大值产生溢出事件,进而产生更新事件,如果使能中断,就会产生更新中断!...

2019-03-18 09:29:09 710

原创 从零开始一起学stm32(七)---基本定时器

基本定时器作用:定时1s;1.时基单元:计数器+分频器+重装载值分频器:对提供的外设时钟进行分频,得到想要的时钟脉冲计数器:在分频得到的时钟脉冲下计数---累加计数器重装载值:计数设定的最大值72M==72000000 /7200=10K时钟:72MHz---要得到时间基准是1s分频器:7200---得到的时钟脉冲10KHz计数器:10K---10000...

2019-03-18 09:21:19 1700

原创 从零开始一起学stm32(六)---RTC

RTC---实时时钟定时器:时间基准+计数器时钟日历:2016-7-14 14:40:30后备区作用:在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。完整步骤:1.打开APB1时钟设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟2.取消写保护设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问3...

2019-03-18 09:18:15 503

原创 从零开始一起学stm32(五)---滴答定时器

一、Systick简介Systick也叫系统滴答定时器,滴答定时器就是一个非常基本的倒计时定时器。它存在的意义是为系统提供一个时基,能够给操作系统提供一个硬件上的中断。使用Systick能够精准延时,对于时间要求严格的场所,意义十分重大。作业:写一个流水灯---精确延时(可调控)的流水灯。二、Systick timerSystick是一个24位的定时器,一次最多可以计数2^...

2019-03-18 09:13:38 1379

原创 从零开始一起学stm32(四)---中断

1、中断的原理2、M3内核的中断结构3、STM32的中断4、编写外部中断和USART中断你在图书馆学习stm32,你朋友突然要来学校找你,给你打电话,说,我坐公交,快到的时候给你打电话,那么,你有两种方式,一种就是一直拿着手机,等着电话响;另一种就是你先学习,等电话响的时候才去接电话,然后把你同学带上来。1.中断的原理:例如:判断一个按键是否按下?1--查询 (...

2019-03-17 22:30:30 1227

原创 从零开始一起学stm32(三)---串口通信

1.通信的分类2.串口通信协议2.1通信协议的概念2.2通信协议的物理层和数据链接层3.stm32中USART的讲解3.1普通的串口功能和串口个数3.2原理图上的串口连接3.3 串口收发数据的原理图分析3.4 寄存器和库函数操作4.作业:通过上位机电脑往stm32发送数据,并回显给电脑;5. Stm32中printf的用法1.通信的分类通信:不同设备...

2019-03-17 22:25:55 2049 1

空空如也

空空如也

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

TA关注的人

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