自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

留小乙的博客

大家一起努力啊

  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux信号量以及互斥体

一、信号量简介相比于自旋锁,信号量可以使线程进入休眠状态,比如A与B、C合租了一套房子,这个房子只有一个厕所,一次只能一个人使用。某一天早上A去上厕所了,过了一会B也想用厕所,因为A在厕所里面,所以B只能等到A用来了才能进去。B要么就一直在厕所门口等着,等A出来,这个时候就相当于自旋锁。B也可以告诉A,让A出来以后通知他一下,然后B继续回房间睡觉,这个时候相当于信号量。可以看出,使用信号量会提高处理器的使用效率,毕竟不用一直傻乎乎的在那里“自旋”等待。但是,信号量的开销要比自旋锁大,因为信号量使线程进入休

2021-12-01 11:16:39 1196

原创 Linux其他类型锁

一、读写自旋锁现在有个学生信息表,此表存放着学生的年龄、家庭住址、班级等信息,此表可以随时被修改和读取。此表肯定是数据,那么必须要对其进行保护,如果现在使用自旋锁对其进行保护。每次只能一个读操作或者写操作,但是,实际上此表是可以并发读取的。只需要保证在修改此表的时候没人读取,或者在其他人读取此表的时候没有人修改此表就行了。也就是此表的读和写不能同时进行,但是可以多人并发的读取此表。像这样,当某个数据结构符合读/写或生产者/消费者模型的时候就可以使用读写自旋锁。读写自旋锁为读和写操作提供了不同的锁,一次只能

2021-11-30 15:52:21 880

原创 Linux并发与竞争

Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。在Linux驱动编写过程中对于并发控制的管理非常重要。一、并发与竞争1、并发与竞争简介Linux系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些

2021-11-30 15:03:27 1348

原创 Linux新字符设备驱动

一、分配和释放设备号使用register_chrdev函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会带来两个问题:①、需要事先确定好哪些主设备号没有使用。②、会将一个主设备号下的所有次设备号都使用掉,比如现在设置LED这个主设备号为200,那么0~1048575(2^20-1)这个区间的次设备号就全部都被LED一个设备分走了。这样太浪费次设备号了!一个LED设备肯定只能有一个主设备号,一个次设备号。解决这两个问题最好的方法就是要使用设备号的时候向Linux内核申请,需要几个就申请几

2021-11-27 11:27:33 1002

原创 Linux地址映射函数以及内存访问函数

一、地址映射先简单了解一下MMU这个神器,MMU全称叫做Memory Manage Unit,也就是内存管理单元。在老版本的Linux中要求处理器必须有MMU,但是现在Linux内核已经支持无MMU的处理器了。MMU主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们虚拟空间到物理空间的映射,也叫做地址映射。对于32位的处理器来说,虚拟地址范围是2^32=4GB,但物理内存却没有这么大,经过MMU可以将其映射到整个4GB的虚拟

2021-11-22 19:19:21 800

原创 Linux设备号

一、设备号的组成为了方便管理,Linux中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。Linux提供了一个名为dev_t的数据类型表示设备号,dev_t定义在文件include/linux/types.h里面,定义如下:typedef __u32 __kernel_dev_t;......typedef __kernel_dev_t dev_t;可以看出dev_t是__u32类型的,而__u32定义在文件incl

2021-11-19 17:48:00 851

原创 Linux设备具体操作函数

一、填充file_operations结构体file_operations结构体就是设备的具体操作函数,file_operations结构体类型的变量test_fops,但是还没对其进行初始化,也就是初始化其中的open、release、read和write等具体的设备操作函数。现在就来完成变量test_fops的初始化,设置好针对chrtest设备的操作函数。在初始化test_fops之前需要分析一下需求,也就是要对chrtest这个设备进行哪些操作,只有确定了需求以后才知道我们应该实现哪些操作函数。假

2021-11-19 17:30:01 681

原创 Linux驱动模块加载和卸载以及设备注册与注销

一、驱动模块的加载和卸载Linux驱动有两种运行方式,第一种就是将驱动编译进Linux内核中,这样当Linux内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux下模块扩展名为.ko),在Linux内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样修改驱动以后只需要编译一下驱动代码即可,不需要编译整个Linux代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动开发

2021-11-18 16:15:55 6829 1

原创 ARM Linux驱动开发简介

一、Linux驱动分类Linux的驱动主要分为三种,分别为字符设备驱动、块设备驱动、网络设备驱动。其中字符设备驱动是最多的一类驱动,因为字符设备最多,从最简单的点灯到I2C、SPI、音频等都属于字符设备驱动的类型。块设备和网络设备驱动要比字符设备驱动复杂。所谓的块设备驱动就是存储器设备的驱动,比如EMMC、NAND、SD卡和U盘等存储设备,因为这些存储设备的特点是以存储块为基础,因此叫做块设备。网络设备驱动就更好理解了,就是网络驱动,不管是有线的还是无线的,都属于网络设备驱动的范畴。一个设备可以属于多种设

