当前位置:首页 > 单片机 > 单片机
[导读] 一、闲扯之前看完了sdcc man和datasheet之后,用sdcc写了几个小程序。大部分时间都在干一些调式代码的事,就趁这段时间把UCOS复习一下吧。由于这是UCOS的第一篇,就来扯点闲话吧。对于UCOSii,我其实没

一、闲扯

之前看完了sdcc man和datasheet之后,用sdcc写了几个小程序。大部分时间都在干一些调式代码的事,就趁这段时间把UCOS复习一下吧。由于这是UCOS的第一篇,就来扯点闲话吧。

对于UCOSii,我其实没有在实际的项目中用到过。只是记得在以前看过一本UCOS作者自己写的书,书名已经忘记了。这种语言或者系统架构的设计者写的书往往看起来很有意思,因为作者不仅会给你解释代码,还会告诉你他为什么要这么做。这比生硬得给出流程图和注释的参考类书要更有趣味,不得不说国内的一些书看起来就像是使用说明,在网络日益发达的今天这些书的作用越来越小。比如我想知道一个基类的具体功能,搜索要比翻书快上许多。

UCOS的本名是μ/cOS,用希腊字母μ表示它的轻量级。其实它并不是一个免费的RTOS,只有当被用作教育用途时(往往被用来供大家学习操作系统),才可以有免费的授权。但是在目前的环境下,大家用μ/cOS来进行开发应该还是不要紧的。据我所知,我还没有听说过有使用未授权μ/cOS被起诉的。又由于μ/cOS的相关文档以及结构性代码库还算比较完善,因此也算是个在嵌入式设备上较为流行的操作系统。

二、如何取得UCOS

UCOS的官网上有很多移植好的工程,还有一些相应的APP和Drive,这可以给大家节省不少时间。

UCOS下载中心:

http://micrium.com/downloadcenter/

三、系统初始化3.1 UCOS的任务

作为一个可移植的嵌入式实时操作系统,μ/cOS的任务应该仅仅被限定为用户进程管理。它应该将硬件层尽量抽象掉,所以在main入口以前的芯片初始化(初始化系统时钟、初始化Flash读取,初始化芯片工作模式等等)、板卡初始化以及C环境的初始化都交于用户自己来进行。这个部分,通俗的做法是载入芯片厂商提供一些已经标准化的库函数,许多编译器也会在编译工程时自动链接一些startup_函数以引导C环境的运行。

3.3 时钟节拍

要进行任务调度,内核的优先级必然要在各用户进程之上。它定期的打断各个任务运行,使自己突然占用CPU,并进行各种针对进程的操作。

这很自然让我们联想到中断,的确在Ucos中,常常用时钟中断来完成进程的管理工作。如果你不想在时钟中断里做太多的事,那么可以在中断产生时启动一个被注册为最高优先级的进程,由该进程来做调度工作。

3.4 UCOS的初始化流程

对UCOS内核来说,所有的进程都是一个对象,所以要有描述进程属性的数据结构,以供内核控制进程。内核还要创建另外一些数据结构来作为标记各种自身需要记录和调用的属性,还有一些数据结构被创建用以算法辅助。

UCOS运行的第一步,就是初始化这些数据结构。

给这些数据结构分配空间以及设初值之后,用户可以注册几个最开始的用户进程。紧接着内核对刚注册的这几个进程进行初始化,系统就进入了一个多任务运行的常态。

UCOSii初始化的伪代码:

int main (void)

{ /* 关闭系统中断,防止在初始化时去跑中断服务程序而造成难以预料的问题。OS_ENTER_CRITICAL()宏*/


/* 初始化内核的数据结构 OSInit()函数 */


/* 注册用户进程 OSTaskCreate()函数*/


/* 系统启动 OSStart()函数 */}12345678910


3.3 OSInit初始化的数据结构

OSInit会初始化内核用到的数据结构,了解这些数据结构对理解UCOS是必须的,这些数据结构这里只做个简要的描述,在之后的文章里再详细解释。

普通全局变量

用于描述一些内核的属性。一些计数器(比如计算一共进行了几次中断),状态器(比如是否已经进入多任务环境)。

OSPrioCur
OSPrioHighRdy
OSTCBCur
OSTCBHighRdy
OSTime
OSIntNesting
OSLockNesting
OSCtxSwCtr
OSTaskCtr
OSRunning
OSCPUUsage
OSIdleCtrMax
OSIdleCtrRun
OSIdleCtr
OSStatRdy
OSIntExitY

数组

就绪队列,用于调度算法。

链表

这个描述进程属性的数据结构一般叫做PCB(Process control block),UCOS里叫作TCB(Task control block)。所有的操作系统都会定义这样一个数据结构。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

hmi是Human Machine Interface 的缩写,"人机接口",也叫人机界面。人机界面(又称用户界面或使用者界面)是系统和用户之间进行交互和信息交换的媒介, 它实现信息的内部形式与人类可以接受形式之间的转换...

关键字: HMI 人机界面 系统

在复位电路中,电容的作用是给系统提供恒定的电源电压,从而保证开机时系统能够正确地执行初始化和自检过程。因此,选择合适大小的电容对于系统的稳定性和性能至关重要。

关键字: 复位电路 电容 系统

工业自动化系统设计是一项涉及多个领域和技术的综合性任务。它旨在通过自动化设备和系统的集成,提高生产效率、降低能耗、确保产品质量和增强企业竞争力。本文将详细探讨工业自动化系统设计的原则、方法和实践,以期为相关从业人员提供有...

关键字: 工业自动化 设备 系统

MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到...

关键字: 单片机 存储器 系统

DSP应用系统的运算量是确定选用处理能力为多大的DSP芯片的基础。运算量小则可以选用处理能力不是很强的DSP芯片,从而可以降低系统成本。相反,运算量大的DSP系统则必须选用处理能力强的DSP芯片,如果DSP芯片的处理能力...

关键字: DSP 芯片 系统

三家全球领先公司紧密协作,以满足基于台积公司先进技术的设计在芯片、封装和系统等方面的挑战

关键字: 芯片 封装 系统

因为各种新式微处理器的呈现和运用的不断深化,嵌入式体系在后PC年代得到了空前的开展。跟着时刻的推移和技能的前进,在工业操控和新式的手持式运用等范畴,用户体会成为产品成功的关键要素之一,越来越多的产品需求杰出的用户界面、互...

关键字: 嵌入式 系统 处理器

QVM人工智能引擎是Qihoo Support Vector Machine(奇虎支持向量机)的缩写。是360完全自主研发的第三代引擎(具有中国的自主知识产权的引擎)。

关键字: 微软 Windows 系统

四大导航系统除了欧盟伽利略系统还未完成全部卫星发射,其它三个系统都已经完成卫星布局。四个系统可相互兼容、互为补充,这样用户可以享受不间断的定位服务。目前如智能手机内的导航定位技术,已有诸多品牌都支持这四大导航系统,可为用...

关键字: 导航 系统 定位服务

有高低压模块的系统,高低压模块之间的通信,通常都要用到隔离技术。隔离最主要的需求来自安规需求,即防范人体以及低压设备承受高压或者浪涌的冲击;其次是性能的需求,隔离能够消除地环路,同时能够隔离噪声,提高整个系统的容错性。

关键字: 隔离 电源 系统
关闭
关闭