⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 IAR_STM32_uCOS-II.rar
💻 C
字号:
//*
//*********************************************************************************************************
//*
//*                                                 LOGO
//*
//*
//* 文 件 名 : main.c
//*
//* 文件描述 : STM32系统主文件
//*
//* 作    者 : 
//* 版    本 : 
//* 编 译 器 : IAR EWARM 5.20
//*********************************************************************************************************
//*
#define  OS_GLOBALS
#include "app_cfg.h"

//*
//*********************************************************************************************************
//*                                              测试
//*********************************************************************************************************
//*
#define			Task1_LED1_Stk_Size		64
#define			Task2_LED2_Stk_Size		64
#define			Task3_LED3_Stk_Size		64
#define			Task4_LED4_Stk_Size		64

#define			Task1_LED1_Prio			11
#define			Task2_LED2_Prio			12
#define			Task3_LED3_Prio			13
#define			Task4_LED4_Prio			14

OS_STK			Task1_LED1_Stk[Task1_LED1_Stk_Size];
OS_STK			Task2_LED2_Stk[Task2_LED2_Stk_Size];
OS_STK			Task3_LED3_Stk[Task3_LED3_Stk_Size];
OS_STK			Task4_LED4_Stk[Task4_LED4_Stk_Size];

static void Task1_LED1(void *pdata);
static void Task2_LED2(void *pdata);
static void Task3_LED3(void *pdata);
static void Task4_LED4(void *pdata);