2021-11-18 15:26:01 1574

原创 Linux文件系统

一、“/”根目录重要文件夹详解上图中列举出了根目录“/”下面的所有文件夹,这里仔细观察一下,当进入到根目录“/”里面以后终端提示符“ $ ”前面的符号“ ~ ”变成了“ / ”,这是因为当在终端中切换了目录以后“ $ ”前面就会显示切换以后的目录路径。来看一下根目录“ / ”中的一些重要的文件夹:/bin 存储一些二进制可执行命令文件,/usr/bin也存放了一些基于用户的命令文件。/sbin 存储了很多系统命令,/usr/sbin也存储了许多系统命令。/root 超级用户root的根目录文

2021-11-02 11:21:38 122

原创 VI/VIM编辑器

linux中最常用的编辑器就是vim编辑器。VIM编辑器是VI编辑器升级版本,VI/VIM编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作需要先安装VIM编辑器,命令如下:sudo apt-get install vim一、输入模式安装完成以后就可以使用VIM编辑器了,VIM编辑器有3种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能。使用命令 vim test.txt新建文档,并且用VIM打开。试着在文本中输入数字,发现根本没法

2021-11-01 21:07:03 124

原创 Shell常用命令大全

嵌入式开发用的最多就是Shell命令,Shell命令是所有的Linux系统发行版所通用的,并不是说我在Ubuntu下学会了Shell命令,换另外一个Linux发行版操作系统以后就没用了,所以学习Shell命令非常有必要。1、目录信息查看命令文件浏览是最基本的操作了,Shell下文件浏览命令为ls,格式如下: ls [选项] [路径]Is命令主要用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:-a显示所有的文件以及子目录,包括以“”开头的隐藏文件。-l

2021-11-01 20:37:08 27096 2

原创 FreeRTOS任务通知

从FreeRTOSv8.2.0版本开始,FreeRTOS新增了任务通知(Task Notifictions)这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西。使用任务通知的话效率会更高。一、任务通知简介任务通知在FreeRTOS中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS定义为1。FreeRTOS的每个任务都有一个32位的通知值,任务控制块中的成员变量ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某

2021-10-29 09:26:35 3679 3

原创 FreeRTOS内存管理

一、内存管理简介FreeRTOS创建任务、队列、信号量等的时候有两种方法,一种是动态的申请所需的RAM。一种是由用户自行定义所需的RAM,这种方法也叫静态方法,使用静态方法的函数一般以"Static"结尾,比如任务创建函数xTaskCreateStatic(),使用此函数创建任务的时候需要由用户定义任务堆栈。使用动态内存管理的时候FreeRTOS内核在创建任务、队列、信号量的时候会动态的申请RAM。标准C库中的malloc()和free()还是也可以实现动态内存管理,但是如下原因限制了其使用:1、在

2021-10-28 19:09:06 1879 1

原创 FreeRTOS事件标志组

信号量来同步的话任务只能与单个的事件或任务进行同步。有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了。FreeRTOS为此提供了一个可选的解决方法,那就是事件标志组。一、事件标志组简介1、事件位(事件标志)事件位用来表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子:当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置1,当队列中没有消息需要处理的时候就可以将这个位(标志)置0。当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置1,当没有

2021-10-28 15:27:46 1018

原创 FreeRTOS软件定时器

一、软件定时器简介1、软件定时器概述软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,简而言之,当定时器的定时周期到了以后就会执行回调函数。2、回调函数的注意事项软件定时器的回调函数是在定时器服务任务中执行的,所以一定不能在回调函数中调用任何会阻塞任务的API函数!比如,定时器回调函数中千万不能调用vTaskDelay()、vTaskDelayUnti(),还有一些访问队列或者信号量的非零

2021-10-27 21:08:53 4905 1

原创 蓝桥杯——修改数组

【问题描述】给定一个长度为N的数组A=[A1,A2,…AN],数组中有可能有重复出现的整数。在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改A2、A3、…、AN。当修改Ai时,小明会检查Ai是否在A1~ Ai-1中出现过。如果出现过,则小明会给Ai加上1,如果新的Ai仍在之前出现过,小明会持续给Ai加1,直到Ai没有在A1~Ai-1中出现过。当AN也经过上述修改之后,显然A数组中就没有重复的整数了。现在给定初始的A数组,请你计算出最终的A数组。【源代码】#include<stdio

2021-10-26 16:24:06 647

原创 FreeRTOS信号量详解第四讲(全网最全)——互斥信号量

