嵌入式内核结构
嵌入式linux操作系统原理与应用

嵌入式Linux操作系统是一种针对嵌入式设备设计和优化的Linux操作系统。
它在嵌入式系统中发挥着关键作用,为嵌入式设备提供了丰富的功能和灵活性。
以下是嵌入式Linux操作系统的原理和应用方面的概述:嵌入式Linux操作系统原理:内核:嵌入式Linux操作系统的核心是Linux内核,它提供了操作系统的基本功能,包括处理器管理、内存管理、设备驱动程序、文件系统和网络协议栈等。
裁剪:为了适应嵌入式设备的资源限制,嵌入式Linux操作系统通常经过裁剪和优化,只选择必要的功能和驱动程序,以减小内存占用和存储空间,并提高性能和响应速度。
交叉编译:由于嵌入式设备通常具有不同的硬件架构和处理器,所以嵌入式Linux操作系统需要通过交叉编译来生成适用于目标设备的可执行文件和库。
设备驱动:嵌入式Linux操作系统需要适配各种硬件设备,因此需要编写和集成相应的设备驱动程序,以使操作系统能够正确地与硬件进行通信和交互。
嵌入式Linux操作系统应用:嵌入式设备:嵌入式Linux操作系统广泛应用于各种嵌入式设备,如智能手机、平板电脑、家用电器、工业控制系统、车载设备等。
物联网(IoT):随着物联网的快速发展,嵌入式Linux操作系统被广泛应用于连接的嵌入式设备,用于数据采集、通信、远程控制和智能化管理。
嵌入式开发板:嵌入式Linux操作系统在开发板上提供了丰富的开发环境和工具链,用于嵌入式软件开发和调试。
自定义嵌入式系统:开发者可以基于嵌入式Linux操作系统构建自定义的嵌入式系统,根据特定需求进行定制和开发,实现各种功能和应用。
嵌入式Linux操作系统的原理和应用非常广泛,它为嵌入式设备提供了灵活性、可定制性和强大的功能支持,使得开发者能够构建高度定制化和功能丰富的嵌入式系统。
32位嵌入式CPU内核MCORE

32位嵌入式微处理器核主要内容MCORE/CCORE概述寄存器及编程模型MCORE/CCORE指令集中断与异常处理RISC(Reduced Instruction Set Computer)型处理器已普遍被嵌入式系统所采用MCORE/CCORE是目前常用的一种RISC型处理器,主要特点:高性能、低价格、低功耗C*Core是苏州国芯科技有限公司在摩托罗拉技术的高起点平台上,建立和发展的具有自主产权的高性能32位嵌入式RISC微处理器C*Core是面向高性能、低成本的嵌入式控制领域设计的,具有极低的系统功耗。
适用于电池供电的便携式产品以及为适合高温环境而设计的高集成度部件◆完全可综合的32位嵌入式RISC CPU◆低功耗,高性能,高代码密度◆特别适用于手提设备(PDA、移动电话)、通讯设备(无线局域网、路由器)、汽车工业(ABS、安全气囊、电喷控制、刹车控制)、家用电器以及众多的工业过程控制。
◆C*Core嵌入式CPU的主要类型:C210C310CS320本课程主要以C210为重点。
CCORE(C210)结构框架C210的主要特征32位RISC处理器架构固定16位指令长度16个32位的通用寄存器高效的4级执行流水线多数指令为单周期指令分支指令以及存储器访问仅需两个时钟周期支持字节、半字和字三种类型的存储器访问16个专用的交替寄存器支持快速中断支持矢量和自动矢量的中断具有两套处理器状态PSR和程序指针PC影子寄存器硬件整数乘法器阵列(C310)16-bit x 16-bit in 1 clock32-bit x 32-bit in 2 clocksCCORE(C210)微架构C210的指令执行流水线包括下列四级:取指指令译码/读寄存器文件执行寄存器回写16个通用寄存器用于存放操作数和指令结果。
寄存器R15被用作联接寄存器,存放子程序的返回地址。
寄存器R0存放当前的堆栈指针CCORE微结构(续)执行单元包括:一个32位的算术/逻辑单元(ALU)一个32位的桶型移位器Find-First-One (FF1)单元结果前馈硬件其他一系列用于支持乘法和多寄存器读取和存储的硬件程序计数器单元:一个PC累加器一个专用的分支地址加法器指令流水线和时序处理器流水线由取回指令、指令译码、执行和回写结果四个级别组成处理器还包括指令预取缓冲器,允许在指令译码的前一级别缓冲一个指令。
嵌入式单片机三种应用程序架构

