一步一步学习ucos II
文章平均质量分 56
h32dong809
这个作者很懒,什么都没留下…
展开
-
Ucos II 移植之二
<br /> Ucos II 移植之二<br /> 我们已经知道移植UCos II,是需要修改三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。<br />下面以移植到lPC2292上为例,理解下移植过程。<br />(1).首先看OS_CPU.H这个文件<br /> 下图是我项目中的OS_CPU.H文件,可以看到,它包括两部分的代码,第一部分是定义与编译器无关的数据类型,第二部分是与ARM7体系结构相关的定义。<br />原创 2011-01-06 11:56:00 · 6857 阅读 · 3 评论 -
ucos II 内核学习之三:任务调度
ucos II 内核学习之一 :任务调度 学校的教学方式多是先让你学原理,再应用它。Muc21则不喜欢这种方式,依然记得在学校枯燥无味地学一大堆理论,更郁闷的是不知道是应用在什么地方。 Mcu21喜欢先学会用它了,然后再去了解它的原理。对ucos II也一样,当我用过之后,再去看它的内核,或许理解起来会更容易。 实现任务切换,需要调用函数OSSched()。 程序代码如下原创 2011-12-18 22:05:35 · 6324 阅读 · 1 评论 -
ucos II 内核学习之六:ucos II初始化及启动
ucos II内核学习之三:ucos II初始化及启动 以下是我项目中主函数的程序现在解释下程序编写的依据和实现过程。ucos II 里,在创建一个任务(或者调用其它系统服务之前),是需要先初始化系统的,初始化ucos II需要调用函数OSInit()。调用函数OSInit()的作用是什么?主要实现以下几个功能。1. 建立空闲任务及统计任务。2. 初始化uc原创 2011-12-18 22:06:37 · 7012 阅读 · 0 评论 -
ucos II 创建第一个任务之一
Ucos II创建第一个任务 我们已经从远处欣赏过ucos II 的身材,现在可以近距离地欣赏Ucos II性感的局部了。 任务是什么?有一句话:CPU不同的时刻段总是在执行着优先级最高的任务。所以CPU总是在不同的任务间切换。任务好比linux中的进程。有c写过单片机程序的人是知道函数的.。在ucos II 世界里,任务就是一个大箩筐,框着一个或者好多好多的函数。CPU呢原创 2011-12-18 21:58:23 · 10824 阅读 · 3 评论 -
ucos II 创建第一个任务之二
Ucos II 创建第一个任务之二下面具体讲解下任务创建的过程下图就是创建任务函数的实现程序。INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio){ void *psp; INT8U原创 2011-12-18 21:59:16 · 8839 阅读 · 2 评论 -
ucos II任务管理之三:删除任务
ucos II任务管理之三:删除任务有了前面的经历之后,mcu21决定全面地学习了任务的管理。这样在项目编程中才能做到“信手拈来”。在ucos II 里,创建一个任务之后,可以对任务执行以下几种操作1. 删除任务 OSTaskDel()2. 挂起任务 OSTaskSuspend()3. 恢复任务 OSTaskResume()4. 改变任务的优先原创 2011-12-18 22:00:49 · 9800 阅读 · 0 评论 -
ucos II任务管理之四:改变任务的优先级
ucos II任务管理之四:改变任务的优先级在ucos II 里,任务的优先级是可以改变的。可以修改任务优先级的一个好处就是可以解决优先级翻转的问题。什么是优先级翻转问题?偷偷地百度一下所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任原创 2011-12-18 22:01:17 · 7469 阅读 · 3 评论 -
ucos II 任务间 通信之四:邮箱
ucos II 任务间 通信之四:邮箱 学过信号量之后再来看邮箱,发现他们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递了一个指针变量。和信号量很相似,ucos II提供了5个对邮箱进行操作的函数。它们是:1. 建立一个邮箱,OSMboxCreate()2. 等待一个邮箱中的消息,OSMboxPend()3. 发送一个消息到邮箱中,OSMb原创 2011-12-18 22:03:47 · 15913 阅读 · 1 评论 -
ucos II 内核学习之一:任务状态及任务控制块
ucos II 内核学习之一:任务状态及任务控制块一个任务被创建之后,可以处于以下五种状态之一。这五种状态分别是:1. 睡眠状态2. 就绪状态3. 等待状态4. 中断服务状态5. 执行状态下面简单介绍下各状态的含义及各状态切换的方法。 睡眠状态:睡眠态(DORMANT)指任务驻留在程序空间之中,还原创 2011-12-18 22:04:53 · 8834 阅读 · 1 评论 -
ucos II 内核学习之七:内存管理
Ucos II 内存管理 在mcu21的项目里,暂时还没用到内存管理。不过还是有必要学习一下的。 为了消除内存碎片,ucos II 把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块。 类似每个任务对应一个任务控制块,每个事件对应一个事件控制块,ucos II里每个内存块也是对应一个内存控制块。内存控制块是一个数据结构,定义如下:typed原创 2011-12-18 22:06:57 · 7831 阅读 · 0 评论 -
ucos II 任务间 通信之五:消息队列1
ucos II 任务间 通信之五:消息队列 如果把邮箱比作是信号量的升级版,那消息队列就是邮箱的升级版。邮箱可以实现从一个任务向另外一个任务发送一个指针变量,消息队列则可以实现从一个任务向另外一个任务发送很多个指针变量。而且每个指针指向的数据结构变量也可以有所不同。 使用消息队列需要注意的地方是:一个任务或者中断服务子程序可以调用OSQPost(),OSQPostFront(),O原创 2011-12-18 22:04:06 · 13881 阅读 · 0 评论 -
ucos II 任务间 通信之三:信号量1
ucos II 任务间 通信之三:信号量信号量是什么?信号量有什么用? 信号量一是可以用来表示一个或多个事件的发生,二是用来对共享资源的访问。ucos II提供了5个对信号量进行操作的函数。它们是:1. 建立一个信号量, OSSemCreate()2. 等待一个信号量, OSSemPend()3. 发送一个信号量, OSSemPost()4. 无等待地请求一个信号量原创 2011-12-18 22:03:01 · 5866 阅读 · 0 评论 -
Ucos II 的移植之一
<br /> Ucos II 的移植之一<br /> <br />要使μC/OS-Ⅱ正常运行,处理器必须满足以下要求:<br />1. 处理器的C编译器能产生可重入代码。<br />2. 用C语言就可以打开和关闭中断。<br />3. 处理器支持中断,并且能产生定时中断(通常在10至100Hz之间)。<br />4. 处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈<br />5. 处理器有将堆栈原创 2011-01-06 11:55:00 · 7118 阅读 · 4 评论 -
ucos II任务管理之一:挂起任务
Ucos II 任务管理之一创建好了任务之后,就已经初步跨进了ucos II 的编程了。随着进一步的编程,发现学会创建了任务还是不够的。在我的项目里,需要实现485通信功能,我创建了任务1用于串口1发送数据,任务2用于串口1接受数据。程序本身的意图是发送完数据后,接着就串口1接受反馈回来的信息。但当把程序下载到电路板上后就出现问题,不能正常通信,原因就是当任务1在发送数据过程中,cpu原创 2011-12-18 21:59:47 · 15548 阅读 · 3 评论 -
ucos II 任务间 通信之二:事件控制块
ucos II 任务间 通信之二:事件控制块信号,邮箱,消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这一东西。什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列)原创 2011-12-18 22:02:23 · 8412 阅读 · 0 评论 -
ucos II 任务间 通信之三:信号量2
ucos II 任务间 通信之三:信号量2 当我们创建好了信号量之后,就可以使用信号量了。使用信号量需要调用OSSemPost()和OSSemPend()。关于具体怎么使用信号量,就得先看看这两个系统函数的代码。先看等待信号量OSSemPend()的代码:void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U原创 2011-12-18 22:03:25 · 5812 阅读 · 0 评论 -
ucos II 内核学习之四:任务延时函数
Ucos II 任务延时函数 编写过单片机程序的都知道,延时函数是经常被用到的。 在ucos II 里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。 这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则是以具体时原创 2011-12-18 22:05:56 · 15220 阅读 · 1 评论 -
ucos II 内核学习之五:时钟节拍
ucos II 内核学习之二 :时钟节拍ucos II 里,时钟节拍就好比是人的心脏一样重要,。它对于CPU能顺利在各任务间切换有着至关重要的作用。Ucos II 需要用户提供时钟源,在muc21项目了,我使用了定时器0作为时钟源。使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。Ucos II中的时钟节拍服务是通过在原创 2011-12-18 22:06:15 · 15159 阅读 · 2 评论 -
ucos II任务管理之二:恢复任务
ucos II任务管理之二:恢复任务 一个任务被挂起之后,想要再次被执行,是需要恢复的,恢复任务需要调用OSTaskResume()函数实现。想OSTaskSuspend()一样,调用OSTaskResume()只需一个参数,就是优先级。如OSTaskResume(5)就是恢复优先级为5的任务。INT8U OSTaskResume (INT8U prio)原创 2011-12-18 22:00:16 · 6439 阅读 · 0 评论 -
ucos II 任务间 通信之五:消息队列2
ucos II 任务间 通信之五:消息队列2消息队列通常可以应用以下两个地方;1.存储外部事件:外部事件由中断收集,然后存储到队列。2.串口接收程序中的接收循环缓冲区,可理解为消息队列。使用一个消息队列的步骤如下;1、 建立一个指向消息数组的指针和数组的大小,该指针数组必须申明为void类型,如下: void *MyArrayOfMsg[SIZE];原创 2011-12-18 22:04:28 · 11278 阅读 · 0 评论 -
ucos II 内核学习之二:任务控制块
ucos II 内核学习之二:任务控制块前面的学习已经了解过任务控制块。知道任务在创建的时候,任务控制块会被初始化。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,ucos II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCBs全部驻留在RAM中。 任务控制块的定义程序如下所示:原创 2011-12-18 22:05:16 · 7767 阅读 · 1 评论 -
ucos II 任务间 通信之一:全局变量
ucos II 任务间通信之一 :全局变量 任务创建好了之后,只是完成了系统编程的一小步,更为重要的是任务间的通信。比如在mcu21的项目里,有通信任务,有液晶显示任务,有控制任务。控制任务需要用到通信任务接受到的数据,液晶显示任务也显示控制任务的数据。这就需要用到任务间的通信了。 Mcu21总结了一下,在ucos II 里任务间通信可以采用以下几种方式。1.原创 2011-12-18 22:01:54 · 18074 阅读 · 3 评论