自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 消息邮箱和消息队列什么区别?

消息队列则是初始化的时候可以变长地指定数据类型,会根据数据类型的长度分配足够的空间,所以用户使用的时候只需要使用局部变量收发消息就可以了,消息的收发过程是和队列内存之间的拷贝。消息邮箱最多发送4个字节,如果超过4个字节,那就只能发送指针,需要用户自己管理内存的申请和释放。配合使用,可以使用消息对列发送超过四个字节的大量消息,然后接收端通过消息邮箱发送ack。二者很类似,主要区别在于每个消息本身长度的限制。

2024-07-04 07:30:47 206

原创 信号量 互斥锁 自旋锁 优先级反转

互斥锁允许被打断,有ABC三个线程,优先级依次降低,假如C线程持有互斥锁,被B打断了,此时A线程需要等待C线程释放资源,A挂起,然后B线程反而比A线程先执行,那岂不是反转了;自旋锁是什么呢,就是忙等待,不让休眠,不让出cpu,等待资源使用完成,然后自己释放,使用自旋锁的时候甚至可以关闭中断,让临界区彻底眠原子化。那为什么还需要互斥锁,二者的侧重点不同,停车场的资源多,可以由不同的人释放,你的不释放,可以用他的,资源是充分的,不是独占的。那如果停车场只有一个车位,那是不是可以当作互斥锁使用呢,确实可以;

2024-07-03 08:24:31 210

原创 c语言如何实现模板呢

c语言 模板

2024-06-16 09:28:57 247

原创 环形队列中断会导致数据错误吗

环形队列 中断

2024-06-16 09:14:44 260

原创 优先级队列

优先级队列遵循高优先级先出的原则,和推入顺序无关,一般有两种实现方式,双向链表数组+位图,堆第一种方式双向链表数组+位图此方法常用于内核中的任务队列管理,数组下标表示优先级,数组元素为链表节点,相同链表上面的任务具有相同的优先级;位图用于记录此时哪些队列不为空,同时可以通过查表快速得到最高优先级的数组下标是哪一个;操作可以达到O(1)时间复杂度第二种方法是堆利用堆的性质,可以保证最高优先级的元素总是在堆顶,插入元素的时候需要调整堆的结构,时间和堆的高度有关...

2020-10-09 15:57:30 171

原创 Ubuntu20 & win10 双系统安装

第一步,准备一个空白的U盘,通过ultraiso烧录Ubuntu20的镜像第二步,如果电脑支持RST快速启动,需要进入bios将其关闭,联想笔记本是启动时按下F2第三步,修改完成以后重启的时候按下F12选择启动盘刚才的U盘第四步,安装Ubuntu,我选择的是和windows共存安装,这个导致了我后面的启动问题第五步,安装完成后重启出现操作系统启动页面,选择第一项Ubuntu,进入系统,体验完成后重启第六步,重启后来到操作系统选择页面,选择windows发现无法启动,应该是前面选...

2020-08-08 23:29:57 924

转载 学习笔记(3):从零开始学习机器学习视频教程-矩阵特征值特征向量的计算

人工智能作为现在最为火热的领域,使得机器学习被越来越多的人所了解。机器学习难学,主要的难度在于算法模型多不好理解,各种各样的工具不知道如何使用,实际项目不知道如何开发。本门课程将系统入门机器学习,课程内容不光是对算法的学习,还包括诸如算法的评价,方法的选择,模型的优化,参数的调整,数据的整理,等等一系列工作。让大家对机器学习算法有个全面的了解,并应用到你的实际项目中。 整体课程...

2020-07-28 15:09:42 221

转载 学习笔记(1):从零开始学习机器学习视频教程-几种特殊矩阵

人工智能作为现在最为火热的领域,使得机器学习被越来越多的人所了解。机器学习难学,主要的难度在于算法模型多不好理解,各种各样的工具不知道如何使用,实际项目不知道如何开发。本门课程将系统入门机器学习,课程内容不光是对算法的学习,还包括诸如算法的评价,方法的选择,模型的优化,参数的调整,数据的整理,等等一系列工作。让大家对机器学习算法有个全面的了解,并应用到你的实际项目中。 整体课程...

2020-07-28 14:21:19 115

原创 有害的多巴胺和有利的多巴胺

人的大脑特别神奇,进化处理多巴胺这一奖励机制,使人得到短暂的快乐,然而这一快乐的背后需要付出脑部损伤的代价。人并不是生来理智的,会被身边各种事物诱惑,新闻、短视频、游戏、娱乐八卦等等,他们给你多巴胺的奖励,暗中却偷走你的时间,损伤你的大脑,用短暂的快乐来麻痹你,机制和毒瘾类似。迫于生活的压力,我们不得不面对一些讨厌的事情,比如学习、工作、完成别人安排的任务,彷佛只有沉浸在娱乐中才能找回自己,...

2020-02-14 09:56:48 367

原创 linux系统中的硬链接和软链接

