UCOSIII实时操作系统
文章平均质量分 62
记录学习UCOSIII系统的点滴,包括了系统工程的建立、逻辑系统和多任务系统
熊孩纸的世界你不懂
学贵有恒
展开
-
UCOSIII存储管理
作为一个操作系统,内存管理是必不可少的一部分。在UCOSIII中也有内存管理模块,使用内存管理模块可以动态的分配和释放内存,这样可以高效的使用“昂贵”的内存资源。1 存管理简介内存管理是一个操作系统必备的系统模块,我们在用VC++或者Visual Studio学习C语言的时候会使用malloc()和free()这两个函数来申请和释放内存。我们在使用Keil MDK编写STM32程序的时候可以使用malloc()和free(),但是这样的操作会将原来大块内存逐渐分割成很多个小块内存,参数大量的内存碎片原创 2022-05-03 15:27:19 · 907 阅读 · 0 评论 -
UCOSIII同时等待多个内核对象
同时等待多个内核对象UCOSIII中一个任务可以同时等待任意数量的信息量或者消息队列,当只要等到其中的任意一个的时候就会导致该任务进入就绪态,如下图:在图中任务通过调用函数OSPendMulti()来等待多个内核对象,我们可以设置一个等待超时值,如果在指定的时间内没有一个内核对象被分布,那么将返回一个错误码,表示等待超时。OSPendMulti()函数函数OSPendMulti()用来等待多个内核对象,调用OSPendMulti()时,如果这些对象中有多个可用,则所有可用的信号量和消原创 2022-04-29 11:44:29 · 196 阅读 · 0 评论 -
UCOSIII事件标志组
任务之间的同步,一个是通过信号量,另一种就是通过事件标志组。事件标志组用来解决一个任务和多个事件之间的同步。一、事件标志组有时候一个任务可能需要和多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:“或”同步和“与”同步,当任何一个事件发生,任务都被同步的同步机制是“或”同步;需要所有的事件都发生任务才会被同步的同步机制是“与”同步,这两种同步机制如下图:在UCOSIII中事件标志组是OS_FLAG_GRP,在os.h文件中有定义,事件标志组中也包含了一串任务原创 2022-04-28 17:24:08 · 432 阅读 · 0 评论 -
UCOSIII消息传递
消息队列创建消息队列等待消息队列向消息队列发送消息任务内建消息队列等待任务内建消息发送任务内建消息原创 2022-04-08 18:14:36 · 695 阅读 · 0 评论 -
信号量和互斥信号量
信号量用来控制任务存取共享资源,实现任务间的同步以及任务和ISR(中断)间同步。在可剥夺内核中,当任务独占式使用共享资源的时候,会出现低优先级的任务先于高优先级任务运行的现象,这个现象被成武优先级反转,为了解决优先级反转这个问题,UCOSIII引入互斥信号量。信号量优先级反转互斥信号量...原创 2022-03-29 16:24:30 · 1154 阅读 · 0 评论 -
UCOSIII软件定时器
定时器工作模式创建一个定时器OSTmrCreate()函数:void OSTmrCreate(OS_TMR *p_tmr, CPU_CHAR *p_name, OS_TICK dly, OS_TICK period,原创 2022-03-28 15:20:52 · 201 阅读 · 0 评论 -
UCOSIII中断和时间管理
中断管理UCOSIII中断处理过程UCOSIII是支持中断嵌套的,即高优先级的中断可以打断低优先级的中断,在UCOSIII中使用OSIntNestingCtr来记录中断嵌套次数,最大支持250级的中断嵌套,每进入一次中断服务函数OSIntNestingCtr就会加1,当退出中断服务函数的时候OSIntNestingCtr就会减1。中断服务函数:void XXX_Handler(void){ OSIntEnter(); //进入中断 //用户自行编写的中断原创 2022-03-18 19:28:44 · 1244 阅读 · 0 评论 -
UCOSIII系统内部任务
空闲任务.这个空闲任务OS_IdleTask()永远设为最低优先级,即OS_LOWEST_PRI0。空闲任务OS_IdleTask()什么也不做,只是在不停地给一个32位的名叫OSIdleTaskCtr的计数器加1,来判断CPU执行应用任务的繁忙程度。时钟节拍任务时钟节拍任务是UCOSIII必须创建的,同样不需要我们手工创建,在OSInit()函数的调用中就包含了OS_TickTaskInit()函数的创建。时钟节拍任务的任务优先级为OSCfg_TickTaskPrio,时钟节拍任务的优原创 2022-03-15 21:20:31 · 699 阅读 · 0 评论 -
MemManage_Handler mulitiply defined 重定义
MemManage_Handler multiply defined重定义原创 2022-03-15 12:03:12 · 268 阅读 · 0 评论 -
UCOSIII 任务相关API函数的使用
UCOSIII的简介 UCOSIII的主要特性:可剥夺多任务管理、同优先级任务的时间片轮转调度、极短的关中断时间、任务数目不受限制、优先级数量不受限制、内核对象数目不受限制、软件定时器、同时等待多个内核对象、直接向任务发送信号、直接向任务发送消息、任务寄存器、任务级时钟节拍处理、防止死锁和时间锁。 移植前的准备工作 准备基础工程:在库函数版本跑马灯实验的基础上完成,基础工程为跑马灯实验,参考:用于UCOSIII系统移植到STM32F767中的基础工程-OS文档类资源-CSDN下...原创 2022-03-14 15:19:09 · 1165 阅读 · 0 评论 -
UCOSIII任务管理
对UCOSIII系统的任务管理包括了任务的创建、任务挂起、任务的删除以及任务的调度等。UCOSIII的启动和初始化最先肯定是调用OSInit()初始化UCOSIII。 创建任务,一般我们在main()函数中只创建一个start_task任务,其他任务都在start_task任务中创建,在调用OSTaskCreate()函数创建任务的时候一定要调用OS_CRITICAL_ENTER()函数进入临界区,任务创建完以后调用OS_CRITICAL_EXIT()函数退出临界区。 最后调用OSStart()原创 2022-03-12 16:34:49 · 6186 阅读 · 0 评论 -
UCOSIII的文件组成
原创 2022-03-04 20:23:44 · 177 阅读 · 0 评论 -
UCOS-III系统的移植(STM32)
1、获取STM32的裸机模板2、下载UCOS-III源码3、UCOS-III源码文件简介4、移植至STM32工程5、按需配置工程6、修改app.c原创 2022-03-03 10:49:10 · 3060 阅读 · 0 评论 -
裸机系统与多任务系统(UCOSIII)
裸机系统包括了轮询系统和前后台系统:轮询系统:轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序 在一个死循环里面不断循环,顺序地做各种事情,通常只适用于那些只需 要顺序执行代码且不需要外部事件来驱动的就能完成的事情前后台系统:相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件 的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这 里我们称为前台,main()函数里面的无限循环我们称为后台。多任务系统:相比前后台系统,多任务系统的事件响应也是在中断中完原创 2022-02-26 15:58:54 · 544 阅读 · 0 评论