uC/OS-II 学习笔记之:怎样在uC/OS-II里创建一个任务?
2013-03-14 16:22
495 查看
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
怎样在uC/OS-II里创建一个任务?
下面以创建一个串口发送数据的任务为例:
步骤如下:
(1)设置任务堆栈大小
#define USART_STK_SIZE 64
(2)定义任务堆栈
OS_STK TASK_USART_STK[USART_STK_SIZE];
(3)设置任务优先级
#define USART_TASK_Prio 3
(4)任务函数声明
void Usart(void *pdata);
(5)在起始任务里创建任务
OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);
(6)完成函数代码
void Usart(void *pdata)
{
完成此处代码的书写;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关程序如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "includes.h"
//(1)
#define USART_STK_SIZE 64
//(2)
OS_STK TASK_USART_STK[USART_STK_SIZE];
//(3)
#define USART_TASK_Prio 3
//(4)
void Usart(void *pdata);
//主函数
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72);//延时初始化
uart_init(72,9600);//串口初始化为9600
LED_Init();//初始化与LED连接的硬件接口
SysTick_Configuration();//系统时钟配置
OSInit();//对uC/OS-II进行初始化
//创建起始任务
OSTaskCreate(
TaskStart,//任务指针
(void *)0,//传递给任务的参数
&TASK_START_STK[START_STK_SIZE-1],//任务堆栈栈顶指针
START_TASK_Prio//任务优先级
);
//开始多任务调度
OSStart();//此步之后任务就交由操作系统来管理和调度了
return 0;
}
//(5)
void TaskStart(void * pdata)
{
pdata = pdata;//防止某些编译器报错
//关中断进入临界段
OS_ENTER_CRITICAL();//此函数为汇编代码,在os_cpu_a.asm文件 里
//创建任务
OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);
OSTaskSuspend(OS_PRIO_SELF);//挂起但未删除
//开中断退出临界段
OS_EXIT_CRITICAL();
}
//(6)
void Usart(void *pdata)
{
char USART_DX_BUF[] = "abcdefg";
char i = 0;
while (1)
{
for (i=0; i<7; ++i)
{
USART1->DR = USART_DX_BUF[i];
while ((USART1->SR & 0X40) == 0);
}
OSTimeDlyHMSM(0, 0, 0, 100);
}
}
说明:大家在uC/OS-II里创建任务时,就可以参照这个步骤来!
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
怎样在uC/OS-II里创建一个任务?
下面以创建一个串口发送数据的任务为例:
步骤如下:
(1)设置任务堆栈大小
#define USART_STK_SIZE 64
(2)定义任务堆栈
OS_STK TASK_USART_STK[USART_STK_SIZE];
(3)设置任务优先级
#define USART_TASK_Prio 3
(4)任务函数声明
void Usart(void *pdata);
(5)在起始任务里创建任务
OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);
(6)完成函数代码
void Usart(void *pdata)
{
完成此处代码的书写;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关程序如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "includes.h"
//(1)
#define USART_STK_SIZE 64
//(2)
OS_STK TASK_USART_STK[USART_STK_SIZE];
//(3)
#define USART_TASK_Prio 3
//(4)
void Usart(void *pdata);
//主函数
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72);//延时初始化
uart_init(72,9600);//串口初始化为9600
LED_Init();//初始化与LED连接的硬件接口
SysTick_Configuration();//系统时钟配置
OSInit();//对uC/OS-II进行初始化
//创建起始任务
OSTaskCreate(
TaskStart,//任务指针
(void *)0,//传递给任务的参数
&TASK_START_STK[START_STK_SIZE-1],//任务堆栈栈顶指针
START_TASK_Prio//任务优先级
);
//开始多任务调度
OSStart();//此步之后任务就交由操作系统来管理和调度了
return 0;
}
//(5)
void TaskStart(void * pdata)
{
pdata = pdata;//防止某些编译器报错
//关中断进入临界段
OS_ENTER_CRITICAL();//此函数为汇编代码,在os_cpu_a.asm文件 里
//创建任务
OSTaskCreate(Usart, (void *)0, &TASK_USART_STK[USART_STK_SIZE-1], USART_TASK_Prio);
OSTaskSuspend(OS_PRIO_SELF);//挂起但未删除
//开中断退出临界段
OS_EXIT_CRITICAL();
}
//(6)
void Usart(void *pdata)
{
char USART_DX_BUF[] = "abcdefg";
char i = 0;
while (1)
{
for (i=0; i<7; ++i)
{
USART1->DR = USART_DX_BUF[i];
while ((USART1->SR & 0X40) == 0);
}
OSTimeDlyHMSM(0, 0, 0, 100);
}
}
说明:大家在uC/OS-II里创建任务时,就可以参照这个步骤来!
相关文章推荐
- uC/OS-II 学习笔记:任务创建步骤
- uC/OS-II 学习笔记之:任务的概念
- uC/OSII的任务 学习笔记
- uC/OS-II 学习笔记:任务控制块ECB
- uC/OS-II 学习笔记之:任务的优先级别和任务数
- uC/OS-II 学习笔记之:任务就绪表-举例详解!
- uC/OS-II 学习笔记:任务堆栈
- uC/OS-II 学习笔记之:任务挂起与恢复,调度器上锁与解锁!
- uC/OS-II 学习笔记之:任务删除
- uC/OS-II 学习笔记之:任务堆栈
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
- ucos-ii学习笔记1 创建任务&&任务调度
- uC/OS-II 学习笔记:信号量
- uC/OS-II 学习笔记:事件
- UC/OS-II学习笔记之消息队列使用
- uC/OS-II 学习笔记之:信号量
- uC/OS II学习时的一个重要函数 OSInit( )
- uC/OS II 学习笔记
- uC/OS-II 学习笔记:消息队列
- uC/OSii 的学习笔记 ( 2 )