RTOS
飞天小荷叶
这个作者很懒,什么都没留下…
展开
-
任务调度器
可剥夺型调度ucosIII有两种不同的处理中断服务程序发布事件的方法:直接发布和延迟发布直接发布图:代码:(红色框的函数:告诉ucosIII进/出中断函数,实质就是开/关中断)延迟发布图二者区别就是:前者进入中断服务函数后关掉了中断,执行完相应的操作后再开中断,后者是进入中断后释放信号量,触发相应事件执行,就不需要关中断了。调度点下列调度点,会自行启动调度器任务释放信号量给另一个任务或者向另外一个任务发消息任务调用延时函数任务等待事件而事件还没发生任务取消等待创建任务原创 2020-08-08 17:27:12 · 859 阅读 · 0 评论 -
ucosIII任务就绪表
优先级最高优先级:优先级0,分配给优先级服务管理线任务最低优先级:OS_CFG_PRIO_MAX-1,这个优先级分配给了空闲任务,其他任务不能拥有该优先级就绪优先级位映射表:顺序由左到右,若优先级下有任务就绪,那么就绪优先级位映射表对应优先级的位置就会置1就绪任务列表就绪任务列表:某一个优先级的就绪任务被放入的列表。就绪任务列表包括OS_CFG_PRIO_MAX的数组,数组的成员有Enteries、TailPtr、HeadPtr(Enteries:列表中就绪任务的数量;HeadPtr:指向原创 2020-08-05 16:07:19 · 529 阅读 · 0 评论 -
ucosIII任务管理(三)
系统内部任务系统有5个内部任务,空闲任务、时钟节拍任务、统计任务、定时任务、中断服务管理任务,前两个任务是初始化系统时必须创建的,后三个根据需求创建。空闲线程:优先级是最低的,只有当系统内没有就绪线程时,才运行空闲线程。空闲线程也是一个无限循环的,当系统无就绪线程时就会一直执行空闲线程,直到有就绪线程,才执行就绪线程。空闲线程并不是什么也不做,空闲线程有两个计数器不断递增,OSIdleTaskCtr和OSSartTaskCtr,都是用来计算CPU的利用率,后者与统计任务有关。时钟节拍线程:优先级比用原创 2020-08-04 15:42:55 · 269 阅读 · 1 评论 -
ucosIII任务管理(二)
任务管理的内部原理5种基本任务状态休眠态:任务已经写入代码空间中,但是不受ucosIII管理。调用OSTaskCreate()函数创建任务后,该任务就受ucosIII管理。当不再需要用ucosIII管理某个任务时,调用OSTaskDel()函数删除任务。OSTaskDel()函数,并非删除任务代码,只是该任务不能获得CPU的使用权就绪态:任务准备运行时就会进入就绪态。通过任务就绪表记录就绪态任务,就绪表根据就绪态任务的优先级排序。调用OSTaskCreate()函数创建任务后,任务就进入就绪态原创 2020-07-30 23:38:19 · 248 阅读 · 1 评论 -
ucosIII任务管理(一)
任务线程和任务其实是一样的,只是名字不同。任务有点像C函数,但是不一样。任务一般是死循环,而且没有返回值。在任务当中可调用函数。当任务开始运行时,系统会给任务传递一个参数 p_arg,这个参数是void型指针。这个指针是一个通用型指针,可以向任务传递变量地址、数据结构、函数入口等等。有了这个指针就可以创建一些代码完全相同的任务,这些任务仅是参数不同(也就是说,这个任务是通用的)任务分为两种类型:运行至完成:就是这个任务执行的次数有限,执行完成后就会自动挂起;在ucosIII中,这样的任务运行完成后原创 2020-07-29 21:43:08 · 369 阅读 · 1 评论 -
ucosIII临界段代码
临界段:临界段并不是一片区域,而是一段时间临界段代码:一段完整的程序必须连续运行,不能被打断的代码中断处理函数和任务都会访问的临界段代码,需要用关中断的方式加以保护只有任务访问的临界段代码,一般用给调度器上锁的方式加以保护关于临界段的宏定义OS_CFG_ISR_POST_DEFERRED_EN 设置为0,使用关中断方法保护临界段代码;若设置为1,使用给调度器上锁的方法保护临界段代码OS_CRITICAL_ENTER() 代表进入临界段代码OS_CRITICAL_EXIT()/OS_.原创 2020-07-25 17:09:10 · 1762 阅读 · 7 评论 -
移植RTT到STM32
移植RTT到STM32:准备一个工程包括LED驱动和串口驱动1.首先到KEIL官网下载RTT软件包2.把软件包的文件放在你准备的工程里面3.打开工程,新建组,并把对应的文件添加进去4.添加libcpu的时候,我用的是M4和MDK编译器,添加以下两个文件即可5.添加路径6.编译会发现有错误7.rtconfig.h文件中去掉#include “RTE_Components.h”...原创 2019-10-20 17:25:58 · 1276 阅读 · 0 评论 -
ucosIII启动流程
启动流程ucosiii是直接从main函数开始运行的1、要调用BSP函数关闭所有中断2、初始化ucosIII,会初始化内部变量和数据结构,创建2-5个线程,至少创建2个线程。一个是空闲线程,当其他线程不就绪时就运行空闲线程;另一个是时钟节拍线程,负责时间管理3、然后用户就可以创建线程4、启动线程ucosIII创建线程时,需要用户创建线程控制块,静态分配线程栈的空间,如果要想动态分配内存就要使用malloc分配堆中的内存。线程函数:也就是在这个线程里需要做什么,一般要写成死循环。在进去循环之前原创 2020-07-23 20:39:50 · 624 阅读 · 4 评论 -
ucosIII概述
概述实时操作系统分为:硬实时操作系统和软实时操作系统硬实时操作系统:超过了规定时间后,得到正确结果,是不能容忍的,会对整个程序造成影响软实时操作系统:对于超过了规定时间后,得到正确结果这一举措是可以容忍的前后台结构系统后台:线程前台:中断服务程序实时内核在设计实时系统时,可以把系统功能划分为多个任务,每个任务只实施单一的功能,任务一般都是是循环。当任务在执行时,可以说这个任务在独占CPU的资源。实时内核,做的事情就是什么时候运行哪个任务,什么时候让任务挂起。当多个任务间的切换就造成原创 2020-07-22 20:13:58 · 2524 阅读 · 2 评论