UCOSII学习 - 创建任务
本人刚刚学习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学习 - 创建任务的更多相关文章
- Spring MVC 学习 -- 创建过程
Spring MVC 学习 -- 创建过程 Spring MVC我们使用的时候会在web.xml中配置 <servlet> <servlet-name>SpringMVC< ...
- pandas学习(创建多层索引、数据重塑与轴向旋转)
pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...
- java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- PythonOCC 3D图形库学习—创建立方体模型
Open CASCADE(简称OCC)平台是是一个开源的C++类库,OCC主要用于开发二维和三维几何建模应用程序,包括通用的或专业的计算机辅助设计CAD系统.制造或分析领域的应用程序.仿真应用程序或图 ...
- UCOS-II学习记录
本文主要记录使用UCOS II的相关内容.包括如何完成第一个UCOS II应用程序,和如何创建任务,如何获取系统时间,和利用i3086 驱动完成时间获取,屏幕显示,按键驱动,信号量等内容. UCOS- ...
- Nodejs 菜鸟教程学习-创建第一个应用
注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...
- lucene&solr学习——创建和查询索引(代码篇)
1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...
- Git学习--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- PHP学习创建水印,缩略图
今天网上学习了一段PHP创建缩略图还有打水印的代码,如下: 其中将图片的路径作为参数传给函数,打水印的过程就是首先获取图片和logo的参数信息,然后将logo图片拷贝到原图的某个位置,然后保存,水印打 ...
随机推荐
- eclipse工程设置项目jre
Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.当我们导入已经存在项目或者通过svn引入项目时经常出现红叉叉的情 ...
- 【c++】面向对象程序设计之继承中的类作用域
当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内. 一个对象.引用或指针的静态类型决定了该对象的哪些成员是可见的.即使静态类型与动态类型可能不一致,但我们使用哪些成员仍然是由静态类型决定的.基 ...
- [Unity-22] Coroutine协程浅析
1.概念解释 协程并非一个独立的线程.在Unity中.全部的语句都是在一个线程中运行的,也就是说.Unity是单线程的(详细的能够參见http://blog.csdn.net/alexander_xf ...
- [Sciter] 资源引用
http://www.cnblogs.com/yinxufeng/p/fb343eecda564aa63bce0bdf15709ddf.html 方式一. 加载外部文件方式二. 加载内存方式三. 加载 ...
- Python标准库:内置函数complex([real[, imag]])
本函数能够使用參数real + imag*j方式创建一个复数.也能够转换一个字符串的数字为复数:或者转换一个数字为复数.假设第一个參数是字符串,第二个參数不用填写.会解释这个字符串且返回复数.只是,第 ...
- HDU 5405 Sometimes Naive 树链剖分+bit*****
Sometimes Naive Problem Description Rhason Cheung had a naive problem, and asked Teacher Mai for h ...
- java语法基础(一)
这个是自己前两年做java视频教程时候的课件.感兴趣的同学可以参考下. 这里是纯粹的语法行总结. editplus的使用 选择项目目录 打开editplus 左侧目录导航栏 可以打开盘符,文件夹 可以 ...
- POJ1236 Network of Schools —— 强连通分量 + 缩点 + 入出度
题目链接:http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Tot ...
- 全局Timestamp管理器 检测js执行时间
随手写了个小工具,主要为了测试不同混淆程度的javascript脚本的加载速度1. [代码]Timestamp.js (function() { if (typeof this.Timestamp = ...
- 一步一步学Silverlight 2系列(4):鼠标事件处理
一步一步学Silverlight 2系列(4):鼠标事件处理 概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言V ...