前言
上篇和上上篇把嵌入式框架分层与MVC分别进行了简单的了解,知道了每个部分的优缺点,现在将两者进行结合,进一步进行学习。
下面是这两篇文章
一、结合MVC和框架分层
首先要知道,MVC是更多的是在逻辑层面是应用层面实现的,而不是功能层面的。
在之前嵌入式框架的途中那个小例子可以这样表示。
更为详细地调用就是下图的顺序,这样,就把MVC和嵌入式框架相进行结合。在的项目中,每个人负责的部分都可以是不一样的,能够加快进度,业务逻辑层只需要大概知道功能模块层定义的API就可以进行开发了,而负责功能模块层的人,就根据自己提供的API进行功能模块的设计。
二、结合RTOS进一步实现MVC
我使用的是rt-thread-nano进行的实现,推荐学习一下。
这里仅考虑上层MVC是怎么实现的,也就是仅仅考虑业务逻辑层,功能模块层暂不做讨论。
这里和这个
MVC与嵌入式文章的例子是一样的,几乎是一样的,只是需要添加一个启动业务就可以实现<MVC与嵌入式文章>中的小例子,也就是一个小demo想要大概了解,可以进去看看。
这个文章的小例子的思路是,根据MVC中的基本模式,分为3个线程,每个线程负责MVC中的其中的一个。
在MVC与嵌入式文章的例子中,还差一个一个启动业务,就构成了一个完成的小demo了。
这个启动业务可以另外开一个线程,作为动态线程,处理完就释放资源即可。
启动业务逻辑:
#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5
static rt_thread_t Start_thread = RT_NULL;
/* 线程 1 的入口函数 */
static void Start_thread_entry(void *parameter)
{
rt_uint32_t count = 0;
//每个功能的启动代码放在这里,等等
Led_Start();
Oled_Start();
Usart_Start();
rt_thread_delete(Start_thread );//删除线程
}
/* 线程示例 */
int Start_thread_sample(void)
{
/* 创建线程启动逻辑线程*/
Start_thread = rt_thread_create("Start_thread",
Start_thread_entry, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE);
/* 如果获得线程控制块,启动这个线程 */
if (Start_thread != RT_NULL)
rt_thread_startup(Start_thread);
return 0;
}
三、总结
最简单的RTOS与MVC以及框架分层就是下图,分别用不同的线程实现不同的逻辑,这样就结合MVC与嵌入式框架实现了最简单的方式。
更为复杂的方式:
控制器可以不唯一:不同控制器可以设置不同的线程进行输入
逻辑业务:也可以分为多个线程实现,将逻辑业务分层多个小部分实现。
视图业务:视图根据可以由多个表现形式,不同表现形式也可以用不同的线程表现。
这里仅仅是对最简单的情况进行了讨论,MVC和框架分层的部分,也只是对了应用层和业务逻辑层进行了讨论,实际上,使用这个思维也是在这两个层进行讨论的。嵌入式框架分层中,其他层大部分是不需要做改变的,就能将MVC的设计思路用到嵌入式里面了。