UCOSIII操作系统——硬件初始化篇(1)硬件初始化以及开始运行系统

UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
UCOSIII操作系统——任务篇(1)创建任务
UCOSIII操作系统——任务篇(2)相关API函数
UCOSIII操作系统——系统初始化篇(1)系统初始化
UCOSIII操作系统——系统初始化篇(2)CPU,SysTick,内存初始化
UCOSIII操作系统——硬件初始化篇(1)硬件初始化以及开始运行系统
正在更新整理…

说在前面:
这个内容不适合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); 
}

完成了这些,就可以开始最基本的多任务运行了,具体还得实际操作加深学习

发布了10 篇原创文章 · 获赞 1 · 访问量 122

猜你喜欢

转载自blog.csdn.net/iiinoname/article/details/105184858
今日推荐