【uCOS-III移植笔记】记录uCOS移植过程(持续更新)

一、移植文件

源码文件包
在这里插入图片描述
移植芯片STM32F103使用的是3.03源码包。
在这里插入图片描述
应用文件移植,暂时只移植选中文件。
在这里插入图片描述
uc-CPU内文件。
uc-CPU
uc-LIB内文件。
uc-LIB
uCOS-III内文件包括Ports和Source。
uCOS-III

Source内文件。
在这里插入图片描述


二、系统启动过程

1、系统初始化
在创建任务之前需要进行系统初始化 OSInit();

2、CPU初始化

CUP_Init();

3、SysTick初始化

OS_CPU_SysTickInit(); // 需要在第一个任务开始的时候调用。

4、内存初始化
uCOS采用一块连续的大数组作为系统管理的内存,CPU_INT08U Mem_Heap[LIB_MEM_CFG_HEAP_SIZE],在使用之前就需要先将管理的内存进行初始化。

Mem_Init();

5、启动任务调度器

OSStart();

三、函数讲解

任务管理

需要在配置文件中使能对应接口功能,移植过程中默认打开。
1、任务挂起

OS_TaskSuspend(&tcb, &err);

2、任务恢复

OSTaskResume(&tcb, &err);

3、任务删除

OSTaskDel(&tcb, &err);

消息队列

声明句柄:

OS_Q queue;

1、创建消息队列函数

void OSQCreate(OS_Q *p_q, 				//消息队列指针  
			CPU_CHAR *p_name, 		//消息队列名称 
			OS_MSG_QTY max_qty, 	//消息队列大小(不能为0)
			OS_ERR *p_err)			//返回错误类型

2、消息队列删除函数

OS_OBJ_QTY OSQDel (OS_Q *p_q, 			//消息队列指针
					OS_OPT opt,  		//选项
					OS_ERR *p_err)  	//返回错误类型

3、消息队列发送函数

void OSQPost (OS_Q *p_q, 				//消息队列指针 
				void *p_void, 			//消息指针  
				OS_MSG_SIZE msg_size,	//消息大小(单位:字节)
				OS_OPT opt, 			//选项 
				OS_ERR *p_err)  		//返回错误类型

4、消息队列获取函数

void *OSQPend (OS_Q *p_q,  					//消息队列指针 
				OS_TICK timeout,  			//等待期限(单位:时钟节拍) 
				OS_OPT opt,  				//选项 
				OS_MSG_SIZE *p_msg_size, 	//返回消息大小(单位:字节) 
				CPU_TS *p_ts,   			//获取等到消息时的时间戳
				OS_ERR *p_err)  			//返回错误类型

信号量

声明信号量句柄:

OS_SEM semaphore;

1、创建信号

OSSemCreate();

2、删除信号

OSSemDel();

3、释放信号

OSSemPost();

4、获取信号

OSSemPend();

互斥量

声明句柄:

OS_MUTEX mutex;

1、创建互斥量

OSMutexCreate();

2、删除互斥量

OSMutexDel();

3、开锁

OSMutexPost();

4、闭锁

OSMutexPend();

事件标志组

声明句柄:

OS_FLAG_GRP flag_grp;

1、创建事件标志

OSFlagCreate();

2、删除事件标志

OSFlagDel();

3、事件标志设置

OSFlagPost();

4、事件标志等待

OSFlagPend();

软件定时器

声明句柄:

OS_TMR tmr;

1、创建定时器

OSTmrCreate();

2、删除定时器

OSTmrDel();

3、启动定时器

OSTmrStart();

4、停止定时器

OSTmrStop();

任务信号量

不需要句柄;

1、释放任务信号

OSTaskSemPost();

2、获取任务信号

OSTaskSemPend();

任务消息队列

不需要创建句柄;

1、发送任务消息

void OSTaskQPost (OS_TCB *p_tcb, 			//目标任务  
					void *p_void, 			//消息内容地址 
					OS_MSG_SIZE msg_size, 	//消息长度 
					OS_OPT opt, 			//选项
					OS_ERR *p_err)			//返回错误类型

2、接收任务消息
注意:消息长度必须用变量接收。

void *OSTaskQPend (OS_TICK timeout, 			//等待期限(单位:时钟节拍) 
					OS_OPT opt, 				//选项 
					OS_MSG_SIZE *p_msg_size,  	//返回消息长度
					CPU_TS *p_ts,  				//返回时间戳 
					OS_ERR *p_err) 			 	//返回错误类型

内存管理

对于可靠性要求高的系统需要用静态内存。

声明内存句柄:

OS_MEM mem; 

OSMemCreate()只能在任务中使用,OSMemGet()和OSMemPut()可以在中断中使用。

1、内存池创建

void OSMemCreate (OS_MEM *p_mem, 				//内存池控制块 
					CPU_CHAR *p_name,  			//命名内存池
					void *p_addr,  				//内存池首地址 
					OS_MEM_QTY n_blks,  		//内存块数目 
					OS_MEM_SIZE blk_size,  		//内存块大小(单位:字节)
					OS_ERR *p_err)  			//返回错误类型

2、内存申请函数

void *OSMemGet (OS_MEM *p_mem,  	//内存管理对象 
				OS_ERR *p_err)  	//返回错误类型

3、内存释放函数

void OSMemPut (OS_MEM *p_mem,  			//内存管理对象  
				void *p_blk,  			//要退回的内存块 
				OS_ERR *p_err)  		//返回错误类型

中断管理


CPU利用率

1、开始之前先初始化
注意:要在创建任务之前初始化。

OSStatTaskCPUUsageInit();

2、统计任务

OS_StatTask()

3、堆栈检测
对于需要进行任务堆栈检测的任务,在其被OSTaskCreate()函数创建时,选项参数 opt 还需包含 OS_OPT_TASK_STK_CHK。

OSTaskStkChk();



  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值