新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > T-Kernel在Blackfin处理器上的移植分析

T-Kernel在Blackfin处理器上的移植分析

作者:时间:2012-03-20来源:网络收藏

4 在BF533上的移植

4.1 系统中断管理

对处理器中断资源进行动态管理,在运行时任务可以动态更改中断向量表、注册和取消中断,通过系统服务tk_def_int(Define Interrupt Handler) 来实现。

在中断管理模块的移植中,需要考虑以下三点:

(1)保证中断状态寄存器IMASK的全局性

在进行上下文保存恢复和临界区管理时,必须维持IMASK寄存器为全局变量。如果每个任务都拥有一个局部的IMASK值,则一个任务等待的中断可能在另一个任务运行时被禁止,造成系统对中断无法实时响应。同时,tk_def_int函数需要实现不同任务对各级中断定义的互斥功能,以保证全局 IMASK的有效和系统的稳定。

(2)中断前后处理

中断前后处理是中断管理移植的关键,影响到系统稳定性和中断处理的实时性。它对于任务是不可见过程,执行不能被中断。其主要操作包括:保存和恢复上下文;设置标志变量标示任务无关态的嵌套;更改堆栈指针使中断子程序运行在处理器内部RAM;取得当前触发的最高优先级中断号对应的子程序地址进行调用;在中断后处理判断是否进行任务切换。

系统为中断程序分配独立的内部堆栈,使中断程序运行的地址空间独立于任务和虚拟存储地址,加快了中断程序的处理速度,在系统进入省电模式停止了外部存储器时也不影响对中断唤醒的响应。在系统中,中断处理属于任务无关态,其执行优先级高于任务态,在中断处理程序中发生的任务调度,需要延迟到中断结束才能进行切换。当任务无关态运行无嵌套,系统允许任务切换,schedtsk不等于ctxtsk三个条件满足时,中断结束后即转入任务切换。

(3)T-Kernel的系统时钟中断

T-Kernel的系统时钟中断使用Blackfin内核的core timer 6号中断。其前后处理步骤与(2)相同,为了保证系统稳定性和实时性,一般为系统时钟的中断程序分配单独的堆栈,使其在高速内部RAM中执行。

4.2 任务切换模块的移植

任务切换包括任务间上下文切换和中断到任务上下文切换,前者在临界区结束时触发软中断进入dispatch_entry()完成,后者则在中断后处理中调用tk_ret_int()开始执行。

图2 任务切换流程图

dispatch_entry()和tk_ret_int()的处理过程都是保存ctxtsk任务的上下文,替换ctxtsk为schedtsk,恢复其上下文,执行流程如图2所示。二者的不同在于dispatch_entry()软中断的优先级为14级,而tk_ret_int()在中断后处理中被调用,仍处于中断过程,其优先级由中断处理程序的优先级决定;这样可能出现tk_ret_int()嵌套dispatch_entry()的情况,所以在从tk_ret_int()切入新任务或低功耗状态之前需要判断是否需要清除IPEND寄存器中断执行的标志。当没有就绪任务时,schedtsk值为空,系统转入低功耗状态。



评论


相关推荐

技术专区

关闭