一、互斥信号量简介互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。互斥信号量适合用于那些需要互斥访问的应用中。在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。互斥信号量使用和二值信号量相同的API操作函数,所以互斥信号量也可以设置阻塞时间,不同于二值信号量的是互斥信号量具有优先级继承的特性。当一个互斥信号量正在被一个低优先

2021-10-26 14:36:38 6669 1

原创 FreeRTOS——优先级翻转

一、优先级翻转在使用二值信号量的时候会遇到很常见的一个问题——优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。二、优先级翻转流程图(1)任务H和任务M处于挂起状态,等待某一事件的发生,任务L正在运行。(2)某一时刻任务L想要访问共享资源,

2021-10-25 20:29:13 1727 1

原创 FreeRTOS信号量详解第三讲(全网最全)——计数信号量

一、计数型信号量简介有些资料中也将计数型信号量叫做数值信号量,二值信号量相当于长度为1的队列,那么计数型信号量就是长度大于1的队列。**同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。**计数型信号量通常用于如下两个场合:1、事件计数在这个场合中,每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始

2021-10-25 19:45:45 748

原创 蓝桥杯——Fibonacci数列与黄金分割

【问题描述】Fibonacci数列是非常著名的数列:F[1]=1,F[2]=1,对于i>3,F[i] = F[i-1] + F[i-2]Fibonacci数列有一个特殊的性质,前一项与后一项的比值,F[i] / F[i+1],会趋近于黄金分割。为了验证这一性质,给定正整数N,请你计算F[N] / F[N+1],并保留8位小数。【输入格式】一个正整数N。(1≤N≤2000000000)【输出格式】F[N] / F[N+1]。答案保留8位小数。【样例输入】2【样例输出】0.50000

2021-10-25 19:12:08 658

原创 蓝桥杯——质数

【问题描述】我们知道第一个质数是2、第二个质数是3、第三个质数是5……请你计算第2019个质数是多少?【源代码】#include<stdio.h>int ans = 2;void fun(){ int num; int cnt = 1; int i = 2; int temp; printf(" 质数 \n"); printf(" \n");

2021-10-25 16:04:42 456

原创 FreeRTOS信号量详解第二讲(全网最全)——二值信号量

一、二值信号量简介二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问。和队列一样,信号量API函数允许设置一个阻塞时间,阻塞时间是当任务获取信号量的时候由于信号量无效从而导致任务进入阻塞态的最大时钟节拍数。如果多个任务同时阻塞在同一个信号量上的话那么优先级最高的那个任务优先获得信号量,这样当信号量有效的时候高优先级

2021-10-25 14:48:35 5885 4

原创 FreeRTOS信号量详解第一讲(全网最全)——概述

一、信号量信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但有些应用场景是可以互换着使用的。二、信号量简介信号量常常用于控制对共享资源的访问和任务同步。举一个很常见的例子,某个停车场有100个停车位,这100个停车位大家都可以用,对于大家来说这100个停车位就是共享资源。假设现在这个停车场正常运行,你要把车停到这个这个停车场肯定要先看一下现在停了多少车了?还有没有停车位

2021-10-24 21:02:25 1162

原创 蓝桥杯——字串数字

【问题描述】小明用字母A对应数字1,B对应2,以此类推,用Z对应26。对于27以上的数字,小明用两位或更长位的字符串来对应,例如AA对应27,AB对应28,AZ对应52,LQ对应329。请问LANQIAO对应的数字是多少?【源代码】#include<stdio.h>long long ans = 0;//答案 char num[26]={'0'}; void fun(){ int i = 0; printf(" 字串数字 \

2021-10-24 20:29:22 660

原创 蓝桥杯——立方和

【问题描述】小明对数位中含有2、0、1、9的数字很感兴趣,在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574,平方和是14362,立方和是400816。请问,在1到2019中,所有这样的数的立方和是多少?【源代码】#include<stdio.h>long long Cubic_sum = 0;//立方和 long long squares_sum = 0;//平方和 int sum = 0;//和 void fun(){ int num =

2021-10-24 19:27:08 1580

原创 蓝桥杯——门牌制作

【问题描述】小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。请问要制作所有的1到2020号门牌,总共需要多少个字符2?【源代码】#include<stdio.h>int ans[10]={0};int temp = 0;int main(){ for(int i=1;i&lt

2021-10-24 17:34:48 1145

原创 FreeRTOS消息队列详解第五讲(全网最全)——队列读取消息

一、消息队列读取消息有消息入队就有出队,出队就是从队列中获取队列项(消息),FreeRTOS中出队函数如下表所示:1、函数xQueueReceive()此函数用于在任务中从队列中读取一条(请求)消息,读取成功以后就会将队列中的这条数据删除,此函数的本质是一个宏,真正执行的函数是xQueueGenericReceive()。此函数在读取消息的时候是采用拷贝方式的,所以用户需要提供一个数组或缓冲区来保存读取到的数据,所读取的数据长度是创建队列的时候所设定的每个队列项目的长度,函数原型如下:BaseTy

