UCOS II移植到STM32F103开发板

早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。
简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。
本文讲解如何在STM32F103开发板上移植UCOS II操作系统。
使用:战舰开发板V3,ST-LINK,KEIL,sscom
准备工作:
1、ucos II源码,可以在官网下载,也可以通过在文章末尾打包好的各种文件下载。
下载的源码文档中有两个文件夹Doc、Source,源码主要包含在Source中。

UCOS II移植到STM32F103开发板_第1张图片
2、准备跑马灯工程,同上也可以在文章末尾下载。
UCOS II移植到STM32F103开发板_第2张图片
3、在工程中新建UCOSII文件夹,在其中新建CORE,CONFIG、PORT三个文件夹备用。
UCOS II移植到STM32F103开发板_第3张图片
4、向文件夹中添加文件
向CORE文件夹中添加UCOS II源码Source文件夹下的文件,注意os_cfg.h和os_dbg_r.c这两个文件不要添加,共12个

UCOS II移植到STM32F103开发板_第4张图片
向CONFIG文件夹中添加includes.h和os_cfg.h这两个文件(一并放在打包文件里)includes.h文件中主要包含的是头文件,os_cfg.h文件主要是对UCOS II进行了裁剪。
UCOS II移植到STM32F103开发板_第5张图片
向PORT文件夹添加os_cpu.h、os_cpu_a.asm、os_cpu_c.c、os_dbg.c和os_dgb_r.c(一并放在打包文件里)
UCOS II移植到STM32F103开发板_第6张图片

5、将UCOSII有关的文件添加到工程中
UCOS II移植到STM32F103开发板_第7张图片
UCOS II移植到STM32F103开发板_第8张图片
向分组UCOSII-CORE中添加CORE文件夹下除ucosii.c外的所有.c文件;
向分组UCOSII-PORT中添加PORT文件夹下的os_cpu.h、os_cpu_a.asm、os_cpu_c.c;
向分组UCOSII-CONFIG中添加CONFIG文件夹下的includes.h和os_cfg_.h
添加过程中选择All files文件查找
UCOS II移植到STM32F103开发板_第9张图片
添加完如图
UCOS II移植到STM32F103开发板_第10张图片
最后添加相关的头文件路径
UCOS II移植到STM32F103开发板_第11张图片
6、编译会出错,打不开app_cfg.h头文件,可追踪到ucos_ii.h文件中,将这个头文件屏蔽掉,添加includes.h头文件。
UCOS II移植到STM32F103开发板_第12张图片
再编译会出错,重定义了PendSV_Handler这个中断函数,我们将STM32F10x_it.o中的这个函数屏蔽掉。
UCOS II移植到STM32F103开发板_第13张图片
7、修改sys.h头文件,里面有一个SYSTEM_SUPPORT_UCOS宏定义,改为1支持UCOS系统。再编译工程会出错,重定义了SysTick_Handler这个中断函数,同上将STM32F10x_it.o中的这个函数屏蔽掉。
UCOS II移植到STM32F103开发板_第14张图片
8、软件设计,main函数中建立三个任务简单测试,建立start_task任务创建其他三个任务。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "includes.h" 
 

//START 任务
//设置优先级
#define START_TASK_PRIO     10   //开始任务的优先级设为最低
//设置任务堆栈大小
#define START_STK_SIZE      128  
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);

//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO      7
//设置任务堆栈大小
#define LED0_STK_SIZE       64
//任务堆栈
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);

//LED1任务
//设置任务优先级
#define LED1_TASK_PRIO      6
//设置任务堆栈大小
#define LED1_STK_SIZE       128
//任务堆栈
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任务函数
void led1_task(void *pdata);

//浮点测试任务
//设置任务优先级
#define FLOAT_TASK_PRIO     5
//设置任务堆栈大小
#define FLOAT_STK_SIZE      128
//任务堆栈
//如果任务中使用printf来打印浮点数据的话要8个字节对齐
__align(8)OS_STK FLOAT_TASK_STK[FLOAT_STK_SIZE];
//任务函数
void float_task(void *pdata);



int main(void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
	uart_init(115200);
	LED_Init();
	
	OSInit();    //UCOS初始化
	OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);//创建开始任务
	OSStart(); //开始任务	
}

//开始任务
void start_task(void*pdata)
{
	OS_CPU_SR cpu_sr=0;
	pdata=pdata;
	OSStatInit();  //开启统计任务
	
	OS_ENTER_CRITICAL();  //进入临界区(关闭中断)
	//创建LED0任务
	OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
	//创建LED1任务
	OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
	//创建浮点测试任务
	OSTaskCreate(float_task,(void*)0,(OS_STK*)&FLOAT_TASK_STK[FLOAT_STK_SIZE-1],FLOAT_TASK_PRIO);
	OSTaskSuspend(START_TASK_PRIO);  //挂起开始任务
	OS_EXIT_CRITICAL();              //退出临界区(开中断)
}

//LED0任务
void led0_task(void*pdata)
{
	while(1)
	{
		LED0=0;
		delay_ms(80);
		LED0=1;
		delay_ms(400);
	}
}

//LED1任务
void led1_task(void*pdata)
{
	while(1)
	{
		LED1=0;
		delay_ms(300);
		LED1=1;
		delay_ms(300);
	}
}

//浮点测试任务
void float_task(void*pdata)
{
	OS_CPU_SR cpu_sr=0;
	static float float_num=0.01;
	while(1)
	{
		float_num+=0.01f;
		OS_ENTER_CRITICAL();    //进入临界区(关闭中断)
		printf("float_num的值为:%.4f\r\n",float_num);  //串口打印结果
		OS_EXIT_CRITICAL();     //退出临界区(开中断)
		delay_ms(500);
	}
}


9、程序说明,在main函数中共建立了4个任务:start_task、led0_task、led1_task和float_task。
start_task用于创建其他3个任务,当创建完其他三个任务后就会挂起;
led0_task、led1_task两个任务让LED闪烁;
float_task用于测试FPU能否正常使用,每隔500ms给float_num 加0.01,然后串口打印出来。
10、ST_Link 下载验证,串口助手输出显示是否正常。UCOSII移植完成。
UCOS II移植到STM32F103开发板_第15张图片

10、打包好的资源下载:
UCOS II移植到STM32F103开发板_第16张图片
连接:https://download.csdn.net/download/qq_41877422/10905464
如果连接失效请留言,看到后及时处理!

你可能感兴趣的:(UCOS,UCOS,II,STM32F103,移植)