CortexM3的软件架构

来源:互联网 发布:pocket.pc软件下载 编辑:程序博客网 时间:2024/04/30 11:40

看了下某芯片商写的软件架构,觉得挺简单,和android 的上层架构也差不多。看来底层和上层真的是通的。 

这样看来,不管是应用、游戏、还是系统。架构的元素都不外乎:

1.区分调用层次。

2.foreground、background。

而foreground,一般都是针对具体任务,具体对象,具体界面。所以要设定任务线程和任务进程。background一般是通用的、系统级别的功能,与具体的任务无关,如时钟、外围接口检测(底层)、网络接口检测(网络游戏)。


整体来看,底层的软件架构就是在一个main loop里,循环执行foreground(UI、Event、Window Service)、background(System Service、Thread process)。 而Task是主要的数据结构,唯一的一个Task包含了所有的window,而window是foreground的抽象,像UI的绘制、Event的响应都通过window实现。Window是嵌套调用的,屏幕上现实的是嵌套最底层的window。window之间可以切换,用于不同功能界面的切换。

Service则分为前后台,具体处理什么没有提及,估计是处理每个window的绘图、响应任务。

除此之外,该架构使用了msg设计模式,通过在内存开辟一个BSS区,各个c文件产生的执行文件,可以通过一个公开的共用的BSS区,访问message的状态。为msg定义enum类,所有的消息都在里面。像MSG_PLAY_VIDEO,MSG_PLAY_MUSIC, mSG_STOP_VIDEO,MSG_STOP_MUSIC。然后通过checkMSG/getMSG/sendMsg等方法设置、获取和检测当前的系统状态。这个方法和android的设计是一样的,所以比较好理解。

大概是学到这么多东西了,更多的东西得跟踪源码才行。还不是很清楚foreground和background在代码中的相互调用是怎么实现的,只是知道它的组成部分是怎么实现。


系统主循环伪代码
void OSStart(xxx xxx,xxx xxx)
{
     
    
    while(1) 
    {
       TaskInit(xxx); 
        WinCreat(xxxx,xxx); 
        while(1) 
        { 
            if (SysService() != RETURN_OK)
            {
                break;
            }
            if (ThreadProcess(*pThread) != TRUE)
            {
                break;
            }
            if (WinServiceProc(*pWin) != RETURN_OK)
            {
                break;
            }
            if (WinKeyProc(*pWin) != RETURN_OK) 
            {
                break;
            }
 
            
        }
        //end the main window.
        WinDestroy(*pWin);
    }
    
}

0 0
原创粉丝点击