题目 :Task Manage

Post on 19-Mar-2016

115 views 4 download

description

题目 :Task Manage. 公司 : 松讯达中科电子 ( 深圳 ) 有限公司 部门 : 研发部软件科 撰稿人 : 杨文娟. 目录. Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常. 目录. Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常. - PowerPoint PPT Presentation

Transcript of 题目 :Task Manage

题目 :Task Manage公司 : 松讯达中科电子 ( 深圳 ) 有限公司

部门 : 研发部软件科撰稿人 : 杨文娟

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

Task Manage 介绍 Task Manage 主要管理系统任务的创建、用户自定义任务的创建、任务执行时序和高层中断服务程序( HISR )。 KAL 为了保持自身的高简洁性,为操作系统的每个组成部分定义了自己的 API 函数,包括 Task Manage 、 Task Snchron- -ization Manage 、 Task Communication management 、 Timer Management和 Memory Management 。

Task Manage 描述 MAUI 的基本执行单位不是一个 Task ,就是 HISR ,或者中断。当系统访问中断或受限制时, Context switch 就会发生。而时序设计申请系统的时序优先级。在任何两个 tasks 和两个 HISRS 中间,都定义了优先级。下表将显示:

Task Manage 的优先级

三种启动模式下不同的 Tasks 三种启动模式为 META , USB , normal boot mode. 在不同的启动模式下,有不同的任务。 这些都预先在类型数组 comptask _info_struct 中定义。 例如: normal boot mode 对应的是 sys_comp_config_tbl 在启动阶段,系统识别启动模式,复制任务信息到全局数组 task_info_g ,这个为任务运行提供重要的参数。在消息传递期间, task_info_g 是队列 ID 的目的地。

操作系统的启动流程 创建全局处储存体和缓冲层、注册中断事件、设备初始化和任务建立。

任务状态 一个任务创建后,分两种状态:准备、执行。系统规定有高优先级的处 Context switch 的前面。在执行期间,任务因同步和通信资源可以延迟。

任务结构

MMI Queue: 协议栈 /L4 写事件到这个队列, MMI Task 从这个队列读取。 L4/NS Queue:MMI Task 写 MMI 事件到这个队列, L4 Task/Network Simulator 从这个队列读取事件。 MMI Task 等待 MMI 队列 协议栈提出队列信息

Framework Layer进程事件 Framework Layer回叫到应用程序层 应用程序层使用 UI 层显示在屏上

数据结构和数据类型 Comptask_handler_struct任务结构的组成,包括任务入口、初始化和三个选择函数 (configuration,reset,end )。

Comptask_info_struct 任务描述,在下表可以看出,任务描述是由一些常量数组进行,在创建函数为 NULL 的情况下,任务不会创建。

Task_info_struct 任务运行相关的信息 Kal_task_type,*kal_intemal_taskid 定义了任务控制块 Kal_hisr_type,*kal_intemal_taskid HISR控制块

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

Task Management API 列表 Kal_activate_hisr 激活 HISR 后,将在下个时序拥有最高优先权 Kal_change_priority 任务运行优先级开关,用户必须慎用这个函数,否则在优先级转换时容易引起死锁。

Kal_create_hisr 创建 HISR Kal_get_my_task_index 在当前运行的执行单元中找到正确的任务索引,如果不是任务则返回 -1 Kal_get_mytask_priority 找到当前执行单元的优先级 Kal_get_task_self-id

返回当前任务的 ID Kal_if_hisr 识别当前执行单元是否为 HISR Kal_sleep_task Task 处于不运行状态,持续时间为 4.651ms Stack_change_priority_by_module_ID 提供运行任务优先级开关

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

用户任务必须在 custom_comp_config_tbl中是专用的,而且是 comptask_info_struct的数组类型,用户任务可以被创建函数识别为NULL 或存在。 在启动阶段,系统查询映射表,确定它的创建通道,然后创建函数。 为了增加系统任务,用户被允许最多创建 16个任务。下面是创建函数的步骤:

1、定义 task id 和 module id

