自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (1)
  • 收藏
  • 关注

原创 FreeRTOS的任务调度算法优化实现

摘要在前一篇博文实时操作系统的任务睡眠中提到,FreeRTOS在任务调度的流程中,会用一个循环遍历的方法查找最高优先级就绪态任务,这是一个有优化空间的方案。本文先对FreeRTOS的任务调度算法进行分析,接着借鉴了UCOSII系统的两级查表方法,对该流程进行优化,最后用两种方法测试同一测试用例,可以清楚的看到优化的效果。FreeRTOS任务调度算法分析FreeR

2016-07-22 21:42:15 3006 2

原创 实时操作系统的任务睡眠

摘要任务睡眠函数是一个非常有用的操作系统API,几乎每个RTOS都提供了一个类似的API给应用程序调用,在ucosii里,它叫OSTimeDly;在Nucleus里,它叫NU_Sleep;在FreeRTOS里,它叫vTaskDelay。它们的目的都是一样的:告诉操作系统,“我现在没有事情要做,请把CPU分配给其它任务,并在某个时间点把我唤醒”,这个时间点就是函数的入参,一般都是以tick为单位

2016-07-20 13:26:29 3959

原创 实时操作系统的忙等延迟实现

摘要在嵌入式系统开发里,经常会遇到要将一个操作“延迟”一段时间执行的情况,我们需要一个好用的delay函数,它至少需要具备两个特点1 精度要够高,可以到10us级别,如果硬件允许的话,当然还要更高2 不能被调度器打断本文基于以上两个需求,实现了一种忙等delay的方法,硬件平台是STM32F103VET6,操作系统是FreeRTOS V7.2.0。LED第一秒点亮,接下来第二秒灭掉,第三秒点亮,第四秒再灭掉,如此周而复

2016-07-19 11:10:41 3192

原创 实时操作系统的任务调度示例之时间片

摘要本文用几个小实验来清晰的展示时间片轮转调度的运行情况,以及时间片的配置对于应用程序的影响。后面分析了整个过程的软硬件实现原理,最后给出了关于时间片配置的一些建议。在图中,一共有3个用户任务Task1

2016-07-18 11:07:35 15822 3

原创 程序被调试器断住以后的故事

摘要在Linux和Windows系统上开发应用程序的过程中,经常会使用到调试器来进行软件的调试。使用调试器最常见的办法就是“打断点”和“单步跟”。在这简单的两个步骤中,其实有很多细节是容易被忽略的,本文关注其中下面两个问题:1 大家都知道线程是操作系统的调度执行单位,进程是线程的载体。那么当程序运行到调试断点处停下来的时候,是整个进程都停止运行,还是只有当前执行的线程停止,其它线程还在照常

2016-07-15 10:26:29 875

原创 ucosii实时操作系统的任务调度

摘要嵌入式操作系统的任务调度算法好坏在很大程度上决定了该系统的运行效率,由于其执行的频率极高,所以在任务调度函数的实现上,对于效率的要求可以用苛刻来形容。基于优先级的任务调度总结下来就是做了两件事:1 找到优先级最高的就绪态任务2 切换任务上下文并开始执行该任务第二步的切换上下文对个各个RTOS区别不大,而且是一套“固定动作”,真正有意思的地方是在第一步。本文以ucosii为蓝本,

2016-07-14 13:45:42 3756 1

原创 固定大小块的内存池设计

摘要在一些场景下,应用需要频繁的申请和释放一个或多个大小相同的内存(例如传输固定大小的数据块),这时候如果调用的是普通的malloc和free函数,效率就相对较低,且分配和释放的次数多,会容易导致内存碎片,增加系统对堆内存管理的负担。针对这一需求,Nucleus提供了一种非常高效的内存池方案,称为partition memory。它可以快速的提供给用户固定大小的内存,也避免了内存碎片的问题

2016-07-13 13:59:23 1431

原创 实时操作系统的任务调度示例之优先级反转

1 什么是优先级反转?目前市面流行的实时操作系统都是采用可抢占式的基于优先级的调度方式,其保证了处于就绪状态的优先级高的任务可以先于优先级低的任务而执行。但这并不是绝对的,优先级反转是实时系统中的一个经典特例。其大体流程如下:假设系统中有3个task,优先级分别为高、中、低,以task_high,task_middle,task_low代称1) 一开始,task_high,task_m

2016-07-12 14:46:34 3286

原创 实时操作系统的任务调度示例之抢占

实时操作系统大多都是基于优先级调度的抢占式的内核,这句话每本关于RTOS的资料都有,楼主最怕这种每个字都认识,但连到一起就很不好理解的书面语言。直白点说,就是:1 每个任务都有自己的优先级,一般都是在create_task的时候以函数入参的形式确定,有的rtos也提供API允许应用程序在task运行起来后,动态修改其优先级(XX_Create_Task,XX_Change_Priority

2016-07-09 15:44:33 4961

原创 高效软件定时器的设计

软件定时器在协议栈等很多场景都有广泛的应用,有时候会有大量的定时器同时处于工作状态,需要管理,它们的超时时间各异,要高效的保证每个定时器都能够较为准确的超时并执行到其回调函数并不是一件易事。本文分析嵌入式实时操作系统Nucleus的定时器方案,它巧妙的管理了一条按照相对时间来排序的双向链表,避免每次tick中断都要遍历链表检查超时和更新剩余时间,实现了一种相当高效的软件定时器。

2016-07-08 11:08:52 4997 3

一键拷贝小工具

点击按钮即可将编辑框里的命令拷贝到剪贴板里,在做重复性性的脚本复制时节省一点时间

2016-08-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除