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

📄 app.c

📁 适用MCU: TI MSP430 5XX 适用ucos-ii版本:2.86 编译环境:IAR4.11B 主要的工作: 在MICRIUM网站上430移植代码的基础上进行了修改:5XX系列PC寄
💻 C
字号:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                              (c) Copyright 2002, Micrium, Inc., Weston, FL
*                                           All Rights Reserved
*
*                                                TI MSP430
*********************************************************************************************************
*/

#include "includes.h"

/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

#define  TASK_STK_SIZE                  64       /* Size of each task's stacks (# of OS_STK entries)   */

/*
*********************************************************************************************************
*                                               VARIABLES
*********************************************************************************************************
*/

OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   TaskLedFlashStk[TASK_STK_SIZE];


/*$PAGE*/
/*
*********************************************************************************************************
*                                                MAIN
*********************************************************************************************************
*/

void  main (void)
{
    INT8U  err;
    WDTCTL = WDTPW + WDTHOLD;     //stop wdt timer

    OSInit();                                              /* Initialize uC/OS-II                      */
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], Task_Start_PRIO);
    #if OS_TASK_NAME_SIZE >=10
    OSTaskNameSet(Task_Start_PRIO, (INT8U *)"TaskStart", &err);
    #endif
    OSStart();                                             /* Start multitasking                       */
}

/*
*********************************************************************************************************
*                                            STARTUP TASK
*********************************************************************************************************
*/

void  TaskStart (void *pdata)
{
    INT8U  err;
    pdata  = pdata;                                        /* Prevent compiler warning                 */

    WDTCTL = WDT_MDLY_32;                                  /* Set time tick 32 mS                      */
    SFRIE1  |= WDTIE;                                         /* Enable Watchdog timer interrupts         */
    
    
    /* Application specific initialization */
    OSTaskCreate(TaskLedFlash, (void *)0, &TaskLedFlashStk[TASK_STK_SIZE - 1], Task_LedFlash_PRIO);
    #if OS_TASK_NAME_SIZE >=10
    OSTaskNameSet(Task_LedFlash_PRIO, (INT8U *)"TaskLed", &err);
    #endif
    
    
    while (1) {
        /* Task specific code */
        OSTaskSuspend(OS_PRIO_SELF);     //  The start task can be pended here. 启动任务可在这里挂起
    
        OSTimeDly(1);   
    }
}


void   TaskLedFlash(void *data)
{
  while(1)
  {
    // do something
    OSTimeDly(1);
  }
}

/*
中断ISR程序
1、保存R4-R15,如不是中断嵌套,则修改被中断的任务堆栈的栈顶(因为进行了压栈)
2、调用OSIntEnter()或者OSIntNesting++
3、开中断,运行中断服务程序(发布信号量,TIMETICK),关中断
4、调用OSIntExit(),在这个程序里如果没有中断嵌套,则进行调度,
   如果发现有比被中断任务优先级更高的任务,则进行任务切换( 调用OSIntCtxSw() ),程序不返回ISR
   如果没有发现优先级更高的任务,则返回ISR主程序。
5、如果没有中断嵌套,把被中断任务栈顶恢复到SP,弹出压栈的register
6、中断返回
*/

⌨️ 快捷键说明

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