曾经的UCOSii

简介: 我只是来分享自己的UCOS学习资料的,,顺便叨叨,自己是看着任哲的书一点一点学的,,,自己大四的时候学的UCOSii,,但是好像学了之后,就只有一次真正使用过它,,在使用网络模块ENC28J60的时候.

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

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

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

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

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

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

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

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

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

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

 

 

 

 

 

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

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

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

先上菜

#include "includes.h"

unsigned char  task1_STK[60];//任务1堆栈的初始化
unsigned char  task2_STK[60];//任务2堆栈的初始化

void task1(void *date) reentrant;
void task2(void *date) reentrant;

void main(void)
{
  InitTimer0();
    InitSerial();
    InitSerialBuffer();
    OSInit();
    
    OSTaskCreate(task1, (void *)0, &task1_STK[0], 8);
    OSTaskCreate(task2, (void *)0, &task2_STK[0], 9);
    
    OSStart();
    
}

void task1(void *date) reentrant
{
 date = date;
    while(1)
    {
    PrintStr("A\r");
//         OSTimeDly(10);//延时以时钟节拍算
        OSTimeDlyHMSM(0, 0, 1, 0);  //等待1秒 延时按时分秒毫秒算 
  }
}

void task2(void *date) reentrant
{
 date = date;
    while(1)
    {
    PrintStr("Y\r");
        OSTimeDlyHMSM(0, 0, 1, 0);      //等待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

 

目录
相关文章
软件项目常见风险及其预防措施
(1)合同风险 签订的合同不科学、不严谨,项目边界和各方面责任界定不清楚等是影响项目成败的重大因素之一。 预防这种风险的办法是项目建设之初项目经理就需要全面准确地了解合同各条款的内容、尽早和合同各方就模糊或不明确的条款签订补充协议。
6740 0
|
算法 数据可视化
跟NBT学Scissor| bulk RNA + scRNA鉴定与目标表型相关的细胞亚群
跟NBT学Scissor| bulk RNA + scRNA鉴定与目标表型相关的细胞亚群
337 0
|
监控 数据可视化 数据挖掘
《Python第四讲——使用IPythonJupyter Notebook与日志服务玩转超大规模数据分析与可视化》电子版地址
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化
82 0
《Python第四讲——使用IPythonJupyter Notebook与日志服务玩转超大规模数据分析与可视化》电子版地址
|
SQL 分布式计算 NoSQL
Spark从入门到入土(五):SparkSQL原理与实战
Spark从入门到入土(五):SparkSQL原理与实战
Spark从入门到入土(五):SparkSQL原理与实战
输出100-2000之间的完全数
输出100-2000之间的完全数
160 0
输出100-2000之间的完全数
|
存储 安全 文件存储
低成本私有云好用么 - 妙存 Onespace 网络存储中心评测(硬件篇) | 玩啥分享
几年前,网络存储服务器(NAS)还是服务于大中型企业的专属网络产品,NAS 设备费用高、需要专业技术人员才能进行管理和维护。随着智能硬件创新发展,价格便宜、功能多样的微小型 NAS 开始步入普通用户的工作和生活中,妙存( Onespace ) 智能无线网络存储中心就是这样一件 NAS 产品。
538 0
低成本私有云好用么 - 妙存 Onespace 网络存储中心评测(硬件篇) | 玩啥分享
|
Java Maven
印象最深的一个bug-maven父子模块依赖关系
印象最深的一个bug-maven父子模块依赖关系
1187 0
|
API 移动开发
阿里云域名优惠口令及阿里云优惠获取方法(最新)
域名优惠口令是阿里云官方推出的针对域名产品注册、转入、续费的优惠码。
阿里云域名优惠口令及阿里云优惠获取方法(最新)
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(2)
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(2)
fdsaffsf
fdaf
793 0