2021-10-24 15:59:09 6890 1

原创 FreeRTOS消息队列详解第四讲(全网最全)——队列上锁解锁

一、队列上锁在任务级通用入队函数和中断级通用入队函数的时候都提到了队列的上锁和解锁,队列的上锁API函数为prvLockQueue()。首先来看一下队列上锁函数prvLockQueue(),此函数本质上就是一个宏,定义如下:#define prvLockQueue( pxQueue ) \ taskENTER_CRITICAL(); \ { \ if( ( pxQueue )->cRxLock == queueUNLOCKED )

2021-10-24 15:16:02 2384 3

原创 FreeRTOS消息队列详解第三讲(全网最全)——队列发送消息

一、队列发送消息函数简介创建好队列以后就可以向队列发送消息了,FreeRTOS提供了8个向队列发送消息的API函数。如下表所示:1、函数xQueueSend()、xQueueSendToBack()和xQueueSendToFront()这三个函数都是用于向队列中发送消息的,这三个函数本质都是宏,其中函数xQueueSend()和xQueueSendToBack()是一样的,都是后向入队,即将新的消息插入到队列的后面。函数xQueueSendToToFront()是前向入队,即将新消息插入到队列的前

2021-10-24 14:43:43 9464

原创 FreeRTOS消息队列详解第二讲(全网最全)——队列创建

今天主要来讲讲消息队列相关的API。一、队列创建1、函数xQueueCreate()该函数本质上是一个宏,用来动态创建队列,该宏最终调用的是函数xQueueGenericCreate(),函数原型如下:xQueueCreate( uxQueueLength, uxItemSize )参数描述uxQueueLength要创建的队列的队列长度,这里是队列的项目数。uxItemSize队列中每个项目(消息)的长度,单位为字节返回值队列创捷成功以后返回的队列句柄!

2021-10-23 11:14:59 5337

原创 FreeRTOS消息队列详解第一讲(全网最全)——消息队列概述

一、队列简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。 任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列。FreeRTOS中的信号量的也是依据队列实现的!所以有必要深入的了解FreeRTOS的队列。1、数据存储通常队列采用先进先出(FIFO)的存储缓冲机制,

2021-10-22 20:49:13 13709

原创 FreeRTOS内核控制函数介绍

