- 博客(89)
- 资源 (1)
- 收藏
- 关注
原创 Linux信号量以及互斥体
一、信号量简介相比于自旋锁,信号量可以使线程进入休眠状态,比如A与B、C合租了一套房子,这个房子只有一个厕所,一次只能一个人使用。某一天早上A去上厕所了,过了一会B也想用厕所,因为A在厕所里面,所以B只能等到A用来了才能进去。B要么就一直在厕所门口等着,等A出来,这个时候就相当于自旋锁。B也可以告诉A,让A出来以后通知他一下,然后B继续回房间睡觉,这个时候相当于信号量。可以看出,使用信号量会提高处理器的使用效率,毕竟不用一直傻乎乎的在那里“自旋”等待。但是,信号量的开销要比自旋锁大,因为信号量使线程进入休
2021-12-01 11:16:39
1415
原创 Linux其他类型锁
一、读写自旋锁现在有个学生信息表,此表存放着学生的年龄、家庭住址、班级等信息,此表可以随时被修改和读取。此表肯定是数据,那么必须要对其进行保护,如果现在使用自旋锁对其进行保护。每次只能一个读操作或者写操作,但是,实际上此表是可以并发读取的。只需要保证在修改此表的时候没人读取,或者在其他人读取此表的时候没有人修改此表就行了。也就是此表的读和写不能同时进行,但是可以多人并发的读取此表。像这样,当某个数据结构符合读/写或生产者/消费者模型的时候就可以使用读写自旋锁。读写自旋锁为读和写操作提供了不同的锁,一次只能
2021-11-30 15:52:21
989
原创 Linux并发与竞争
Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车,大家按照谁扫谁骑走的原则来共用这个单车,如果没有这个并发访问共享单车的原则存在,只怕到时候为了一辆单车要打起来了。在Linux驱动编写过程中对于并发控制的管理非常重要。一、并发与竞争1、并发与竞争简介Linux系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些
2021-11-30 15:03:27
1468
原创 Linux新字符设备驱动
一、分配和释放设备号使用register_chrdev函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会带来两个问题:①、需要事先确定好哪些主设备号没有使用。②、会将一个主设备号下的所有次设备号都使用掉,比如现在设置LED这个主设备号为200,那么0~1048575(2^20-1)这个区间的次设备号就全部都被LED一个设备分走了。这样太浪费次设备号了!一个LED设备肯定只能有一个主设备号,一个次设备号。解决这两个问题最好的方法就是要使用设备号的时候向Linux内核申请,需要几个就申请几
2021-11-27 11:27:33
1131
原创 Linux地址映射函数以及内存访问函数
一、地址映射先简单了解一下MMU这个神器,MMU全称叫做Memory Manage Unit,也就是内存管理单元。在老版本的Linux中要求处理器必须有MMU,但是现在Linux内核已经支持无MMU的处理器了。MMU主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们虚拟空间到物理空间的映射,也叫做地址映射。对于32位的处理器来说,虚拟地址范围是2^32=4GB,但物理内存却没有这么大,经过MMU可以将其映射到整个4GB的虚拟
2021-11-22 19:19:21
978
原创 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
928
原创 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
745
原创 Linux驱动模块加载和卸载以及设备注册与注销
一、驱动模块的加载和卸载Linux驱动有两种运行方式,第一种就是将驱动编译进Linux内核中,这样当Linux内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux下模块扩展名为.ko),在Linux内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样修改驱动以后只需要编译一下驱动代码即可,不需要编译整个Linux代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动开发
2021-11-18 16:15:55
7541
1
原创 ARM Linux驱动开发简介
一、Linux驱动分类Linux的驱动主要分为三种,分别为字符设备驱动、块设备驱动、网络设备驱动。其中字符设备驱动是最多的一类驱动,因为字符设备最多,从最简单的点灯到I2C、SPI、音频等都属于字符设备驱动的类型。块设备和网络设备驱动要比字符设备驱动复杂。所谓的块设备驱动就是存储器设备的驱动,比如EMMC、NAND、SD卡和U盘等存储设备,因为这些存储设备的特点是以存储块为基础,因此叫做块设备。网络设备驱动就更好理解了,就是网络驱动,不管是有线的还是无线的,都属于网络设备驱动的范畴。一个设备可以属于多种设
2021-11-18 15:26:01
1719
原创 Linux文件系统
一、“/”根目录重要文件夹详解上图中列举出了根目录“/”下面的所有文件夹,这里仔细观察一下,当进入到根目录“/”里面以后终端提示符“ $ ”前面的符号“ ~ ”变成了“ / ”,这是因为当在终端中切换了目录以后“ $ ”前面就会显示切换以后的目录路径。来看一下根目录“ / ”中的一些重要的文件夹:/bin 存储一些二进制可执行命令文件,/usr/bin也存放了一些基于用户的命令文件。/sbin 存储了很多系统命令,/usr/sbin也存储了许多系统命令。/root 超级用户root的根目录文
2021-11-02 11:21:38
169
原创 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
186
原创 Shell常用命令大全
嵌入式开发用的最多就是Shell命令,Shell命令是所有的Linux系统发行版所通用的,并不是说我在Ubuntu下学会了Shell命令,换另外一个Linux发行版操作系统以后就没用了,所以学习Shell命令非常有必要。1、目录信息查看命令文件浏览是最基本的操作了,Shell下文件浏览命令为ls,格式如下: ls [选项] [路径]Is命令主要用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:-a显示所有的文件以及子目录,包括以“”开头的隐藏文件。-l
2021-11-01 20:37:08
28570
3
原创 FreeRTOS任务通知
从FreeRTOSv8.2.0版本开始,FreeRTOS新增了任务通知(Task Notifictions)这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西。使用任务通知的话效率会更高。一、任务通知简介任务通知在FreeRTOS中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS定义为1。FreeRTOS的每个任务都有一个32位的通知值,任务控制块中的成员变量ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某
2021-10-29 09:26:35
4126
3
原创 FreeRTOS内存管理
一、内存管理简介FreeRTOS创建任务、队列、信号量等的时候有两种方法,一种是动态的申请所需的RAM。一种是由用户自行定义所需的RAM,这种方法也叫静态方法,使用静态方法的函数一般以"Static"结尾,比如任务创建函数xTaskCreateStatic(),使用此函数创建任务的时候需要由用户定义任务堆栈。使用动态内存管理的时候FreeRTOS内核在创建任务、队列、信号量的时候会动态的申请RAM。标准C库中的malloc()和free()还是也可以实现动态内存管理,但是如下原因限制了其使用:1、在
2021-10-28 19:09:06
2359
2
原创 FreeRTOS事件标志组
信号量来同步的话任务只能与单个的事件或任务进行同步。有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了。FreeRTOS为此提供了一个可选的解决方法,那就是事件标志组。一、事件标志组简介1、事件位(事件标志)事件位用来表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子:当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置1,当队列中没有消息需要处理的时候就可以将这个位(标志)置0。当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置1,当没有
2021-10-28 15:27:46
1166
原创 FreeRTOS软件定时器
一、软件定时器简介1、软件定时器概述软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,简而言之,当定时器的定时周期到了以后就会执行回调函数。2、回调函数的注意事项软件定时器的回调函数是在定时器服务任务中执行的,所以一定不能在回调函数中调用任何会阻塞任务的API函数!比如,定时器回调函数中千万不能调用vTaskDelay()、vTaskDelayUnti(),还有一些访问队列或者信号量的非零
2021-10-27 21:08:53
5152
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
750
原创 FreeRTOS信号量详解第四讲(全网最全)——互斥信号量
一、互斥信号量简介互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。互斥信号量适合用于那些需要互斥访问的应用中。在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。互斥信号量使用和二值信号量相同的API操作函数,所以互斥信号量也可以设置阻塞时间,不同于二值信号量的是互斥信号量具有优先级继承的特性。当一个互斥信号量正在被一个低优先
2021-10-26 14:36:38
7792
1
原创 FreeRTOS——优先级翻转
一、优先级翻转在使用二值信号量的时候会遇到很常见的一个问题——优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。二、优先级翻转流程图(1)任务H和任务M处于挂起状态,等待某一事件的发生,任务L正在运行。(2)某一时刻任务L想要访问共享资源,
2021-10-25 20:29:13
1923
1
原创 FreeRTOS信号量详解第三讲(全网最全)——计数信号量
一、计数型信号量简介有些资料中也将计数型信号量叫做数值信号量,二值信号量相当于长度为1的队列,那么计数型信号量就是长度大于1的队列。**同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。**计数型信号量通常用于如下两个场合:1、事件计数在这个场合中,每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始
2021-10-25 19:45:45
946
原创 蓝桥杯——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
774
原创 蓝桥杯——质数
【问题描述】我们知道第一个质数是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
531
原创 FreeRTOS信号量详解第二讲(全网最全)——二值信号量
一、二值信号量简介二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问。和队列一样,信号量API函数允许设置一个阻塞时间,阻塞时间是当任务获取信号量的时候由于信号量无效从而导致任务进入阻塞态的最大时钟节拍数。如果多个任务同时阻塞在同一个信号量上的话那么优先级最高的那个任务优先获得信号量,这样当信号量有效的时候高优先级
2021-10-25 14:48:35
6718
4
原创 FreeRTOS信号量详解第一讲(全网最全)——概述
一、信号量信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但有些应用场景是可以互换着使用的。二、信号量简介信号量常常用于控制对共享资源的访问和任务同步。举一个很常见的例子,某个停车场有100个停车位,这100个停车位大家都可以用,对于大家来说这100个停车位就是共享资源。假设现在这个停车场正常运行,你要把车停到这个这个停车场肯定要先看一下现在停了多少车了?还有没有停车位
2021-10-24 21:02:25
1294
原创 蓝桥杯——字串数字
【问题描述】小明用字母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
817
原创 蓝桥杯——立方和
【问题描述】小明对数位中含有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
1665
原创 蓝桥杯——门牌制作
【问题描述】小蓝要为一条街的住户制作门牌号。这条街一共有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<
2021-10-24 17:34:48
1196
原创 FreeRTOS消息队列详解第五讲(全网最全)——队列读取消息
一、消息队列读取消息有消息入队就有出队,出队就是从队列中获取队列项(消息),FreeRTOS中出队函数如下表所示:1、函数xQueueReceive()此函数用于在任务中从队列中读取一条(请求)消息,读取成功以后就会将队列中的这条数据删除,此函数的本质是一个宏,真正执行的函数是xQueueGenericReceive()。此函数在读取消息的时候是采用拷贝方式的,所以用户需要提供一个数组或缓冲区来保存读取到的数据,所读取的数据长度是创建队列的时候所设定的每个队列项目的长度,函数原型如下:BaseTy
2021-10-24 15:59:09
9826
1
原创 FreeRTOS消息队列详解第四讲(全网最全)——队列上锁解锁
一、队列上锁在任务级通用入队函数和中断级通用入队函数的时候都提到了队列的上锁和解锁,队列的上锁API函数为prvLockQueue()。首先来看一下队列上锁函数prvLockQueue(),此函数本质上就是一个宏,定义如下:#define prvLockQueue( pxQueue ) \ taskENTER_CRITICAL(); \ { \ if( ( pxQueue )->cRxLock == queueUNLOCKED )
2021-10-24 15:16:02
2936
3
原创 FreeRTOS消息队列详解第三讲(全网最全)——队列发送消息
一、队列发送消息函数简介创建好队列以后就可以向队列发送消息了,FreeRTOS提供了8个向队列发送消息的API函数。如下表所示:1、函数xQueueSend()、xQueueSendToBack()和xQueueSendToFront()这三个函数都是用于向队列中发送消息的,这三个函数本质都是宏,其中函数xQueueSend()和xQueueSendToBack()是一样的,都是后向入队,即将新的消息插入到队列的后面。函数xQueueSendToToFront()是前向入队,即将新消息插入到队列的前
2021-10-24 14:43:43
16255
2
原创 FreeRTOS消息队列详解第二讲(全网最全)——队列创建
今天主要来讲讲消息队列相关的API。一、队列创建1、函数xQueueCreate()该函数本质上是一个宏,用来动态创建队列,该宏最终调用的是函数xQueueGenericCreate(),函数原型如下:xQueueCreate( uxQueueLength, uxItemSize )参数描述uxQueueLength要创建的队列的队列长度,这里是队列的项目数。uxItemSize队列中每个项目(消息)的长度,单位为字节返回值队列创捷成功以后返回的队列句柄!
2021-10-23 11:14:59
7383
原创 FreeRTOS消息队列详解第一讲(全网最全)——消息队列概述
一、队列简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。 任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列。FreeRTOS中的信号量的也是依据队列实现的!所以有必要深入的了解FreeRTOS的队列。1、数据存储通常队列采用先进先出(FIFO)的存储缓冲机制,
2021-10-22 20:49:13
14523
原创 FreeRTOS内核控制函数介绍
一、内核控制函数预览FreeRTOS中有一些函数只供系统内核使用,用户应用程序一般不允许使用,这些API函数就是系统内核控制函数。在FreeRTOS的官网(https://www.freertos.org)可以查到这些函数。函数描述taskYIELD()任务切换taskENTER_CRITICAL()进入临界区,用于任务中taskEXIT_CRITICAL()退出临界区,用于任务中taskENTER_CRITICAL_FROM_ISR()进入临界区,用于中
2021-10-22 18:41:10
310
原创 FreeRTOS时间片调度
一、FreeRTOS时间片调度概述FreeRTOS支持多个任务同时拥有一个优先级,这些任务的调度就可以使用时间片来进行调度。在FreeRTOS中允许一个任务允许一个时间片(一个时钟节拍的长度)后让出CPU的使用权,让拥有同优先级的下个任务运行。下图展示了运行在同一优先级的执行时间图。其中的task1、task2、task3是同一优先级N就绪的任务。1、任务3正在运行。2、这时一个时钟节拍中断(滴答定时器中断)发生,任务3的时间片用完,但是任务3还没有执行完。3、FreeRTOS将任务切换到任务1
2021-10-22 16:41:54
9141
1
原创 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
7269
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
432
原创 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
388
原创 FreeRTOS创建任务(3)
一、任务挂起和恢复API函数有时候需要暂停某个任务的运行,过一段时间以后在重新运行。这个时候要是使用任务删除和重建的方法的话,那么任务中变量保存的值肯定丢失了!FreeRTOS提供了解决这种问题的方法,那就是任务挂起和恢复,当某个任务要停止运行一段时间的话就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。FreeRTOS的任务挂起和恢复API函数如下表所示:函数描述vTaskSuspend()挂起一个任务vTaskResume()恢复一个任务的运行xTa
2021-10-19 20:53:10
364
原创 求解最大连续子序列和问题———分治法
一、问题描述给定一个有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
11805
4
原创 FreeRTOS创建任务(2)
一、FreeRTOS任务相关API函数1、任务创建和删除API函数FreeRTOS最基本的功能就是任务管理,而任务管理最基本的操作就是创建和删除任务,FreeRTOS的任务创建和删除API函数如下表所示:函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCrearteRestricted()创建一个使用MPU进行限制的任务,相关内存使用动态内存分配vTaskDelete()
2021-10-18 19:50:40
598
基于单片机的温度控制(PID,PWM)Proteus仿真
2023-06-19
基于51单片机的空气质量检测(空气质量、温度、湿度、DHT11)
2023-06-19
基于51单片机的空气检测系统(空气质量、温度、湿度)
2023-06-19
交通灯1(8255,数码管,固定时间)Proteus仿真
2023-06-19
基于51单片机的步进电机控制(12864)
2023-06-19
基于51单片机16X64点阵滚动显示屏设计设计广告牌C语言源程序与仿真
2023-06-19
AT89C51单片机音乐盒(倒计数)
2023-06-19
基于51单片机的直流电机(角度控制、Protues仿真)
2023-06-19
基于51单片机智能大棚温湿度控制系统-2路测量(proteus仿真+源程序+开题报告)
2023-06-19
基于51单片机直流电压电流表设计LCD1602液晶实训仿真
2023-06-19
基于51单片机的冰箱除霜系统(温控,除霜、Proteus仿真)
2023-06-19
RLC测量仪电路方设计(原理图+源码+仿真)
2023-06-19
基于51单片机电子称仿真HX711传感器原理图1602显示proteus电子设计
2023-06-19
基于51单片机的红外遥控器设计proteus仿真(注释全)
2023-06-19
基于51单片机的LCD1602矩阵键盘密码锁(proteus仿真设计)
2023-06-19
基于单片机篮球计时-计分器(proteus仿真+源程序+参考报告)
2023-06-19
基于51单片机的手机键盘(矩阵 Proteus仿真)
2023-06-19
基于51单片机的日历(温度,闹钟)
2023-05-19
基于51单片机的空气检测(源代码 + 原理图)Proteus仿真
2023-05-19
基于stm32的电子时钟万年历温度OLED显示(源码+实物图+硬件连接)
2023-05-19
stm32f103c8t 时钟万年历1602显示(原理图+PCB+源码)
2023-05-19
基于单片机的数字万用表电压电流电阻测量液晶显示(proteus仿真+源程序)
2023-05-19
基于51单片机计数器设计-静态数码管-74ls164扩展芯片(proteus仿真+源程序)
2023-05-19
基于51单片机环境监测控制系统(proteus仿真+源程序+原理图)
2023-05-19
基于51单片机的报警器(厨房温湿度,烟雾,CO,粉尘)Proteus仿真
2023-05-19
单片机PT100温度计/PT100测温/PT100电桥测温/proteus仿真
2023-05-19
基于51单片机的火灾报警(温度PT100,烟雾,数码管)Proteus仿真
2023-05-19
基于51单片机的温度测量显示设计(1602显示DS18B20测温能测量零下温度带报警功能源程序与仿真
2023-05-19
基于51单片机的自动调光灯(光照,超声波距离)Protues仿真
2023-05-19
基于51单片机的正弦波发生器仿真电路图
2023-05-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人