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

📄 task.c

📁 UCOS-III
💻 C
字号:
#include "includes.h"
#include "bsp.h"

#define OS_TASK_LEDA_PRIO           7
#define OS_TASK_LEDB_PRIO           8

#define OS_LEDA_TASK_STACK_SIZE     64
#define OS_LEDB_TASK_STACK_SIZE     64

CPU_STK  LEDATaskStk[OS_LEDA_TASK_STACK_SIZE];
CPU_STK  LEDBTaskStk[OS_LEDB_TASK_STACK_SIZE];

OS_TCB LEDATaskStkTCB;
OS_TCB LEDBTaskStkTCB;


static  OS_SEM   AppSem;


void leda_task_core(void *pdata)
{
    OS_ERR err;
	CPU_TS  ts=0;
    pdata = pdata;
    
    while(1)
    {
		printf("LEDA等待信号量\n");
        OSSemPend(&AppSem,0,OS_OPT_PEND_BLOCKING,&ts,&err);
        LED_NF(2);
        printf("LEDA得到信号量\n");           
    }
}

void ledb_task_core(void *pdata)
{
    OS_ERR err;
    pdata = pdata;
	
    while(1)
    {
		printf("LEDB释放信号量\n");
	 	OSSemPost(&AppSem,OS_OPT_POST_ALL,&err);
		OSTimeDlyHMSM(0, 0, 1, 0,OS_OPT_TIME_HMSM_STRICT,&err); 
    }
}


void  AppTaskStart (void *p_arg)
{
    CPU_INT32U  cpu_clk_freq;
    CPU_INT32U  cnts;
    OS_ERR      err;

   (void)p_arg;

    BSP_Init();                                                   /* Initialize BSP functions                         */

    cpu_clk_freq = BSP_CPU_ClkFreq();                             /* Determine SysTick reference freq.                */                                                                        
    cnts         = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;  /* Determine nbr SysTick increments                 */
    OS_CPU_SysTickInit(cnts);                                     /* Init uC/OS periodic time src (SysTick).          */
	//OS_CPU_SysTickInit(720000);  

	OSSemCreate(&AppSem, "Test Sem", 0, &err);


    OSTaskCreate((OS_TCB *)&LEDATaskStkTCB, 
                (CPU_CHAR *)"leda task", 
                (OS_TASK_PTR)leda_task_core, 
                (void * )0, 
                (OS_PRIO)OS_TASK_LEDA_PRIO, 
                (CPU_STK *)&LEDATaskStk[0], 
                (CPU_STK_SIZE)OS_LEDA_TASK_STACK_SIZE/10, 
                (CPU_STK_SIZE)OS_LEDA_TASK_STACK_SIZE, 
                (OS_MSG_QTY) 0, 
                (OS_TICK) 0, 
                (void *)0,
                (OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
                (OS_ERR*)&err);
	
    OSTaskCreate((OS_TCB *)&LEDBTaskStkTCB, 
                (CPU_CHAR *)"ledb task", 
                (OS_TASK_PTR)ledb_task_core, 
                (void * )0, 
                (OS_PRIO)OS_TASK_LEDB_PRIO, 
                (CPU_STK *)&LEDBTaskStk[0], 
                (CPU_STK_SIZE)OS_LEDB_TASK_STACK_SIZE/10, 
                (CPU_STK_SIZE)OS_LEDB_TASK_STACK_SIZE, 
                (OS_MSG_QTY) 0, 
                (OS_TICK) 0, 
                (void *)0,
                (OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
                (OS_ERR*)&err);





#if OS_CFG_STAT_TASK_EN > 0u
    OSStatTaskCPUUsageInit(&err);                                 /* Compute CPU capacity with no task running        */
#endif
#if OS_CFG_APP_HOOKS_EN > 0u
	App_OS_SetAllHooks();
#endif

    while (1) 
	{                                            /* Task body, always written as an infinite loop.   */

       GPIOG->ODR^=1<<0; 
                       
       OSTimeDlyHMSM(0, 0, 0, 500,OS_OPT_TIME_HMSM_STRICT,&err);                
    }
}

⌨️ 快捷键说明

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