RTOS
文章平均质量分 94
亦大乐谍
专注于嵌入式Soc和操作系统,坚持原创。
展开
-
实时操作系统的任务睡眠
摘要任务睡眠函数是一个非常有用的操作系统API,几乎每个RTOS都提供了一个类似的API给应用程序调用,在ucosii里,它叫OSTimeDly;在Nucleus里,它叫NU_Sleep;在FreeRTOS里,它叫vTaskDelay。它们的目的都是一样的:告诉操作系统,“我现在没有事情要做,请把CPU分配给其它任务,并在某个时间点把我唤醒”,这个时间点就是函数的入参,一般都是以tick为单位原创 2016-07-20 13:26:29 · 3968 阅读 · 0 评论 -
实时操作系统内核的任务调度点
嵌入式系统软件工程师需要对实时系统的方方面面有足够的理解才能很好的应对各种可能出现的问题,以及新的需求。本文对基于优先级调度的抢占式实时操作系统的任务调度点进行了小结,为什么要知道任务调度的时机呢?楼主目前想到了以下的一些理由:1 加深对于RTOS的理解2 为了做一个任务运行profile的分析工具,即可以看出某时间点之前一段时间内的哪些任务运行了,各自又运行了多长时间3 便于原创 2016-12-06 20:28:15 · 2106 阅读 · 0 评论 -
任务上下文切换新解(MIPS处理器)
在前一篇博文实时操作系统内核的任务调度点里总结了RTOS里的任务调度时机,当操作系统内核决定要运行另一个任务的时候,它将会将当前任务的上下文环境,通常是指CPU寄存器,保存到当期任务的堆栈上,并且恢复新任务的上下文环境使之继续运行,这个过程就称为上下文切换。上面这段话,几乎在每一本讲嵌入式软件的教材、资料里都会有,但是能再讲深一点的却不多。楼主在从事嵌入式行业的前N年里也是一直停留在这句话的认原创 2016-12-30 17:48:56 · 1839 阅读 · 0 评论 -
任务执行函数return后程序会去往何方
1 摘要在有RTOS的嵌入式系统中,应用程序大多采用多任务的方式,创建多个task,每个task做一项独立的工作,任务之间采用消息队列等方式进行通信。通常情况下,每个任务都采用循环等待消息的方式阻塞,当有外部事件到来时(一般都是中断触发),其发送消息到其中的一个task,交由该task进行处理,如果需要的话,该task又会将消息传递给下一个task之后,它自己再次进入阻塞状态。写成伪代码的原创 2016-10-22 20:34:03 · 3195 阅读 · 0 评论 -
实时操作系统的任务调度示例之时间片
摘要本文用几个小实验来清晰的展示时间片轮转调度的运行情况,以及时间片的配置对于应用程序的影响。后面分析了整个过程的软硬件实现原理,最后给出了关于时间片配置的一些建议。在图中,一共有3个用户任务Task1原创 2016-07-18 11:07:35 · 15834 阅读 · 3 评论 -
实时操作系统的忙等延迟实现
摘要在嵌入式系统开发里,经常会遇到要将一个操作“延迟”一段时间执行的情况,我们需要一个好用的delay函数,它至少需要具备两个特点1 精度要够高,可以到10us级别,如果硬件允许的话,当然还要更高2 不能被调度器打断本文基于以上两个需求,实现了一种忙等delay的方法,硬件平台是STM32F103VET6,操作系统是FreeRTOS V7.2.0。LED第一秒点亮,接下来第二秒灭掉,第三秒点亮,第四秒再灭掉,如此周而复原创 2016-07-19 11:10:41 · 3196 阅读 · 0 评论 -
FreeRTOS的任务调度算法优化实现
摘要在前一篇博文实时操作系统的任务睡眠中提到,FreeRTOS在任务调度的流程中,会用一个循环遍历的方法查找最高优先级就绪态任务,这是一个有优化空间的方案。本文先对FreeRTOS的任务调度算法进行分析,接着借鉴了UCOSII系统的两级查表方法,对该流程进行优化,最后用两种方法测试同一测试用例,可以清楚的看到优化的效果。FreeRTOS任务调度算法分析FreeR原创 2016-07-22 21:42:15 · 3009 阅读 · 2 评论 -
实时操作系统的任务调度示例之优先级反转
1 什么是优先级反转?目前市面流行的实时操作系统都是采用可抢占式的基于优先级的调度方式,其保证了处于就绪状态的优先级高的任务可以先于优先级低的任务而执行。但这并不是绝对的,优先级反转是实时系统中的一个经典特例。其大体流程如下:假设系统中有3个task,优先级分别为高、中、低,以task_high,task_middle,task_low代称1) 一开始,task_high,task_m原创 2016-07-12 14:46:34 · 3289 阅读 · 0 评论 -
实时操作系统的任务调度示例之抢占
实时操作系统大多都是基于优先级调度的抢占式的内核,这句话每本关于RTOS的资料都有,楼主最怕这种每个字都认识,但连到一起就很不好理解的书面语言。直白点说,就是:1 每个任务都有自己的优先级,一般都是在create_task的时候以函数入参的形式确定,有的rtos也提供API允许应用程序在task运行起来后,动态修改其优先级(XX_Create_Task,XX_Change_Priority原创 2016-07-09 15:44:33 · 4967 阅读 · 0 评论 -
ucosii实时操作系统的任务调度
摘要嵌入式操作系统的任务调度算法好坏在很大程度上决定了该系统的运行效率,由于其执行的频率极高,所以在任务调度函数的实现上,对于效率的要求可以用苛刻来形容。基于优先级的任务调度总结下来就是做了两件事:1 找到优先级最高的就绪态任务2 切换任务上下文并开始执行该任务第二步的切换上下文对个各个RTOS区别不大,而且是一套“固定动作”,真正有意思的地方是在第一步。本文以ucosii为蓝本,原创 2016-07-14 13:45:42 · 3761 阅读 · 1 评论