嵌入式单片机三种应用程序架构嵌入式单片机是一种集成了处理器、存储器、输入输出接口等功能的微型计算机系统,广泛应用于各种电子设备中。
针对不同的应用需求,嵌入式单片机可以采用不同的应用程序架构。
下面将介绍三种常见的嵌入式单片机应用程序架构,包括单任务、多任务和事件驱动架构。
一、单任务架构在单任务架构下,嵌入式单片机只能执行一项任务,也就是一次只能处理一个事件。
程序代码是按照顺序执行的,没有并行处理的能力。
在单任务架构下,主程序中通常包含一个主循环,通过循环不断地检测各种外部事件的发生并作出相应的处理。
例如,一个简单的嵌入式系统可能需要周期性地读取传感器数据并进行处理,然后将处理结果输出到显示屏上。
单任务架构的优点在于编程简单,逻辑清晰,适用于单一功能较简单的场景。
同时,由于不需要考虑并行处理的复杂性,系统资源的管理也相对简单。
然而,单任务架构的缺点在于不能同时进行多个任务处理,效率较低,且无法处理实时性要求较高的应用场景。
二、多任务架构多任务架构是一种支持多个任务并发执行的应用程序架构。
在多任务架构下,嵌入式单片机可以同时处理多个任务,提高系统的处理效率。
每个任务都有自己的代码段和数据段,并且任务之间可以实现相互通信和数据共享。
实现多任务的方法有多种,最常见的是利用操作系统的支持。
操作系统可以为每个任务分配独立的时间片,并负责任务的切换和调度。
常见的嵌入式操作系统有uc/OS、FreeRTOS等。
多任务架构的优点在于可以提高系统的并发处理能力,适用于多任务、复杂功能的应用场景。
同时,多任务架构可以实现任务间的相互独立,提高系统的可维护性和可重用性。
然而,多任务架构在设计和开发过程中需要考虑任务间的调度、通信、同步等问题,复杂度较高。
三、事件驱动架构事件驱动架构是一种基于事件触发的应用程序架构。
在事件驱动架构下,嵌入式单片机依据外部事件的发生而作出相应的响应,而非简单的按序执行代码。
事件可以是外部信号(如按键输入、传感器数据等)、定时器中断、通信中断等。
Intel XScale(TM) 嵌入式微处理器简介

Intel XScale™嵌入式微处理器简介Intel Xscale内核是和ARM® Architecture V5TE结构兼容的微处理器。
Intel® XScale™core内核集成了多种微结构的特点,从而能够完成更过的性能要求。
这样用户可以根据自己的需求进行配置,实现自己特定的功能。
Intel® XScale™的这些微结构很多应用在存储器当中,主要包括:•当数据缓冲从外部存储器获取数据是,仍然能够执行指令;•写缓冲;•写回数据缓冲(Write-back data cache)•缓冲锁定(Cache locking)•可配置的缓冲方式(X Bit, C Bit for Cacheable, B Bit for Bufferable)Intel Xscale内核的上述特点,使它能够有效的处理语音信号,乘法累加操作还可以完成多种语音和多媒体CODEC算法。
特点改进的性能Intel® 超级流水线技术 7-stage integer/8-stage存储器超级流水线内核获得更高的速度和较低的功耗 Intel®动态电压管理 动态电压和频率允许应用系统对性能和功耗进行合理的折衷 Intel® Media处理技术 多累加协处理器同时完成两个16-bit SIMD 乘法(带40-bit累加),有效的媒体处理; 电源管理单元 通过idle、 sleep、和快速wake-up模式,降低功耗 128-entry Branch TargetBuffer 使流水线载有分支支零时仍能够保持正确 32 KB Instruction Cache 保持重要指令,提高系统性能,降低系统功耗 32 KB Data Cache 保持重要数据,提高系统性能,降低系统功耗 2 KB Mini-Data Cache 在频繁改变数据流时,避免"thrashing" of the D-Cache 32-entry 程序存储器管理单元 使能逻辑到物理地址变换、访问允许和I-Cache attributes 32-entry数据存储器管理单元 使能逻辑到物理地址变换、访问允许和D-Cache attributes 4-entry Fill and Pend Buffers 通过允许数据缓冲的non-blocking和"hit-under-miss"操作,提高内和效率。
arm cortex-m3内核与stm32课程思政

