MTK架构分析
[讲师手册/学员手册]
康佳集团股份有限公司
第一章 Framework介绍 3
3
3
4
4
5
5
7
7
7
8
9
第二章 按键相关 10
10
10
10
11
11
11
11
12
第三章 显示相关 12
12
13
第四章 举例 14
14
14
14
14
第五章 资源的添加 17
17
17
字符串资源添加过程 17
字符串资源添加方法 18
18
19
第一章 Framework介绍
由于代码是在模拟器中执行,所以代码中都带有一些win32程序的特征。比如模拟器的启动就是用典型的win32程序方式。。里面包括了InitInstance和模拟器的消息循环,这些都是win32程序通用的,我们需要注意的只是InitApplication();
这个InitApplication();函数创建了几个线程,用这几个线程来模拟手机中的不同的任务线程。并且为这些任务创建了不同的消息队列。这些创建出来的线程的一切相关资料都保存在task_info_g1(一个结构数组)里面。包括消息队列的信息。此外,它还设置了一个timer,这个timer是模拟器用来模拟整个时钟震荡用的,以后需要使用timer的时候都是使用它的分频,它的周期
是100ms,不过这只是系统模拟的而已。这些创建的线程中其中有一个是主要的,此线程的入口函数是MMI_task,。
函数MMI_task主要完成的是不停的读取protocol task中的消息,然后根据消息和参数进行相应的处理函数。protocol task中的消息其实就是我们刚才在initAppication()里面创建线程时创建的消息队列,这个消息队列的的指针保存在一个消息队列id指针里面,而这个消息队列id指针则保存在task_info_g[i]结构的task_ext_qid项中。晓得了消息队列的所在,读取protocol task就变的可行了,这方面的相关操作我们将在Queue相关里面详细介绍。
在函数MMI_task里读取了消息后,用一个switch语句来选择处理方式,我们发现很多处理方式的最后都调用了一个ProtocolEventHandler函数,此函数是得到消息中保存对应消息处理函数的函数入口,并根据入口执行相应函数,此方面的东西我们将在event相关里面进行详细介绍。最后,我们来看看当手机系统正常启动时执行的操作,看到case MSG_ID_MMI_EQ_POWER_ON_IND:消息,这个消息就是系统启动的消息。当系统收到这个消息时候,系统根据当前系统的状态来决定启动的方式,有正常启动(用户按键盘后启动),有充电启动,还有闹钟闹时启动,有异常启动。这里所谓的启动,有时候仅仅是显示一个用于表示状态的屏幕,而不全是完整的启动整个系统。
我们看到正常启动(用户按键盘启动)中首先调用了函数InitializeAll,这个是系统启动的初始化函数。比如协议栈,菜单数组,中断队列的初始化,一些硬件消息所对应的事件设定,还比如一些需要立刻初始化的模块,设定这些模块的菜单相应事件,设定这些模块协议栈消息响应函数。
初始化这些后,接着函数InitNvramData,让一些需要读nvram的模块读出nvram中的数据,以此来初始化这些需要用到nvram中的数据来初始化的模块。
初始化后调用函数fast_openscreen,这个函数就
mtk架构 来自淘豆网m.daumloan.com转载请标明出处.