//*
//********************************************************************************************************
//* 函 数 名 : static void APP_TaskStart(void *pdata)
//**------------------------------------------------------------------------------------------------------
//* 描    述 : main
//**------------------------------------------------------------------------------------------------------
//* 输入参数 : None.
//**------------------------------------------------------------------------------------------------------
//* 输出参数 : None.
//**------------------------------------------------------------------------------------------------------
//* 返   回  : None.
//********************************************************************************************************
//*
static void APP_TaskStart(void *pdata)
{
    pdata = pdata;
    
    //目标板初始化,
    Target_Init();
    
    // 启动系统Tick
    OS_CPU_SysTickInit();

    //统计任务初始化
    #if OS_TASK_STAT_EN > 0
    OSStatInit();
    #endif

    //事件的建立
    CreateEvents();

    //系统多任务的建立
    CreateMultiTask();
    
    //开始任务自动挂起
    //OSTaskSuspend(OS_PRIO_SELF);
    while(1)
    {
        // 测试
        INT8U err;
        GPIO_InitTypeDef GPIO_InitStructure;
        
        // 打开控制端口时钟    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        
        OSTaskCreateExt(Task1_LED1,
                    (void *)0,
                    &Task1_LED1_Stk[Task1_LED1_Stk_Size - 1],
                    Task1_LED1_Prio,
                    Task1_LED1_Prio,
                    &Task1_LED1_Stk[0],
                    Task1_LED1_Stk_Size,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	OSTaskNameSet(Task1_LED1_Prio, "Task1-LED1", &err);
	
	
	OSTaskCreateExt(Task2_LED2,
                    (void *)0,
                    &Task2_LED2_Stk[Task2_LED2_Stk_Size - 1],
                    Task2_LED2_Prio,
                    Task2_LED2_Prio,
                    &Task2_LED2_Stk[0],
                    Task2_LED2_Stk_Size,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	OSTaskNameSet(Task2_LED2_Prio, "Task2-LED2", &err);
	

	OSTaskCreateExt(Task3_LED3,
                    (void *)0,
                    &Task3_LED3_Stk[Task3_LED3_Stk_Size - 1],
                    Task3_LED3_Prio,
                    Task3_LED3_Prio,
                    &Task3_LED3_Stk[0],
                    Task3_LED3_Stk_Size,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	OSTaskNameSet(Task3_LED3_Prio, "Task3-LED3", &err);
	

	OSTaskCreateExt(Task4_LED4,
                    (void *)0,
                    &Task4_LED4_Stk[Task4_LED4_Stk_Size - 1],
                    Task4_LED4_Prio,
                    Task4_LED4_Prio,
                    &Task4_LED4_Stk[0],
                    Task4_LED4_Stk_Size,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
	OSTaskNameSet(Task4_LED4_Prio, "Task4-LED4", &err);
        
        OSTimeDly(OS_TICKS_PER_SEC);
        OSTaskSuspend(OS_PRIO_SELF);
    }
}

//*
//********************************************************************************************************
//* 函 数 名 : void main(void)
//**------------------------------------------------------------------------------------------------------
//* 描    述 : main
//**------------------------------------------------------------------------------------------------------
//* 输入参数 : None.
//**------------------------------------------------------------------------------------------------------
//* 输出参数 : None.
//**------------------------------------------------------------------------------------------------------
//* 返   回  : None.
//********************************************************************************************************
//*
void main(void)
{
    #if (OS_TASK_NAME_SIZE > 14) && (OS_TASK_STAT_EN > 0)
    INT8U  err;
    #endif
    
    OSInit();
    
    //设置空闲任务名称
    #if OS_TASK_NAME_SIZE > 14
    OSTaskNameSet(OS_TASK_IDLE_PRIO, "uC/OS-II Idle", &err);
    #endif
    //设置统计任务名称
    #if (OS_TASK_NAME_SIZE > 14) && (OS_TASK_STAT_EN > 0)
    OSTaskNameSet(OS_TASK_STAT_PRIO, "uC/OS-II Stat", &err);
    #endif
    
    //用任务建立任务
    OSTaskCreateExt(APP_TaskStart,                                        //void (*task)(void *pd) 任务首地址
                    (void *)0,                                            //void *pdata            数据指针
                    &APP_TaskStartStk[APP_TASK_START_STK_SIZE - 1],       //OS_STK *ptos           指向任务堆栈栈顶的指针
                    (INT8U)APP_TASK_START_PRIO,                           //INT8U prio             任务优先级
                    (INT16U)APP_TASK_START_ID,                            //INT16U id              任务的ID号
                    &APP_TaskStartStk[0],                                 //OS_STK *pbos           指向任务堆栈栈底的指针
                    (INT32U)APP_TASK_START_STK_SIZE,                      //INT32U stk_size        堆栈容量
                    (void *)0,                                            //void *pnext            数据指针
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);           //INT16U opt             设定OSTaskCreateExt的选项

    #if OS_TASK_NAME_SIZE > 14
    OSTaskNameSet(APP_TASK_START_PRIO, "Task-Start", &err);
    #endif

    OSStart();
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
static void Task1_LED1(void *pdata)
{
    pdata = pdata;
    while(1)
    {
        GPIO_ResetBits(GPIOC, GPIO_Pin_4);
        OSTimeDly(OS_TICKS_PER_SEC * 2);
        GPIO_SetBits(GPIOC, GPIO_Pin_4);
        OSTimeDly(OS_TICKS_PER_SEC * 2);
    }
}
//********************************************************************************************************
static void  Task2_LED2(void *pdata)
{
    pdata = pdata;
    while(1)
    {
        GPIO_ResetBits(GPIOC, GPIO_Pin_5);
        OSTimeDly(OS_TICKS_PER_SEC / 1);
        GPIO_SetBits(GPIOC, GPIO_Pin_5);
        OSTimeDly(OS_TICKS_PER_SEC / 1);
    }
}
//********************************************************************************************************
static void  Task3_LED3(void *pdata)
{
    pdata = pdata;
    while(1)
    {
        GPIO_ResetBits(GPIOC, GPIO_Pin_6);
        OSTimeDly(OS_TICKS_PER_SEC / 2);
        GPIO_SetBits(GPIOC, GPIO_Pin_6);
        OSTimeDly(OS_TICKS_PER_SEC / 2);
    }
}
//********************************************************************************************************
static void  Task4_LED4(void *pdata)
{
    pdata = pdata;
    
    while(1)
    {
        GPIO_ResetBits(GPIOC, GPIO_Pin_7);
        OSTimeDly(OS_TICKS_PER_SEC / 4);
        GPIO_SetBits(GPIOC, GPIO_Pin_7);
        OSTimeDly(OS_TICKS_PER_SEC / 4);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -