前言:
现在很多单片机有MPU。比如STM32F4 F7 H7等以ARM CM3 CM4 CM为架构的单片机。那么现在很多RTOS都支持MPU配置,利用MPU实现用户态程序和内核态程序隔离。
从用户产品经理角度出发,作为RTOS的使用者,以一个简单的商业例子来说明,RTOS关于用户态程序这一特性,应该具备的要点:我是设备制造商,设备采用单片机芯片,我是XXRTOS的使用者,我希望我的设备具有二次开发能力,也就是说我的客户Tom购买了我的设备后,他可以写一些简单的程序来操控我的设备,并且TOM无法读取我内核固件,且TOM的程序发生意外时,内核可以捕获错误,从而停止运行TOM的程序。这就好像为Windows开发一个程序一样。那么可以得出,我必须为我的客户TOM分配一部分空间:RAM+FLASH。TOM的程序可以随心所欲的访问这些区域,但是不能访问内核区域。如图所示:
显然,Windows上面开发程序,TOM可以,定义全局变量,也可以调用OS提供的服务,比如创建线程,创建队列,串口发送等等。
比如TOM创建了两个线程,一个全局变量GA,他可以随心所以的操作全局变量GA,并发送串口数据。
int GA=1;
Thread1()
{
GA=5;
CreateThread(Thread2);
UartSend("hello world!");
}
我们分析一下,XXRTOS应该具备:
1.TOM程序调用的OS的资源的句柄,应该都放到内核区域,也就是说Thread1/Thread2的任务控制块应该放到内核区域,因为如果放到了用户空间,自己就可以修改自己的TCB任务块,自