500 likes | 751 Views
题目 :Task Manage. 公司 : 松讯达中科电子 ( 深圳 ) 有限公司 部门 : 研发部软件科 撰稿人 : 杨文娟. 目录. Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常. 目录. Task Manage 的基本知识 Task Manage 的 API 函数 创建 Task Manage 系统 Task Manage 的统计 Task Manage 的内存分配 引发异常.
E N D
题目: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中间,都定义了优先级。下表将显示:
三种启动模式下不同的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或存在。用户任务必须在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。当为系统的每个任务分配外部队列时,系统将访问这个函数查询每个任务外部队列的的尺寸。如果函数返回的值比任务原始的尺寸大了,系统将用这个返回的值作为外部队列的值。否则,系统将产生致命错误。同理,在在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