本人刚刚学习UCOSII,平台为正点原子的STM32F103战舰开发板,写这篇博客主要是为了学习UCOSII,也方便自己能够一点一点的进步,话不多说直入正题吧。

第一步:在STM32上移植好UCOSII系统后,就需要创建一些任务。

//创建任务三部曲:
  1、设置任务优先级
  2、设置任务堆栈(数组)
  3、定义任务函数

一、下面是正点原子源代码中的两个例子:START任务和LED0任务

//----------START任务------------
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级为最低
//设置开始任务的堆栈大小为128
#define START_STK_SIZE 128
//开始任务的堆栈(数组),大小为128个空间
OS_STK START_TASK_STK[START_STK_SIZE]; //OS_STK为32位数据类型,即typedef unsigned int
//任务函数
void start_task(void *pdata);

//----------LED0任务------------
//设置任务优先级
#define LED0_TASK_PRIO 7 //LED0任务的优先级为7
//设置开始任务的堆栈大小为128
#define LED0_STK_SIZE 128
//开始任务的堆栈(数组),大小为128个空间
OS_STK LED0_TASK_STK[LED0_STK_SIZE]; //OS_STK为32位数据类型,即typedef unsigned int
//任务函数
void led0_task(void *pdata);

二、下面为主函数:

int main(void)
{
delay_init(); //延时初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组配置
uart_init(); //串口波特率设置
LED_Init(); //LED初始化

OSInit(); //UCOS初始化
OSTaskCreate( start_task, //任务函数地址,即任务函数的名称
(, //任务参数(传递给任务函数的参数),此时为NULL
(OS_STK*) &START_TASK_STK[START_STK_SIZE-], //强制转换任务堆栈栈顶的地址为OS_TASK类型的指针
START_TASK_PRIO) ; //任务优先级

OSStart(); //开始任务

}

三、下面为两个任务函数的具体代码:

//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=; //cpu_sr用来保存CPU状态寄存器的程序状态字
pdata=pdata;//如果在程序中不使用参数pdata,为了避免在编译中出现“参数未使用”的警告信息,可以写一句pdata= pdata;
OSStatInit(); //开启统计任务

OS_ENTER_CRITICAL(); //进入临界区(关闭中断),禁止任务切换
OSTaskCreate(led0_task,(,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-],LED0_TASK_PRIO);//创建LED0任务
OSTaskSuspend(START_TASK_PRIO);//挂起开始任务,后面系统不再执行TaskStart任务
OS_EXIT_CRITICAL(); //退出临界区(开中断),允许任务切换
}

//LED0任务
//led0_task为任务函数地址
//pdata为任意类型的指针变量,此处无参数传递因此在OSTaskCreate中赋值为(void*)0
//注:省略了pdata=pdata;
void led0_task(void *pdata)
{
//相关初始化部分:进行相关变量的定义和相关硬件的初始化.....
) //无限循环
{
//任务功能代码部分1:完成任务的具体功能....
LED0=;

//调用系统延时程序,延时开始时释放CPU挂起自己,让其它就绪的最高优先级程序运行,\
//延时结束后回到就绪态运行(此时不是直接运行,当其它就绪任务优先级更高时,\
//先执行优先级高的就绪任务)
delay_ms();

//任务功能代码部分2:完成任务的具体功能....
LED0=;

//调用系统延时程序,延时开始时释放CPU挂起自己,让其它就绪的最高优先级程序运行,\
//延时结束后回到就绪态运行(此时不是直接运行,当其它就绪任务优先级更高时,\
//先执行优先级高的就绪任务)
delay_ms();
}
}

UCOSII学习 - 创建任务的更多相关文章

  1. Spring MVC 学习 -- 创建过程

    Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...

  2. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  3. java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  4. PythonOCC 3D图形库学习—创建立方体模型

    Open CASCADE(简称OCC)平台是是一个开源的C++类库,OCC主要用于开发二维和三维几何建模应用程序,包括通用的或专业的计算机辅助设计CAD系统.制造或分析领域的应用程序.仿真应用程序或图 ...

  5. UCOS-II学习记录

    本文主要记录使用UCOS II的相关内容.包括如何完成第一个UCOS II应用程序,和如何创建任务,如何获取系统时间,和利用i3086 驱动完成时间获取,屏幕显示,按键驱动,信号量等内容. UCOS- ...

  6. Nodejs 菜鸟教程学习-创建第一个应用

    注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...

  7. lucene&solr学习——创建和查询索引(代码篇)

    1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...

  8. Git学习--创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  9. PHP学习创建水印,缩略图

    今天网上学习了一段PHP创建缩略图还有打水印的代码,如下: 其中将图片的路径作为参数传给函数,打水印的过程就是首先获取图片和logo的参数信息,然后将logo图片拷贝到原图的某个位置,然后保存,水印打 ...

随机推荐

  1. oracle coherence介绍及使用

    网上除了官方用户指南,关于Coherence的介绍文章资料很少,因此总结出此文,从原理到快速指南和基本最佳实践,希望对需要的人提供一个参考. 1 Coherence 概述 1.1 Coherence是 ...

  2. Registration system

    Registration system 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 A new e-mail service "Berlandesk&q ...

  3. 重载OverLoad。隐藏new

    <1> using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...

  4. 点滴记录——Ubuntu 14.04中Chrome浏览器标题栏出现中文乱码

    今天不知道在系统里装的哪个软件与Chrome浏览器所用的字体向冲突了,导致标题栏显示的中文都变成了乱码,其次收藏栏中的中文也变成了乱码.导致原有的收藏内容都无法辨认了.在网上搜索了一下,也有人遇到了相 ...

  5. 发布Java桌面程序

    我拿了一份桌面工具的开源代码,修修改改,在elipse上运行,感觉良好,但到了发布应用程序,就傻眼了.我居然不知道咋发布! 呵呵,不愧是Java小白! 如果是微软阵营,直接就编译成exe了.但java ...

  6. 为Windows Live Writer添加Code插件

    1.插件效果展示 1: void CDemoDlg::OnBnClickedNmdlg() 2: { 3: CNonModeDlg *pDlg = new CNonModeDlg();// 创建一个C ...

  7. fastjson将json字符串中时间戳转化为日期

    开发中,调用接口,往往会返回一个json字符串.对于json中的时间戳应该如何转为日期对象呢? 定义一个DateValueFilter类,这个类实现了fastjson中ValueFilter接口.其作 ...

  8. spring boot redis缓存入门

    摘要: 原创出处 泥瓦匠BYSocket 下载工程 springboot-learning-example ,工程代码注解很详细.JeffLi1993/springboot-learning-exam ...

  9. HDU - 2586 How far away ?(离线Tarjan算法)

    1.给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离. 2.这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了. 这里的计算方法是,记下根结点到任意一 ...

  10. linux下开机启动svn配置

    1.在 vi /etc/rc.local文件下添加以下: /home/svn/subversion-1.8.18/bin/svnserve -d --listen-port 3690 -r /home ...