亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? artx_config.c

?? 嵌入式例程系列1
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*----------------------------------------------------------------------------
 *      A R T X  -  K e r n e l
 *----------------------------------------------------------------------------
 *      Name:    ARTX_CONFIG.C
 *      Purpose: Configuration of ARTX Kernel for Philips LPC21xx
 *      Rev.:    V2.02 / 6-feb-2006
 *----------------------------------------------------------------------------
 *      This code is part of the ARTX-ARM kernel package of Keil Software.
 *      Copyright (c) 2004-2006 Keil Software. All rights reserved. 
 *---------------------------------------------------------------------------*/

#pragma INTERWORK
#define NOFRAME    __arm __task

#include <LPC21xx.H>                     /* LPC21xx definitions              */
#include <ARTX_Config.h>                 /* ARTX user configuration header   */

/*----------------------------------------------------------------------------
 *      ARTX User configuration part BEGIN
 *---------------------------------------------------------------------------*/

//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
//
// <h>Task Definitions
// ===================
//
//   <o>Number of concurrent running tasks <0-250>
//   <i> Define max. number of tasks that will run at the same time.
//   <i> Default: 6
#ifndef OS_TASKCNT
 #define OS_TASKCNT     6
#endif

//   <o>Number of tasks with user-provided stack <0-250>
//   <i> Define the number of tasks that will use a bigger stack.
//   <i> The memory space for the stack is provided by the user.
//   <i> Default: 0
#ifndef OS_PRIVCNT
 #define OS_PRIVCNT     0
#endif

//   <o>Task stack size [bytes] <20-4096:4><#/4>
//   <i> Set the stack size for tasks which is assigned by the system.
//   <i> Default: 200
#ifndef OS_STKSIZE
 #define OS_STKSIZE     50
#endif

// <q>Check for the stack overflow
// ===============================
// <i> Include the stack checking code for a stack overflow.
// <i> Note that additional code reduces the Kernel performance.
#ifndef OS_STKCHECK
 #define OS_STKCHECK    1
#endif

//   <o>Number of user timers <0-250>
//   <i> Define max. number of user timers that will run at the same time.
//   <i> Default: 0  (User timers disabled)
#ifndef OS_TIMERCNT
 #define OS_TIMERCNT    0
#endif

// </h>
// <h>System Timer Configuration
// =============================
//   <o>ARTX Kernel timer number <0=> Timer 0 <1=> Timer 1
//   <i> Define the ARM timer used as a system tick timer.
//   <i> Default: Timer 0
#ifndef OS_TIMER
 #define OS_TIMER       1
#endif

//   <o>Timer clock value [Hz] <1-1000000000>
//   <i> Set the timer clock value for selected timer.
//   <i> Default: 15000000  (15MHz at 60MHz CCLK and VPBDIV = 4)
#ifndef OS_CLOCK
 #define OS_CLOCK       15000000
#endif

//   <o>Timer tick value [us] <1-1000000>
//   <i> Set the timer tick value for selected timer.
//   <i> Default: 10000  (10ms)
#ifndef OS_TICK
 #define OS_TICK        10000
#endif

// </h>
// <e>Round-Robin Task switching
// =============================
// <i> Enable Round-Robin Task switching.
#ifndef OS_ROBIN
 #define OS_ROBIN       1
#endif

//   <o>Round-Robin Timeout [ticks] <1-1000>
//   <i> Define how long a task will execute before a task switch.
//   <i> Default: 5
#ifndef OS_ROBINTOUT
 #define OS_ROBINTOUT   5
#endif

// </e>

//------------- <<< end of configuration section >>> -----------------------

/*----------------------------------------------------------------------------
 *      ARTX User configuration part END
 *---------------------------------------------------------------------------*/

#if   (OS_TIMER == 0)                                   /* Timer 0          */
  #define OS_TID_       4                               /*  Timer ID        */
  #define OS_TIM_       (1 << OS_TID_)                  /*  Interrupt Mask  */
  #define OS_TRV        ((U32)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
  #define OS_TVAL       T0TC                            /*  Timer Value     */
  #define OS_TOVF       (T0IR & 1)                      /*  Overflow Flag   */
  #define OS_TREL()     ;                               /*  Timer Reload    */
  #define OS_TFIRQ()    VICSoftInt   |= OS_TIM_;        /*  Force Interrupt */
  #define OS_TIACK()    T0IR = 1;                       /*  Interrupt Ack   */ \
                        VICSoftIntClr = OS_TIM_;                               \
                        VICVectAddr   = 0;
  #define OS_TINIT()    T0MR0 = OS_TRV;                 /*  Initialization  */ \
                        T0MCR = 3;                                             \
                        T0TCR = 1;                                             \
                        VICDefVectAddr = (U32)os_def_interrupt;                \
                        VICVectAddr15  = (U32)os_clock_interrupt;              \
                        VICVectCntl15  = 0x20 | OS_TID_;
