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

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

?? scheduler.h

?? 一個AVR單片機的操作系統
?? H
字號:
/** * Copyright (c) 2006-2008 iWESUN (ShenZhen) Inf. * All rights reserved.  *  * Redistribution and use in source and binary forms, with or without modification,  * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, *    this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, *    this list of conditions and the following disclaimer in the documentation *    and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission.  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  * OF SUCH DAMAGE. * * This file is part of the AvrcX MTOS *  * Author: Winter Hu  <winter.hu@gmail.com> * Create: Nov 27, 2006 */#ifndef __SCHEDULER_H__#define __SCHEDULER_H__#include "common.h"#include "lnklist.h"#include "hardware.h"/* Use Timer0 system tick */#ifndef TICKRATE#define TICKRATE 1000#endif#define TCNT0_INIT  (0xFF-(F_CPU/256/TICKRATE)) // 1ms/* __AVR__*/#define MINCONTEXT 35    // 32 registers, return address and SREG#define USER_MODE  0xFF#define MAX_WAIT_TICKS 250 // MUST less than 0xFF/* Process Status */#define TASK_READY   0x00    // Task is running or is ready in RunQueue#define TASK_BLOCK   0x01    // Task is blocked in BlockedQueue of semaphore#define TASK_DELAY   0x02    // Task is delay in TimerQueue#ifndef __ASSEMBLER__/* These only work in C program */typedef Node PID; // PID.pData-->PCBtypedef Node TID; // TID.pData-->TSTimertypedef struct TSTimer {  PID* pid;  __volatile__ unsigned short ticks;} TSTimer;// Define Process Control Blocktypedef struct ProcessControlBlock {  __volatile__ unsigned char status;    // Process Status Word  __volatile__ unsigned char priority;  // Predefined priority  __volatile__ unsigned char tmslices;  // Predefined time slice  __volatile__ unsigned char reserved;  void* context; // Process Context Pointer, i.e. Stack Pointer  TSTimer timer;  TID tid;} PCB;// Define Task Control Block which are stored in FLASH memorytypedef struct TaskControlBlock {  void *stack;             // Start of stack  void (*start) (void);    // Entry point of code  PCB  *pcb;               // Pointer to the Process Control Block  PID  *pid;               // Pointer to the Process Node  unsigned char priority;  // Predefined priority of task (0~255)  unsigned char tmslices;  // Predefined time slice of task (0~255)} FLASH const TCB;/** * A macro to ease the declaration of tasks definition. * Usage: TASKDEF(myFoo, 10, 16, 10) * * @param start, The name of the task function * @param n_stack, The bytes of this task maybe use * @param priority, The task priority * @param slice, The task time slice */#define TASKDEF(start, n_stack, priority, slice)        \  CTASKFUNC(start)                                      \  char start##_stack[n_stack + MINCONTEXT];		\  PCB start##_pcb;					\  PID start##_pid;					\  TCB start##_tcb = {					\    &start##_stack[sizeof(start##_stack) - 1],          \    start,                                              \    &start##_pcb,                                       \    &start##_pid,                                       \    priority,					        \    slice                                               \  }/** * Return the pointer to the task PID  * * @param start, The name of the task  */#define getPID(start) &start##_pid/** * Return the ponter to the task PCB * * @param start, The name of the task  */#define getPCB(start) &start##_pcb/** * Return the pointer to the task TCB * * @param start, The name of the task */#define getTCB(start) &start##_tcb// Define Kernel Datatypedef struct KernelData{  LinkedList RunQueue;     // The ready queue  LinkedList TimerQueue;   // The timer queue  LinkedList *BlockedQueue;  // The blocked queue  PID  *Running;           // Current running process  void *Context;           // Kernel context  __volatile__ unsigned char TmSlices;  // Remaining time ticks of current process  __volatile__ unsigned char SysLevel;  // Re-entry counter into kernel context                           // user mode is 0xFF  unsigned long SysTicks;} KernelData;extern KernelData kernel;/** * Initizlize Scheduler * This must be invoked before tasks schedulling */INTERFACE void init_scheduler(void);/** * Start scheduler * This method never return */INTERFACE void NAKED start(void);/** * Create the task PID of specified TCB * * @param TCB*, The pointer to the Task Control Block * @return PID*, The pointer to the Task PID * @see "scheduler.asm.S" */INTERFACE PID* create_task(TCB*);/** * Create and resume the task into RunQueue *  * @param TCB*, The pointer to the Task Control Block */INTERFACE void run_task(TCB*);/** * Retrieves current running task * * @return PID*, the pointer to the current running task PID */INTERFACE PID* get_running(void);/** * Retreives system ticks * * @return unsigned long, The ticks from power on */INTERFACE unsigned long get_systicks(void);/** * Causes the currently executing task to temporarily pause and allow  * other tasks to execute. */INTERFACE void NAKED yield(void);/** * Causes the currently executing task to temporarily pause in TimQueue * until delay expire.  * * @param unsigned int, Ticks for sleeping */INTERFACE void NAKED sleep(unsigned int);/** * Swap the first PID from RunQueue to current env */void swapping(void);/** * Insert the PID into RunQueue * * @param PID*, The pointer to the PID */void resume_task(PID*);/** * Insert the PID into TimerQueue * * @param PID*, The pointer to the PID * @param unsigned int, The ticks to delay */void delay_task(PID*, unsigned int);/** * Pushes entire register context onto the current stack * SysLevel >= 0, running on kernel stack * * @see "scheduler.asm.S" */void NAKED prologue(void);/** * Restore previous context (kernel or user) * Ref. "scheduler.asm.S" * * ASSUMES:    SysLevel >= 0, running on kernel stack */void NAKED epilogue(void);#endif /* !__ASSEMBLER__ *//* Kernel data structure offsets */#define KERN_RUNQUEUE  0        // Head of the ready queue#define KERN_TIMQUEUE  2        // Head of the timer queue#define KERN_BLKQUEUE  4        // Head of the blocked queue#define KERN_RUNNING   6        // Current running task#define KERN_CONTEXT   8        // Kernel stack SP#define KERN_TMSLICES 10        // Remaining time ticks of current task#define KERN_SYSLEVEL 11        // User mode or Kernel mode#define KERN_SYSTICKS 12        // A long integer of system tick counts/* Process Control Block data structure offsets */#define PCB_STATUS     0#define PCB_PRIORITY   1#define PCB_TMSLICES   2#define PCB_CONTEXT    4#define PCB_TIMER      6#define PCB_TIMER_TICK 8#endif /* __SCHEDULER_H__ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美酷刑日本凌虐凌虐| 欧美日韩国产综合一区二区三区| 天天影视涩香欲综合网| 亚洲免费观看高清完整版在线观看 | 粉嫩一区二区三区性色av| 日韩中文欧美在线| 日韩av在线播放中文字幕| 婷婷丁香激情综合| 麻豆成人综合网| 国产自产高清不卡| 国产精品12区| 色综合久久中文综合久久97 | 1024亚洲合集| 亚洲精品欧美专区| 偷偷要91色婷婷| 麻豆精品一区二区综合av| 麻豆国产精品视频| 国产夫妻精品视频| 色悠久久久久综合欧美99| 欧美日韩在线亚洲一区蜜芽| 3atv一区二区三区| 国产免费观看久久| 亚洲成人免费电影| 国模少妇一区二区三区| 成人免费福利片| 欧美日韩电影在线播放| 久久综合五月天婷婷伊人| 国产精品久久久久久久午夜片| 国产精品久久午夜夜伦鲁鲁| 夜夜嗨av一区二区三区网页| 老司机午夜精品| 成人app在线| 欧美女孩性生活视频| 国产欧美精品一区二区三区四区| 亚洲欧美日韩国产手机在线| 美女任你摸久久| 不卡的av网站| 精品国产自在久精品国产| 日韩伦理av电影| 久久成人羞羞网站| 欧美视频日韩视频| 久久久国产午夜精品| 亚洲成人tv网| 99久久精品国产观看| 日韩欧美国产系列| 一区二区三区欧美日| 国产又粗又猛又爽又黄91精品| 在线观看精品一区| 中文字幕va一区二区三区| 免费观看在线综合| 在线观看欧美黄色| 亚洲色图制服诱惑 | 在线亚洲一区二区| 久久久久高清精品| 免费高清成人在线| 欧美日本国产视频| 亚洲一区在线观看免费| 成人三级在线视频| 久久婷婷国产综合精品青草| 亚洲国产精品一区二区久久| 91亚洲精品久久久蜜桃| 国产精品丝袜黑色高跟| 国产真实精品久久二三区| 91精品国产色综合久久久蜜香臀| 亚洲欧美偷拍卡通变态| 不卡影院免费观看| 欧美国产精品中文字幕| 国产精品白丝jk白祙喷水网站| 欧美一区二区三区四区五区 | 夜夜嗨av一区二区三区网页| 99久久免费精品高清特色大片| 国产午夜一区二区三区| 久久精品av麻豆的观看方式| 3d动漫精品啪啪| 日本色综合中文字幕| 日韩一区二区三区免费观看| 日本亚洲视频在线| 日韩欧美123| 国产专区综合网| 久久奇米777| 国产经典欧美精品| 国产精品毛片大码女人| 91亚洲精华国产精华精华液| 玉足女爽爽91| 5858s免费视频成人| 日本不卡免费在线视频| 日韩欧美精品在线视频| 国产在线精品一区二区不卡了| xvideos.蜜桃一区二区| 丁香五精品蜜臀久久久久99网站| 亚洲欧洲韩国日本视频| 色婷婷久久久综合中文字幕| 香蕉成人啪国产精品视频综合网| 91精品午夜视频| 国产精品99久久久久久似苏梦涵 | av不卡免费在线观看| 一区二区三区日韩在线观看| 欧美日本视频在线| 国产在线一区二区综合免费视频| 欧美精彩视频一区二区三区| eeuss国产一区二区三区| 亚洲电影第三页| 久久精品欧美一区二区三区不卡| www.日韩在线| 日韩国产一区二| 国产精品国产三级国产专播品爱网| av午夜一区麻豆| 日韩av午夜在线观看| 国产日产欧美一区| 欧美猛男超大videosgay| 九九精品一区二区| 亚洲蜜臀av乱码久久精品| 欧美一区二区三区在线看| 成人app网站| 韩国一区二区三区| 一级做a爱片久久| 久久久不卡网国产精品二区| 色丁香久综合在线久综合在线观看 | 亚洲人一二三区| 久久综合色之久久综合| 欧美影院精品一区| 成人的网站免费观看| 日韩福利电影在线观看| 日韩理论电影院| www国产精品av| 欧美群妇大交群的观看方式| 成人午夜免费电影| 裸体一区二区三区| 亚洲一区二区三区四区在线观看 | 美女看a上一区| 亚洲一区二区在线免费观看视频| 2021国产精品久久精品| 欧美另类z0zxhd电影| 91在线无精精品入口| 国产精品一级黄| 激情综合色播五月| 日本成人在线看| 亚洲一区二区五区| 国产精品色眯眯| 欧美国产国产综合| 精品999在线播放| 亚洲精品一区二区三区香蕉| 欧美肥妇毛茸茸| 欧美在线观看你懂的| 91偷拍与自偷拍精品| 成人综合日日夜夜| 国产91综合网| 国产毛片精品视频| 国产精品1区2区| 丁香五精品蜜臀久久久久99网站| 精久久久久久久久久久| 麻豆91在线播放免费| 老汉av免费一区二区三区| 日本美女一区二区| 久久99精品久久久久久| 久久国产三级精品| 国产麻豆视频精品| 岛国精品一区二区| 成人av电影在线播放| 99re成人在线| 在线观看不卡视频| 91麻豆精品国产91久久久资源速度| 精品视频999| 日韩欧美亚洲一区二区| 久久蜜桃av一区精品变态类天堂| 久久蜜桃av一区精品变态类天堂| 国产婷婷色一区二区三区四区| 国产亚洲精久久久久久| 中文子幕无线码一区tr| 亚洲乱码日产精品bd| 午夜成人在线视频| 黄色小说综合网站| 国产精品亚洲一区二区三区妖精| 国产69精品一区二区亚洲孕妇| 99久久久久久99| 欧美日韩国产片| 欧美精品一区二区在线观看| 国产欧美一区二区精品久导航 | 蜜桃视频在线观看一区| 国产精品一区二区在线看| 99re这里都是精品| 欧美精品三级日韩久久| 久久免费视频一区| 亚洲一区二区在线观看视频 | 一区二区免费在线播放| 日本中文一区二区三区| 国产激情一区二区三区四区| 色一情一乱一乱一91av| 欧美一区二区高清| 亚洲欧美综合网| 日韩成人伦理电影在线观看| 国产精品主播直播| 欧美日韩精品一区二区三区四区| 日韩欧美国产一区二区三区| 最近中文字幕一区二区三区| 五月激情六月综合| heyzo一本久久综合| 欧美mv日韩mv| 午夜精品久久久久久| 成人av网址在线|