关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > CortexM3内核的μC/OSII安全性与稳定性的研究

CortexM3内核的μC/OSII安全性与稳定性的研究

作者:时间:2010-12-21来源:网络收藏


4.4 系统函数的使用

系统函数都是在特权级下执行的,在应用程序中调用系统函数前应该切换到特权级,系统函数执行完毕后再切换后用户级。调用形式如下:

ToPrivilege ();

OSFunction(Parameter1, Parameter2……);//系统函数

ToUser ();

在特权级下可以通过置位CONTROL[0]来进入用户级。用户级下是不能通过修改CONTROL[0]来回到特权级的,必须通过一个异常 handler来修改CONTROL[0],才能在返回到线程模式后取得特权级。因此,从用户级到特权级的方法就是产生一个异常,再在异常例程中修改 CONTROL[0]。通常的方法是使用软中断SVC。

切换到特权级的代码如下:

ToPrivilege;函数ToPrivilege ()

SVC 0

BX LR

SVC_Handler;SVC服务例程

MRS R1,CONTROL

AND R1,R1,#0xFE

MSR CONTROL,R1;回到特权级

BX LR

而从特权到用户级就简单了,只要执行切换程序就可以了,不用产生异常。切换到用户级的代码为:

ToUser;函数ToPrivilege ()

MRS R0,CONTROL

ORR R0,R0,#0x01;切换到用户级

MSR CONTROL,R0

BX LR

4.5 其他改进方法

任务在用户级+PSP下运行,而操作系统函数运行在特权级+MPS运行,中断服务例程有硬件设定在处理模式+特权级+MSP,这样系统的和稳定性会更高。但是每个任务需要两个堆栈PSP、MSP。这样无疑增加了内存的使用(将近增加一倍),由于嵌入式芯片的片内RAM比较小,增加内存必然会增加成本,并且要对任务控制块做相应的修改,存储两个堆栈。任务创建时对这两个堆栈都要初始化,任务切换时判断切换的堆栈与访问权限,这些都增加了系统的开销。

结语

在以的LPC1786处理器上,对修改后的操作系统进行简单的测试。创建4个任务,每个任务只是简单地控制一个LED灯的开关。系统连续稳定地运行10个小时以上没出现任何问题,可见系统移植成功。利用选配的MPU,对μC/操作系统进行修改,只是增加了很小的系统开销,却使系统的和稳定性得到了很大的提高。该方法可应用于对系统与稳定性要求比较高的场合。

本文引用地址:http://www.eepw.com.cn/article/202490.htm

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