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

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

?? memmap.h

?? 嵌入式操作系統內核
?? H
字號:
/** * @file memmap.h * @author Ram Kumar {ram@ee.ucla.edu} * @brief Memory Map Implementation for SOS Kernel (Currently AVR targets only) */#include <sos_inttypes.h>#ifndef _MEMMAP_H_#define _MEMMAP_H_#include <malloc_conf.h>#include <memmap_conf.h>// Macro to generate log2 of a number that is 2^n#define LOG2BASE(x) ((((x & 0xF0)!=0)<<2) + (((x & 0xCC)!=0)<<1) + ((x & 0xAA)!=0))//-----------------------------------------------------------------------// FUNCTION PROTOTYPES//-----------------------------------------------------------------------#ifndef _MODULE_/** * \ingroup runtimechecker * \brief Assembly routine to check validity of memory accesses made by modules. */void ker_memmap_perms_check_xptr(void* x);void ker_memmap_perms_check_yptr(void* x);void ker_memmap_perms_check_zptr(void* x);#endif/** * \addtogroup memorymap * Memory Map Manager tracks ownership and layout of memory blocks in the system.<BR> * Information in memory map is used to validate write accesses made by modules. * @{ *//** * Initialize the memory map */void memmap_init();/** * Set the permissions for a memory segment * \param baseaddr Starting address of a segment * \param length Length of the segment in number of bytes * \param seg_perms Permissions to be set for this segment */void memmap_set_perms(void* baseaddr, uint16_t length, uint8_t seg_perms);/** * Modify the permissions for a memory segment * \param baseaddr Starting address of a segment * \param perm_mask Bit-mask for the changing permission * \param perm_check_val Original permissions for the segment * \param perm_set_val New permissions for the segment */uint16_t memmap_change_perms(void* baseaddr, uint8_t perm_mask, uint8_t perm_check_val, uint8_t perm_set_val);//-----------------------------------------------------------------------// MEMORY MAP RECORD CONSTANTS//-----------------------------------------------------------------------#ifdef SFI_DOMS_8#define NUM_DOMAINS 8#else#define NUM_DOMAINS 2#endif/** * Memory Map Record Layout */enum mmap_rec_t  {    // Record Layout Definitions    LOG_NUM_DOMS            = (uint8_t)LOG2BASE(NUM_DOMAINS),                //!< Number of bits required to represent domain ID    MEMMAP_DOM_MASK         = (uint8_t)(~(0xFF << LOG_NUM_DOMS)),            //!< Mask for domain ID    MEMMAP_SEG_MASK         = (uint8_t)(1 << LOG_NUM_DOMS),                  //!< Mask for segment bit    MEMMAP_REC_BITS         = (uint8_t)(LOG_NUM_DOMS + 1),                   //!< Number of bits required for memory map record    MEMMAP_REC_PER_BYTE     = (uint8_t)(8/MEMMAP_REC_BITS),                  //!< Number of records per byte    LOG_MEMMAP_REC_PER_BYTE = (uint8_t)LOG2BASE(MEMMAP_REC_PER_BYTE),        //!< Number of bits required to index a record in a byte    MEMMAP_BYTE_OFFSET_MASK = (uint8_t)(~(0xFF << LOG_MEMMAP_REC_PER_BYTE)), //!< Use this mask with block number    MEMMAP_REC_MASK         = (uint8_t)(~(0xFF << MEMMAP_REC_BITS)),         //!< Use this mask on memory map byte retreived    // Memory Map Table Size    MEMMAP_TABLE_SIZE = ((MEMMAP_REGION_SIZE/MEMMAP_BLOCK_SIZE)/MEMMAP_REC_PER_BYTE), //!< Memory Map Table Size        // Block Number    MEMMAP_BLK_NUM_LSB = LOG2BASE(MEMMAP_BLOCK_SIZE),    MEMMAP_BLK_OFFSET  = ~(0xFF << MEMMAP_BLK_NUM_LSB),    // Start of segment indicator    MEMMAP_SEG_START = MEMMAP_SEG_MASK,            //!< Seg bit is set for first segment    MEMMAP_SEG_LATER = ~(MEMMAP_SEG_MASK),         //!< Seg bit is cleared for later segment    // Kernel domain id    KER_DOM_ID     = MEMMAP_DOM_MASK,            //!< Kernel is largest domain ID#ifdef SFI_DOMS_2    MOD_DOM_ID     = 0,#endif    // Block Definitions    BLOCK_FREE     = (MEMMAP_SEG_START)|(KER_DOM_ID),      //!< Free Block (Mark all free blocks as kernel)    BLOCK_KER_SEG_START = (MEMMAP_SEG_START)|(KER_DOM_ID), //!< First Block of Kernel Segment    BLOCK_KER_SEG_LATER = (MEMMAP_SEG_LATER)&(KER_DOM_ID), //!< Later Block of Kernel Segment    BLOCK_FREE_VEC = 0xFF,  };//-----------------------------------------------------------------------// GLOBAL VARIABLE//-----------------------------------------------------------------------/** * Memory map to store the access permissions */extern uint8_t memmap[MEMMAP_TABLE_SIZE];//-----------------------------------------------------------------------// MEMMAP ACCESS MACROS//-----------------------------------------------------------------------/** * Start of segment memmap record */#define DOM_SEG_START(domid) (MEMMAP_SEG_START|(domid & MEMMAP_DOM_MASK))/** * Later part of segment memmap record */#define DOM_SEG_LATER(domid) (MEMMAP_SEG_LATER & (domid & MEMMAP_DOM_MASK))/** * Get block number for a given address */#define MEMMAP_GET_BLK_NUM(addr)  (blk_num_t)((data_addr_t)addr >> MEMMAP_BLK_NUM_LSB)	/** * Get memory map table index */#define MEMMAP_GET_TABLE_NDX(blk_num) (blk_num >> LOG_MEMMAP_REC_PER_BYTE)  /** * Get memory map byte offset */#define MEMMAP_GET_BYTE_OFFSET(blk_num) ((blk_num & MEMMAP_BYTE_OFFSET_MASK) * MEMMAP_REC_BITS)/** * Retreive permissions for the given block number */#define MEMMAP_GET_PERMS(blk_num, perms)				\  {									\    uint16_t __memmap_table_index;					\    uint8_t __memmap_byte_offset;					\    __memmap_table_index = MEMMAP_GET_TABLE_NDX(blk_num);		\    __memmap_byte_offset = MEMMAP_GET_BYTE_OFFSET(blk_num);		\    perms = memmap[__memmap_table_index];				\    perms >>= __memmap_byte_offset;					\    perms &= MEMMAP_REC_MASK;						\  }/** * Set the permissions for the given block number */#define MEMMAP_SET_PERMS(blk_num, perms)				\  {									\    uint16_t __memmap_table_index;					\    uint8_t __memmap_byte_offset;					\    uint8_t __curr_perms;						\    __memmap_table_index = MEMMAP_GET_TABLE_NDX(blk_num);		\    __memmap_byte_offset = MEMMAP_GET_BYTE_OFFSET(blk_num);		\    __curr_perms = memmap[__memmap_table_index];			\    __curr_perms &= ~(MEMMAP_REC_MASK << __memmap_byte_offset);		\    __curr_perms |= (perms << __memmap_byte_offset);			\    memmap[__memmap_table_index] = __curr_perms;			\  }/* @} *//* /\** *//*  * Get the index in the memory map table for the given address *//*  *\/ *//* #define MEMMAP_GET_BYTE_INDEX(addr) (uint16_t)((uint16_t)addr >> MEMMAP_TABLE_INDEX_LSB) *//* /\** *//*  * Get the offset in the memory map byte and the address offset within a block *//*  *\/ *//* #define MEMMAP_GET_BYTE_AND_BLK_OFFSET(addr) (uint8_t)((uint8_t)addr & MEMMAP_BYTE_BLK_OFFSET) *//* /\** *//*  * Get the block number *//*  *\/ *//* #define MEMMAP_GET_BLOCK_NUM(addr)    (uint16_t)((uint16_t)addr >> BLOCK_NUMBER_LSB) *//* /\** *//*  * Get the memmory map table index and the offset within the memory map table byte (multiplied by 2) *//*  *\/ *//* #define MEMMAP_GET_BYTE_INDEX_BYTE_OFFSETX2(addr, memmap_table_index, memmap_byte_offset) { \ *//*     uint16_t __temp;							\ *//*     __temp = (uint16_t)((uint16_t)addr >> 2);				\ *//*     memmap_byte_offset = __temp & 0x06;					\ *//*     memmap_table_index = (__temp >> 3);					\ *//*   } *//* /\** *//*  * Memory map  *//*  *\/ *//* enum domain_perm_t *//*   { *//*     BLOCK_FREE                      = 0x00, //!< Block with no owner *//*     BLOCK_START_KERNEL_SEG          = 0x00, //!< First block of kernel segment *//*     BLOCK_KERNEL_SEG                = 0x01, //!< Block belonging to a kernel segment *//*     BLOCK_START_MODULE_SEG          = 0x02, //!< First block of module segment *//*     BLOCK_MODULE_SEG                = 0x03, //!< Block belonging to a module segment *//*   }; *//* /\** *//*  * Byte vectors for the memory map array *//*  *\/ *//* enum domain_perm_vec_t *//*   { *//*     BLOCK_FREE_BYTE_VEC             = 0x00, //!< Block free byte vector  *//*     BLOCK_START_KERNEL_SEG_BYTE_VEC = 0x00, //!< Byte vector for start of kernel segment *//*     BLOCK_KERNEL_SEG_BYTE_VEC       = 0x55, //!< Byte vector for a kernel segment *//*     BLOCK_START_MODULE_SEG_BYTE_VEC = 0xAA, //!< Byte vector for start of module segment *//*     BLOCK_MODULE_SEG_BYTE_VEC       = 0xFF, //!< Byte vector for the module segment *//*   }; *//* /\** *//*  * Bit-masks to determine block ownership *//*  *\/ *//* enum block_owner_t *//*   { *//*     BLOCK_TYPE_BM                   = 0x02, //!< Mask for determining block owner *//*     BLOCK_TYPE_KERNEL               = 0x00, //!< Block owned by the kernel *//*     BLOCK_TYPE_MODULE               = 0x02, //!< Block owned by the module *//*   }; *//* /\** *//*  * Bit-masks to determine block layout *//*  *\/ *//* enum block_layout_t *//*   { *//*     SEG_LATER_PART_MASK = 0x01, //!< Mask for determining block layout *//*     SEG_START_BLOCK     = 0x00, //!< Block is the start of segment *//*     SEG_LATER_PART      = 0x01, //!< Block is NOT the start of segment *//*   }; */#endif//_MEMMAP_H_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人高清不卡| 在线成人高清不卡| 欧美一区二区三区爱爱| 欧美国产禁国产网站cc| 日本不卡一区二区| 色婷婷久久久亚洲一区二区三区| 欧美一区二区精品在线| 亚洲欧美另类在线| 成人一区二区视频| 日韩欧美电影一二三| 一区二区三区在线影院| 成人一区二区三区| 2021中文字幕一区亚洲| 偷拍与自拍一区| 91视频com| 国产精品免费久久| 欧美视频三区在线播放| 国产精品欧美极品| 国产精品亚洲第一| 国产三级久久久| 国产在线不卡一卡二卡三卡四卡| 欧美精品一卡二卡| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品电影一区二区| 国产一区二区三区蝌蚪| 欧美一级专区免费大片| 日韩精品成人一区二区三区 | 亚洲一区二区三区四区在线观看 | 26uuu国产一区二区三区| 亚洲成人av免费| 欧美少妇性性性| 亚洲综合无码一区二区| 欧美在线一二三四区| 亚洲日本在线观看| 色婷婷av一区二区三区大白胸| 国产目拍亚洲精品99久久精品| 精品亚洲成a人在线观看| 91麻豆精品国产91久久久使用方法 | 在线电影欧美成精品| 奇米影视7777精品一区二区| 日韩欧美亚洲一区二区| 麻豆精品视频在线观看视频| 日韩女优毛片在线| 国产精品亚洲视频| 亚洲视频一区二区在线| 在线免费观看日本一区| 亚洲成av人片一区二区三区| 91精品国产综合久久久久久久久久 | 日韩一区二区三区免费观看| 韩国v欧美v亚洲v日本v| 国产三级一区二区三区| 福利电影一区二区三区| 亚洲免费成人av| 91精品久久久久久久99蜜桃| 六月丁香综合在线视频| 国产欧美1区2区3区| 91传媒视频在线播放| 蜜臂av日日欢夜夜爽一区| 青娱乐精品视频在线| 91精品欧美一区二区三区综合在| 国产在线国偷精品产拍免费yy| 欧美国产禁国产网站cc| 欧美亚洲国产bt| 黑人巨大精品欧美一区| 一区视频在线播放| 欧美一级二级三级蜜桃| 不卡高清视频专区| 人禽交欧美网站| 国产精品传媒入口麻豆| 欧美精选一区二区| 国产成人在线看| 五月婷婷综合网| 欧美国产日本韩| 日韩一区二区三区免费看| av电影在线不卡| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲男同性视频| 日韩欧美国产综合在线一区二区三区| 成人精品免费看| 日本不卡视频在线观看| 亚洲精品五月天| 久久综合久久综合久久综合| 欧美三级日韩三级国产三级| 国产乱码精品一区二区三区五月婷 | 欧美麻豆精品久久久久久| 国产91在线观看丝袜| 亚洲国产美国国产综合一区二区| 国产清纯在线一区二区www| 欧美日韩中文另类| 91首页免费视频| 国产一区二区三区免费观看| 婷婷久久综合九色国产成人| 亚洲精品精品亚洲| 亚洲国产岛国毛片在线| 26uuu亚洲综合色欧美| 欧美精品自拍偷拍| 欧美亚洲免费在线一区| 91久久久免费一区二区| av在线一区二区三区| 国产专区综合网| 秋霞电影网一区二区| 亚瑟在线精品视频| 一个色综合网站| 亚洲欧美精品午睡沙发| 国产精品久久久久久久久搜平片 | 日韩一区二区三区在线| 欧美日韩精品欧美日韩精品一| 91在线一区二区三区| 99久久伊人久久99| 99国产精品久久久| 91免费看片在线观看| 99精品视频在线免费观看| www.欧美亚洲| 一本大道av一区二区在线播放| 成人永久aaa| 欧美精品一区二区久久久| 精品日韩一区二区| 日韩欧美国产综合一区| 精品国产伦一区二区三区免费| 欧美变态tickle挠乳网站| 欧美大片在线观看一区二区| 精品少妇一区二区三区视频免付费| 日韩西西人体444www| 精品欧美乱码久久久久久 | 亚洲美女区一区| 亚洲国产精品欧美一二99| 午夜影院在线观看欧美| 视频一区视频二区中文| 日本亚洲三级在线| 国产精品一卡二卡| bt欧美亚洲午夜电影天堂| 欧美在线看片a免费观看| 欧美日本韩国一区| 精品久久国产字幕高潮| 国产欧美一区二区精品性| 亚洲天堂网中文字| 午夜精品久久久久久不卡8050| 日本欧美韩国一区三区| 国产在线观看免费一区| 99久久777色| 日韩无一区二区| 国产亲近乱来精品视频| 亚洲激情av在线| 久久精工是国产品牌吗| 成人h动漫精品| 欧美日韩午夜在线| 国产亚洲欧美日韩日本| 一区二区三区在线观看动漫| 日本欧美肥老太交大片| av成人老司机| 日韩精品一区二区三区三区免费 | 天堂久久久久va久久久久| 国产一区二区在线观看视频| 99视频精品全部免费在线| 91精品国产一区二区| 欧美激情综合网| 日本在线观看不卡视频| av在线不卡电影| 日韩一级欧美一级| 亚洲日本中文字幕区| 国产精品一区免费视频| 欧美日韩mp4| 一区二区中文字幕在线| 蜜臀av国产精品久久久久 | 国产一区二区成人久久免费影院| 一本大道av伊人久久综合| 精品精品国产高清a毛片牛牛| 一区二区在线免费观看| 国产成人午夜电影网| 51久久夜色精品国产麻豆| 亚洲欧洲中文日韩久久av乱码| 九九精品视频在线看| 欧美性猛片aaaaaaa做受| 国产精品不卡一区| 国产精品一线二线三线| 91精品国产高清一区二区三区| 亚洲免费av观看| youjizz久久| 欧美国产日韩亚洲一区| 狠狠色狠狠色综合| 日韩欧美国产1| 亚洲电影欧美电影有声小说| 91免费观看国产| 国产精品素人一区二区| 国产一区二区精品久久| 欧美精品一区二区三区蜜桃视频| 青青草国产精品亚洲专区无| 欧美影视一区二区三区| 亚洲猫色日本管| 99精品国产视频| 中文字幕一区二区视频| 国产成人av电影在线播放| 久久色视频免费观看| 精品一区二区三区免费| 精品盗摄一区二区三区| 美女性感视频久久| 日韩精品中文字幕一区二区三区| 五月天网站亚洲| 欧美电影一区二区| 男女男精品视频|