#elif (OS_TIMER == 1)                                   /* Timer 1          */
  #define OS_TID_       5                               /*  Timer ID        */
  #define OS_TIM_       (1 << OS_TID_)                  /*  Interrupt Mask  */
  #define OS_TRV        ((U32)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
  #define OS_TVAL       T1TC                            /*  Timer Value     */
  #define OS_TOVF       (T1IR & 1)                      /*  Overflow Flag   */
  #define OS_TREL()     ;                               /*  Timer Reload    */
  #define OS_TFIRQ()    VICSoftInt   |= OS_TIM_;        /*  Force Interrupt */
  #define OS_TIACK()    T1IR = 1;                       /*  Interrupt Ack   */ \
                        VICSoftIntClr = OS_TIM_;                               \
                        VICVectAddr   = 0;
  #define OS_TINIT()    T1MR0 = OS_TRV;                 /*  Initialization  */ \
                        T1MCR = 3;                                             \
                        T1TCR = 1;                                             \
                        VICDefVectAddr = (U32)os_def_interrupt;                \
                        VICVectAddr15  = (U32)os_clock_interrupt;              \
                        VICVectCntl15  = 0x20 | OS_TID_;
#else
  #error OS_TIMER invalid
#endif

#define OS_IACK()       VICVectAddr   = 0;              /* Interrupt Ack    */

#define OS_LOCK()       VICIntEnClr   = OS_TIM_;        /* Task Lock        */
#define OS_UNLOCK()     VICIntEnable |= OS_TIM_;        /* Task Unlock      */

/* WARNING ! Do not use IDLE mode if you are using a JTAG interface  */
/*           for debugging your application.                         */
#define _idle_()        PCON = 1;
#define INITIAL_CPSR    0x40000010
#define MAGIC_WORD      0xE25A2EA5

/*----------------------------------------------------------------------------
 *      Global Variables
 *---------------------------------------------------------------------------*/

extern P_TCB os_runtask;
extern struct OS_XCB os_rdy;
extern struct OS_TCB os_clock_TCB;
extern U16 os_time;
U16 const os_maxtaskrun = OS_TASKCNT;
/* Export following defines to uVision debugger. */
U32 const os_stackinfo = (OS_STKCHECK<<24) | (OS_PRIVCNT<<16) | (OS_STKSIZE*4);
U32 const os_clockrate  = OS_TICK;
U32 const os_timernum   = (OS_TIMER << 16) | OS_TIMERCNT;
U32 const os_rrobin     = (OS_ROBIN << 16) | OS_ROBINTOUT;

/*----------------------------------------------------------------------------
 *      Local Variables
 *---------------------------------------------------------------------------*/
/* Memory pool for TCB allocation    */
static U32 m_tcb[(sizeof(struct OS_TCB) * OS_TASKCNT)/4 + 3];

/* Memory pool for System stack allocation. Need to allocate 2 additional  */
/* entries for 'os_clock_demon()' and 'os_idle_demon()'.                   */
static U32 m_stk[OS_STKSIZE * (OS_TASKCNT-OS_PRIVCNT+2) + 3];

/* An array of Active task pointers.                                       */
P_TCB os_active_TCB[OS_TASKCNT];

#if (OS_ROBIN == 1)
  static U16  os_robin_time;
  static P_TCB os_tsk_robin;
#endif

#if (OS_TIMERCNT != 0)
  /* Memory pool for User Timer allocation                                 */
  static U32 m_tmr[(sizeof(struct OS_TMR) * OS_TIMERCNT)/4 + 3];
#endif

#if (OS_STKCHECK == 1)
  static BIT os_del_flag;
#endif

/*----------------------------------------------------------------------------
 *      Global Functions
 *---------------------------------------------------------------------------*/

/*--------------------------- os_idle_demon ---------------------------------*/

void os_idle_demon (void) __task {
   /* The idle demon is a system task. It is running when no other task is   */
   /* ready to run (idle situation). It must not terminate. Therefore it     */
   /* should contain at least an endless loop.                               */

   for (;;) {
   /* HERE: include here optional user code to be executed when no task runs.*/
   }
} /* end of os_idle_demon */


