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

📄 ucos_app.c

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 C
字号:
/*
*********************************************************************************************************
*
*                                             EXAMPLE CODE
*                                 uC/OS-II 2.84在LPC2400实验板上的范例程序
*                                 本程序的各种配置在app_cfg.h文件
*
* Filename      : uCOS_app.c
* Version       : V1.00
* Programmer(s) : HuangJianhua
* Time          : 2008-01-11
*********************************************************************************************************
*/
#include <includes.h>
#include "type.h"
#include "target.h"                                     /* 目标板驱动 */
#include "bsp.h"                                        /* BSP,包括中断初始化和串口驱动等 */

#include "fio.h"                                        /* Led驱动 */

/*
*********************************************************************************************************
*                                           常量定义
*********************************************************************************************************
*/
#define OS_VIEW_MODULE 1                                /* 启用OS_VIEW */

/*
*********************************************************************************************************
*                                            本地变量
*********************************************************************************************************
*/
static  OS_STK          AppTaskStartStk[APP_TASK_START_STK_SIZE];       /*任务堆栈 */
static  OS_STK          AppTaskLEDStk[APP_TASK_LED_STK_SIZE];

/*
*********************************************************************************************************
*                                         本地函数原型
*********************************************************************************************************
*/
static  void            AppTaskStart                (void *p_arg);
static  void            AppTaskLed (void *p_arg);

#if OS_VIEW_MODULE > 0
static  void            AppTerminalRx               (CPU_INT08U rx_data);
#endif

/*
*********************************************************************************************************
*                                                main()
*
*********************************************************************************************************
*/
void  main (void)
{
    CPU_INT08U  err;

    TargetResetInit();                                          /* 目标板初始化 */
    GPIOInit(3,1,1);                                            /* Led初始化 */
    Ser_Init ();                                                /* 串口初始化 */
    Ser_Printf("\r\nuC/OS-II now start running ... \r\n");

    BSP_IntDisAll();                                            /* 禁用中断,直到OS启用 */

    OSInit();                                                   /* uC/OS-II初始化 */

    OSTaskCreateExt(AppTaskStart,                               /* 建立初始任务 */
                    (void *)0,
                    (OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1],
                    APP_TASK_START_PRIO,
                    APP_TASK_START_PRIO,
                    (OS_STK *)&AppTaskStartStk[0],
                    APP_TASK_START_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

#if OS_TASK_NAME_SIZE > 13
    OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);     /* 任务命名 */
#endif

    OSStart();                                                  /* 开始多任务调度  */
}

/*
*********************************************************************************************************
*                                          STARTUP TASK
*
* Description : 这是一个初始任务范例,它启动其它任务,并在串口上打印提示信息。
*               系统节拍tick必须在这里,也就是多任务开始以后启动。
*
* Arguments   : p_arg   是一个参数 passed to 'AppStartTask()' by 'OSTaskCreate()'.
*
* Returns     : none
*
* Notes       : 程序的第一行只是为了防止出现编译警告。编译器不会为它产生任何代码。
*********************************************************************************************************
*/
static  void  AppTaskStart (void *p_arg)
{
    (void)p_arg;
    CPU_INT32U      delay0;

    BSP_Init();                                                 /* 在BSP初始化时进行系统节拍tick初始化  */

#if OS_TASK_STAT_EN > 0
    OSStatInit();                                               /* 启动系统统计任务  */
#endif

#if OS_VIEW_MODULE > 0
    OSView_Init(115200);                                        /* OSView 初始化, baud rate = 115200                          */
    OSView_TerminalRxSetCallback(AppTerminalRx);
    OSView_RxIntEn();                                           /* 启动接收中断  */
#endif

/******************************************* 创建其它任务在这里实现 *************************************/
    OSTaskCreateExt(AppTaskLed,                                 /* 第二个任务建立 */
                    (void *)0,
                    (OS_STK *)&AppTaskLEDStk[APP_TASK_LED_STK_SIZE - 1],
                    APP_TASK_Led_PRIO,
                    APP_TASK_Led_PRIO,
                    (OS_STK *)&AppTaskLEDStk[0],
                    APP_TASK_LED_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);


/************************************ 本任务实体,必须写成一个无穷循环 **********************************/
    while (DEF_TRUE)
    {
            Ser_Printf("This is a uC/OS-II test, Task 1 .\r\n");
            delay0  = 1000;
            OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
    }
}

/*
*********************************************************************************************************
*                                    LED TASK
*
* Description : 单纯的LED和串口提示
*
* Arguments   : p_arg   is the argument passed to 'AppStartKbd()' by 'OSTaskCreate()'.
*
* Returns     : none
*********************************************************************************************************
*/
static  void  AppTaskLed (void *p_arg)
{
    (void)p_arg;
    CPU_INT08U      i;
    CPU_INT32U      delay0;

    delay0  = 100;

    while(1)
    {
      Ser_Printf("This is a uC/OS-II test, Task 2 .\r\n");

      for (i = 1; i <= 4; i++)
      {
        LedOn(i);
        OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
        LedOff(i);
        OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
      }

      OSTimeDly(OS_TICKS_PER_SEC / 10);
    }
}

/*
*********************************************************************************************************
*                                          uC/OS-VIew 终端窗口回显
*
* Description : 这是uC/OS-View的回显函数。如果有需要就自己写。
*
* Arguments   : rx_data是接收到的数据
*
* Returns     : none
*********************************************************************************************************
*/

#if OS_VIEW_MODULE > 0
static  void  AppTerminalRx (CPU_INT08U rx_data)
{
}
#endif

⌨️ 快捷键说明

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