. 紧急的任务优先,反应速度要求快速的,如警报。2. 完成的快的优先3. 系统中不要经常动态创建和删除任务,所有任务在初始化时创建,且优先级固定不要动态的改变。4. 系统中不要出现同一个优先级的多个任务,uCosII不支持round robin 时间轮片调度。5. 用信号灯(semaphore)对设备进行访问时,OSSemPost(), OSSemPend()要成对出现在同一任务中,OSSemCreat()创建时初始值要为1。用信号实现任务同步则不是成对出现,而是出现在不同的任务中。6. 在中断中不能用导致任务阻塞的函数,如OSSemPend, OSMboxPend,OSQPend而要用OSSemAccept,OSMboxAccept,OSQAccept.7. >> 阅读全文
|
在嵌入式应用中,使用RTOS的最主要原因是提高系统的可靠性,其次是提高开发效率、缩短开发周期。μC/OS-II 是一个基于优先级的抢占式实时内核,支持56 个用户任务,90%的代码使用标准的ANSI C语言书写,程序可读性强,移植性好,代码可固化,可裁剪,非常灵活。C8051F是美国Cygnal公司生产的与51系列兼容的微控制器,流水线指令结构70%的指令的执行时间为1个或2个系统时钟周期。当时钟频率为25MHz时,速度可达25MIPS,是一款不错的片上系统。1 开发工具和运行环境实现μC/OS-II的移植,要求所用的C编译器支持混合编程。KEIL C51可为众多的8051派生器件编程。我们选用的是KEIL7.02集成开发环境,仿真板基于C8051F015芯片。2 移植中所需修改的文件和CPU相关的文件主要有三个,分别是汇编文件OS_CPU_A.ASM、C语言文件 OS_CPU_C.C和头文件OS_CPU.H。2.1 OS_CPU.H文件OS_CPU.H文件中定义了数据类型及与硬件相关的基本信息。其中改动部分如下:typedef unsigned char OS_STK; /* 堆栈的宽度为8位 */OS_CPU_EXT INT8U IE_SHADOW;#define OS_ENTER_CRITICAL() IE_SHADOW = IE; IE &= 0x7F /* 关中断 */#define OS_EXIT_CRITICAL() IE = IE...
>> 阅读全文
|
(一) uC/OS-II 简介uC/OS-II是一种基于优先级的可抢先的硬实时内核。自从92年发布以来,在世界各地都获得了广泛的应用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU上,运行在从8位到64位的各种系统之上。尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。鉴于uC/OS-II可以免费获得代码,对于嵌入式RTOS而言,选择uC/OS无疑是最经济的选择。(二) uC/OS-II 应用程序基本结构应用uC/OS-II,自然要为它开发应用程序,下面论述基于uC/OS-II的应用程序的基本结构以及注意事项。每一个uC/OS-II应用至少要有一个任务。而每一个任务必须被写成无限循环的形式。以下是推荐的结构:void task ( void* pdata ){INT8U err;InitTimer(); // 可选For( ;; ){// 你的应用程序代码…….……..OSTimeDly(1); // 可选}}以上就是基本结构,至于为什么要写成无限循环的形式呢?那是因为系统会为每一个任务保留一个堆栈空间,由系统在任务切换的时候换恢复上下文,并执行一条reti 指令返回。如果允许任务执行到最后一个花括号(那一般都意味着一条ret指令)的话,很可能会破坏系统堆栈空间从而...
>> 阅读全文
|
(1)实时系统和前/后台系统;前/后台系统:一个大循环,循环查询各种标志位。如果标志位置位,就执行相应的服务程序。标志位就是标志事件的发生,事件响应延时处于不可预测状态。最坏的情况是循环中所有其他的事件服务程序执行完,才响应当前事件。中断服务虽然能即时/优先响应,但是它们和主循环的通讯,也是通过置主循环中相应的标志位来完成的。实时系统(uCOS):整个程序分成一个个看起来好象是并行的任务,每个任务都在等待事件的发生。除了最低优先级任务(在uCOS中是IDLE任务)是死循环以外,其他的任务都不能死循环,只能在驱动事件驱动下工作。任何驱动事件的产生,都使优先级最高的就绪任务运行。任务和任务/任务和中断的通讯,是通过相应事件驱动来完成的。驱动事件:不论是什么系统,CPU不可能一直在工作。CPU的工作是在各种驱动事件的驱动下工作的。CPU在完成一次驱动事件事件服务程序以后,进入IDLE模式等待新的驱动事件的发生。包括实时系统和前/后台系统都是在驱动事件的驱动下运行的。按照uCOS中的观点,驱动事件分为三类:1、事件 (Event)。包括信号量(Semaphores)、事件标志组(Flag)、邮箱(Message Box)、邮箱队列(Message Queue)。2、时间(Time T...
>> 阅读全文
|
uC/OS-II嵌入式操作系统移植 操作系统的移植指的是使实时系统的内核能在微处理器上运行。uC/OS-II应移植到所使用的CPU上,然后才能得到应用。在uC/OS-II的移植中,处理器必须满足一下一些要求:l 处理器的C编译器能产生可重入型代码l 处理器支持中断,并且能产生定时中断l 用C语言就可以开/关中断l 处理器能支持一定数量的数据存储硬件堆栈l 处理器有将堆栈指针以及其他CPU寄存器的内容读出,并存储到堆栈或内存中去的指令实际上,uC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱...
>> 阅读全文
|
我终于将uC/OS在ADuC845单片机上移植成功,回顾整个移植过程有不少体会.首先要完整了解你所有处理器的资源和寄存器的配置.在对整个硬件资源了解清楚后再根据uC/OS所需要的单片机资源进行分配(其实现在网上大部分的程序都或多或少需要进行修改才能运行在自己的硬件系统中.)在完成这部分后,应该开始了解uC/OS了,在移植过程中,需要处理的文件有: A、与处理器无关的文件:OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CuCOS_II.CuCOS_II.H这些文件在c51的移植过程中,只需要给函数加上重入属性即可。B、与应用相关的文件:INCLUDES.H: 包含C51的标准库头文件;对”pdata”等c51关键字的重定义OS_CFG.H: “OS_TICKS_PER_SEC”、“ OS_FLAGS”注意可能需要修改。C、与处理器相关的文件:OS_CPU.H: 数据类型、关中断方法、任务堆栈方向、任务切换的宏定义都需要修改。OS_CPU_A.ASM: OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()这几个函数的编写,是整个移植的关键。OS_CPU_C.C:OSTickISR()、OSTaskStkInit()函数的编写。START_AD.ASM:对XDATA寄存器和堆栈等根据实际的系统进行设置。在完成这些后基本上移植就成功了70%,剩下的就是编写一...
>> 阅读全文
|