嵌入式操作系统内核原理和开发(延时操作)
- 格式:pdf
- 大小:408.12 KB
- 文档页数:6
C语言嵌入式操作系统裸机和RTOS C语言嵌入式操作系统裸机与RTOS嵌入式操作系统(Embedded Operating System,简称EOS)是一种专为嵌入式设备设计的操作系统,它具有小巧、高效、实时等特点。
而裸机编程是指在嵌入式系统中,直接与硬件进行交互编程的方式,不依赖于任何操作系统。
RTOS(Real-time Operating System,实时操作系统)是一种提供实时响应的操作系统,针对嵌入式系统而设计。
本文将介绍C语言嵌入式操作系统裸机编程和RTOS编程的基础知识和技巧。
一、裸机编程入门在进行裸机编程之前,我们需要了解硬件平台的相关信息,包括处理器型号、寄存器、外设等。
然后,我们可以通过配置寄存器来初始化硬件设备,设置中断服务程序,并编写具体的功能代码。
在裸机编程中,我们需要注意时间分片、中断处理和资源管理等问题。
二、裸机编程与RTOS的区别1. 复杂性:裸机编程相对简单,因为我们可以直接访问硬件资源。
而RTOS编程需要考虑任务调度、资源互斥、消息传递等复杂的操作系统特性。
2. 实时性:RTOS可以提供更好的实时性能,可以用于要求较高实时响应的应用场景。
而裸机编程的实时性取决于程序的具体实现。
3. 可移植性:裸机编程通常与特定的硬件平台绑定,不具备通用的可移植性。
而RTOS提供了抽象层,可以将应用程序与底层硬件解耦,提高了可移植性。
三、RTOS编程基础1. 任务管理:RTOS允许将应用程序划分为多个任务,并通过任务调度器进行管理。
每个任务执行特定的功能,实现任务之间的并发执行。
2. 中断处理:RTOS提供了中断处理机制,可以对不同的中断进行响应和处理。
中断处理程序可以与任务同时运行,保证了系统的实时性。
3. 时间管理:RTOS提供了时间管理功能,可以进行时间片轮转调度、优先级调度等,确保任务按照预定的时间顺序执行。
4. 同步与互斥:RTOS提供了信号量、互斥锁等机制,用于管理共享资源的访问。
嵌入式Linux操作系统是一种针对嵌入式设备设计和优化的Linux操作系统。
它在嵌入式系统中发挥着关键作用,为嵌入式设备提供了丰富的功能和灵活性。
以下是嵌入式Linux操作系统的原理和应用方面的概述:嵌入式Linux操作系统原理:内核:嵌入式Linux操作系统的核心是Linux内核,它提供了操作系统的基本功能,包括处理器管理、内存管理、设备驱动程序、文件系统和网络协议栈等。
裁剪:为了适应嵌入式设备的资源限制,嵌入式Linux操作系统通常经过裁剪和优化,只选择必要的功能和驱动程序,以减小内存占用和存储空间,并提高性能和响应速度。
交叉编译:由于嵌入式设备通常具有不同的硬件架构和处理器,所以嵌入式Linux操作系统需要通过交叉编译来生成适用于目标设备的可执行文件和库。
设备驱动:嵌入式Linux操作系统需要适配各种硬件设备,因此需要编写和集成相应的设备驱动程序,以使操作系统能够正确地与硬件进行通信和交互。
嵌入式Linux操作系统应用:嵌入式设备:嵌入式Linux操作系统广泛应用于各种嵌入式设备,如智能手机、平板电脑、家用电器、工业控制系统、车载设备等。
物联网(IoT):随着物联网的快速发展,嵌入式Linux操作系统被广泛应用于连接的嵌入式设备,用于数据采集、通信、远程控制和智能化管理。
嵌入式开发板:嵌入式Linux操作系统在开发板上提供了丰富的开发环境和工具链,用于嵌入式软件开发和调试。
自定义嵌入式系统:开发者可以基于嵌入式Linux操作系统构建自定义的嵌入式系统,根据特定需求进行定制和开发,实现各种功能和应用。
嵌入式Linux操作系统的原理和应用非常广泛,它为嵌入式设备提供了灵活性、可定制性和强大的功能支持,使得开发者能够构建高度定制化和功能丰富的嵌入式系统。
嵌入式系统开发嵌入式系统是指内嵌在其他设备或系统中,实现特定功能的计算机系统。
它通常集成了硬件和软件,通过专门的开发平台进行开发和编程。
嵌入式系统广泛应用于各个领域,如汽车、家电、医疗设备、通信设备等。
本文将围绕嵌入式系统开发展开,介绍嵌入式系统的基本原理、开发流程以及相关技术。
一、嵌入式系统的基本原理嵌入式系统的基本原理是将处理器、存储器、输入输出设备等硬件组件集成在一起,通过操作系统和应用程序实现特定的功能需求。
常见的嵌入式系统采用单片机或微处理器作为核心处理器,具有较小的体积和功耗。
嵌入式系统的设计需要考虑硬件平台的选择、外设的接口设计、系统调度和任务管理等方面。
同时,软件开发也是嵌入式系统的重要组成部分,包括操作系统的移植、设备驱动程序的编写以及应用程序的开发。
二、嵌入式系统开发流程嵌入式系统的开发流程包括需求分析、硬件设计、软件开发、集成测试和发布等环节。
下面将逐一介绍各个环节的内容。
1. 需求分析在嵌入式系统开发之前,需要明确系统的功能需求和性能要求。
通过与用户沟通和需求分析,确定硬件平台、输入输出设备和外部接口等方面的需求。
2. 硬件设计硬件设计是指基于嵌入式系统的功能需求,选择合适的处理器、存储器、外设等硬件组件,并进行相应的电路设计和PCB布局。
硬件设计需要考虑系统的稳定性、扩展性和功耗等因素。
3. 软件开发软件开发是嵌入式系统开发的关键环节。
首先,根据硬件平台的选择,进行操作系统的移植和配置。
然后,编写设备驱动程序,实现对外设的控制和数据交换。
最后,根据系统需求,开发应用程序,实现特定功能。
4. 集成测试集成测试是将硬件和软件进行整合,测试系统的功能和性能是否满足需求。
通过功能测试、性能测试和稳定性测试,发现并修复系统中的缺陷和问题。
5. 发布在集成测试通过后,将嵌入式系统制作成最终产品,进行出厂测试和质量控制。
然后,将产品发布给客户或上线市场。
三、嵌入式系统开发的相关技术嵌入式系统开发涉及到多个技术领域,下面将介绍几个重要的技术。
ucosiii操作系统工作原理ucosiii是一种常用的嵌入式实时操作系统,它具有高度可靠性和高实时性的特点。
本文将介绍ucosiii操作系统的工作原理。
ucosiii操作系统是由美国Micrium公司开发的一种实时操作系统,它是用C语言编写的,可以运行在各种嵌入式系统中。
ucosiii采用了一种基于内核对象的任务管理机制,可以有效地管理系统中的各个任务,并提供了丰富的服务功能,如任务间通信、时间管理、内存管理等。
在ucosiii中,任务是操作系统的基本执行单元,每个任务都有自己的优先级和堆栈空间。
ucosiii使用了一种优先级抢占式的调度算法,即优先级高的任务可以抢占优先级低的任务的执行权。
这种调度算法可以保证高优先级任务的及时响应,并提高系统的实时性。
ucosiii的任务管理机制是通过任务控制块(TCB)来实现的。
每个任务都有一个对应的TCB,其中包含了任务的状态、优先级、堆栈指针等信息。
ucosiii通过不同的系统调用函数来管理任务的创建、删除、挂起、恢复等操作。
任务的切换是通过ucosiii的任务调度器来完成的,任务调度器会按照任务的优先级进行任务切换。
ucosiii提供了丰富的服务功能,其中包括任务间通信、时间管理、内存管理等。
任务间通信是通过信号量、邮箱、消息队列等机制来实现的,可以实现任务之间的数据共享和同步。
时间管理功能可以实现任务的定时执行和延时操作,可以满足实时系统对时间要求的需要。
内存管理功能可以对系统的内存进行分配和释放,提高系统的资源利用率。
ucosiii的内核对象是操作系统提供的一种资源管理机制,包括信号量、邮箱、消息队列等。
这些内核对象可以用于任务间的同步和通信,可以有效地避免资源竞争和数据冲突的问题。
ucosiii的工作原理可以总结为以下几个步骤:1. 初始化ucosiii操作系统,包括初始化任务控制块、任务堆栈等。
2. 创建任务,包括创建任务控制块、任务堆栈等。
嵌入式实时操作系统的设计与开发随着科技的不断发展,嵌入式系统在很多领域得到了广泛的应用,例如智能家居、物联网、智能医疗等。
嵌入式系统是一种专门为特定应用领域设计的计算机系统,具有高效、稳定、耐用等特点。
而实时操作系统是嵌入式系统的重要组成部分,它能够确保系统在实时性、可靠性、安全性等方面具有高水平的性能。
因此,嵌入式实时操作系统的设计与开发是嵌入式系统开发中的重要环节。
一、嵌入式实时操作系统的基本概念实时操作系统是指能够在规定的时间内响应某个事件的操作系统。
在一个实时系统中,时间是非常宝贵的资源,系统必须在预定时间内完成所需的操作,才能保证系统的可靠性和安全性。
嵌入式实时操作系统是一种应用于嵌入式系统中的实时操作系统,它有着更高的实时性和可靠性,可以为嵌入式系统提供更好的性能和稳定性。
在嵌入式实时操作系统中,任务的优先级和时间限制是非常重要的。
每个任务都有各自的时间限制和执行优先级,系统必须保证任务不会发生竞争或死锁,以免影响系统的正常运行。
而在一些高要求的场景中,例如商业飞机、炮火定位等领域,实时性是首要的,对于一些时间非常敏感的应用,响应时间和执行速度必须能够达到毫秒或者微秒级别。
二、嵌入式实时操作系统的特点嵌入式实时操作系统与其他操作系统相比有着许多独特的特点。
1.轻量级嵌入式实时操作系统必须是轻量级的,在保证实时性和可靠性的前提下,尽可能减少系统的资源占用和功耗。
由于嵌入式设备通常的资源比较有限,因此轻量级的操作系统在这种情况下显得尤为重要。
2.快速响应嵌入式实时操作系统必须能够快速响应各种事件,在规定的时间内完成任务。
在这种现实的场景中,延迟和响应速度的问题在业务上是不能被容忍的。
3.优先级调度嵌入式实时操作系统中,每个任务都有自己的优先级和时间限制,系统必须按照优先级轮询任务,及时分配资源。
优先级调度是嵌入式实时操作系统中最核心的功能之一,也是实时性和可靠性的重要保证。
三、嵌入式实时操作系统的设计和开发环节非常关键,关系到整个系统的性能和可靠性。
嵌入式工作原理
嵌入式系统是一种专门设计用于执行特定任务的计算机系统。
它通常被嵌入到其他设备或系统中,以控制和监测其操作。
嵌入式系统的工作原理主要包括以下几个方面:
1. 硬件设计:嵌入式系统的硬件设计是基于特定需求和功能进行的。
它通常包括中央处理器(CPU)、存储器、输入输出接口、传感器等组件。
硬件设计的目标是满足系统的性能、功耗和成本等要求。
2. 软件开发:嵌入式系统的软件开发包括编写应用程序和驱动程序。
应用程序是实现特定功能的代码,驱动程序用于控制硬件设备和与外部设备的通信。
软件开发的过程中需要考虑系统的实时性、稳定性和资源利用效率。
3. 实时操作系统(RTOS):嵌入式系统通常需要实时响应外
部事件,并及时采取相应的措施。
为了满足这一要求,常使用实时操作系统来管理系统资源和任务调度。
实时操作系统在多任务环境下,通过任务优先级、中断处理和时间片轮转等方式,确保任务能够按时完成。
4. 通信与接口:嵌入式系统通常需要与外部设备或其他系统进行通信。
这可以通过串口、以太网、无线通信等方式实现。
接口的设计需要考虑通信协议、数据传输速率、数据完整性等因素。
5. 电源管理:嵌入式系统通常需要工作在低功耗状态下,以延长电池寿命或降低能耗。
因此,电源管理是嵌入式系统设计中的重要考虑因素。
电源管理技术包括动态电压调整、功耗优化和睡眠模式等方法。
总体而言,嵌入式系统的工作原理是硬件和软件之间密切配合,根据特定需求和功能设计,通过实时操作系统控制和调度任务,与外部设备或系统进行通信,并采用电源管理技术降低能耗。
嵌入式linux系统开发标准教程嵌入式Linux系统开发是一门非常重要的技术,它在嵌入式设备、物联网和智能家居等领域中得到广泛应用。
本文将介绍嵌入式Linux系统开发的标准教程,帮助读者了解该技术的基本原理和常用的开发工具。
一、嵌入式Linux系统开发的基本原理嵌入式Linux系统开发是指将Linux操作系统移植到嵌入式设备中,并针对特定的应用领域进行定制开发。
它与传统的桌面Linux系统有很大的区别,主要体现在以下几个方面:1. 硬件平台的选择:嵌入式设备通常采用ARM架构或者其他低功耗的处理器架构,而不是传统的x86架构。
因此,在进行嵌入式Linux系统开发时,需要根据具体的处理器架构进行相应的移植和优化。
2. 精简的内核:由于嵌入式设备的资源有限,为了提高系统性能和节省资源,嵌入式Linux系统通常会精简内核。
这需要对Linux内核的源代码进行裁剪和优化,以去除不必要的模块和功能,并保留对应用需求的必要功能。
3. 定制化的驱动程序和应用程序:嵌入式设备通常需要与各种外设进行交互,因此需要编写相应的驱动程序。
此外,根据具体的应用需求,还需要定制相关的应用程序和用户界面。
二、嵌入式Linux系统开发的工具嵌入式Linux系统开发需要使用一些常用的工具,下面是一些常用的工具和其功能的介绍:1. 交叉编译工具链:由于嵌入式设备和开发主机的处理器架构不同,无法直接在开发主机上编译和运行目标代码。
因此,需要使用交叉编译工具链,在开发主机上生成适用于目标设备的可执行文件。
2. 调试工具:在嵌入式Linux系统开发过程中,调试是非常重要的一环。
常用的调试工具包括GDB(GNU调试器)和strace(系统调用跟踪工具),它们可以帮助开发人员追踪程序的执行过程和定位错误。
3. 文件系统工具:嵌入式设备的存储资源有限,需要使用文件系统来组织和管理存储的数据。
常用的文件系统工具包括mkfs(创建文件系统)、mount(挂载文件系统)以及文件传输工具(如scp和rsync)等。
freertos原理、架构
FreeRTOS是一个开源的实时操作系统内核,它提供了一种多任务处理的机制,可以在嵌入式系统中运行。
它的原理和架构可以从以下几个方面来介绍:
1. 内核原理:
FreeRTOS的内核原理基于优先级抢占式调度。
它使用任务控制块(TCB)来管理任务的状态、优先级、堆栈指针等信息。
通过任务切换机制,可以实现多个任务之间的并发执行。
FreeRTOS还使用了轻量级的信号量、消息队列和互斥量等机制来实现任务间的同步与通信。
2. 架构:
FreeRTOS的架构包括内核、任务管理、时间管理、内存管理、中断处理等模块。
内核模块负责任务调度和切换,任务管理模块负责任务的创建、删除和切换,时间管理模块提供了定时器和延时函数,内存管理模块提供了动态内存分配和释放的功能,中断处理模块负责处理系统中断。
3. 内核组件:
FreeRTOS的内核组件包括任务管理、时间管理、内存管理、队列和信号量等。
任务管理模块包括任务的创建、删除、挂起和恢
复等功能;时间管理模块包括定时器、延时函数等;内存管理模块
包括动态内存分配和释放;队列和信号量用于任务间的通信和同步。
4. 可移植性:
FreeRTOS的架构设计具有高度的可移植性,可以方便地移
植到不同的处理器架构和开发环境中。
它提供了通用的接口和适配层,使得开发人员可以很容易地将FreeRTOS移植到各种嵌入式系统中。
总的来说,FreeRTOS的原理和架构是基于优先级抢占式调度的
实时操作系统内核,提供了任务管理、时间管理、内存管理、中断
处理等模块,具有高度的可移植性,适用于各种嵌入式系统的开发。
嵌入式系统应用技术的研究与开发嵌入式系统是一种电子计算机系统,它是特别设计用于执行特定功能的计算机系统。
这种系统常用于控制和监视系统,如智能手机、数字相机、车载音频系统等。
为了实现嵌入式系统的工作,需要使用一系列技术和工具来进行开发和应用。
本文将探讨嵌入式系统应用技术的研究与开发,包括嵌入式系统基本原理和常用技术,以及嵌入式系统应用开发的方法和工具。
一、嵌入式系统基本原理嵌入式系统本质上是一个计算机系统,它具有计算、存储、控制和通信等功能。
由于嵌入式系统的特殊应用环境,它的体积、功耗、成本和性能等方面都有较高的要求。
嵌入式系统通常由下列组成部分组成:1. 主处理器/控制器主处理器/控制器是嵌入式系统的核心,负责计算、控制和管理系统的硬件和软件资源。
主处理器/控制器的类型和性能直接决定了系统的功能和性能。
常见的主处理器/控制器有ARM Cortex系列、Intel x86系列、MIPS系列等。
2. 存储器存储器用于存储系统程序和数据。
由于嵌入式系统的体积和功耗都有限制,因此存储器通常采用闪存、EEPROM、SRAM等低功耗、小体积的型号。
3. 输入/输出设备输入/输出设备用于与外界进行数据交换,如键盘、鼠标、显示屏、声卡、网卡等。
嵌入式系统通常使用专用的输入/输出设备,以满足应用需求和耗能要求。
4. 网络设备网络设备负责系统与外部网络通信,如以太网卡、无线网卡、蓝牙模块等。
网络设备的选择和配置决定了系统的通信速度和稳定性。
二、嵌入式系统常用技术1. 硬件设计嵌入式系统的硬件设计主要涉及主处理器/控制器的选择、连通性设计、电源管理等方面。
硬件设计的质量和性能直接决定了嵌入式系统的稳定性和能耗水平。
2. 软件开发嵌入式系统的软件开发主要涉及核心程序设计、驱动程序编写、通信协议实现等方面。
软件开发的质量和可靠性直接决定了嵌入式系统功能的实现和应用效果的稳定性。
3. 中间件中间件是嵌入式系统开发中常用的技术。
嵌入式操作系统内核原理和开发(延时操作)延时操作是操作系统中经常遇到的一种情形。
延时的原因很多,有的时候是为了等待外设芯片处理结束,有的时候是为了暂时释放cpu的使用权,有的就是为了希望在一段时间获取资源,如果没法在单位时间内获取,放弃等待。
但是不管怎么说,延时都是操作系统必不可少的一个工作。
下面我们就看看延时是怎么实现的,[cpp]view plaincopy1.static void tick_list_priority_insert(LIST *head, RAW_TASK_OBJ *task_ptr)2. {3. RAW_U32 val;4.5. LIST *q,*start, *end;6. RAW_TASK_OBJ *task_iter_temp;7.8. start = end = head;9. val = task_ptr->tick_remain;10.11.12.for (q = start->next; q != end; q = q->next) {13.14. task_iter_temp = list_entry(q, RAW_TASK_OBJ, tick_list);15.16./*sorted by remain time*/17.18.if ((task_iter_temp->tick_match - raw_tick_count) > val) {19.break;20. }21. }22.23. list_insert(q, &task_ptr->tick_list);24.25.26. }27.28.29.void tick_list_insert(RAW_TASK_OBJ *task_ptr, RAW_U32 time)30.31. {32. LIST *tick_head_ptr;33.34. RAW_U16 spoke;35.36.if (time) {37.38. task_ptr->tick_match = raw_tick_count + time;39. task_ptr->tick_remain = time;40.41. spoke = (RAW_U16)(task_ptr->tick_match & (TICK_HEAD_ARRAY - 1) );42. tick_head_ptr = &tick_head[spoke];43.44. tick_list_priority_insert(tick_head_ptr, task_ptr);45.46. task_ptr->tick_head = tick_head_ptr;47.48. }49.50. }51.延时的代码其实不是很多,所以我在这里把最重要的两个函数给粘贴到这里了。
因为每个线程都有可能延时,那么怎么处理这些线程之间的关系就是我们需要做的事情了。
我们看到了,我们直接用tick_match表示线程需要等待的那个时间点就可以了。
当然,tick是不断增加的,我们可以把尾数相同的线程按照高低顺序排列在一起,这样在对应的tick到来的时候,就直接按照尾数查找就可以了,tick_list_priority_insert就是干了这么一件事情。
那么,tick什么时候到期呢?到期又该怎么处理呢,我们接着往下看,[cpp]view plaincopy1.void tick_list_update(void)2. {3.4. LIST *tick_head_ptr;5. RAW_TASK_OBJ *p_tcb;6. LIST *iter;7. LIST *iter_temp;8.9. RAW_U16 spoke;10.11. RAW_SR_ALLOC();12.13. RAW_CRITICAL_ENTER();14.15. raw_tick_count++;16. spoke = (RAW_U16)(raw_tick_count & (TICK_HEAD_ARRAY - 1) );17. tick_head_ptr = &tick_head[spoke];18. iter = tick_head_ptr->next;19.20.while (RAW_TRUE) {21.22./*search all the time list if possible*/23.if (iter != tick_head_ptr) {24.25. iter_temp = iter->next;26. p_tcb = list_entry(iter, RAW_TASK_OBJ, tick_list);27.28./*Since time list is sorted by remain time, so just campare theabsolute time*/29.if (raw_tick_count == p_tcb->tick_match) {30.31.switch (p_tcb->task_state) {32.case RAW_DLY:33.34. p_tcb->block_status = RAW_B_OK;35. p_tcb->task_state = RAW_RDY;36. tick_list_remove(p_tcb);37. add_ready_list(&raw_ready_queue, p_tcb);38.break;39.40.case RAW_PEND_TIMEOUT:41.42. p_tcb->block_status = RAW_B_TIMEOUT;43. p_tcb->task_state = RAW_RDY;44. p_tcb->block_obj = 0;45. tick_list_remove(p_tcb);46./*remove task on the block list because task is timeout*/47. list_delete(&p_tcb->task_list);48. add_ready_list(&raw_ready_queue, p_tcb);49.break;50.51.52.case RAW_PEND_TIMEOUT_SUSPENDED:53.54. p_tcb->block_status = RAW_B_TIMEOUT;55. p_tcb->task_state = RAW_SUSPENDED;56. p_tcb->block_obj = 0;57. tick_list_remove(p_tcb);58./*remove task on the block list because task is timeout*/59. list_delete(&p_tcb->task_list);60.break;61.62.63.64.case RAW_DLY_SUSPENDED:65.66. p_tcb->task_state = RAW_SUSPENDED;67. p_tcb->block_status = RAW_B_OK;68. tick_list_remove(p_tcb);69.break;70.71.default:72.73. #if (CONFIG_RAW_ASSERT > 0)74. RAW_ASSERT(0);75. #endif76.77.break;78. }79.80. iter = iter_temp;81. }82.83./*if current task time out absolute time is not equal current systemtime, just break because timer list is sorted*/84.else {85.86.break;87.88. }89.90. }91.92.93./*finish all the time list search */94.95.else {96.97.break;98. }99.100. }101.102. RAW_CRITICAL_EXIT();103. }104.这个函数是在时钟中断的时候被调用的,根据函数的先后顺序,看看函数实现了哪些功能,(1)自增raw_tick_count;(2)根据尾数获取tick队列的头指针;(3)开始循环迭代处理延时线程;a)如果没有没有延时线程,循环跳出;b)如果线程的终点tick和当前tick不匹配,跳出循环,因为tick都是排序好的,所以后面的tick肯定不满足要求;c)如果当前tick满足要求,根据线程状态进行处理,主要分为延时、阻塞超时、延时挂起、阻塞超时挂起四种状态;d)获取下一个延时线程,观察是否满足要求,如果是继续回到c,否则退出循环。
(4)函数返回,继续时钟中断的剩余操作。
最后,我们补充一下关于有限时间等待的知识。
就像以前关于互斥操作的内容一样,其实某些情况下,我们是有时间限制的。
一段时间没有获取资源,我们就不希望等待了,所以这里的延时操作还包括这部分的内容,我们看看阻塞函数的相关代码就明白了。
[cpp]view plaincopy1.RAW_U16 raw_pend_object(RAW_COMMON_BLOCK_OBJECT *block_common_obj, RAW_TASK_OBJ *task_ptr, RAW_U32 timeout)2. {3.4. #if (CONFIG_RAW_ASSERT > 0)5.6.if (timeout == 0) {7. RAW_ASSERT(0);8. }9.10. #endif11.12. task_ptr->block_obj = block_common_obj;13.14.15.if (timeout == RAW_WAIT_FOREVER) {16.17.18. task_ptr->task_state = RAW_PEND;19.20. }21./*task is blocked with timeout*/22.else {23.24. tick_list_insert(task_ptr,timeout);25.26. task_ptr->task_state = RAW_PEND_TIMEOUT;27.28. }29.30./*Remove from the ready list*/31. remove_ready_list(&raw_ready_queue, task_ptr);32.33.if (block_common_obj->block_way == RAW_BLOCKED_WAY_FIFO) {34.35. list_insert(&block_common_obj->block_list, &task_ptr->task_list);36.37. }38.39.else {40.41./*add to the priority sorted block list*/42. add_to_priority_list(&block_common_obj->block_list, task_ptr);43.44. }45.46.return RAW_SUCCESS;47. }48.大家留意一下这里timeout参数的处理过程,关注一下对应的tick_list_insert函数,这样就可以明白我的意思了。