首先记住一句话:实时操作系统,并非真的实时.操作系统必须有延时,一个系统执行好几个任务,实质是任务之间不停的切换,有延时才有切换任务的余地,如果没有.....应该都见识过卡机,任务切换不过来了

如果你需要做实时的事情,那还是请裸机吧!

我只是来分享自己的UCOS学习资料的,,顺便叨叨,自己是看着任哲的书一点一点学的,,,

自己大四的时候学的UCOSii,,但是好像学了之后,就只有一次真正使用过它,,在使用网络模块ENC28J60的时候.....

对于当时自己还没学的时候,一直很纳闷什么是操作系统哈,,是什么原因让人们去编写操作系统程序,,到底是为了解决什么问题,而写的操作系统

其实最贴近人的例子就是自己的电脑啦,,,和自己的没有操作系统的单片机程序(俗称"裸机")做比较

自己的电脑能一边看视频,一边听歌,一边打字,一边聊天,一边下东西...........感觉是不是同时进行

而没有操作系统的单片机程序,就是平时写的程序,,,,算啦,,举个例子

假设哈,,我需要写一个处理许多事情的程序

如果在没有操作系统的单片机上做,,也可以做,,,不过呢!有个麻烦的地方就是,,为了使各个功能都能及时(假设响应速度为1us)的响应

我们做程序的时候就要想法,把有延时的地方不能真的延时,要能立即执行下面的功能,,,,,,,,,,,就在想有没有更好地方式来实现呢

对了单片机里面的程序主要是根据寄存器的各项执行 ,,,,,就在想要是这样就好了

要是有个程序哈,,我只要把我想要的各个功能写好,并且写成一个函数一个函数的,然后呢这个程序有个功能,我只要把我写的每个函数的函数地址传给它,,然后就不用我管了

然后整个程序就像上面那样执行多好啊

所以操作系统就来拯救我了

先上菜

#include "includes.h"

unsigned char  task1_STK[];//任务1堆栈的初始化
unsigned char task2_STK[];//任务2堆栈的初始化 void task1(void *date) reentrant;
void task2(void *date) reentrant; void main(void)
{
InitTimer0();
InitSerial();
InitSerialBuffer();
OSInit(); OSTaskCreate(task1, (void *), &task1_STK[], );
OSTaskCreate(task2, (void *), &task2_STK[], ); OSStart(); } void task1(void *date) reentrant
{
date = date;
while()
{
PrintStr("A\r");
// OSTimeDly(10);//延时以时钟节拍算
OSTimeDlyHMSM(, , , ); //等待1秒 延时按时分秒毫秒算
}
} void task2(void *date) reentrant
{
date = date;
while()
{
PrintStr("Y\r");
OSTimeDlyHMSM(, , , ); //等待1秒
}
}

OSTaskCreate(task1, (void *)0, &task1_STK[0], 8);
这句就是创建一个任务的函数,,,就是把咱写的

这两个函数哈,,利用UCOS提供的OSTaskCreate()函数,使咱这两个函数实现一开始想的那样执行

看一下这个函数

这个数组哈有个新名字

那个数组里面就是这样子

多个任务就是这样子,,,,

对于裁剪.............这个您学了就知道了.........感觉名字挺高大上,,可能对于小系统而言吧比较简单点

我把自己学习的历程给大家,,,我的历程里面一般都很简简单单不过我当时是

关于Proteus  与 Keil 联调  ,,就是能够一步一步的执行,看程序运行,,

把proteus安装目录下 VDM51.dll(搜一下吧)文件复制到Keil安装目录的 \C51\BIN 目录中。

如果没有自己在网上下一个,,或者我下面有百度云分享,里面有

修改keil安装目录下 Tools.ini文件,在C51字段加入TDRV9=BIN\VDM51.DLL ("Proteus VSM Monitor-51 Driver"),保存 注意:不一定要用TDRV9,根据原来字段选用一个不重复的数值就可以了。引号内的名字随意

进入KEIL的project菜单option for target '工程名'。在DEBUG选项中右栏上部的下拉菜选中 Proteus VSM Monitor-51 Driver。 在进入seting,如果同一台机IP 名为127.0.0.1,如不是同一台机则填另一 台的IP地址。端口号一定为8000 注意:可以在一台机器上运行keil,另一台中运行proteus进行远程仿真

下面是自己当年学的点点滴滴,,会发现缺一个  内存分配,,,,,,这是因为学到消息队列的时候,自己为毕业证的事情分心了,然后坚持了一个星期想考研.........最后

还是被兴趣给打败了................对于内存分配,我看了老衲五木,关于网络Lwip的源码时介绍的挺好的,,亲们可以百度一下,,这个人写文章也挺有意思的,,,也是开头先 扯一点别的