linux文件系统中用inode号来标志唯一的文件,文件名字只是inode号的索引,系统根据文件名来找到inode号,内部处理的时候用的也是inode号。升级的时候可以不停止程序更新利用的就是这个原理,升级过程中建立新的inode,然后和相同的文件名绑定,等相关进程释放文件之后,发现老的inode已经不再和文件名绑定了,从而将其清除掉,下次启动的时候直接调用新的inode。硬链接类似于C语言里...

2019-06-27 16:30:13 151

原创 十大排序算法

排序规则:从左至右依次增大一、基于比较的排序算法:插入排序:逐个遍历未排序序列,将其在已排序序列中从右到左比较,直到遇到比自己小的数,然后将元素插入到那个数的后面,有序序列从左向右生长。选择排序:在未排序序列中选择最小的元素,将其插入到已排序序列的末尾,有序序列从左向右生长。冒泡排序:从左至右逐个比较相邻的两个元素,如果左边的元素比右边的大,则交换两个元素位置,继续向右比较;如果左...

2018-09-18 00:06:09 369

原创 C++中的static 和 const

static和const作用在非类内部的时候,和c语言中是一样的。static可以修饰全局变量、局部变量和函数,都表示范围的限定;const表示只读的意思,不可修改。另外在嵌入式编程中还有volatile关键字,它表示易变,容易被硬件改变(中断或者IO变化等等),它是可以和const一起修饰变量的,易变只读,硬件可以改volatile,用户不能改const,表示变量可能会被硬件修改,编译器不要优化...

2018-09-12 00:13:34 1397

原创 C/C++中结构体的对齐问题

首先需要知道内存是按照4字节对齐的,看下面的结构体typedef struct { char a; char b; int c; char d;}ST_TYPE;内存可以看作长度为4的挨在一起的格子,首先变量a b,长度为2,占用了第一个格子的头两个位置;变量c长度为4,第一个格子已经放不下,只能另起一格,从第二个格子开始放置;然后变量d,第二个格子已经...

2018-09-11 23:42:52 419

原创 C++中extern "C"和extern的区别

在单片机嵌入式软件编程中,有时候会用到C++文件,里面可能会使用extern "C"关键字,它的作用是告诉编译器这段代码是以C编译器来编译,它的底层函数签名是就是函数名称,而不是C++那样的函数名+参数,不支持重载的;extern的作用就不用说了,是为了引用其他文件的全局变量,使得其他文件的全局变量在本文件中可见。...

2018-09-11 23:24:34 1584

原创 C++中引用和指针的区别

C++中引用的行为表明它本质上是一个const 指针,必须初始化/不可为空/不可更改,但是它和const指针变量又有一点区别。它一直以变量的别名自称,让人以为它只是一个名字,不占空间,但实际上当用sizeof去试探它的时候,得到的又是引用对象的大小,而不是它自身的大小,其实它自身在底层实现中就是一个const指针,它占用的空间大小也就是机器的字长。...

2018-09-11 23:19:16 126

原创 C++中为什么析构函数是虚函数

如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。为什么会出现这种现象呢,个人认为析构的时候如果没有虚函数的动态绑定功能,就只根据指针的类型来进行的,...

2018-09-11 22:42:48 15354 2

原创 C++多态 覆盖 重载的区别

多态:基类中定义了一个虚函数,在派生类中定义了一个同名同参数表的函数,则基类类型的指针会根据实际的绑定对象来确定调用基类的函数还是派生类的函数覆盖:基类中定义了一个普通函数,在派生类中定义了一个同名同参数表的函数,则指针是什么类型就调用什么函数,不会发生动态绑定重载:在同一个类中定义了同名不同参数表的函数,调用的时候会自动根据参数类型来选择最合适的函数...

2018-09-11 22:28:47 304

转载 从航天应用看Linux、VxWorks和uC/OSII

http://www.veryarm.com/1551.html

2018-09-07 11:42:37 551

原创 stm32 bootloader跳转

stm32执行完loader程序后如何跳转到应用程序呢,一共有四件事要做:第一,关闭外设中断,关闭外设时钟,失能外设功能,如果不关闭,跳转到app区后会产生各种奇怪的问题第二,重设中断向量表位置,设置在app程序的起始地址根据stm32中断向量表的定义,表的地址就是可执行程序的起始地址,设置好后方便应用程序进入中断后可以找到对应的中断程序入口第三,重设堆栈指针,设置在app程序的起...

2018-09-04 10:09:30 4718 1

原创 网络协议

OSI七层网络协议,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。Internet网路通信中只用到了其中的物理层、数据链路层、网络层、传输层、应用层。其中物理层指的的是网线、光纤这种物理线路。数据链路层可以看到所有的数据帧信息,在帧中包含收发地址,校验等等。典型链路层协议是wifi和ethernet,通过链路层协议可以建立最简单的局域网,完成局域网内的设备通信。网络层...

2018-08-29 21:26:38 189