Arm Cortex-M3内核与stm32课程思政1. 引言随着计算机科学与技术的发展,嵌入式系统在各个领域的应用日益广泛。
Arm Cortex-M3内核与stm32系列微控制器作为典型的嵌入式系统代表,其在实时控制、通信、汽车电子、工业控制等领域具有重要的应用价值。
对于计算机专业学生来说,深入学习Arm Cortex-M3内核与stm32系列微控制器的知识,不仅能够提高他们的嵌入式系统开发能力,还能为他们的综合素质和思想政治教育提供更为立体和深刻的帮助。
2. Arm Cortex-M3内核与stm32课程的教学资料(1)Arm Cortex-M3内核Arm Cortex-M3内核是Arm公司专门针对嵌入式系统设计的处理器内核,其具有低功耗、高性能和精简指令集的特点。
在Arm Cortex-M3内核的教学过程中,老师可以选择Arm冠方提供的冠方资料,例如《Cortex-M3 Technical Reference Manual》、《Cortex-M3 Devices Generic User Guide》等进行讲解,以便学生们全面了解Arm Cortex-M3内核的技术细节和应用场景。
(2)stm32系列微控制器stm32系列微控制器是由意法半导体公司开发的一款高性能、低功耗的微控制器,其集成了Arm Cortex-M3内核,具有丰富的外设资源和灵活的应用特性。
在stm32系列微控制器的教学过程中,老师可以配合使用意法半导体冠方提供的《stm32参考手册》、《stm32数据手册》等资料,帮助学生们深入了解stm32系列微控制器的硬件架构和软件开发技术。
3. Arm Cortex-M3内核与stm32课程的教学内容(1)Arm Cortex-M3内核的体系架构老师可以介绍Arm Cortex-M3内核的体系结构,包括处理器核、存储体系结构、总线结构、中断控制器等方面的内容。
通过讲解Arm Cortex-M3内核的体系结构,学生们可以系统性地理解嵌入式系统的硬件基础,为后续的软件开发和调试奠定坚实的基础。
6.1 嵌入式linux操作系统的组成与版本

台使它仍然能按其自身的方式运行的能力。
9
嵌入式Linux优势
Linux的费用低; Linux的所有部分可以充分地定制 ; Linux可以运行在低档,便宜的硬件平台; Linux的功能是强大的; Linux对源代码质量有一个高标准; Linux内核非常小,而且紧凑; Linux有很好的支持; Linux有很多合适的工具;
进程控制快 ;
独立的存储空间 ;
pid_t fork(void)函数:生成进程。
void main() { for(;;) fork(); }
Exit():退出进程。
21
进程与线程
进程是具有一定独立功能的程序关于某个数据集 合上的一次运行活动,进程是系统进行资源分配和 调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本 单位,它是比进程更小的能独立运行的基本单位. 线程自己基本上不拥有系统资源,只拥有一点在运 行中必不可少的资源(如程序计数器,一组寄存器 和栈),但是它可与同属一个进程的其他的线程共 享进程所拥有的全部资源. 一个线程可以创建和 撤销另一个线程;同一个进程中的多个线程之间可 以并发执行 需要注意的是:在应用程序中使用多线程不会增 加 CPU 的数据处理能力。
只要安装它们的驱动程序,任何用户都可以象使用文 件一样,操纵、使用这些设备,而不必知道它们的具 体存在形式。
丰富的网络功能
完善的内置网络是Linux的一大特点。
可靠的系统安全
Linux采取了许多安全技术措施,包括对读、写进行
权限控制、带保护的子系统、审计跟踪、核心授权等。
良好的可移植性
如何选择Linux的版本
嵌入式系统原理及应用复习知识点总结