/*--------------------------- os_tmr_call -----------------------------------*/

void os_tmr_call (U16 info) {
   /* This function is called when the user timer has expired.               */
   /* Parameter "info" is the parameter defined when the timer was created.  */
   /* HERE: include here optional user code to be executed on timeout.       */
   info = info;
} /* end of os_tmr_call */

/*--------------------------- os_stk_overflow -------------------------------*/

#if (OS_STKCHECK == 1)
static void os_stk_overflow (void) {
   /* This function is called when a stack overflow is detected.             */
   /*  'os_runtask' points to a TCB of a task which has a stack overflow     */
   /*  'task_id'    holds a task id for this task                            */
   /* HERE: include here optional code to be executed on stack overflow.     */
   static OS_TID task_id;

   /* Get a task identification for a task with stack problem to 'task_id'.*/
   task_id = os_get_TID (os_runtask);
   /* Use a uVision 'Advanced RTX' debug dialog page 'Active Tasks' to    */
   /* check which task has got a stack overflow and needs a bigger stack. */
   for (;;);
}
#endif

/*--------------------------- os_clock_interrupt ----------------------------*/

void os_clock_interrupt (void) NOFRAME {
   /* Do task switch to clock demon: entered upon a clock interrupt. */
   __asm {
        STMDB   SP!,{R0-R1}                 ; Save Full Context
        STMDB   SP,{SP}^                    ; User SP
        LDMDB   SP,{R0}
        MRS     R1,SPSR                     ; User CPSR
        SUB     LR,LR,#0x4
        STMDB   R0!,{R1,LR}                 ; Push PC, CPSR
        STMDB   R0,{LR}^                    ; Push User LR
        SUB     R0,R0,#0x4                  ; Write back problem !!
        STMDB   R0!,{R2-R12}                ; Push R12-R2
        LDMIA   SP!,{R2-R3}
        STMDB   R0!,{R2-R3}                 ; Push R1-R0

        LDR     R1,=os_runtask              ; os_runtask
        LDR     R1,[R1,#0x0]                ; os_runtask
        STR     R0,[R1,#TCB_TSTACK]         ; os_runtask->tsk_stack
   }
   OS_TIACK();
   tsk_lock ();
   os_runtask->full_ctx = __TRUE;
   os_runtask->state  = READY;
   os_put_rdy_first (os_runtask);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精品一区二区三区免费迷| 日韩中文字幕麻豆| 亚洲精品在线一区二区| 91精品国产综合久久久久久久久久| 欧美主播一区二区三区| 欧美午夜在线一二页| 欧美三级蜜桃2在线观看| 欧美日韩综合在线| 欧美一区二区三区公司| 欧美不卡一区二区| 日本一区二区三区久久久久久久久不 | 亚洲123区在线观看| 日本免费新一区视频| 激情小说亚洲一区| 丁香啪啪综合成人亚洲小说| 成人av动漫在线| 欧美日韩一区二区三区不卡| 91精品久久久久久蜜臀| 精品美女被调教视频大全网站| 国产人伦精品一区二区| 亚洲免费三区一区二区| 视频在线观看一区二区三区| 久久不见久久见免费视频1| 国产成人精品午夜视频免费| 在线视频亚洲一区| 亚洲精品在线观| 亚洲欧美日韩在线不卡| 男女男精品视频网| zzijzzij亚洲日本少妇熟睡| 91精品在线一区二区| 精品国产一区二区三区久久久蜜月 | 国产欧美日韩视频在线观看| 亚洲精品久久久蜜桃| 美女久久久精品| www.日韩精品| 精品久久久久久最新网址| 亚洲欧美怡红院| 国内外成人在线| 在线观看免费视频综合| 国产视频一区在线观看 | 国产色综合久久| 午夜精品爽啪视频| 成人avav在线| 精品久久久久久久久久久久久久久久久 | 亚洲欧美在线高清| 国产美女一区二区| 欧美一级爆毛片| 亚洲精品视频免费观看| 国产不卡视频一区| 欧美xxxx在线观看| 日韩国产精品91| 欧亚洲嫩模精品一区三区| 国产精品无遮挡| 国产精品香蕉一区二区三区| 欧美一区二区久久| 午夜电影一区二区三区| 在线免费观看日本一区| 中文字幕亚洲欧美在线不卡| 精品在线观看免费| 欧美一区二区三区四区在线观看| 一区二区三区欧美在线观看| 成人av集中营| 中文字幕在线一区免费| 高清成人在线观看| 精品久久国产字幕高潮| 美女诱惑一区二区| 日韩一区二区三区三四区视频在线观看 | 国产欧美1区2区3区| 蜜臀久久久久久久| 欧美一区二区三区视频免费| 天天做天天摸天天爽国产一区| 91电影在线观看| 一区二区三区日韩精品| 欧美性感一区二区三区| 亚洲国产wwwccc36天堂| 欧美日韩专区在线| 肉丝袜脚交视频一区二区| 91精品国产91久久久久久一区二区| 亚洲小少妇裸体bbw| 欧美色综合久久| 首页国产欧美久久| 精品国一区二区三区| 国模大尺度一区二区三区| 国产日韩欧美电影| 99re热这里只有精品视频| 亚洲免费在线观看| 欧美日韩一区二区在线视频| 丝袜亚洲另类欧美| 精品国产91久久久久久久妲己 | 日韩欧美色综合网站| 精品一区二区三区视频在线观看| 精品成人一区二区| 成人av片在线观看| 五月天丁香久久| 亚洲精品一区二区三区在线观看| 国产精品自拍毛片| 亚洲黄色av一区| 日韩免费福利电影在线观看| 国产福利精品一区| 亚洲一区在线观看免费观看电影高清| 成人aa视频在线观看| 亚洲一区电影777| 精品久久久网站| 日本黄色一区二区| 精品综合免费视频观看| 亚洲图片另类小说| 欧美成人免费网站| 在线免费观看一区| 岛国精品在线观看| 日韩电影在线观看电影| 亚洲欧洲精品一区二区精品久久久 | 久久综合狠狠综合久久激情| 91看片淫黄大片一级在线观看| 日韩av在线免费观看不卡| 最新久久zyz资源站| 欧美一区二区精品在线| 91九色最新地址| 国产精品1区2区3区在线观看| 亚洲精品综合在线| 国产婷婷精品av在线| 日韩亚洲欧美成人一区| 色婷婷亚洲综合| www.久久精品| 亚洲国产成人高清精品| 国产精品亚洲专一区二区三区 | 成人涩涩免费视频| 日韩激情视频网站| 夜夜爽夜夜爽精品视频| 中文字幕中文字幕一区| 精品成a人在线观看| 91精品久久久久久久91蜜桃| 欧美在线免费观看视频| 91色在线porny| av电影在线观看完整版一区二区| 国产资源在线一区| 激情深爱一区二区| 久久国产麻豆精品| 奇米影视7777精品一区二区| 亚洲国产aⅴ成人精品无吗| 亚洲裸体在线观看| 亚洲日本一区二区三区| 亚洲欧洲另类国产综合| 国产精品久久久久久亚洲伦 | 欧美xfplay| 欧美xxxx在线观看| 精品对白一区国产伦| 精品国产欧美一区二区| 精品播放一区二区| 精品国产免费一区二区三区香蕉| 日韩天堂在线观看| 日韩免费一区二区| 精品久久免费看| 国产亚洲成av人在线观看导航| 久久综合av免费| 久久久久久免费毛片精品| 精品国产一区二区精华| 日本一区二区三级电影在线观看| 国产女同互慰高潮91漫画| 国产精品毛片无遮挡高清| 中文字幕在线一区免费| 夜夜夜精品看看| 日韩国产精品久久久久久亚洲| 免费成人在线网站| 成人在线视频一区二区| 91美女福利视频| 精品视频全国免费看| 欧美一区二区三区电影| 久久久综合精品| 亚洲精品国产成人久久av盗摄| 午夜视频在线观看一区二区三区 | 亚洲女性喷水在线观看一区| 亚洲一区成人在线| 美女网站一区二区| 成人毛片老司机大片| 欧美午夜视频网站| 久久综合久久综合亚洲| 综合分类小说区另类春色亚洲小说欧美 | 久久只精品国产| 亚洲精品亚洲人成人网| 蜜臀av一级做a爰片久久| 国产久卡久卡久卡久卡视频精品| 成人午夜私人影院| 一本大道久久a久久精二百 | 国产98色在线|日韩| 欧美亚洲综合另类| 久久久青草青青国产亚洲免观| 亚洲欧美日韩久久| 久久99国产精品久久99果冻传媒| 日韩精品一区二区三区在线播放| 亚洲视频网在线直播| 亚洲欧美日韩国产手机在线| 日韩成人午夜精品| 福利电影一区二区三区| 欧美日韩国产另类一区| 日本一区二区动态图| 日韩av成人高清| 日本韩国一区二区三区视频| 国产视频一区不卡| 免费成人美女在线观看| 91黄色激情网站|