
RTOS
csshuke
这个作者很懒,什么都没留下…
展开
-
uC/OS II--与ECB操作相关的四个函数
对ECB的操作一般包括: * 初始化一个事件控制块 (void OS_EventWaitListInit (OS_EVENT *pevent)) * 使一个任务进入就绪态 (INT8U OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)) * 使一个转载 2014-11-16 15:13:29 · 602 阅读 · 0 评论 -
实时操作系统概述
一 实时操作系统概述1 操作系统概述在计算机技术发展的初期阶段,计算机系统中没有操作系统(Operating System)这个概念。应用程序开发人员都要对处理器和硬件进行彻头彻尾的控制。实际上,第一个操作系统的诞生,就是为了提供一个虚拟的硬件平台,以方便程序员开发,同时提高计算机的资源利用率。为实现这个目标,操作系统只需提供一些较为松散的函数、例程――就好象现在的软件库一样――转载 2015-06-23 17:53:50 · 1887 阅读 · 0 评论 -
uCos的内存管理
作为一个操作系统内核,必须有向用户提供申请和释放内存的服务,uCos作为一个实时操作系统也不例外。内存的动态申请和释放在嵌入式编程中经常用到,比如我们需要给另外一个任务发送一个消息,我们就可以在发送消息前,申请(OSMemGet )一个内存块,然后把这个内存块作为消息发送出去(OSQPost ),消息被处理完后,内存块释放(OSMemPut)掉,但如果不用内存块来存放消息内容,比如用一个全转载 2015-06-01 17:45:22 · 470 阅读 · 0 评论 -
启动ucosii之OSInit()
第一步: OSInit();//初始化uCOS_II.该函数位于OS_CORE.C,主要工作:函数原型位于OS_CORE.COS_InitMisc(); /* 基础参数初始化 Initialize miscellaneous(混杂的,各种各样的) variables */OS_InitRdyList(); /* 初始化任务就绪表 Initialize the Ready List *转载 2015-06-04 11:16:33 · 496 阅读 · 0 评论 -
启动之OS_CPU_C
任务堆栈结构的初始化在uC/OS-II中,任务是一个无限循环,任务之间也不会互相调用,但是uC/OS-II总是执行优先级最高的任务,假定当前有一个更高优先级的任务进入就绪状态,为了保证原来低优先级任务的完整性,uC/OS-II为每个任务建立了任务堆栈,就相当于函数调用时保存返回地址和参数一样,用来保存当前任务的状态,保证任务切换能和函数调用一样正确.只不过函数调用时函数堆栈的操作过程是编译转载 2015-06-04 16:27:55 · 466 阅读 · 0 评论 -
临界区问题的产生
临界区问题是嵌入式软件编程一个不得不面对的关键性问题。特别对于底层驱动,代码在内存中只有一份,上层的多任务或者多进程,都会对同一个驱动去访问,这样不可避免的遇到了任务之间打架的问题,处理好这个问题是区分一个菜鸟和老鸟的根本性关键之一。接下来谈谈临界区产生的原因:假设有以下代码:[cpp] view plaincopyint x;转载 2015-09-05 10:03:40 · 602 阅读 · 0 评论 -
前后台系统的精髓
有个产品负责把RS485上的通讯转到电力线(PLC)上。这样这个产品主要由两个任务组成:PLC通讯及485通讯。第一个工程师在裸机上实现了功能!因为当时项目忙,没空检查其程序。(唉,现在想起来,公司对软件项目没有一套成熟的管理制度,导致那时项目管理非常吃力!)因为公司待遇低,第一个工程师走了。项目转给第二个工程师时,工程师报告说两个通讯老有冲突:忙485时,忙不了PLC。 一检查:转载 2015-09-05 10:00:01 · 1692 阅读 · 1 评论 -
ucos中的三种临界区管理机制
熟悉ucos,或者读过Jean.J.Labrosse写过的ucos书籍的人,一定会知道ucos中著名的临界去管理宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。同样是通过关中断来保护临界区,OS_ENTER_CRITICAL/OS_EXIT_CRITICAL一共实现了三种实现方式,如下所示:[cpp] view plaincop转载 2015-09-06 10:17:30 · 428 阅读 · 0 评论 -
中断和异常
中断信号的作用.使CPU转而去运行正常控制流之外的代码.为了它.就要在内核态堆栈保存程序计数器的当前值(eip和cs寄存器).并把与中断类型相关的一个地址放在程序计数器.中断处理与进程切换的差异:由中断或异常处理程序执行的代码不是一个进程,而是内核控制路径.代表中断发生时正在运行的进程执行.其比进程"轻".中断和异常中断:可屏蔽中断(maskable): I/O设备转载 2015-09-08 11:14:15 · 492 阅读 · 0 评论 -
什么是真正的实时操作系统
做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现优快云上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platform team封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新转载 2015-09-15 10:55:51 · 416 阅读 · 0 评论 -
UCOS中断函数的编写
在以uC/OS为操作系统的项目中,系统可能要处理各种不同的中断请求,如果某个中断处理程序需要调用uC/OS的各种Post函数向任务发出消息,那么uC/OS建议中断服务程序的写法是:1、保存全部CPU寄存器2、调用OSIntEnter或OSIntNesting直接加13、执行用户代码做中断服务4、调用OSIntExit5、恢复所有CPU寄存器6、执行中断返回指令暂转载 2015-09-16 22:00:42 · 896 阅读 · 0 评论 -
uCOS中任务调度时的上下文切换
uCOS中任务调度时的上下文切换这里以STM32处理器为例,也就是Cortex-M3内核。所谓的上下文切换呢,就是当 uC/OS转向执行另一个任务的时候,它保存了当前任务的CPU 寄存器到堆栈。并从新任务的的堆栈中 CPU 寄存器载入 CPU。在这里上下文切换分为两种:一个是任务级的,一个是中断级的。(1) 开始执行切换,保存状态寄存器和程序指针寄存转载 2015-05-13 20:52:51 · 2200 阅读 · 0 评论 -
任务调度与上下文切换时间测试
创建两个进程(实时进程)并在它们之间传送一个令牌,如此往返传送一定的次数。其中一个进程在读取令牌时就会引起阻塞。另一个进程发送令牌后等待其返回时也处于阻塞状态。发送令牌带来的开销与上下文切换带来的开销相比,可以忽略不计(经测试,一次管道传递约用时3ns左右)。 (利用管道传递令牌) 方法一:使用gettimeofday()[cpp] view plaincopy转载 2015-05-13 20:40:04 · 1281 阅读 · 0 评论 -
关于中断的一点点认识
前一段时间,有幸和都江堰操作的作者面对面的聊了一把。对于前辈的技术和才能,晚辈深深地佩服。DJY_OS在应用方面的事件机制以及处理中断的方法都让人眼前一亮。在谈到中断时,前辈说,很多人都没有真正的理解中断。于是我就请教了前辈。他说: “http://www.djyos.com/bbs/forum.php?mod=viewthread&tid=6082&extra=page%3D11、 中转载 2015-05-05 19:40:39 · 855 阅读 · 0 评论 -
实时操作系统主流调度方法RMS
操作系统的调度方法有很多种,这里主要介绍主流的调度算法,像EDF这种调度算法就不表述了。目前几乎所有的商业实时操作系统的调度理论都基于RMS理论.以下是基于RMS的一些假设理论:1 各个任务之间没有资源共享,没有忙等,没有mutex, 也没有semaphore.2 每个任务的最后期限是周期性的。3 基于优先级抢占的,即高优先级任务一旦就绪的话,会立马抢占低优先级任务转载 2015-01-15 16:26:02 · 798 阅读 · 0 评论 -
几种嵌入式RTOS的分析与比较
几种嵌入式RTOS的分析与比较http://tech.ddvip.com 2008年07月10日 社区交流Sailor_forever sailing_9806@163.com 整理 转载请注明http://blog.youkuaiyun.com/sailor_8318/archive/2009/03/21/4009911.aspx 【摘要】本文介绍4种嵌入式实时操作系统VxW转载 2015-01-18 22:34:50 · 2321 阅读 · 0 评论 -
uCos的内存管理
作为一个操作系统内核,必须有向用户提供申请和释放内存的服务,uCos作为一个实时操作系统也不例外。内存的动态申请和释放在嵌入式编程中经常用到,比如我们需要给另外一个任务发送一个消息,我们就可以在发送消息前,申请(OSMemGet )一个内存块,然后把这个内存块作为消息发送出去(OSQPost ),消息被处理完后,内存块释放(OSMemPut)掉,但如果不用内存块来存放消息内容,比如用一个全转载 2014-12-14 16:28:58 · 687 阅读 · 0 评论 -
uCos的内存管理
作为一个操作系统内核,必须有向用户提供申请和释放内存的服务,uCos作为一个实时操作系统也不例外。内存的动态申请和释放在嵌入式编程中经常用到,比如我们需要给另外一个任务发送一个消息,我们就可以在发送消息前,申请(OSMemGet )一个内存块,然后把这个内存块作为消息发送出去(OSQPost ),消息被处理完后,内存块释放(OSMemPut)掉,但如果不用内存块来存放消息内容,比如用一个全转载 2014-12-14 16:28:02 · 551 阅读 · 0 评论 -
静态、动态内存分配比较
首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐。动态分配内存与静态分配内存的区别:1) 静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源;2) 静态内存分配是在栈上分配的,动态内存是堆上分配的;3) 动态内存分配需要指针或引用数据转载 2015-01-18 22:12:54 · 598 阅读 · 0 评论 -
MMU探索之旅
现在有很多关于MMU的讲解材料,大都比较晦涩难懂,参考了一些相关材料后,在这里用简明易懂的语言整理一下,以备后用。 在讲解MMU之前,先看看我们需要对MMU了解哪些方面: (1)MMU的产生 (2)MMU的概述 (3)MMU的功能和原理 (4)MMU使用的相关软硬件支持 这里只是对MMU做一个较为概括的讲述,内部的具体实现得转载 2015-01-24 16:39:48 · 675 阅读 · 0 评论 -
真正的实时操作系统
做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现优快云上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platform team封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新转载 2015-03-19 14:55:55 · 1461 阅读 · 0 评论 -
一种嵌入式系统的内存分配方案
1 嵌入式系统中对内存分配的要求①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。②可靠性。也就是内存分配的请转载 2015-03-20 09:48:04 · 1843 阅读 · 0 评论 -
优先级反转和解决方法
优先级反转的描述:假设任务1,任务2,任务3;他们的优先级顺序分别为1 > 2 > 3。有一个稀缺资源S,S由一个信号量控制为互斥访问。任务3正在执行,并申请到了资源S;任务1抢占了任务3的执行,任务3挂起,任务1执行;任务1申请资源S,发现被占用,所以挂起,任务3恢复执行;任务2抢占了任务3的执行,任务3挂起,任务2执行;任务2执行完毕,任务3恢复;任务3释放资源S,任务1抢占资转载 2015-04-02 12:41:08 · 631 阅读 · 0 评论 -
OSTimeTick()函数解析
ucos V2.52OSTimeTick()函数解析调用处:os_cpu_a.asm里_OSTickISR函数所有源文件:os_core.c代码:void OSTimeTick (void){#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status regist转载 2015-04-19 12:51:13 · 1847 阅读 · 0 评论 -
浅析μC/OS-II OSTimeDly()函数和OSTimeTick()函数工作原理
浅析μC/OS-II v2.85内核OSTimeDly()函数工作原理文章来源:http://gliethttp.cublog.cn[转载请声明出处]//----------------------------------------------------------------------//1.OSTimeDly()函数void OSTimeDly (INT16U转载 2015-10-13 10:51:29 · 1832 阅读 · 0 评论