shivency

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  uc/os

摘要:it's this section's map.1、事件控制块(ECB)初始化OS_InitEventList事件初始化代码在操作系统初始化函数OS_Init中被调用,其函数名为OS_InitEventList,定义如下 1 static void OS_InitEventList (void) 2 { 3 #if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) 4 #if (OS_MAX_EVENTS > 1) 5 INT16U i; 6 OS_EVENT *pevent1; 7 OS_EVENT *pevent2; 8 阅读全文
posted @ 2013-12-20 14:55 shivency 阅读(423) 评论(0) 推荐(0)

摘要:1、事件控制块(ECB)任务管理需要任务控制块(TCB),同样,若是管理事件,也需要事件控制块(ECB),其定义于ucos_ii.h中 1 #if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) 2 typedef struct os_event { 3 INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_xxxx) */ 4 void *OSEventPtr; /* Po... 阅读全文
posted @ 2013-12-17 20:32 shivency 阅读(477) 评论(0) 推荐(0)

摘要:1、ucos作为实时多任务的操作系统,是事件驱动的,必然支持如信号量、消息等机制。事件主要包括信号量和互斥信号量,而事件的组合可以用事件标志组来管理。事件管理的基础和操作对象是各种事件管理的数据结构。2、上一张思维导图,作为事件管理学习的map。 阅读全文
posted @ 2013-12-17 19:20 shivency 阅读(520) 评论(0) 推荐(0)

摘要:0、前言这节既然谈到时间管理,便需要一个度量,来衡量系统执行的时间。我们可以用时间片,也可以用现实生活中的分秒。ucos中的时间片的具体设置与硬件环境有关,这里先不进行讨论。然而在多任务情况下,每个时间片(也叫时间中断)都要执行任务的调度,这种调度称为任务级任务调度(上一节已学习了中断级任务调度)。ucos在每个时间片都要进行任务调度。调度的结果或者是返回原来的任务继续执行,或者是因为找到了就绪的更高优先级的任务,而让任务运行。这个时间片可以是10ms或其他值。如果时间太长,高优先级的就绪任务可能等待时间过长,如果时间太短,花费在操作系统调度上的时间就显得过长,系统的吞吐量就变小。有关任务级任 阅读全文
posted @ 2013-09-10 13:11 shivency 阅读(479) 评论(0) 推荐(0)

摘要:由于在任务调度中涉及到时间片这个概念,于是转而先学习下一章,中断管理和时间管理,一共俩小节。1、前言 ucos是实时多任务操作系统,系统的实时性主要体现在对中断的响应上;除了响应时间,ucos要求对中断服务程序(ISR)运行时间不能过长。在之前分析过的任务删除函数中,因为涉及到有关全局变量的操作,函数关掉了中断;而为了避免关中断的时间太长,于是在删除任务的过程中又开了一次中断。 对于不同的硬件系统,ISR的编写时完全不同的,因为这涉及到对底层寄存器的操作,操作系统中提供的中断管理函数位于core.c中。 事实上,任务的调度大多也依靠中断。ISR在发现了有更高优先级的就绪任务就会进行任务调... 阅读全文
posted @ 2013-09-04 10:10 shivency 阅读(383) 评论(0) 推荐(0)

摘要:1、什么是任务的挂起 任务在创建后将从睡眠态转换到就绪态,就绪的任务可以通过调用函数(OSTaskSuspend),剥夺起CPU的使用权,而使其暂时中止运行,转到阻塞状态。这个过程叫做挂起任务。 image:排队排的好好的(这个情景不对- -),突然天降大手将你抓起,高高挂起【有一点不恰当,任务是可以自己挂起自己的】。2、为什么要任务挂起 一个任务如果无事可做,且优先级又高,长期占有CPU,使其他任务得不到运行而“饿死”。这时我们便需要采取“挂起”的策略;当然解决这个问题的方法不止一种,还有任务延时等策略,将会在后面学习到,这里先挖个坑。3、什么是任务的恢复 被挂起的任务不能运行,直到... 阅读全文
posted @ 2013-07-17 12:15 shivency 阅读(2181) 评论(0) 推荐(1)

摘要:1、任务什么时候会被删除? 一开始,任务在操作系统中是以函数代码的形式存在的,在操作系统启动的时候被加载到内存中,并未运行。并且,最开始的时候就绪表和就绪组是空的,或者说里面的内容都是0.很明显,这时候任务在内存中睡眠,处于睡眠态。如果不调用任务创建函数对任务进行操作,该任务将永远处于睡眠态直到操作系统结束运行,被清除出内存。 (好像没有正面回答这个问题……)2、任务创建过程的回顾 任务创建的过程:首先分配一个空闲的TCB给任务,然后对该TCB的各个域进行赋值,对任务的堆栈进行初始化,其中,任务的代码的地址被压入堆栈。这为以后任务的运行做了充分的准备。就绪表和就绪组做了适当的处理,根据任... 阅读全文
posted @ 2013-07-15 12:54 shivency 阅读(679) 评论(0) 推荐(0)

摘要:上回说到,创建操作系统空闲任务的函数OS_InitTaskIdle()中,分别有两个函数OSTaskCreate(),和OSTaskCreateExt(),负责任务的创建。这一节的主角,便是这两个函数。先上一张表只有四个函数待认识。1、OSTaskCreate()源码: 1 #if OS_TASK_CREATE_EN > 0 2 INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio) 3 { 4 OS_STK *psp; 5 INT8U err;... 阅读全文
posted @ 2013-06-17 15:10 shivency 阅读(571) 评论(0) 推荐(0)

摘要:额外的,在网上收录的段子,会不断补充:1、看到一段很有意思的话,来自Eagle的BLOG……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………前一篇中,讲述了在ucos2中定义了一些用于任务管理的变量: *OSTCBCur,*OSTCBFreeList,*OSTCBHighRdy,*OSTCBList,*OSTCBPrioTbl[],OSTCBTbl[]. 如果你足够细心的话可以注意到,在这些变量中唯独OSTCBTbl不是指针,而是一个纯粹的数组.也就是 阅读全文
posted @ 2013-06-14 20:13 shivency 阅读(585) 评论(0) 推荐(0)

摘要:今天涂涂画画的时候发现我没有把一些重要的数据结构先做个说明,挺伤的。等这章写完后一定补上。好了,还是先上流程图。嗯,可以看到OSInit()里调用了很多函数,这里只分析打绿色背景的函数;至于其他的,像 OS_InitEventList(), OS_FlagInit(), OS_MemInit(), OS_QInit(),会在相关章节进行讨论。首先,我们看OSInit( )在哪里出现。 1 #include "includes.h" 2 3 OS_STK AppStartTaskStk[APP_OS_CFG_START_TASK_STK_SIZE]; 4 5 static v 阅读全文
posted @ 2013-06-14 19:47 shivency 阅读(632) 评论(0) 推荐(0)

摘要:(一)既然这的一章是讲关于任务管理,那便需要一些“ID CARD”来识别不同的任务;用术语来说,便是任务控制块,是一种struct,名为OS_TCB。这里引用 engineer一篇博客里的比喻: “任务控制块相当于一个任务的身份证,系统就是通过任务控制块来感知管理任务,没有任务控制块的任务不能被系统承认和管理。ucos把所有任务控制块链接为两条链表,并通过他们管理各个任务”(二)思维导图ps:1、⑥、⑦、⑧中定义类型有两种,INT8U和INT16U;2、在参考书上,任务堆栈,本是有这么一个定义:OS_STK TaskStk[OS_MAX_TASKS][TASK_STK_SIZE]但我的工程里找 阅读全文
posted @ 2013-06-14 18:59 shivency 阅读(798) 评论(0) 推荐(0)

摘要:先上流程图A/B分别代表OS_EXIT_CRITICAL() OS_ENTER_CRITICAL()然后可能会问,最后的 OS_EXIT_CRITICAL(), 为什么会对应A1/A2呢于是,上源码,微长,分段上 1 INT8U OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt) 2 { 3 OS_TCB *ptcb; 4 #if OS_CRITICAL_METHOD == 3 ... 阅读全文
posted @ 2013-06-07 19:51 shivency 阅读(586) 评论(0) 推荐(0)

摘要:(一)首先,明确学习目标第一次学,我想弄清整个系统的框架,或者说执行流程;第二次学,我想能够自己编写代码进行测试。现在的记录是属于第一次“创造”的过程。我的想法是,按书上的顺序,依次记录各个函数,以及对应的数据结构,并通过流程图或者思维导图的方式呈现出来,而尽量不是用语言线性地描述。而后可能会有一些基础的tip,会在这篇文章里统一地描述,不定时地添加。(二) 基础tip1、关于OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()我们会经常在源码里看到这俩货成双成对的出现,如果不介意我更愿意用A和B来指代 OS_ENTER_CRITICAL() ... 阅读全文
posted @ 2013-06-07 19:08 shivency 阅读(214) 评论(0) 推荐(0)

摘要:用思维导图的方式把第二章的函数基本上都列出来了作为接下来的,提纲数据结构加上去太麻烦了,准备单节进行描述 阅读全文
posted @ 2013-06-06 20:07 shivency 阅读(196) 评论(0) 推荐(0)

摘要:开博,记录学习ucos的过程练习的源码来自lyy学长的提供,参考的书籍主要来自卢有亮的《嵌入式实时操作系统——ucos原理与实践》如果文中有引用别的文章,会另加说明。我会尽量以思维导图或者流程图的方式来写博,尽量不用线性的记录。源码附在文章最下面。6.14 添加我写的比较天马行空,爱用图,文字的话喜欢用传送门,而且不怎么系统难免有遗漏,请不吝赐教,定虚心接受7.17 添加回过头要把函数返回的宏再分析写出。要有自己的风格,即写博客的格式,具体表示在字体颜色的标志,博客的结构。 阅读全文
posted @ 2013-06-06 13:19 shivency 阅读(125) 评论(0) 推荐(0)