链接:http://pan.baidu.com/s/1boUHKQF 密码:jpjy

曾经的UCOSii的更多相关文章

  1. UCOSII内核代码分析

    1 UCOSII定义的关键数据结构 OS_EXT  INT8U             OSIntNesting; OSIntNesting用于判断当前系统是否正处于中断处理例程中. OS_EXT   ...

  2. 关于ucosII系统的软件系统裁剪性

    ucosII是依靠编译时的条件编译来实现软件系统的裁剪性的,即把用户可裁剪的代码段写在#if和#endif预编译指令之间,在编译时根据#if预编译指令后面的常数的值来确定是否该代码段进行编译.在工程文 ...

  3. WIN7下使用VC2010调试uCOS-II 2.91

    WIN7下使用VC2010调试uCOS-II 2.91 http://www.amobbs.com/thread-5462878-1-1.html ucos系统学习汇总 http://www.cnbl ...

  4. 查看uCOS-II的CPU使用率

    代码模板: void main(void) { OSInit(); /* 安装uCOS-II的任务切换向量 */ /* 创建用户起始任务TaskStart */ OSStart(); } void T ...

  5. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例

    1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...

  6. 改ucosii的中断禁止和恢复代码,这是一个荒谬的错误【 mrs msr】

    ucosii原来的禁止中断以及恢复中断的代码是最简的,但是使用之前,必须声明一个固定名为 OS_CPU_SR   cpu_sr 的变量,吊在那里感觉很怪. ;********************* ...

  7. 操作系统栈溢出检測之ucosII篇

    操作系统栈溢出检測之uc/osII篇 Author               :       David Lin (林鹏) E-mail               :       linpeng1 ...

  8. STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測

    基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务.实现对温湿度.超声波.声音.光敏等传感器的控制及实时数据採集. 14.1开发环境说明 硬件:STM32W1 ...

  9. uCOS-II的信号量及使用

    uCOS-II的信号量及使用 信号量的定义: OS_EVENT* Key1_SEM; OS_EVENT* Key2_SEM; OS_EVENT* Key3_SEM; 信号量的创建: Key1_SEM= ...

  10. UCOSII在STM32F1上的移植

    UCOSII在STM32F1上的移植 首先准备好一份STM32F1的工程.UCOSII源码. 在准备好的工程中新建一个"UCOSII"文件夹(或者取其它名字也行): UCOSII文 ...

随机推荐

  1. BOM(JavaScript高程笔记)

    再次编辑于20160115 一.window对象 双重角色 JS访问浏览器窗口的接口 ECAMAscript规定的Global对象 1.全局作用域 所有在全局作用域中声明的变量.函数都会变成windo ...

  2. CF712E Memory and Casinos

    设\(f[i]\)为从\(i\)到\(r+1\)且不走出区间的概率 \(f[i]=p[i]f[i+1]+(1-p[i])f[i-1]\) \(f[i]-f[i-1]=p[i](f[i+1]-f[i-1 ...

  3. Excel indirect引用其它xlsx文件内容作为下拉框

    效果如下图: 在第一个excel文件中有一个下拉框 这里面的选项,需要从另外一个Excel文件中读取内容,另外一个Excel文件如下: 实现的步骤如下: 1.新建一个Excel文件select.xls ...

  4. css3的calc()属性

    1.calc()是css3的一个新增的功能,用来指定元素的长度,你可以使用calc()给元素的border.margin.pading.font-size和width等属性动态的设置值. 2.calc ...

  5. [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色

    对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...

  6. Python+Selenium笔记(十一):配置selenium Grid

    (一) 前言 Selenium Grid可以将测试分布在若干个物理或虚拟机器上,从而实现分布方式或并行方式执行测试. 这个链接是官方的相关说明. https://github.com/Selenium ...

  7. 多媒体指令(AVX加速数组求和)

    #include <stdio.h> #include <intrin.h> #include <iostream> #include <ctime> ...

  8. SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组

    SQLSERVER将数据移到另一个文件组之后清空文件组并删除文件组 之前写过一篇文章:SQLSERVER将一个文件组的数据移动到另一个文件组 每个物理文件(数据文件)对应一个文件组的情况(一对一) 如 ...

  9. jquery插件导出excel和pdf(解决中文乱码问题)

    参考文件:http://jackyrong.iteye.com/blog/2169683 https://my.oschina.net/aruan/blog/418980 https://segmen ...

  10. 从专用磁盘创建 Windows VM

    通过使用 Powershell 将专用托管磁盘附加为 OS 磁盘来创建新 VM. 专用磁盘是保留原始 VM 中的用户帐户.应用程序和其他状态数据的现有 VM 中虚拟硬盘 (VHD) 的副本. 使用专用 ...