打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CoOS使用教程--第一个工程

http://blog.csdn.net/k331922164/article/details/50378914

2015

1、先解释一下,什么是操作系统。

操作系统最核心的功能,就是时分复用,甚至用单片机玩的流水灯,都可以认为是操作系统。

熄灭一个灯再点亮一个灯,被称为是一个任务。不过,流水灯不是所有灯同时亮,而是隔一段时间灭一个亮一个,这个时间间隔,被称为调度时间。而调度这个功能,可以使用定时器中断来实现。

当然,真实的操作系统可没这么简单。因为绝大多数的任务不是点灯,它们需要运算,需要用变量去记录任务的运行状态。

这样,需要一个仓库去存储这些变量,常用的仓库是先进先出的堆栈(跟51单片机里面切换中断一样,需要保护现场)。

再举个例子,按键消抖是一个任务,串口发数据是一个任务,你想让按键按下的时候串口发数据的话,怎么办?

你很容易想到使用全局变量,但是全局变量会增加代码的耦合度,为了解决这个问题,操作系统还必须带有任务间通信的机制,比如:信号量、互斥量等。

2、为什么需要操作系统。

一、正如上文所说的,可以降低代码的耦合度。

二、提高整机的稳定性。比如,飞行器上面的无线通信模块坏了,而这个通信的功能用了阻塞型的代码(如while(send_finished);),没有操作系统的话,飞行器将无法做姿态解算等其它任务,只能失速坠落。但是有操作系统的话,就可以使用调度算法跳过这些阻塞型的代码,去执行其它任务,来保证飞行器的稳定性。

3、CoOS跟uCOS ii差不多,也是个小型的操作系统,可以用在单片机上面。

而CoOS已经给我们移植在Cortex M0、M3、M4,这三种内核上了,所以我们用起来很方便。

当然,使用之前需要添加CoOS组件,其中整个系统,也就只有OsConfig.h(裁剪用的)需要修改的,其它都不用改。

而OsConfig.h默认支持M3内核,所以本次示例不需要修改它。


下面介绍在M3内核下使用CoOS的最简单的工程。



相信用过uCOS ii的,都会发现这段代码跟uCOS ii的很相似。功能也很简单,就两个灯不停地闪烁。

具体开发流程:初始化内核->创建任务->调度,然后写上具体的任务函数,就可以了。

1、CoInitOS(),初始化CoOS内核

void CoInitOS(void);

2、CoCreateTask(),创建任务

CoCreateTask(task,argv,prio,stk,stkSz);

task是函数名,传入函数指针可以使内核调度该任务。

argv是传入任务的参数,对应于任务当中的pdata,一般不使用。

prio优先级,数值越小,优先级越高。

stk任务栈地址,写成【64-1】是因为C语言的数组是从0开始算的,0~63正好64个单元。

stkSz任务栈的大小。

3、CoStartOS(),启动CoOS以调度任务

void CoStartOS(void);

请注意,在此函数之后的语句都不执行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
嵌入式系统优先级详解
实时多任务操作系统uCOS-III的特点
μCOSII在Cortex-M3核ARM处理器上的移植
一步一步教你使用uCOS
Cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)
论嵌入式单片机软件架构
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服