一、内核控制函数预览FreeRTOS中有一些函数只供系统内核使用,用户应用程序一般不允许使用,这些API函数就是系统内核控制函数。在FreeRTOS的官网(https://www.freertos.org)可以查到这些函数。函数描述taskYIELD()任务切换taskENTER_CRITICAL()进入临界区,用于任务中taskEXIT_CRITICAL()退出临界区,用于任务中taskENTER_CRITICAL_FROM_ISR()进入临界区,用于中

2021-10-22 18:41:10 226

原创 FreeRTOS时间片调度

一、FreeRTOS时间片调度概述FreeRTOS支持多个任务同时拥有一个优先级,这些任务的调度就可以使用时间片来进行调度。在FreeRTOS中允许一个任务允许一个时间片(一个时钟节拍的长度)后让出CPU的使用权,让拥有同优先级的下个任务运行。下图展示了运行在同一优先级的执行时间图。其中的task1、task2、task3是同一优先级N就绪的任务。1、任务3正在运行。2、这时一个时钟节拍中断(滴答定时器中断)发生,任务3的时间片用完,但是任务3还没有执行完。3、FreeRTOS将任务切换到任务1

2021-10-22 16:41:54 6448

原创 FreeRTOS任务创建过程详解(全网最细)

一、任务创建函数分析FreeRTOS的任务创建由函数xTaskCreate()完成。函数源码如下:BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * co

2021-10-21 21:14:30 5791 2

原创 FreeRTOS列表和列表项(2)

今天继续来介绍FreeRTOS中的列表和列表项。主要是介绍列表和列表项的API。一、列表初始化新创建或者定义的列表需要对其做初始化处理,列表的初始化其实就是初始化列表结构体List_t中的各个成员变量,列表的初始化通过使函数vListInitialise()来完成,此函数在list.c中有定义,函数如下:void vListInitialise( List_t * const pxList ){ pxList->pxIndex = ( ListItem_t * ) &( pxLi

2021-10-21 10:42:17 319

原创 FreeRTOS列表和列表项(1)

一、什么是列表和列表项1、列表列表是FreeRTOS中的一个数据结构,概念上和链表有点类似,列表被用来跟踪FreeRTOS中的任务。与列表相关的全部东西都在文件list.c和list.h中。在list.h中定义了一个叫List_t的结构体,如下:typedef struct xLIST{listFIRST_LIST_INTEGRITY_CHECK_VALUE (1)configLIST_VOLATILE UBaseType_t uxNumberOfItems

2021-10-19 21:39:30 294

原创 FreeRTOS创建任务(3)

一、任务挂起和恢复API函数有时候需要暂停某个任务的运行,过一段时间以后在重新运行。这个时候要是使用任务删除和重建的方法的话,那么任务中变量保存的值肯定丢失了!FreeRTOS提供了解决这种问题的方法,那就是任务挂起和恢复,当某个任务要停止运行一段时间的话就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。FreeRTOS的任务挂起和恢复API函数如下表所示:函数描述vTaskSuspend()挂起一个任务vTaskResume()恢复一个任务的运行xTa

2021-10-19 20:53:10 266

原创 求解最大连续子序列和问题———分治法

一、问题描述给定一个有n(n >= 1)个整数的序列,求出其中最大连续子序列的和。例如序列(34,-20,30,-50,60,-20,30,41,-30,-10)最大子序列和为111,序列(-2,11,-4,13,-5,-2)最大子序列和为20。规定一个序列的最大连续子序列和至少为0。二、问题求解1、对于含有n个整数的序列,若n=1,表示序列仅有一个元素,该元素大于0,则返回该元素,否则返回0。if(left == right){ if(a[left]>=0) return a[l

2021-10-19 15:16:58 10280 4

原创 FreeRTOS创建任务(2)

一、FreeRTOS任务相关API函数1、任务创建和删除API函数FreeRTOS最基本的功能就是任务管理,而任务管理最基本的操作就是创建和删除任务,FreeRTOS的任务创建和删除API函数如下表所示:函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCrearteRestricted()创建一个使用MPU进行限制的任务,相关内存使用动态内存分配vTaskDelete()

2021-10-18 19:50:40 444

基于单片机的温度控制(PID,PWM)Proteus仿真

温度加热控制系统 1、使用PID算法控制温度大小,加热器控制使用PWM占空比信号控制 2、通过按钮调节PID参数,实现参数矫正以达到更好的控制效果 3、加热温度控制在50度(程序里面可以修改)

2023-06-19

计算器(加减乘除,数码管)Proteus仿真

实现单字节加减乘除四则运算 1、能通过键盘输入正确键值 2、能进行简单的四则运算 3、能以数码管正确显示数值 4、能重复操作

2023-06-19

基于51单片机的空气质量检测(空气质量、温度、湿度、DHT11)

1、空气质量传感器用MQ135,温湿度传感器用DHT11 2、通过按键分别设置报警值,空气质量、温度、湿度过限则启动蜂鸣器报警 3、LCD显示当前空气质量、温湿度和报警值

2023-06-19

基于51单片机的空气检测系统(空气质量、温度、湿度)

1、测量空气质量(PM2.5等,随意选择)、温度、湿度 2、分别设置报警值,空气质量、温度、湿度过限则启动蜂鸣器报警 3、LCD显示当前空气参数和报警值

2023-06-19

交通灯1(8255,数码管,固定时间)Proteus仿真

1、用单片机扩展一片8255,用6个发光二极管模拟一个十字交叉路口东西南北方向的红黄绿灯,并设置2个紧急放行按钮(K1-南北,K2-东西)及一个接触人工干预按钮。 2、正常行驶时,东西或南北方向按绿灯亮25秒,黄灯5秒,红灯亮30秒循环变化。 3、当东西或南北方向的紧急放行键按下时,相应方向绿灯亮,相对方向红灯亮,接触人工干预后恢复原来的灯亮状态,并继续计时。

2023-06-19

基于51单片机的步进电机控制(12864)

单片机控制步进电机 使用LCD显示汉字,不同工作模式对应不同内容:电机正转、电机反转、电机停止、电机正转加速、电机正转减速,电机反转加速、电机反转减速。

2023-06-19

基于51单片机的日历(闹钟,矩阵键盘)

1、用液晶显示器显示年月日时分秒 2、通过矩阵键盘设置时间和闹钟 3、闹钟时间到,蜂鸣器响10s

2023-06-19

基于单片机DS18B20温度12864显示(proteus仿真+源程序)

1、本设计采用51单片机作为主控制。 2、DS18B20采集温度,送到液晶12864上面显示。

2023-06-19

基于51单片机16X64点阵滚动显示屏设计设计广告牌C语言源程序与仿真

基于51单片机16X64点阵滚动显示屏(广告牌)由单片机最小系统、列驱运电路74HC595组成、行驱动电路74HC154,实现数字、汉字的滚动显示。电路简单。程序中以25个字作为显示示例。资料含51单片机C语言源程序,编程环境是Keli4软件;PROTEUS7.8仿真源文件。附送取模软件及取模说明文档,方便你自己更换显示内容。显示移动速度可在程序中进行设置。

2023-06-19

基于51单片机电子抽奖系统proteus仿真(仿真加源程序)

基于51单片机电子抽奖系统proteus仿真(仿真加源程序)

2023-06-19

AT89C51单片机音乐盒(倒计数)

音乐倒数计数器 设计内容: 1、利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。 2、定时闹钟的基本功能如下: 字符型LCD(16X2)显示器。显示格式为“TIME 分分:秒秒”。 3、拓展功能 显示当前温度 显示当前时间 可选择3种铃声

2023-06-19

基于51单片机的直流电机(角度控制、Protues仿真)

单片机控制直流电机的角度,通过脉冲编码器测量电机轴旋转位置。 使用电位器设置电机角度。 自动控制电机正反转,实现电机旋转到设定角度。

2023-06-19

基于51单片机智能大棚温湿度控制系统-2路测量(proteus仿真+源程序+开题报告)

智能大棚温湿度控制系统 1、51单片机控制。 2、1602液晶显示 3、DHT11温湿度传感器检测湿度和湿度。 4、按键设置门限。 5、温湿度自动调节控制,蜂鸣器报警。

2023-06-19

基于51单片机直流电压电流表设计LCD1602液晶实训仿真

本资料包含仿真加C语言源程序加AD格式原理图,开发环境keil4 c51,proteus7.8,Altium Designer10。 视频演示地址:https://v.youku.com/v_show/id_XNDU1OTIzODg5Mg==.html 功能操作说明: 本设计包括四个按键,单片机复位按键,设置按键,加键,减键。 开机后采集电压和电流,当电压低于默认低压值时候红灯亮,电流高于默认设定值后绿灯亮。没有按键按下情况下会一直运行。 按下设置键后进入设置模式,第一次按下设置欠压,第二次按下设置过流,再次按下回到正常模式。 加键按下,设置值加并且闪烁。 减键按下,设置值减并且闪烁。

2023-06-19

基于51单片机的电压表(4挡)Proteus仿真

数字电压表 1、测量范围:直流0~1.999V,0~19.99V,0~199.9V,0~1999V; 2、开关切换档位

2023-06-19

基于51单片机的冰箱除霜系统(温控,除霜、Proteus仿真)

冰箱控制器 1、测量冷冻室和冷藏室温度,如果温度过高则启动压缩机进行降温 2、测量结霜的厚度,如果结霜厚度超过阀值则启动除霜器 3、使用LCD1602显示冷冻室温度、冷藏室温度、霜厚以及阀值

2023-06-19

RLC测量仪电路方设计(原理图+源码+仿真)

1、在系统硬件设计中,以STC89C51单片机为核心,使用对应的振荡电路转化为频率实现各个参数的测量。采用NE555多谐振荡电路产生的频率,将振荡频率送入STC89C52的计数端端,通过定时并且计数可以计算出被测频率,再通过该频率计算出被测参数。算出的参数用LCD1602A液晶显示屏显示出来。 2、测量范围: 电阻:100Ω-1MΩ=(100Ω-1000000Ω); 电容:100pF-10000pF =(100pF-0.1uF); 电感:100uH-100mH=(100uH-1000000uH);

2023-06-19

基于51单片机电子称仿真HX711传感器原理图1602显示proteus电子设计

本设计硬件由STC89C52单片机为主控电路、显示电路为1602液晶屏、HX711称重传感器按键电路、超重报警电路及电源电路组成。按键共有五个,去皮按键,校验加键,样验减键,增加重量键,减小重键。基中去皮按键是用来去除皮重的;校验加键及校验减键是硬件实物制作好后第一次使用称前用标准法码校验称时用,当电子称读数与标准法码标称值不一至时,就需要通过校验加键及校验减键让电子称的显示值与标准法码的标称值一至,这样就完成了校称工作,通过校验后的称才能正常投入使用,在仿真中这两个按键是用不到的,但必需要设计这两个按键;增加重量键与减小重键是仿真中用来仿真不同重量时用到,按下这两个按键,就可以得到不同重量,以仿真出电子称的称重效果。称重范围是0-5kg,精确到1克。 系统组成为数据采集模块、最小系统模块、超重报警模块、键盘和1602液晶屏显示模块。其中,数据采集模块包括称重传感器和A/D转换电路;最小系统部分主要包括单片机、单片机晶振电路、键盘电路组成、显示部分由1602液晶屏组成。软件部分由C语言编程,编程软件是Keil4L软件,仿真软件是Proteus7.8及以上软件。

2023-06-19

基于51单片机的红外遥控器设计proteus仿真(注释全)

设计以MCS51单片机为核心的红外遥控器电路及从键盘接收命令并通过红外发射管发送命令的程序。光信号载波频率为45kHz,遥控器有10个按键对应10条命令。 本设计采用双机通讯模拟,按键模拟发送端不同频率。 通过时钟频率发送,接收端检测不同的时钟频率,并将检测到的频率显示在液晶上。

2023-06-19

基于51单片机的LCD1602矩阵键盘密码锁(proteus仿真设计)

基于51单片机LCD1602矩阵键盘密码锁proteus仿真设计 仿真图proteus 7.8/protues 8.6 程序编译器:keil 4/keil 5 编程语言:C语言 编号C10531_2 功能描述: 1.按键设置6位密码,输入密码若密码正确,则锁打开。显示open。 2.密码可以自己修改(6位密码),必须是锁打开时才能改密。为防止误操作,修改密码得输入两次。 3.若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。 4.24C02有复位、掉电保存密码功能。 5.液晶屏亮度会随光线自动调整。

2023-06-19

步进电机(正反转,加减速,启停)Proteus仿真

51单片机 实现步进电机正反转、加减速、启动和停止。 用LCD显示电机工作状态

2023-06-19

基于单片机篮球计时-计分器(proteus仿真+源程序+参考报告)

1、本系统采用51单片机作为主控制器。 2、液晶1602显示。 3、按键设置比赛时间,具有开始、暂停、时间清零、A,B队加1分、加2分、加3分,减1分,交换场地等功能。

2023-06-19

基于51单片机的手机键盘(矩阵 Proteus仿真)

手机键盘模拟 1、利用矩阵键盘和LCD1602设计 2、运行时仿照手机键盘功能,对应字符显示在LCD上 3、实现大小写输入切换功能

2023-06-19

基于51单片机直流电机调速-PWM-普中开发板(proteus仿真+源程序)

1,51单片机控制 2、PWM电机调速 3、按键控制电机启动,停止,加速,减速。

2023-06-19

基于51单片机的日历(温度,闹钟)

1、实现日历功能,显示年月日时分秒 2、测量温度并显示 3、具有闹钟功能,可设置闹钟时间 4、温度超过上下限则启动报警 5、使用存储器芯片存储系统参数,掉电保存

2023-05-19

基于51单片机的空气检测(源代码 + 原理图)Proteus仿真

1、空气质量传感器用MQ135,温湿度传感器用DHT11,烟雾传感器使用MQ-2。 2、通过按键分别设置报警值,空气质量、温度、湿度过限则启动蜂鸣器报警。 3、LCD显示当前空气质量、温湿度和报警值。 4、可显示当前时间,并能通过按键修改时间。

2023-05-19

基于stm32的电子时钟万年历温度OLED显示(源码+实物图+硬件连接)

采用stm32自带RTC-DS18B20-OLED显示,可以调节时间,显示温度和时间 硬件连接: OLED- SDA --》PB13 OLED- SCL --》PB12 DS18B20----》PA15 联线方法见README.TXT 小喇叭直接接在PB8脚,和地. PD2 LED1 PA8 LED0 #define KEY0 PCin(1) #define KEY1 PCin(13) #define KEY2 PAin(0) #define SCL PBout(12) #define SDA PBout(13)

2023-05-19

stm32f103c8t 时钟万年历1602显示(原理图+PCB+源码)

1.通过LCD1602显示年月日 时分秒 星期 温度 等信息 2.按键总共有三个,从左至右分别为调整参数选择按钮、参数调整按钮、12小时制/24小时制选择按钮 3.两个按钮即可实现数据的调整,避免多个按钮的资源浪费 4.星期自动计算,无需调整 5.闹钟功能:闹钟可暂停,可实现掉电存储 操作说明 1.上电测试:将USB电源线接入充电宝、充电头、USB口任意一个即可供电,按下电源开关即可工作 2.调整参数选择:按下调整参数选择按键(第一个按键)可分别调整年/月/日/时/分/秒/时间显示模式/闹钟时/闹钟分/闹钟秒,按下后对应调整数据的第一位闪烁指示,各个数据范围分别为(其中闹钟时有Ala标识出现用以区分正常时间) 3.参数调节:通过调整参数选择按钮选择需要调整的参数后按下参数调整按键即可调节各项参数,调节完成后循环按下调整参数选择按钮回到正常状态 4.显示数据说明:在正常状态下程序会一直显示年月日星期时分秒,星期采用英文的头三个字母进行显示 5.12/24小时制选择:当无闹钟鸣叫是按下选择按钮即可改变,当12小时制是LCD有AM/PM指示,24小时制是显示-- 6.闹钟取消

2023-05-19

基于单片机的数字万用表电压电流电阻测量液晶显示(proteus仿真+源程序)

1、本系统采用52系统单片机作为主控制器。 2、支持电压,电流,电阻测量。 3、按键切换测量电压、电流、电阻。

2023-05-19

基于51单片机计数器设计-静态数码管-74ls164扩展芯片(proteus仿真+源程序)

单片机对按键的识别的过程处理 单片机对正确识别的按键进行计数,计数满时,又从零开始计数; 单片机对计的数值要进行数码显示,计得的数是十进数,含有百位,十位和个位。 通过单片机外部中断0控制,执行程序;

2023-05-19

基于51单片机频率计-脉冲计数器-4位数码管(proteus仿真+源程序)

频率计,数码管显示,脉冲计数器,显示脉冲频率。

2023-05-19

基于51单片机的温度报警(上下限,数码管,DS18B20)

简易温度报警器 1、通过DS18B20测量当前温度 2、数码管显示温度值 3、设置上下限,温度过限蜂鸣器响

2023-05-19

基于51单片机温度显示-液晶和数码管双显示(proteus仿真+源程序)

51单片机控制,DS18B20温度检测,1602液晶显示和数码管显示温度,按键切换数码管显示与关闭。

2023-05-19

基于51单片机环境监测控制系统(proteus仿真+源程序+原理图)

1、51单片机控制,1602液晶显示信息 2、DS1302时钟 3、温湿度检测 4、光照检测 5、空气质量检测等。

2023-05-19

基于51单片机的报警器(厨房温湿度,烟雾,CO,粉尘)Proteus仿真

基于单片机的厨房环境监测系统。 测量温湿度、烟雾浓度、co浓度,粉尘,然后超出范围响警报。 有0832、51单片机、mq2烟雾传感器、LCD1602液晶显示,灯光电路、按键电路、警报器电路。都可调报警值。传感器可用电位器代替。

2023-05-19

单片机PT100温度计/PT100测温/PT100电桥测温/proteus仿真

注意:资料是proteus 7仿真电路和完整电路图。 主要功能: (1)PT100测温显示. (2)采集测温范围为-10 ℃~100 ℃. (3) 显示分辨率0.1,. (4)显示模块,采用4个LED数码管显示. (5)采用电桥电路。

2023-05-19

基于51单片机的火灾报警(温度PT100,烟雾,数码管)Proteus仿真

基于AT89C51的火灾报警检测设计方案。 1.温度传感器PT100、烟雾传感器、A/D转换芯片TLC1543的选择以及与单片机的接口电路设计。 2.单片机的接口电路及其与数码管的硬件连接。 3.温度过限,且检测到烟雾,报警。按键设置温度阀值。烟雾采用开关代替

2023-05-19

基于51单片机的温度测量显示设计(1602显示DS18B20测温能测量零下温度带报警功能源程序与仿真

基于51单片机的温度测量显示设计1602显示DS18B20测温能测量零下温度带报警功能源程序与仿真,传感器选用DS18B20数字温度传达室感,测量范围-55到正的125度,程序可直接用于以下单片机中:AT89C51,AT89C52,AT89S51,AT89S52,STC89C52RC,STC89C52,单片机编程环境是Keil4,1602显示,程序仿真在P roteus7.8及以上版本软件中调试仿真通过,在实物上验证通过,程序设置有温度高报警功能,报警值在程序中修改。

2023-05-19

基于51单片机的自动调光灯(光照,超声波距离)Protues仿真

设计一款自动调光系统,根据单片机AD模块采集光敏传入的数据,及时地调整对光强的控制 当外界光照较强时,光照系统提供的光照强度相应较弱。 外界光照较弱时,光照系统提供的光照较强. 实现LED照明灯自动开启、关闭。 实现自适应调整等问题,达到了最佳调光效果。 (1)超声波测距传感器对人体进行感应。当感应到人靠近时,接收并且发射信号来调整照明灯的明暗程度 (2)要求用光敏电阻光模块把环境亮度转换成相应的数字电平。然后直接接入单片机10口引脚 (3)要求采用pwm调光技术,把超声波感应人体的距离,根据不同的占空比来控制1e灯的强弱。

2023-05-19

基于51单片机的正弦波发生器仿真电路图

下面给出一个设计实例,在实例中通过定时器中断和DAC0832结合的方式来产生1~100KHZ的正弦波,幅度为0-Vcc/2。 首先按照下面的公式建立一个正弦波样本表,样表中将一个正弦波周期分成128个点,每个点按7位量化(127对应最高幅度Vcc/2): f(x) = 64 + 63 * sin(2πx/180) x∈[0…127] 程序中使用16位定时器0产生取样中断,及定时器0的中断时间即为正弦波的采样周期。(T=1/(f*64))。本例中将正弦波分成64个采样点输出,及每隔两个点要从采样样本中取出一个数DAC0832的输入。

2023-05-19

空空如也

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

TA关注的人

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