用户最多只能定义 16个任务和 16个模式

2、填充模型到任务映射表中

在影射表 custom_mod_task_g上,填充MOD_CUSTOM1到任务 INDE_CUSTOM1

3、配置任务生成表

在 custom_config.c 中定义任务结构

4 、实现任务创建函数

在 custom1_create.c 中实现任务创建函数

5、定义消息 ID

在 custom_sap.h 中定义消息 ID ,消息 ID最大值是 1000个 至此,任务创建完成。

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

USB Task Audio Task BMT Task Media Task MMI Task NVRAM Task File Manager Task

AUX Task L1 Task L4 Task Via Task UEM Task FT Task TST Task PS Task

CMUX Task IMPS Task SIM Task MOD_TP Task Timer Task View Task IDLE Task

USB Task USB Task负责传递 USB Mode1、 MMI以及 external interrupt之间的通信。 当手机上的 USB线路被堵, external interrupt HISR 发送消息到 USB Task ,USB Task转送到 MMI , MMI选择mass storage driver 或者 virtual comport driver;MMI 发送消息到 USB Task , USB Task 设定模型和激活驱动程序。

BMT Task 当 BMT Task激活以后 pmic_charge_ current_offset 函数返回值将从 NVRAM 读取值来设置 PMIC ,这个值的范围是( -6, 12) Audio Task Audio Task利用函数 pmic_speaker_gain调整扩音器的分贝,最大21分贝

系统提供 70个 APIS 为 Task 访问存储设备上的文件 System_and_Debug\File_System\File_System_Document_20060717_W06.29.pdf 中可以查看这 70个函数

FS_MAX_THREAD 定义了任务使用文件系统时最大的数量。文件系统中的每个任务的行为(非块 /块 /只读 / 写)和关系(特别是路径)将被记录。 。默认值是 10,你可以根据自己系统的设计调整,这个值得范围GREATER THAN1,如果违反了这个值在启动时中断。 ( System_Configuration_V1.14.pdf )

任务栈 在运行期间每个任务的消耗高峰都有监视指令,它的记录是根据任务索引。下表是栈消耗到任务名称,可以从 stack_config.c 中得到枚举数量,也可以在 enumFileCustom 中看到具体值。 如果任务栈的消耗是 0,则这个任务栈在本工程中不存在。

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

因系统任务的要求,用户被允许可以扩大栈的尺寸和队列的尺寸 。在 custom_config.c 中定义了函数 custom_config_task_stack_size 。当为系统的每个任务分配栈时,系统将访问这个函数查询每个任务栈的尺寸。如果函数返回的值(栈尺寸, BYTE )比任务原始的尺寸大了,系统将用这个返回的值作为栈的尺寸。否则,系统将用原始设定的去分配栈。例如,下面这个函数就是说MMI 任务栈是 8KB 。

同理,在在 custom_config.c 中定义了函数 custom_config_task_extq_size 。当为系统的每个任务分配外部队列时,系统将访问这个函数查询每个任务外部队列的的尺寸。如果函数返回的值比任务原始的尺寸大了,系统将用这个返回的值作为外部队列的值。否则,系统将产生致命错误。

栈和外部队列都是从系统存储层分配的。如果一直扩大尺寸,系统存储就消耗很大,系统存储尺寸必须进行适当调整。

目录 Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常

为了阻止 context switch 在异常事件上的路径,违反任务优先级最高先进行的原则。因此,在系统访问前,任何系统锁都必须释放,否则,系统死锁。 下面为系统错误事件进程:

当访问文件系统时,每个任务都会小心处理错误条件,虽然好多错误会被高级进程发现,但是还有一些不会被发现,直到他们在高级运行系统中发生。比如,硬件突然被破坏或存储设备被堵塞。任务自己会仔细的处理这些事件直到中断发生 之前。如果错误文件系统可以忽略或容易覆盖,否则中断会引起系统重新启动,要注意以下的错误代码: -10, -25, -26, -47, -48, -101, -102

系统 Task 异常

HISR 系统异常

任务信息引起的致命错误