UCOS--------(一)概览

UCOS是一种典型的MCU操作系统。在以前的工作中用到过,相比于裸机,使用操作系统可以更好的利用MCU的资源并简化开发。最近有人在问,于是就写个博客,做下简单的介绍。本文的硬件环境是stm32f103c8t6。

概览

下面的代码展示了一个UCOS程序,功能为GPIOC13口驱动LED闪烁。
直接上代码:
文件:app.c

#include <includes.h>

//任务1
static OS_STK TommyTaskSTK[8];

void GPIO_Configuration(void);
void TommyTask1(void *p_arg);
void Delay(u32 nCount);

//操作系统入口函数
int  main (void)
{
	INT8U  err;
	//Set the Vector Table base location at 0x08000000 
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   

    //Initialize "uC/OS-II, The Real-Time Kernel" 
	OSInit();    
	
	//初始化 GPIOC, GPIO_Pin_13
	GPIO_Configuration(); 

   //Create the start task
	/*创建任务函数
	OSTaskCreate(void (*task)(void *p_arg),
								void *p_arg,
								OS_STK *ptos,
								INT8U prio);	
	*/
			
	//创建任务1								
    OSTaskCreate(TommyTask1,                        //任务函数指针
				(void*)0,                           //任务函数参数
				(OS_STK *)&TommyTaskSTK[7],         //栈顶指针
				2);                                 //任务优先级
								
    #if (OS_TASK_NAME_SIZE > 13)
        OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);
    #endif

    OSStart();    /* Start multitasking (i.e. give control to uC/OS-II)       */
}

//任务1
void TommyTask1(void *p_arg)
{
	for(;;)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13); //Pin13复位
		Delay(0xfffff);
		GPIO_SetBits(GPIOC, GPIO_Pin_13); //Pin13置位
		Delay(0xfffff);
	}
}

//初始化GPIOC13
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE); 						 
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

//简单延时函数
void Delay(u32 nCount)
{
  for(; nCount != 0; nCount--);
}

观察上面的代码可以发现,一个最简单UCOS的主函数包括这几个部分:
1.用户变量和函数声明和定义
2.系统初始化
3.外设初始化
4.创建任务
5.启动系统

注意:UCOS至少要有一个任务,否则不能运行。
将上面的代码编译后下载到MCU后,就可以看到Led闪烁。

当有多个任务时,操作系统就会根据优先级和具体的任务状态进行任务切换。

发布了6 篇原创文章 · 获赞 2 · 访问量 2201

猜你喜欢

转载自blog.csdn.net/xixifeb/article/details/102561834
今日推荐