UCOSIII_多任务创建(二)

UCOSIII_多任务创建(二),第1张

任务调度和切换就是让就绪表中优先级最高的任务获得CPU使用权,UCOSIII是抢占式的,高优先级任务可以抢了低优先级任务的CPU使用权,任务调度由任务调度器完成,任务调度器分为:任务级,中断级调度器

1.任务级调度器:OSSched(),不能用于中断服务函数

函数里有一个函数OS_TASK_SW(),这个是真正执行任务切换的宏,它把当前任务的CPU寄存器值保存在任务堆栈中,保存完当前任务的现场后将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新任务结束后还要把CPU寄存器值变回旧任务的。

2.中断级调度器:OSIntEnter(),OSIntExit(),调用此函数时中断应该是关闭的

函数里有一个函数OSIntCtxSW(),这个是真正执行任务切换的宏,进入中断时硬件自动保存现场了,将新任务的OS_TCB中保存的任务堆栈指针的值加载到CPU的堆栈指针寄存器中,新中断结束后自动恢复现场。

3.时间片轮转调度:UCOSIII支持一个优先级下有多个任务,不过允许一个任务运行一段时间(时间片)后让出CPU使用权,让同优先级下的洗一个任务运行,这种任务调度方法就是时间片轮转调度。如果同级下第一个任务设置的时间片用完则第一个任务排到链表尾,等待下一次调度。使用OSSchedRoundRobinYield()可以放弃剩余的时间片,在同级下其它任务运行。

通常创建多个任务,可以先在main函数中设置一个任务,然后在这个任务里创建多个任务.

每个任务都有自己的任务函数。

1、ucos ii是原来只有0~63个优先级,而且优先级不能重复,ucos iii允许几个任务使用同一个优先级,在同一个优先级里面,支持时间片调度法;

2、ucos iii允许用户在程序运行中动态配置实时 *** 作系统内核资源,比如,任务、任务栈、信号量、事件标志组、消息队列、消息数、互斥型信号量、存储块划分和定时器,可以在程序运行中变更。这样,用户可以避免在程序编译过程中出现资源不够分配的问题。在资源复用上,也做了一些改进。

3、μC/OS-II中,最多任务数有64个,到了版本2.82以后是256个,μC/OS-III中,用户可以由任意多的任务、任意多的信号量、互斥型信号量、事件标志、消息列表、定时器和任意分配的存储块容量,仅受限于用户CPU可以使用的RAM量。

:stm32f103zet6 flash:内置512K(大容量) sram:内置64K+外部512K 启动文件:startup_stm32f10x_hd.c 链接脚本:stm32f10x_flash_extsram.ld 1、没用ucos iii之前是可以正常运行的, 2、用了ucos iii之后不能正常运行, ucosiii是能在KEIL U


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11647619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存