原创 嵌入式设备中字符串输出

在PC上编程一般适用printf来输出调试信息到控制台,在嵌入式设备中,一般适用串口或者IO设备来输出字符串,有一下几种方法:第一种,重定向printf,需要重写fputc()函数来覆盖库里面提供的默认版本,只需要在fputc()里面把字符输出操作替换为串口输出或其它IO设备即可第二种,自己定义一个类似printf的函数,用来替代他,里面需要处理的是变参的问题void dbg(cha...

2018-08-28 11:56:33 672

原创 keil load$$说明

Keil工程中,编译完成后得到的Keil Map文件中,可以看到Load$$开头的符号,他表示在分散加载文件中定义的段的描述,在代码中可以直接饮用,比如在分散加载文件中定义了一个region name,它紧跟在程序可执行代码短的后面,程序可以执行代码段的长度又是经常改变的,此时就可以通过Load$$region name$$Base和Load$$region name$$Length来获取这个段的...

2018-08-28 10:33:51 2349

原创 对ucos任务级任务切换和中断级任务切换的理解

任务切换和平台有关,因此ucos用汇编语言实现了两种切换方式,我的理解是这样的,也不知道是否正确:1. 任务级任务切换,由用户发起,在任务里面调用,自己直接触发或者根据某种条件判断来触发,在切换函数里面需要自己去保存当前任务的上下文到任务堆栈里面2. 中断级任务切换,在退出中断的时候触发,通过OSIntExit()函数调用,后面的理解比较关键了,也可能是错误的,当前任务的上下文保存由系统中...

2018-08-24 19:18:50 2783

原创 时间片轮转调度和实时抢占调度的理解

ucos2只支持实时抢占,据说ucos3同时支持时间片轮询调度。在没有使用操作系统的时候:a,一般是把任务放在while循环里面循环执行,通过加一个延时函数来控制时间间隔b,高级一点就是为每个任务规定一个执行周期,在while循环里面检查执行周期是否已经到来,如果到了就执行,如果没到就继续等待,好处是编程简单,每个任务基本可以保证按照规定的周期执行,坏处是一旦某个任务执行超时了,后面的...

2018-08-24 18:28:49 6086

原创 solidworks2016 拖链绘制

第一步,新建路径,绘制一个封闭的草图,然后用套合样条曲线工具转化为样条曲线,保存关闭第二步,新建拖链模型,特征要素是需要有两个连接孔第三步,新建装配体,首先插入刚才的路径,拖链模型第四部,选择线性零部件阵列里面的链零部件阵列,相连链接->样条曲线->数量->拖链模型->前后连接孔->基准面(想要与路径所在平面重合的面)...

2018-08-16 12:40:27 9083

原创 关于solidworks软件的显卡驱动

运行像solidworks这样的3D设计软件,装配体稍微复杂,一般的GTX游戏卡就无法胜任,这时候需要专门的图形卡加持。个人可以针对自己的装配体规模选择合适的图形卡,一般500-1000个零件以内的装配体,用丽台K4000完全可以胜任(某宝二手价格1000左右),不需要去购买昂贵的全新图形卡。装好显卡后,如果驱动安装不对,也无法发挥其功效,具体的显卡驱动可以上solidworks官网,根据自己的系...

2018-08-15 15:21:16 14238

原创 solidworks电气布线

一般设计装配体制作完成后,需要加上电子部分,其中关于电路模块的摆放和模块之间的线路走向和长度可以在solidworks中体现出来。在solidworks中布线实体以子装配体的方式与总装配体配合连接,下面介绍如何完成简单的电气布线。第一步,制作自己的routing器件,这一步可以通过工具->routing->routing工具->routing library manager来...

2018-08-15 15:10:07 11759

原创 机器学习的简单理解

比如预测一张图片上是否有猫,首先要得到一个计算公式,把图片带进去可以计算得出1或者0,表示图片有猫和无猫两种情况。这个计算公式的输入是图片的特征,比如一张图片是64*64大小,RGB三种颜色,那么这张图片的特征数量就是64*64*3=12288这么多个,其中64*64表示图片上的像素的数量,3表示每个像素点点RGB数值,所以这种图片的特征总数就是12288个,其实就是图片上的所有点的RGB数值。图...

2018-08-10 19:48:45 370

原创 HP打印机驱动安装

背景:自己的电脑和惠普打印机的网段不一样,自己的电脑是192.168.31.xxx,惠普打印机在192.168.0.xxx第一步,通过双击HP_LJ_Pro_MFP_M225-M226_Full_Solution_16078.exe文件安装,失败第二步,换一种方法,通过控制面板->添加打印机->输入打印机IP成功添加设备第三步,右键打印机图标->属性,找到更新打印机驱...

2018-08-10 15:00:08 2914

环形队列 中断测试代码 测试无问题

环形队列 被中断打断 是否会出错,看看代码吧

2024-06-16

空空如也

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

TA关注的人

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