第一章1、嵌入式系统的应用范围:军事国防、消费电子、信息家电、网络通信、工业控制。
2、嵌入式系统定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件与硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
(嵌入式的三要素:嵌入型、专用性与计算机系统)。
3、嵌入式系统的特点:1)专用性强;2)实时约束;3)RTOS;4)高可靠性;5)低功耗;6)专用的开发工具和开发环境;7)系统精简;4、嵌入式系统的组成:(1)处理器:MCU、MPU、DSP、SOC;(2)外围接口及设备:存储器、通信接口、I/O接口、输入输出设备、电源等;(3)嵌入式操作系统:windows CE、UCLinux、Vxworks、UC/OS;(4)应用软件:Bootloader5、嵌入式系统的硬件:嵌入式微处理器(MCU、MPU、DSP、SOC),外围电路,外部设备;嵌入式系统的软件:无操作系统(NOSES),小型操作系统软件(SOSES),大型操作系统软件(LOSES)注:ARM处理器三大部件:ALU、控制器、寄存器。
6、嵌入式处理器特点:(1)实时多任务;(2)结构可扩展;(3)很强的存储区保护功能;(4)低功耗;7、DSP处理器两种工作方式:(1)经过单片机的DSP可单独构成处理器;(2)作为协处理器,具有单片机功能和数字处理功能;第二章1、IP核分类:软核、固核、硬核;2、ARM处理器系列:(1)ARM7系列(三级流水,thumb指令集,ARM7TDMI);(2)ARM9系列(DSP处理能力,ARM920T)(3)ARM/OE(增强DSP)(4)SecurCone 系列(提供解密安全方案);(5)StrongARM系列(Zntle产权);(6)XScale系列(Intel产权);(7)Cortex系列(A:性能密集型;R:要求实时性;M:要求低成本)3、ARM系列的变量后缀:(1)T:thumb指令集;(2)D:JTAG调试器;(3)快速乘法器;(4)E:增强DSP指令;(5)J:Jave加速器4、ARM{X}{Y}{Z}{T}{D}{M}{I}{E}{J}{F}{S} :x—系列号,y—内部存储管理和保护单元,Z—含有高速缓存。
嵌入式存储器及系统结构

