
uC/OS III学习
junlianzi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UCOSIII任务调度和任务切换
1、UCOSIII任务调度1.1、可剥夺型任务调度:任务调度就是中止当前正在运行的任务转而去执行其他的任务。UCOSIII是可剥夺型内核,因此当一个高优先级的任务准备就绪,并且此时发生了任务调度,那么这个高优先级的任务就会获得CPU的使用权。UCOSIII中的任务调度是由任务调度器来完成的,任务调度器有2种:任务级调度器和中断级调度器。任务级调度器为函数OSSched()。...原创 2018-12-04 20:15:46 · 3749 阅读 · 0 评论 -
UCOSIII事件标志组和同时等待多个内核对象
1、UCOSIII事件标志组1.1、事件标志组:有时候一个任务需要与多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:“或”同步和“与”同步。“或”同步:等待多个事件时,任何一个事件发生 ,任务都被同步,这个就称为“或”同步。“与”同步:当所有的事件都发生时任务才被同步,这种同步机制被称为“与”同步。在UCOSIII中事件标志组为OS_FLAG_GRP,如...原创 2018-12-16 19:02:59 · 520 阅读 · 0 评论 -
UCOSIII消息传递
1、UCOSIII任务间通信一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息。传递的过程就叫做任务间通信,任务间的消息传递可以通过2种途径:一是通过全局变量,二是通过发布消息。使用全局变量的时候每个任务或者中断服务程序都必须保证其对全局变量的独占访问。消息也可以通过消息队列作为中介发布给任务。消息包含以下几个部分:指向数据的指针,数据的长度和记录消息发布时刻的时间戳,指...原创 2018-12-16 19:00:24 · 559 阅读 · 0 评论 -
UCOSIII信号量与互斥信号量
1.1、信号量简介:信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被锁部分代码的钥匙被再次释放才能继续执行。信号量用于控制对共享资源的保护,但是现在基本用来做任务同步用。要想获取资源的任务必须执行“等待”操作,如果该资源对应的信号量有效值大于1,则任务可以获得该资源,...原创 2018-12-16 18:57:12 · 1077 阅读 · 0 评论 -
UCOSIII软件定时器
1.1、软件定时器简介:定时器本质是递减计数器,当计数器减到零时可以触发某种动作的执行,这个动作通过回调函数来实现。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器,UCOSIII中定时器的时间分辨率由一个宏OS_CFG_TMR_TASK_RATE_HZ,单位为HZ,默认为100Hz。注意!一定要避免在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数...原创 2018-12-16 18:51:42 · 610 阅读 · 0 评论 -
UCOSIII系统内部任务与钩子函数
1.1、空闲任务:空闲任务特点:1、空闲任务是UCOSIII创建的第一个任务。2、空闲任务是UCOSIII必须创建的。3、空闲任务优先级总是为OS_CFG_PRIO_MAK-1。4、空闲任务中不能调用任何可使空闲任务进入等待态的函数!1.2、时钟节拍任务:时钟节拍任务用来跟踪任务延时和任务等待超时,任务函数为OS_TickTask(),是UCOSIII必须创建的一个任务...原创 2018-12-10 20:18:41 · 903 阅读 · 0 评论 -
UCOSIII任务挂起和恢复
1.1、任务的挂起:我们想暂停某个任务,但是又不想删除掉这个任务的时候就可以使用函数OSTaskSuspend()来将这个任务挂起,函数原型如下:void OSTaskSuspend ( OS_TCB *p_tcb,OS_ERR *p_err) 1.2、任务的恢复当我们想要恢复某个被挂起的任务的时候可以调用函数OSTaskResume()...原创 2018-12-10 20:17:09 · 2068 阅读 · 0 评论 -
UCOSIII时间管理
1.1、任务延时:UCOSIII中的任务是一个无限循环并且还是一个抢占式内核,为了使高优先级的任务不至于独占CPU,可以给其他优先级较低任务获取CPU使用权的机会,UCOSIII中除空闲任务外的所有任务必须在合适的位置调用系统提供的延时函数(未必是延时函数,只要能触发任务调度就可以),让当前的任务暂停运行一段时间并进行一个任务切换。延时函数有两种,OSTimeDly()和OSTimeDly...原创 2018-12-15 10:27:37 · 578 阅读 · 0 评论 -
UCOSIII临界段代码保护
临界段代码也叫做临界区,是指那些必须完整连续运行,不可被打断的代码段。当访问这些临界段代码的时候需要对这些临界段代码进行保护。当宏OS_CFG_ISR_POST_DEFERRED_EN为0时,UCOSIII使用关中断的方式来保护临界段代码,当设置为1的时候就会采用给调度器上锁的方式来保护临界段代码。UCOSIII定义了一个进入临界段代码的宏:OS_CRITICAL_ENTER(),定义了两...原创 2018-12-14 22:40:50 · 1636 阅读 · 0 评论 -
UCOSIII任务创建与删除
1.1、写好任务创建所需的优先级,任务堆栈大小,任务控制块并声明任务函数。//任务优先级#define START_TASK_PRIO 3//任务堆栈大小 #define START_STK_SIZE 512//任务控制块OS_TCB StartTaskTCB;//任务堆栈 CPU_STK START_TASK_STK[STAR...原创 2018-12-06 20:27:13 · 1136 阅读 · 0 评论 -
UCOSIII的任务状态
1、休眠态:任务已经在CPU的flash中了,但是还没有交给UCOSIII管理。2、就绪态:系统为任务分配了任务控制块,并且任务已经在就绪表中登记,这时这个任务就具有了运行的条件,此时任务的状态就是就绪态。3、运行态:任务获得CPU的使用权,正在运行。任何时刻只能有一个任务处于运行态。。4、等待态:正在运行的任务需要延时一段时间,或者等待某个事件,这个任务就进入了等待态,此时系统就会把...原创 2018-12-03 20:57:40 · 3110 阅读 · 0 评论 -
UCOSIII编写中断服务函数
1.1、编写中断服务函数:void USART1_IRQHandler(void){ OSIntEnter(); //中断服务程序OSIntExit();} 1.2、进入中断服务函数以后使用函数OSIntEnter()void OSIntEnter (void){ if (OSRunning != OS_STATE_OS_RUNNING) ...原创 2018-12-12 20:58:50 · 2830 阅读 · 0 评论 -
UCOSIII存储管理
1.1、存储管理:作为一个RTOS操作系统,内存管理是必备的功能,因此UCOSIII也有内存管理能力。通常应用程序可以调用ANSI C编译器的malloc()和free()函数来动态的分配和释放内存,但是在嵌入式事实操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片。UCOSIII中提供了一种替代malloc...原创 2018-12-16 19:04:54 · 264 阅读 · 0 评论