新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种提高uc/os-ii操作系统安全性与稳定性的方法

一种提高uc/os-ii操作系统安全性与稳定性的方法

作者:时间:2013-11-04来源:网络收藏

3.2.2 修改任务创建函数

在任务创建函数的参数中加入mode参数,形式如下:
一种提高uc/os-ii操作系统安全性与稳定性的方法

对OSTaskCreateExt()函数做的修改同上。

3.2.3 修改堆栈初始函数

在堆栈初始化时,把mode值存储在MSP底部,以便任务第一次运行时进入相应的运行状态(特权级还是用户级,使用MSP还是PSP)。系统任务的mode是OS_Mode_PRIVILEGE | OS_Mode_MSP,任务创建时PSP为0;而用户任务为OS_Mode_USER | OS_Mode_PSP。

堆栈初始函数的参数中加入mode参数,形式如下:
一种提高uc/os-ii操作系统安全性与稳定性的方法

OS_TCBInit()函数把堆栈初始化得到的堆栈指针存入OS_TCB中。

3.3 修改OS_CPU_A.ASM文件中的函数

在OS_CPU_A.ASM文件中,只需修改函数PendSV_Handler(PendSV服务例程),任务切换是由它来完成的。
PendSV服务例程的流程如图2所示。
一种提高uc/os-ii操作系统安全性与稳定性的方法


3.4 系统函数的使用

系统函数都是在“特权级+MSP”状态下执行的,因此,在用户任务调用系统函数前,应先切换到“特权级+MSP”状态,系统函数执行完毕后再切换到“用户级+PSP”状态。具体代码如下。

一种提高uc/os-ii操作系统安全性与稳定性的方法
一种提高uc/os-ii操作系统安全性与稳定性的方法

在特权级下通过置位CONTRO[0]来进入用户级,而用户级下是不能直接修改CONTROL[0]回到特权级的,必须通过一个异常,在异常例程中修改CONTROL[0],才能在返回到线程模式后拿到特权级。通常的方法是使用软中断SVC。

因此,从“用户级+PSP”状态下切换到“特权级+MSP”状态的实现方法是:在用户级下执行SVC指令,在SVC异常服务函数中清零CONTROL[0]位,再返回到线程模式下清零CONTROL[1]位切换到MSP;而从“特权级+MSP”状态下切换到“用户级+PSP”状态下,只需置位CONTROL[0]与CONTROL[1]。

4 系统测试

在基于第二代Correx-M3内核的处理器的语音识别系统上,对修改后的操作系统进行测试。具体测试过程为:首先创建3个信号量0、1、2(计数器初始值都为0);ADC按10 kHz的频率对语音信号采样,采样200点(也就是一帧数据)后发送信号量0(发生中断级切换);任务0(优先级0)请求信号量0,并对语音信号预处理并检测语音信号的起始端与结束端;当任务0检测到起始端后,每处理完一帧数据都发送信号量1(产生任务级切换),直到检测到结束端,任务1(优先级1)请求道信号量1后对真正的语言信号进行特征提取;当任务0检测到语音信号结束端时发送信号量2,任务2(优先级2)获得信号量2后利用DWT算法对语音信号进行识别并显示到LCD屏上。
测试结果表明,改进后的系统抗干扰能力、稳定性和安全性均大大增强,并且系统连续稳定地运行很长时间,没有出现任何问题,可见系统移植成功。

结语

改进后的系统,内存的使用没有增加,只是增加了很小的系统开销;但配合MPU使用,使系统的安全性和稳定性得到了很大的提高。该方法可广泛应用于对系统安全性与稳定性要求比较高的场合。


上一页 1 2 下一页

关键词: ucos-ii LPC1786 Cortex-M3

评论


相关推荐

技术专区

关闭