上面那个系统的外围器件比较多,电路也比较复杂. 对于很多的嵌入式系统,如小型手持设备而言,出于硬件成 本,PCB板面积等因素的考虑,往往去掉其它一些器件. 比如,在自带Nand Flash的情况下,可用NandFlash代替 EEPROM和NorFlash.如有些MCU自带USB控制器和 LCD Driver,RTC等,就可以省去这些外围电路.但需要 一个MCU/MPU能直接运行的Bootloader程序对存放在 NandFlash的程序进行引导.该BootLoader程序必须带有 NandFlash驱动. 对于另外一些MPU,由于自身并不带有RAM和ROM,就需 要扩展相应的电路. 对于某些MCU/MPU,其内置的ROM自带有Bootloader.
嵌入式存储器及系统结构嵌入式系统结构嵌入式系统体系结构嵌入式系统软件结构嵌入式系统的组成结构嵌入式系统的结构嵌入式系统的存储结构嵌入式系统结构图嵌入式系统数据结构嵌入式存储器
嵌入式存储器及系统结构
李 立华 2007.04.13
目录
1.嵌入式存储器简介 嵌入式存储器简介
1.1 常用存储器简介
1.嵌入式系统存储器 1.嵌入式系统存储器
对NandFlash而言,h读写流程图.
写数据
读数据
事实上,在写数据时,还要先对擦除NandFlash. 在送地址和数据时,NandFlash通过I/O总线依次送入地址和数据,而 且读写是以块为单位进行操作. 这样,如果要访问NandFlash内的数据,必段以块中的页为单位,根据 所指定的块和页将该页的数据读入内存,然后根据内存中的相对地址 对该数据进行访问. 该原理和PC机的硬盘工作机理很相似. 如果需要将NandFlash作程序存储器,需要注意以下事项: (1)由于NandFlash出错和出现坏块的机会比NorFlash大得多,而程序出 错后的问题往往是致命的.所以必须有错误冗余校验机制和纠错机制. (2)由于MCU/MPU不能直接对NandFlash程序和数据进行访问,所以必 须有一个BootLoader程序将NandFlash程序映射到RAM中才可以执行. 也就是说在该单片机系统中,必须有一个ROM存储引导程序.该引 导程序一般说来是很精巧的. 在该BootLoader,必须包含NandFlash读驱动程序. 需要注意的是,该处的BootLoader和我们PC机的Boot是有区别的,而 更像PC机的BIOS程序. (3)用NandFlash存储程序的系统一般都用于程序量比较大,且要求带有 NandFlash存储器的系统.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
setPSW()
二、任务
任务代码 μC/OS-Ⅱ中的任务 任务的状态转换
任务代码
形式参数类型-void *
允许用户应用程序传递任何类型的数据给任务
void YourTask (void *pdata) { for (;;) {
返回参数类型-void
实际上任务永不返回
删除任务-OSTaskDel( )
从OS_TCB缓冲池中得到一个 OS_TCB 若缓冲池中有空余的OS_TCB,就 将该OS_TCB初始化 在开中断的情况下初始化 (1) OS_TCB (2)
if (ptcb != (OS_TCB *)0) { OSTCBFreeList OS_EXIT_CRITICAL(); ptcb->OSTCBStkPtr ptcb->OSTCBPrio
空闲任务 OS_LOWEST_PRIO 统计任务 OS_LOWEST_PRIO-1
配置参数OS_TASK_STAT_EN置1
OS_CFG.H
系统保留的优先级号
0~ 3 OS_LOWEST_PRIO-3~ OS_LOWEST_PRIO
任务的状态转换
最多可达64个任务 任务的优先级号就是任务的编号(ID)
从就绪表中删除任务
if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])==0) OSRdyGrp &= ~OSMapTbl[prio >>3 ];
OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]; A= OSRdyTbl[prio >> 3] ; If(A == 0) OSRdyGrp &= ~OSMapTbl[prio >>3 ];
/* 用户代码 */
} } } } if(条件表达式) OSTaskDel( );
实质是使任务进入休眠态
/* 用户代码 */
μC/OS-Ⅱ中的任务
最多可达64个任务 任务的优先级号就是任务的编号(ID)
每个任务有不同的优先级 优先级越高,其优先级号越低
OS_CFG.H
系统任务
prio-任务的优先级 ptos-任务的栈顶指针 pbos-任务的栈底指针 id-任务标志符 stk_size-堆栈的容量 pext-TCB扩展块指针 opt -任务选择项
源代码分析
源代码分析
OS_ENTER_CRITICAL(); ptcb = OSTCBFreeList;
使任务进入就绪态
|= ptcb->OSTCBBitY;
(6)
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; (7)
四、就绪表
就绪表结构 使任务进入就绪态 从就绪表中删除任务 查找就绪态中优先级最高的任务 OS_TCB中的快速算法
就绪表结构
将8个任务分为一组,每位代表一组 每组中若有一个任务就绪,其相应的 位置1
= OS_NO_ERR;
为节省任务调度时间所设置的中间变量
= prio >> 3; = OSMapTbl[ptcb->OSTCBY]; = prio & 0x07; = OSMapTbl[ptcb->OSTCBX]; = (OS_EVENT *)0;
OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_SEM_EN
源代码分析
#if OS_TASK_DEL_EN ptcb->OSTCBDelReq #endif ptcb->OSTCBY ptcb->OSTCBBitY ptcb->OSTCBX ptcb->OSTCBBitX #if #endif #if #endif ptcb->OSTCBEventPtr
若OS_TASK_DEL_EN=1,则建立 任务删除强求变量
OS_CPU.H
关、开中断方式的配置-OS_CRITICAL_METHOD
置1,选择直接关、开中断 置2,通过堆栈恢复中断状态 置3,保存在局部变量中
嵌套时问题 不跟踪SP问题 多占用RAM
一、临界区的处理
1. disable
enable 2. PUSH DI PSW SP变化… POP PSW 3. Sr = getPSW() disable
.OSTCBId-任务的识别码 [暂没用]
OS_TCB的成员变量
.OSTCBNext .OSTCBPrev-OS_TCBs的双重 链接 .OSTCBEventPtr-指向事件控制块的指针 .OSTCBMsg-指向传给任务的消息的指针 .OSTCBDly -任务延时或超时限制变量
表示任务允许挂起的最多时钟节拍数 为0表示任务不延时或没有等待时间限制
OS_MAX_TASKS-应用系统最多任务数 uCOS_II.H OS_N_SYS_TASKS-系统任务数 OS_MAX_TASKS+OS_N_SYS_TASKS 存放于OSTCBTbl[ ]中 OS_CORE.H
OS_TCB的管理
uCOS_II.H
空任务控制块缓冲区-OSTCBFreeList
if (OSTCBList != (OS_TCB *)0) { OSTCBList->OSTCBPrev = ptcb; } OSTCBList = ptcb;
源代码分析
OSRdyGrp OS_EXIT_CRITICAL(); return (OS_NO_ERR); } else { OS_EXIT_CRITICAL(); return (OS_NO_MORE_TCB); } }
OS_MBOX_EN || (OS_Q_EN && (OS_MAX_QS >= 2)) ptcb->OSTCBMsg = (void *)0;
源代码分析
将初始化的OS_TCB插入到已 建任务的双向链表中
(4) = ptcb; = OSTCBList; = (OS_TCB *)0; (5)
OS_ENTER_CRITICAL(); OSTCBPrioTbl[prio] ptcb->OSTCBNext ptcb->OSTCBPrev
.OSTCBExtPtr -指向用户定义的任务控制块扩展 .OSTCBStkBottom-指向任务栈底的指针 .OSTCBStkSize-栈中可容纳的指针元数目 .OSTCBOpt-创建任务时的选择项
uCOS_II.H OS_TASK_OPT_STK_CHK-允许任务栈检验功能 OS_TASK_OPT_STK_CLR-任务栈清零 OS_TASK_OPT_SAVE_FP-任务做浮点运算
第三章 内核结构
本章主要内容
临界段代码的处理 uC/OS-Ⅱ中任务的数据结构 任务的调度 应用程序CPU的利用率 中断服务子程序ISR uC/OS-Ⅱ中时钟节拍的实现 uC/OS-Ⅱ的初始化 启动uC/OS-Ⅱ
一、临界区的处理
应用代码
{ OS_ENTER_CRITICAL(); /* µ C/OS-II 临界代码段 */ OS_EXIT_CRITICAL(); }
0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
OSRdyGrp
|=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3]|=OSMapTbl[prio & 0x07];
从就绪表中删除任务
if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])==0) OSRdyGrp &= ~OSMapTbl[prio >>3 ];
若OS_TASK_CREATE_EN=1, 则插入额外的成员变量
= pext; = stk_size; = opt; = id;
ptcb->OSTCBStkBottom = pbos;
pext
stk_size pbos opt id #endif
= pext;
= stk_size; = pbos; = opt; = id;
每个任务有不同的优先级 优先级越高,其优先级号越低
OS_CFG.H
系统任务
空闲任务 OS_LOWEST_PRIO 统计任务 OS_LOWEST_PRIO-1
配置参数OS_TASK_STAT_EN置1
OS_CFG.H
系统保留的优先级号
0~ 3 OS_LOWEST_PRIO-3~ OS_LOWEST_PRIO
OSRdyTbl[n]中任意 一位置1,则 OSRdyGrp中第n位 置1
每位代表一个优先级 其长度为 OS_LOWEST_PRIO/8+1 若任务就绪,其相应的位 置1
就绪表结构
位操作 位或 | 位与 &
置位, 清位 取反 ~ 非操作 !
左移<< 右移>>
使任务进入就绪态
OSMapTbl[]= {0x01,
OSUnMapTbl[ ] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 };