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闪烁。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值