UCOSIII操作系统
UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
【UCOSIII操作系统】任务篇(1)创建任务
【UCOSIII操作系统】任务篇(2)相关API函数
【UCOSIII操作系统】系统初始化篇(1)系统初始化
【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化
【UCOSIII操作系统】消息队列篇(1)消息队列
【UCOSIII操作系统】消息队列篇(2)任务消息队列
【UCOSIII操作系统】信号量与互斥量篇(1)信号量
【UCOSIII操作系统】信号量与互斥量篇(2)互斥量
【UCOSIII操作系统】信号量与互斥量篇(3)任务信号量
【UCOSIII操作系统】事件篇
【UCOSIII操作系统】中断管理篇
【UCOSIII操作系统】临界段篇
【UCOSIII操作系统】软件定时器篇
【UCOSIII操作系统】内存管理篇
已完结
说在前面:
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正
UCOSIII操作系统——硬件初始化篇(1)硬件初始化以及启动多任务管理
硬件初始化
- 硬件初始化比如IO,串口,I2C等初始化
- 硬件初始化的初始化函数一般都放在bsp.c 里面的void BSP_Init (void) 这个函数里面,然后开始任务再调用这个函数完成硬件初始化。
- 首先要把硬件的驱动文件(即xxx.c和xxx.h)添加到工程里面,.h文件一般放在bsp.h 里面。
/********************************************************************************************
* bsp.h
*********************************************************************************************/
#include <stdarg.h>
#include <stdio.h>
#include <cpu.h>
#include <cpu_core.h>
#include <lib_ascii.h>
#include <lib_def.h>
#include <lib_mem.h>
#include <lib_str.h>
#include "stm32f10x.h" // Modified by fire (原是 #include <stm32f10x_lib.h>)
#include <app_cfg.h>
#include "led.h" // Modified by fire (没有使用评估板的板载驱动,使用自己的裸机板载驱动文件)
#include "usart.h"
*********************************************************************************************************
* BSP_Init()
*
* Description : Initialize the Board Support Package (BSP).
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) This function SHOULD be called before any other BSP function is called.
*
* (2) CPU instruction / data tracing requires the use of the following pins :
* (a) (1) Aysynchronous : PB[3]
* (2) Synchronous 1-bit : PE[3:2]
* (3) Synchronous 2-bit : PE[4:2]
* (4) Synchronous 4-bit : PE[6:2]
*
* (b) The uC-Eval board MAY utilize the following pins depending on the application :
* (1) PE[5], MII_INT
* (1) PE[6], SDCard_Detection
*
* (c) The application may wish to adjust the trace bus width depending on I/O
* requirements.
*********************************************************************************************************
*/
void BSP_Init (void)
{
NVIC_Configuration();
RCC_Configuration();
LED_Init();
USART1_Init(115200); //串口初始化,参数中写波特率
}
/***********************************************************************
* @ 函数名 : AppTaskStart
* @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
* @ 参数 : 无
* @ 返回值 : 无
**********************************************************************/
static void AppTaskStart (void *p_arg)
{
CPU_INT32U cpu_clk_freq;
CPU_INT32U cnts;
OS_ERR err;
(void)p_arg;
/* 开发板硬件初始化 */
BSP_Init();
CPU_Init();
cpu_clk_freq = BSP_CPU_ClkFreq();
cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;
OS_CPU_SysTickInit(cnts);
/* 内存初始化*/
Mem_Init();
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err);
#endif
CPU_IntDisMeasMaxCurReset();
OSTaskDel ( & AppTaskStartTCB, & err );
}
完成以上操作,就可以在操作系统任务里使用硬件了
开始运行系统
在创建完任务的时候,我们需要开启调度器,因为创建仅仅是把任务添加到系统中,还没真正调度,那怎么才能让系统支持运行呢,uCOS 为我们提供-一个系统启动的函数接口一>OSStart(), 我们使用OSStart()函数就能让系统开始运行。
- 函数原型
/* 开启调度*/
OSStart(&err);
- 应用实例
int main (void)
{
OS_ERR err;
/* 初始化系统*/
OSInit(&err);
/* 创建任务 */
OSTaskCreate((OS_TCB *)&AppTaskStartTCB,
(CPU_CHAR *)"App Task Start",
(OS_TASK_PTR ) AppTaskStart,
(void *) 0,
(OS_PRIO ) APP_TASK_START_PRIO,
(CPU_STK *)&AppTaskStartStk[0],
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE / 10,
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE,
(OS_MSG_QTY ) 5u,
(OS_TICK ) 0u,
(void *) 0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
/* 开启调度*/
OSStart(&err);
}
完成了这些,就可以开始最基本的多任务运行了,具体还得实际操作加深学习