基于DSP的实时多任务调度内核设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
135
2 实时多任务调度内核架构
2.1 功能概述 该内核是一个支持实时、多任务、可扩充的嵌入式 DSP
软件模块,并支持多任务、任务调度、任务间通信、任务动 态加载和删除。该软件模块使用资源较少,对 CPU 时间的占 用短,软件模块完成由 C 语言编写,代码量小,约 1 K 行, 具有较好的移植性。 2.2 模块组成
CurMsg=0; } TCB->CurMsg = NULL; } NxtTid++; if (NxtTid == MaxTask) NxtTid = 1; …… TaskSchedule 函数首先完成该任务消息队列的处理工 作。从该任务消息队列中取出一个消息作为当前消息,并更 新该任务的消息队列链表,然后再根据 TCB 中的(*CurProc)() 函数指针跳转到用户的程序中。 3.5 消息传递说明 在内核模块中,任务之间消息传递主要通过 TaskSendMsg、TaskGetOwnMsg 函数来实现的。消息由消息头 和消息体组成,消息头由 MsgStruct 结构体定义,消息体用 户自定义,用户可修改 MsgStruct 中消息长度的定义以满足
Vol.44,No.06,2011 No.234,Totally
基于 DSP 的实时多任务调度内核设计
易克非, 胡庆锋
(中国电子科技集团公司第三十研究所,四川 成都 610041)
【摘 要】随着处理器(DSP,Digital Signal Processor)芯片在支持多任务系统中的广泛应用,传统 DSP 软件架构已
TCB->Attrib &= ~sbReady;
(*CurProc)(); if (CurMsg != NULL) {
free(CurMsg);//The free function deallocates memory space that was previously allocated by a malloc, calloc, or reallocate call[7].
3 软件设计
3.1 任务控制表 为了对任务进行有效的管理,便于内核根据任务类型、
任务状态进行控制,需要一张“TCB 任务控制块”表。它的 定义如下:
typedef struct { WORD Attrib;
136
WORD Type ; void (*TskEntry_Func)(); QueStruct TskMsg_Que; void* CurMsg; }TCBStruct; TCBStruct TCBBLK[MaxTaskNum]; 3.2 任务创建函数 为了对用户创建的任务进行初始化,调用此函数向内 核创建新的任务,重点是维护 TCB 任务控制块。主要工作 包括初始化新任务的类型、状态,记录新任务的程序入口 函数指针,通过调用 QueueInit 函数初始化任务的消息队 列,此时并不申请消息占用的数据空间。同时调用新任务 的初始化程序,该初始化程序用户可以根据需要自行编写, 如果不需要初始化,则可以执行一个空函数。最后, TaskCreate 函数返回 TCB 任务控制块中一个有效的 ID 号。 它的定义如下: WORD TaskCreate(WORD Type,void (*Entry)(),void (*InitEntry)()) { CurTid = 0; while(((TCBBLK[CurTid].Attrib & sbExist) != 0)&&(CurTid < MaxTaskNum)) {
自己的应用。 TaskSendMsg 函数负责发送消息,TaskGetOwnMsg 函数负
责接收消息。用户在自己的程序中通过调用 TaskSendMsg 函数, 向其他任务发送消息。在用户任务程序中通过调用 TaskGetOwnMsg 接收一个当前消息,并根据消息进行相应处理。
4 结语
DSP 是嵌入式系统的核心之一,并且在通信系统和实时 信号处理方面有着重要的应用[8]。通过在 DSP 软件架构中引 入嵌入式操作系统的一些设计,特别是实时多任务调度内核 的使用,可以大大加快软件开发速度,提高软件的灵活性。 文中介绍的实时多任务调度内核已在多个通信控制、通信测 量设备上使用,整体架构简洁,易于移植和二次开发,验证 了该内核的可用性。
内核模块主要由 TaskManage、Timer、Queue 等模块组 成,包含内核系统初始化、任务调度管理、定时管理、消息 队列管理等基本功能。任务管理主要负责任务调度、任务创 建、任务删除、任务消息处理等,任务状态分为存活、就绪、 休眠。定时管理主要负责定时任务的调度、加载、删除等。 消息队列管理主要负责消息队列的链表维护。内核功能架构 如图 1 所示。
在硬件方面,通用 DSP 芯片最主要的一个特点是片上系 统(SoC,System on Chip)资源丰富。以 TI 公司 TMS320C5000 系列 DSP 芯片为例,运行速度快,指令周期为 5 ns,运算能 力高达 200 MIPS;具有大容量的片内存储器和大范围的寻址 能力,片内集成了 48 K 字程序存储器和 512 K 字数据存储 器,并拥有最高 8 M 外部存储器空间等[5-6]。
CurTid++; } if( CurTid >= MaxTaskNum)
return 0xFFFF; TaskNum++; TCBBLK[CurTid].Attrib = sbExist; TCBBLK[CurTid].Type = Type; TCBBLK[CurTid].TskEntry_Func = Entry; TCBBLK[CurTid].CurMsg = 0; QueueInit(&TCBBLK[CurTid].TskMsg_Que); InitEntry(); return CurTid; } 3.3 其他任务处理函数 为了对任务进行有效的控制,内核还提供了一些其他的 任务处理函数,主要有任务休眠函数 void TaskSuspend(WORD Tid)、任务恢复函数 void TaskResume(WORD Tid)、任务删 除函数 void TaskDelete(WORD Tid)等。 3.4 任务调度函数 TaskSchedule 函 数 是 整 个 内 核 的 关 键 部 分 , TaskSchedule 根据每个任务 TCB 中的类型(Type)和当前状 态(Attrib)值进行调度。以下代码主要例举了对消息型任 务的调度: ……
不能满足要求。文中介绍了一个用于 DSP 芯片的实时多任务调度内核的实现方法。该内核是一种支持多任务、MMU 和消息机
制的调度内核,内核架构简洁,代码量小,占用内存少,执行效率高,完全由 C 语言开发,可方便地在 TI 公司的各种 DSP 上
移植,可以大大加快软件开发速度,提高软件的灵活性,使 DSP 软件开发工作变得简单、快速。
具有大容量的片内存储器和大范围的寻址能力片内集成了48字程序存储器和512字数据存储器并拥有最高外部存储器空间等56在软件方面通用dsp芯片软件设计的重点已不再只是关心数学运算效率而开始更多的关注以怎样的软件架构来控制资源和管理各种任务
2011 年第 06 期,第 44 卷 总第 234 期
通信技术 Communications Technology
【Key words】DSP;real-time;multi-task;kernel
0 引言
处理器是一种适合于数字信号处理运算的微处理器, 随着 DSP 处理器运算速度和片上资源的不断增加,在通信 设备中 DSP 处理器不再只进行单纯的数学运算,还参与各 种控制和并行多任务的处理。为充分发挥 DSP 处理器不断 增加的性能,以适应实时多任务调度的需要,DSP 软件设计 需要更多的借鉴嵌入式操作系统的设计理念[1]。为此,结合 DSP 系统特点,根据实时多任务的需求,文中介绍了一个基 于支持多任务调度、任务间通信、任务动态加载/删除的 DSP 内核。
在软件方面,通用 DSP 芯片软件设计的重点已不再只是 关心数学运算效率,而开始更多的关注以怎样的软件架构来 控制资源和管理各种任务。从通信设备的角度来看,DSP 芯 片的任务更加侧重于如何“实时性”和“并行性”处理各种 应用服务。因此,在 DSP 软件设计中采用嵌入式操作系统的 方法已经是一个趋势。
图 1 内核功能架构 内核模块主要包括 3 个 C 文件和 4 个 H 文件,C 文件有 TaskManage.c 、 Timer.c 和 Queue.c 文 件 , H 文 件 有 TaskManage.h、Timer.h、Queue.h 和 Type.h 文件。 用户在自己的工程中加入上述文件,在 main 程序中, 用户首先调用硬件初始化程序执行硬件初始化,这段程序需 要自行编写。然后调用内核初始化程序,对内核进行初始化, 并且在这段程序之后,通过 TaskCreate 函数对用户的第一 个应用程序进行初始加载。最后,在用户的 main 主程序中 调用 TaskManage 模块中的 TaskSchedule 函数,这样整个内 核就被加载起来。
CurTid = NxtTid; CurMsg = NULL; TCB = &TCBBLK[CurTid]; if ((TCB->Attrib & (sbReady | sbExist)) == (sbReady | sbExist)) {
CurProc = TCB->TskEntry_Func; CurMsg = QueueDe(&TCB->TskMsg_Que); TCB->CurMsg = CurMsg; if (TCB->TskMsg_Que.nitem == 0 )
【关键词】处理器;实时;多任务;内该
【中图分类号】TN919.5
【文献标识码】A
【文章编号】1002-0802(2011)06-0135-03
Design of Real-time Multi-task Kernel for DSP
YI Ke-fei, HU Qing-feng
(No.Байду номын сангаас0 Institute of CETC, Chengdu Sichuan 610041, China)
【 Abstract 】 With the wide application of DSP chips in supporting multitask, traditional DSP software architecture falls behind the trend. This paper describes an implementation of multitask scheduling kernel for DSP chip. This kernel supports multitask, MMU and message mechanism, and is simple in structure, small in code segment, low in memory occupation and high in execution efficiency, and completely written in C language, and could be easily transplanted onto different platforms of TI DSP. This kernel could also accelerate the development speed of DSP software and improve the flexibility of software, thus making the development work of DSP software simple and fast.
1 通用 DSP 处理器的特点
按照 DSP 芯片的用途来分,可分为通用型 DSP 芯片和专
收稿日期:2011-03-14。 作者简介:易克非(1977-),男,工程师,主要研究方向为无线通信和
通信测试;胡庆锋(1978-),男,工程师,主要研究方向为 无线通信技术。
用型 DSP 芯片。通用型 DSP 芯片适合普通的 DSP 应用,如 TI 公司的一系列 DSP 芯片属于通用型 DSP 芯片。专用 DSP 芯片 是为特定的 DSP 运算而设计的,更适合特殊的运算,如指纹 识别、安全认证等[2-4]。
相关文档
最新文档