CN1249643A - 移动信息服务平台 - Google Patents
移动信息服务平台 Download PDFInfo
- Publication number
- CN1249643A CN1249643A CN98126321.6A CN98126321A CN1249643A CN 1249643 A CN1249643 A CN 1249643A CN 98126321 A CN98126321 A CN 98126321A CN 1249643 A CN1249643 A CN 1249643A
- Authority
- CN
- China
- Prior art keywords
- dsp
- code
- coprocessor
- task
- processor system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Abstract
本发明提供一种移动电子设备,其包含:执行本地代码的协处理器;主处理器系统,用来执行与主处理器系统对应的本地代码和与处理器无关的代码,所述主处理器系统动态改变由数字信号协处理器承担的任务;以及在所述主处理器系统与所述协处理器之间进行通信的电路系统。
Description
本发明通常涉及移动电子设备,特别是涉及用于移动电子设备的硬件和软件平台。
随着手持便携式设备功率的提高并由此带来的功能增加,其应用日益广泛。当前个人数字助理(PDAs)正在得到普及,并且兼备蜂窝电话与PDA部分功能的智能电话(Smartphone)据信将对近期的通信业产生不小的冲击。
有些电子设备包含有一个或多个提供一定具体应用(例如语音识别)的DSPs(数字信号处理器)或其它协处理器以及提供其它数据处理功能的通用处理器。DSP和通用处理器的代码通常存储在不易修改的ROMs或其它非易失存储器内。因此当需要改进设备或增加新的应用时,常常无法升级设备的能力。特别是无法最充分地发挥设备中现有DSPs或其它协处理器的能力。
因此需要一种数据处理结构,它可以升级并且优化多处理器和协处理器的使用。
在本发明中,移动电子设备包含:协处理器,它执行本地代码;主处理器系统,它执行对应主处理器系统的本地代码和处理器独立代码。主处理器系统可以动态改变数字信号处理器承担的任务,通信电路系统在主处理器系统与协处理器之间提供通信。
本发明与现有技术相比具有明显的优点。由于主处理器系统可以动态分配协处理器(它可能是数字信号处理器)承担的任务,所以协处理器的能力得到了充分的发挥。主处理器系统可以根据各种因素(例如每个处理器的当前能力)直接把例行程序送到多个协处理器中的其中一个。
通过以下结合附图对本发明的描述,可以进一步理解本发明的优点,其中:
图1示出了特别适用于通用无线数据处理的平台结构框图;
图2示出了图1平台的功能框图;
图3示出了动态交叉编译和动态交叉链接功能的框图;
图4示出了在处理器上执行的本地代码实施例,它封装在供设备下载的JAVA Bean包内;
图5示出了将封装的本地代码从远地服务器上的JAVA Bean传送至设备处理器的操作过程;以及
图6示出了描述安全特征的流程图,它与图5的操作有关。
借助图1-6可以更好地理解本发明,在附图中相同的单元采用相同的标号。
图1示出了智能电话或PDA中所用的通用无线数据平台结构的较佳实施例。无线数据平台10包括与总线结构14耦合的通用(主)处理器12,总线结构包括数据总线14a、地址总线14b和控制总线14c。包括核心处理器16a与外设接口16b在内的一个或多个DSPs(或其它协处理器)16与总线14、存储器和业务控制器18耦合,该控制器包括DSP缓冲存储器18a、CPU缓冲存储器18b和MMU(存储器管理单元)18c。硬件加速器电路20(用来加速诸如JAVA之类便携式语言)和视频与LCD控制器22也与存储与业务控制器18耦合。视频与LCD控制器的输出与LCD或视频显示器24耦合。
存储器与业务控制器18与总线14和示为SDRAM(同步动态随机存储器)的主存储器26耦合。总线14还连接I/O控制器28、接口30和RAM/ROM 32。无线数据平台10可以耦合多种设备,例如智能卡34、键盘36、鼠标38或诸如USB(通用串行总线)端口或RS232串行端口之类的串行端口40。接口30可以与快闪存储器卡42和/或DRAM卡44耦合。外设接口16b可将DSP 16与DAC(数字-模拟转换器)46或者将网络接口48与其它设备耦合在一起。
图1的无线数据平台10同时采用通用处理器12和DSP 16。与DSP 16专用于固定功能的现有设备不同,图1的DSP 16可以用于多种功能。这使得用户可以充分挖掘DSP 16的潜力。
DSP 16的一个主要应用领域涉及人-机接口(MMI)。DSP 16完成诸如语音识别、图像和视频的解压缩、数据加密、文本-语音转换之类的功能在效率上要高出许多。本发明的结构可以更为方便地向无线数据平台10增加新的功能并提高其性能。
值得指出的是,无线数据平台10是一个通用框图并且可以作出改动。例如,图1示出的是分立的DSP和处理器缓冲存储器18a和18b。正如本领域内技术人员所知的那样,也可以采用一体化的缓冲存储器。而且硬件加速电路20是可选单元。这类设备使诸如JAVA之类的语言加速执行;但是电路对设备的运行并非必不可少。此外实施例所示的是单个DSP,但是也可以将多个DSPs(或其它协处理器)与总线耦合。
图2示出了无线数据平台10的软件功能结构。该框图假设使用JAVA语言;值得指出的是也可以使用除JAVA以外的语言。软件在功能上被分为两组,主处理器软件和DSP软件。主处理器软件包括一个或多个小应用程序40。DSP API类42是JAVA API包,用于访问DSP API50和主DSP接口层52功能的JAVA应用程序或小应用程序。JAVA虚拟机(VM)44解释小应用程序。JAVA本地接口46是一种使JAVA VM执行主处理器或平台专用代码的方法。本地任务48是非JAVA程序,它可以由主处理器12在不使用JAVA本地接口的情况下执行。DSPAPI 50(以下将要详细描述)是主处理器12调用DSP 16能力的API(应用程序接口)。主处理器-DSP接口层52向其它任务或其它利用基于主处理器-DSP通信协议信道的硬件提供用于主处理器12与DSP 16相互通信的API。DSP设备驱动器54是基于主机设备驱动器,用于与DSP 16通信的主机RTOS 56(实时操作系统)。主机RTOS 56为一种操作系统,例如加速技术股份公司提供的NUCLEUSPLUS。也可以采用诸如微软公司提供的WINDOWS CE之类的非实时操作系统。DSP库58包含在DSP 16上执行的程序。
在DSP一侧,可以在存储器内存储一个或多个任务60供DSP 16执行。如下所述,任务可以根据需要移入或移出存储器,因此DSP的功能是动态的而非静态的。DSP侧的主处理器-DSP接口层62完成与主处理器侧的主处理器-DSP接口层52一样的功能,即它允许主处理器12与DSP 16通信。DSP RTOS 64是用于DSP处理器的操作系统。主设备驱动器66是基于DSP的设备驱动器,用于DSPRTOS 64与主处理器12通信。主处理器-DSP接口70将DSP 16与主处理器12耦合起来。
在运行中,图2所示的软件结构采用DSP 16作为功能可变的设备而不是象现有技术中那样的固定功能设备。因此DSP功能可以下载到包含图2结构的移动设备中,从而使DSP 16完成各种用于主处理器12的信号处理功能。
DSP-API
DSP-API在主处理器12与DSP 16之间提供了与设备无关的接口。该函数使主处理器12能装载和调度DSP 16上的任务并控制和与这些任务通信。API函数包括调用:确定DSP可用资源、创建和控制主处理器12与DSP的任务、创建与控制主处理器12与DSP任务之间的数据信道以及与任务的通信。这些函数如下所述。每个函数返回的是BOOLean结果,如果操作成功则返回SUCCESS,如果失败则返回FAILURE。如果结果为FAILURE,则检查错误代码以确定发生的何种错误。
DSP_Get_MIPS
BOOL DSP_Get_MIPS(T_DeviceID DevID,U32*mips,U16*errcode);
该函数返回DSP上可用的当前MIPS。它等于DSP 16的MIPS能力减去基准MIPS值(无附加动态任务时的MIPS值,即内核加API代码加驱动代码)并减去分配给所有被加载动态任务的MIPS之和。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_Get_Memory_Available BOOL DSP_Get_Memory_Available(T_DeviceID DevID,T_SIZE progmen,T_Size*datamem,U16*errcode);
该函数将向DevID定义的DSP 16询问程序存储器和数据存储器可用的存储容量。结果值在progmem和datamem参数中返回。存储容量大小在T_DSP_Words中定义。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_Alloc_Mem BOOL DSP_Alloc_Mem(T_DeviceID DevID,U16 mempage,T_Size size, T_DSP_WORD**memptr,U16*errcode);
该函数对DSP 16上的存储块进行分配。DevID定义被分配存储块的设备。mempage为0用于程序空间,为1用于数据空间。size参数定义T_DSP_Word中存储块大小。返回的memptr是指向DSP 16上存储块的指针,或者在无效时为NULL。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_MEMPAGE DSP_NOT_ENOUGH_MEMORY DSP_Free_Mem BOOL DSP_Free_Mem(T_DeviceID DevID,U16 mempage,T_DSP_Word*memptr,U16*errcode);
该函数释放DSP上被DSP_Alloc_Mem函数分配的存储块。DevID定义被分配存储块的设备。mempage为0用于程序空间,为1用于数据空间。memptr参数是指向存储块的指针。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_MEMPAGE DSP_MEMBLOCK_NOT_FOUND DSP_Get_Code_Info BOOL DSP_Get_Code_Info(char*Name,T_CodeHdr*codehdr,U16*errcode);
该函数访问DSP库表并返回由Name参数定义的DSP函数代码的首部。在返回值中,由codehdr参数指向的位置将包含代码首部信息。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_NAMED_FUNC_NOT_FOUND DSP_Link_Code BOOL DSP_Get_Code_Info(char*Name,T_CodeHdr*codehdr,T_TaskCreate*tcs,U16*errcode);
该函数链接DSP函数代码从而在由DevID定义的DSP上特定地址处运行代码。codehdr指向函数的代码首部。动态交叉链接器根据代码首部和代码(COFF文件)内的信息链接代码。动态交叉链接器根据需要分配存储容量,并将代码链接和加载到DSP 16上。tcs参数为指向DSP_Create_Task函数内所需任务创建结构的指针。DSP_Link_Code在准备创建任务时将结构的优先权和时限域填入代码入口。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_NOT_ENOUGH_PROG_MEMORY DSP_NOT_ENOUGH_DATA_MEMORY DSP_COULD_NOT_LOAD_CODE DSP_Put_BLOB BOOL DSP_Put_BLOB(T_DeviceID DevID,T_HostPtr crcaddr,T_DSP_Ptr destaddr,U16 mempage,T_Size size,U16*errcode);
该函数将特定的二进制大型对象(BLOB)复制到DSP 16上。DevID定义复制对象的DSP 16。srcaddr参数是指向主存储器内对象的指针。desaddr为指向在DSP 16上复制对象位置的指针。mempage为0用于程序空间,为1用于数据空间。size参数定义T_DSP_Word中对象的大小。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_MEMPAGE DSP_Create_Task BOOL DSP_Create_Task(T_DeviceID DevID,T_TaskCreate*tcs,T_TaskID *TaskID,U16*errcode);
DSP_Create_Task请求DSP 16根据任务参数和DSP程序空间内的代码位置创建任务。表1示出了任务创建结构:
表1任务创建结构
数据类型 | 域名 | 描述 |
T_DSP_Name Name 用户定义的任务名称U32 MIPS 任务占用的MIPST_ChanID ChanIn 用于任务输入的信道IDT_ChanID ChanOut 用于任务输出的信道IDT_StrmID StrmIn 用于任务输入的流IDT_StrmID StrmOut 用于任务输出的流IDU16 Priority 任务优先权U32 Quantum 系统时钟内任务的时间片T_Size StackReq 所需堆栈容量T_DSP_Ptr MsgHandler 指向处理任务消息代码的指针T_HOST_Ptr CallBack 指向处理任务消息的主处理器代码的指针T_DSP_Ptr Create 指向创建任务时执行代码的指针T_DSP_Ptr Start 指向任务开始时执行代码的指针T_DSP_Ptr Suspend 指向任务暂停时执行代码的指针T_DSP_Ptr Resume 指向任务重新开始时执行代码的指针T_DSP_Ptr Stop 指向任务停止时执行代码的指针 |
一旦任务创建,将调用创建入口,赋予任务作必要的前置初始化。创建、暂停、重新开始和停止入口可以为NULL。最终的TaskID包含设备ID(DevID)和DSP的任务ID。如果TaskID为NULL,则创建失败。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_PRIORITY <dp n="d7"/> DSP_CHANNEL_NOI_FOUND DSP_ALLOCATION_ERROR DSP_Start_Task BOOL DSP_Start_Task(T_TaskID TaskID,U16*errcode);
该函数将启动TaskID定义的DSP任务。代码将从任务的开始入口执行。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND DSP_Suspend_Task BOOL DSP_Suspend_Task(T_TaskID TaskID,U16*errcode);
该函数将使TaskID定义的DSP任务暂停。在暂停之前,将调用任务的暂停入口点以使任务有机会完成必要的现场保留处理。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND DSP_Resume_Task BOOL DSP_Resume_Task(T_TaskID TaskID,U1 6*errcode);
该函数将使被DSP_Suspena_Task暂停的DSP任务重新开始。在重新开始之前,将调用任务重新开始入口点以有机会完成必要的现场保留处理。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING <dp n="d8"/> DSP_TASK_NOT_FOUND DSP_TASK_NOT_SUSPENDED DSP_Delete_Task BOOL DSP_Delete_Task(T_TaskID TaskID,U16*errcode);
该函数将删除TaskID定义的DSP任务。在删除之前,将调用任务停止入口以有机会完成必要的清除处理。这包括释放分配给任务的存储容量和返还被任务获取的资源。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND DSP_Change_Task_Priority BOOL DSP_Change_Task_Priority(T_TaskID TaskID,U16 newpriority, U16*oldpriority,U16*errcode);
该函数将改变TaskID定义的DSP任务的优先权。优先权将变为newpriority。newpriority的取值取决于RTOS。在返回取值的基础上,oldpriority参数被设定为任务的前一优先权。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND DSP_INVALID_PRIORITY DSP_Get_Task_Status BOOL DSP_Get_Task_Status(T_TaskID TaskID,U16*status,U16*priority, T_ChanID*Input,T_ChanID*Output,U16*errcode);
该函数将返回由TaskID定义的DSP任务的状态。状态可以取下列其中一个值:
DSP_TASK_RUNNING
DSP_TASK_SUSPENDED
DSP_TASK_WAITFOR_SEM
DSP_TASK_WAITFOR_QUEUE
DSP_TASK_WAITOR_MSG
priority参数将包含任务的优先权,Input和Output参数将分别包含任务的输入和输出信道IDs。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND DSP_Get_ID_From_Name BOOL DSP_Get_ID_From_Name(T_DevicgID DevID,T_DSP_Name Name, T_DSP_ID*ID,U16*errcode);
该函数返回DSP 16上命名的对象的ID。命名的对象可以是信道、任务、存储块或其它支持命名的DSP对象。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_NAME_NOT_FOUND DSP_Dbg_Read_Mem BOOL DSP_Dbg_Read_Mem(DEVICE_ID DevID,U8 mempage,DSP_PTRaddr, U32 count,DSP_WORD*buf,U16*errcode);
该函数请求存储块。mempage定义程序存储(0)或数据存储(1)。addr参数定义存储开始地址而count表示读取T_DSP_Words的数量。buf参数是指向要把存储器复制到调用程序提供的那一个缓冲器的指针。errcode参数包括以下可能的结果:
DSP_SUCCESS <dp n="d10"/> DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_MEMPAGE DSP_Dbg_Write_Mem BOOL DSP_Dbg_Write_Mem(DEVTCE_ID DevID,U8 mempage,DSP_PTRaddr,U32 count,DSP_WORD*buf,U16*errcode);
该函数对存储块进行写入操作。mempage定义程序存储(0)或数据存储(1)。addr参数定义存储开始地址而count表示写入T_DSP_Words的数量。buf参数是指向包含被写入存储内容的缓冲器的指针。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_MEMPAGE DSP_Dbg_Read_Reg BOOL DSP_Dbg_Read_Reg(DEVICE_ID DevID,U16 RegID,T_DSP_Word *regvakue,U16*errcode);
该函数读取DSP寄存器并返回regvalue值。RegID参数定义返回的寄存器。如果RegID为-1,则返回所有的寄存器值。作为调用程序所提供缓冲器的指针的regvalue参数应指向足够的存储容量以保存所有的值。寄存器IDs是DSP专用的并且因实施方案不同而不同。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_REGISTER DSP_Dbg_Write_Reg BOOL DSP_Dbg_Write_Reg(DEVICE_ID DevID,U16 RegID,T_DSP_Word *regvakue,U16*errcode),
该函数对DSP寄存器作写入操作。RegID参数定义所修改的寄存器。regvalue包含新的写入值。寄存器IDs是DSP专用的并且因实施方案不同而不同。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_INVALID_REGISTER DSP_Dbg_Set_Break BOOL DSP_Dbg_Set_Break(T_DEVICE_ID DevID,DSP_Ptr addr,U16 *errcode);
该函数在给定代码地址(addr)处设定断点。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_Dbg_Clr_Break BOOL DSP_Dbg_Clr_Break(T_DEVICE_ID DevID,DSP_Ptr addr,U16 *errcode);
该函数清除先前由DSP_Dbg_Set_Break在给定代码地址(addr)处设定的断点。errcode参数包括以下可能的结果:
DSP_SUCCESS
DSP_DEVID_NOT_FOUND
DSP_DEVID_NOT_RESPONDING
DSP_BP_DID_NOT_EXIST
DSP设备驱动器
DSP设备驱动器54处理从主处理器12到DSP 16的通信。驱动器函数将提取主处理器-DSP通信协议定义的通信请求并经可用的硬件接口发送信息。设备驱动器与RTOS和通信硬件有关。
DSP库
DSP库58包含可以下载到DSP 16内以供执行的代码块。每个代码块将先拆开链接或者作为库重新定位链接,从而使得动态交叉链接可以求解所有的地址基准。每个块还包括有关块请求的信息,请求关于DSP MIPS(百万指令数/秒)、优先权、时间片时限和存储器。代码块首部的格式示于表2。程序存储和数据存储容量近似值以使主处理器12快速检查DSP是否能满足任务的存储器要求。如果有足够的空间,则动态交叉链接器试图链接和加载代码。值得指出的是,动态交叉链接器可能由于页定位和邻接的原因而操作失败。在较佳实施例中,代码为版本号为2的COFF文件格式。
表2.代码块首部
数据类型 | 域名 | 描述 |
U16 Processor 目标处理器类型T_DSP_Name Name 任务名称U32 MIPS 最坏情况下任务所需的MIPST_Size ProgSize 所需总的程序存储容量T_Size DataSize 所需总的数据存储容量T_Size InFrameSize 任务输入信道中帧的大小T_Size OutFrameSzie 任务输出信道中帧的大小T_Size InStrmSize 任务输入流FIFO的大小T_Size OutStrmSize 任务输出流FIFO的大小U16 Priority 任务优先权U32 Quantum 任务的时间片时限(系统时钟节拍数)T_Size StackReq 所需堆栈容量T_Size CoffSize COFF文件总的大小T_DSP_Ptr MsgHandler 任务的消息处理程序入口点偏移量T_DSP_Ptr Create 创建任务时调用的创建入口点的偏移量 |
T_DSP_Ptr Start 任务代码开始的偏移量T_DSP_Ptr Suspend 任务暂停之前调用的暂停入口点偏移量T_DSP_Ptr Resume 任务重新开始之前调用的重新开始入口点偏移量T_DSP_Ptr Stop 任务删除之前调用的停止入口点的偏移量T_Host_Ptr CoffPtr 指向DSP库内COFF数据位置的指针 |
可移植代码到链接目标代码的转换
图3示出了将诸如JAVA代码之类的可移植(与处理器无关)代码转换为链接目标代码的程序。程序利用两个函数、一个动态交叉编译器80和一个动态交叉链接器82。每个函数在主处理器12上实现。在较佳实施例中动态交叉链接器是DSP-API的一部分。交叉编译器也可以是DSP-API的一部分。
动态交叉编译器80将可移植代码转换为未链接的可执行目标处理器代码。动态交叉链接器82将未链接的可执行目标处理器代码转换为链接的可执行目标处理器代码。为此,在加载到DSP 16上之前必须确定代码块的地址。动态交叉链接器82链接函数的代码段和数据段,分配DSP 16上的存储空间,并将代码和常数数据加载到DSP 16上。由于函数(编译和链接)出现在与执行代码的目标处理器(例如DSP 16)不同的处理器(例如主处理器12)上,所以被称为“交叉”编译和“交叉”链接。
动态交叉编译器80接受先前根据用户或用户代理(例如浏览器)需要加载的未链接代码。代码经过处理以(1)识别代码的“标记”部分或(2)分析DSP 16上执行可行性的未标记代码段。源代码的标记部分利用嵌入源代码的预定记号(例如“<start DSP code”和“end DSP code”)描述目标可至DSP上的源代码。如果标记部分直接或经过分析后得到识别,则可根据DSP 16的当前处理状态决定是否进行交叉编译。如果决定编译,则由编译软件利用熟知的编译方法处理代码部分并输出未链接的可执行目标处理器代码。如果由于DSP 16在处理其它任务而使其没有足够的处理能力(通常称为可用的MIPS-百万指令数/秒)或者没有足够的存储容量,则可以作出不编译的决定。编译后的代码可以传送至动态交叉链接器82中供DSP 16立即使用,或者可以保存到DSP库58内。
动态交叉链接器82接受前面未链接代码,这些代码(1)静态地存储在与主处理器12相连的单元内或(2)通过网络连接(包括诸如互联网之类的全球网)动态地下载到主处理器12内或(3)由动态交叉编译器80动态地产生。动态交叉链接器82将运行时确定的DSP 16内存起始地址的输入代码链接起来。内存起始地址可以从存储在主处理器12或DSP 16上并由其管理的内存映射或内存表中确定。动态交叉链接器82将基准存储位置转换为DSP内实际的存储位置。这些存储位置例如可以包括代码的分支地址或者代码数据的参准位置。
在较佳实施例中,可移植代码位于COFF(公用目标文件格式)中,该文件包含有关代码的所有信息,包括是否链接。如果未链接,则由符号表定义链接代码时必须改变的地址。
与现有技术相比上述的转换处理具有几个明显的优点。首先,动态交叉编译器80可以在运转时决定在哪里执行下载的可移植代码。例如在包含多个目标处理器(例如两个DSPs 16)的系统中,动态交叉编译器80根据可用的资源或能力将可移植代码编译至其中一个目标处理器。动态交叉链接器82提供可在目标处理器上运行但不支持重定位代码的链接代码。由于代码在运行中链接,所以无需预留DSP 16(或其它目标处理器)中内存的位置,充分利用了设备内所有的计算资源。由于借助平台10的结构知识完成编译,所以发挥了处理器和平台特有的优势,例如一个或两个处理器中的智能缓冲存储器结构。
DSP 16可具备各种动态改变的函数,从而充分发挥其处理能力。例如,用户可能希望加载包括语音识别在内的用户接口。此时,主处理器可下载软件并动态交叉编译和交叉链接语音识别软件以供DSP 16执行。DSP库58内已经编译过的软件也可以根据DSP 16的当前状态动态交叉链接以供执行。
主设备驱动器
主设备驱动器处理从DSP 16到主处理器12的通信。驱动器函数提取由主处理器-DSP通信协议定义的通信请求并经可用的硬件接口发送信息。设备驱动器与RTOS和通信硬件有关。
主处理器DSP通信协议(主处理器DSP接口层)
主处理器-DSP通信协议管理主处理器12与DSP 16之间命令和数据的通信。通信由几种路径组成:消息、数据信道和流。消息被用来向任务发送初始化参数和命令。数据信道在任务之间和DSP 16与主处理器12之间传送大量以数据帧为形式的数据。流用来在DSP 16与主处理器12之间传送成流的数据。
消息
每项任务包含指向对消息进行处理的消息处理程序的入口点。消息由用户定义并且包含任务函数的初始化参数以及控制任务的命令。当创建任务时,任务经专门定义的返回调用向主处理器12发送消息。任务消息处理程序的原型和主处理器返回调用的原型为:
void TaskMsgHandler(T_ReplyRef replyef,T_MsgID MsgID,T_Count count,T_DSP_Word*buf);
void HostCallBack(T_ReplyRef replyref,T_MsgID MsgID,T_Count count,T_DSP_Word*buf);
ReplyRef参数称为与实施有关的参考值,它被用来使应答送至发送方。对于每个Send_Message调用,接收方必须利用ReplyRef参数调用Reply_Message。实际的报文可以是:
发送消息 | MsgPktFlag | taskid | replyref | msgid | count | buf[……] |
应答消息 | MsgPktFlag | -1 | replyref | msgid | count | buf[……] |
多字数据首先发送的是最低有效字。
在Send_Message函数中取值为0的TaskID表示系统级消息。系统级消息被用来实现DSP-API函数。
以下为消息函数:
Send_Message
BOOL Send_Message(T_TaskID TaskID,T_MsgID MsgID,T_Count count,T_DSP Word*msgbuf,T_DSP_Word*replybuf,T_Size replybufsize,T_Countreplycount,U16*errode);
该函数向TaskID定义的任务发送用户定义的消息。MsgID定义消息,并且msgbuf包含实际的消息数据。消息大小为count T_DSP_Words。在Replybuf参数(指向由调用者提供的大小为replybufsize的缓冲器)中包含对消息的应答。缓冲器应足够大以对特定消息的应答进行处理。errcode参数包括以下可能的结果:
DSP_SUCCESS DSP_DEVID_NOT_FOUND DSP_DEVID_NOT_RESPONDING DSP_TASK_NOT_FOUND Reply_Message BOOL Reply_Message(T_ReplyRef replyref,T_Count count,T_DSP_Word*buf, U16*errode);
该函数用来应答报文。replyref参数是一种参考值,用来使应答回送至原始消息的发送方,并且针对特定的实施方案。在buf参数中包含了应答而其大小就是count T_DSP_Words。errcode参数包括以下可能的结果:
DSP_SUCCESS
DSP_DEVID_NOT_FOUND
DSP_DEVID_NOT_RESPONDING
DSP_BAD_REPLY_REF
信道
信道的概念被用来在处理器之间或者同一处理器的任务之间发送以帧为单位的数据。当创建信道时,信道分配指定数量和大小的帧以包含数据。信道开始时包含空帧的列表。生成数据的任务请求空帧以放入数据,一旦帧被填满则返回信道。使用数据的任务向信道请求满帧,并且一旦帧被清空则返回信道。请求和返回帧缓冲器可以使数据以最小的复制量移动。
每项任务包含专门的输入和输出信道。一旦创建信道则应将输入信道指定给一个任务而将输出信道指定给另一任务。信道ID包括设备ID,所以信道可以在处理器之间传送数据。跨越主处理器-DSP接口的信道数据流可以是:
ChanPktFlag | ChannelID | Count | data[……] |
以下是信道函数:
Creat_Channel
BOOL Create_Channel(T_DeviceID DevID,T_Size framesize,T_Countnunframes,T_ChanID*ChannelID,U16*errode);
该函数创建一个基于数据帧的通信信道。它创建信道控制结构,该结构保持对一组帧缓冲器的控制,其计数和大小分别在numframes和framesize参数中定义。当创建时,信道对数据帧进行分配,并将它们加入空帧列表。Channel将返回新信道的ID。如果DevID与调用的处理器不符,则在调用处理器和DevID处理器上都创建信道控制结构以控制跨越通信接口的数据流。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_DEVID_NOT_FOUND CHAN_DEVID_NOT_RESPONDING CHAN_ALLOCATION_ERROR Delete_Channel BOOL Delete_Channel(T_ChanID ChannelID,U16*errode);
该函数删除由ChannelID定义的现有信道。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_DEVID__NOT_FOUND CHAN_DEVID_NOT_RESPONDING CHAN_CHANNEL_NOT_FOUND Request_Empty_Frame BOOL Request_Empty_Frame(T_LocalChanID,T_DSP_Word**bufptr,BOOLWaitFlag,U16*errode);
该函数从定义的本地信道ID请求空帧。如果chn为NULL,则使用任务的输出信道。在返回时bufptr参数中包含了指向帧缓冲器的指针。如果WaitFlag为TRUE,并且没有可用的帧缓冲器,则暂停执行调用程序直到缓冲器可以使用。如果WaitFlag为FALSE,则不管情况如何都将函数返回。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_CHANNEL_NOT_FOUND CHAN_BUFFER_UNAVAILABLE Return_Full_Frame BOOL Return_Full_Frame(T_LocalChanID,T_DSP_Word**bufptr,U16 *errode);
一旦任务填满帧缓冲器,则利用该函数返回信道。由bufptr指向的缓冲器返回所定义的信道ID。如果Chn为NULL,则使用任务输出信道。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_CHANNEL_NOT_FOUND CHAN_BUFFER_CTRL_ERROR Return_Full_Frame BOOL Return_Full_Frame(T_LocalChanID,T_DSP_Word**bufptr,BOOL WaitFlag,U16*errode);
该函数从定义的本地信道ID请求满帧。如果chn为NULL,则使用任务的输入信道。在返回时bufptr参数中包含了指向帧缓冲器的指针。如果WaitFlag为TRUE,并且没有可用的满帧缓冲器,则暂停执行调用程序直到缓冲器可以使用。如果WaitFlag为FALSE,则不管情况如何都将函数返回。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_CHANNEL_NOT_FOUND CHAN_BUFFER_UNAVAILABLE Return_Empty_Frame <dp n="d19"/> BOOL Return_Empty_Frame(T_LocalChanID,T_DSP_Word**bufptr,U16 *errode);
一旦任务使用来自帧缓冲器的数据,则应利用该函数将缓冲器返回信道。由bufptr指向的缓冲器返回所定义的信道ID。如果Chn为NULL,则使用任务输入信道。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_CHANNEL_NOT_FOUND CHAN_BUFFER_CTRL_ERROR Set_Task_Input_Channel BOOL Set_Task_Input_Channel(T_Task *TaskID,T_ChanID ChanID,U16 **errode);
该函数将任务输入信道投定为所定义的信道ID。errcode参数包括以下可能的结果:
CHAN_SUCCESS CHAN_DEVID_NOT_FOUND CHAN_DEVID_NOT_RESPONDING CHAN_TASK_NOT_FOUND CHAN_CHANNEL_NOT_FOUND Set_Task_Output_Channel BOOL Set_Task_Output_Channel(T_Task *TaskID,T_ChanID ChanID,U16 *errode);
该函数将任务输出信道设定为所定义的信道ID。errcode参数包括以下可能的结果:
CHAN_SUCCESS
CHAN_DEVID_NOT_FOUND
CHAN_DEVID_NOT_RESPONDING
CHAN_TASK_NOT_FOUND
CHAN_CHANNEL_NOT_FOUND
流
流用于不能分解为帧但是可以连续地流入流出任务的数据。流由带有相连的首部和尾部指针的环形缓冲器(FIFO)组成,指针被用来跟踪数据的流入和流出。每项任务可以具有指定的输入和输出流,跨越主处理器-DSP接口的流数据可以是:
StrmPktFlag | StreamID | Count | Data[……] |
以下是流函数:
Create_Stream
BOOL Create_Stream(T_DeviceID DevID,T_Size FIFOsize,T_StrmID*StreamID,U16*errode);
该函数创建一基于FIFO的通信流。它创建流控制结构,该结构维持控制FIFO的大小FIFOsize。当创建时,流分配一空的FIFO,并初始化首部和尾部指针以处理进出流内的数据流。StreamID将返回新流的ID。如果DevID与调用的处理器不符,则在调用处理器和DevID处理器上都创建流控制结构以控制跨越通信接口的数据。errcode参数包括以下可能的结果:
STRM_SUCCESS STRM_DEVID_NOT_FOUND STRM_DEVID_NOT_RESPONDING STRM_ALLOCATION_ERROR Delete_Stream BOOL Delete_Stream(T_StrmID StreamID,U16*errode);
该函数删除由StreamID定义的现有流。errcode参数包括以下可能的结果:
STRM_SUCCESS STRM_DEVID_NOT_FOUND STRM_DEVID_NOT_RESPONDING <dp n="d21"/> STRM_STREAM_NOT_FOUND Get_Stream_Count BOOL Write_Stream(T_LocalStrmID Strm,T_DSP_Word*bufptr,T_Count count,T_Count *countwritten,U16*errode);
该函数请求由StreamID定义的流FIFO中当前T_DSP_Words的计数,count参数包含返回时的数量。errcode参数包括以下可能的结果:
STRM_SUCCESS STRM_STREAM_NOT_FOUND Write_Stream BOOL Write_Stream(T_StrmID Strm,T_DSP_Word*bufptr,T_Count count, T_Count *countwritten,U16*errode),
该函数向Stream定义的流写入T_DSP_Words的count数量。如果Strm为NULL,则使用任务的输出流。数据由bufptr参数指向。返回时countwritten包含实际写入的T_DSP_Words数量。errcode参数包括以下可能的结果:
STRM_SUCCESS STRM_DEVID_NOT_FOUND STRM_DEVID_NOT_RESPONDING STRM_STREAM_NOT_FOUND STRM_STREAM_OVERFLOW Read_Stream BOOL Read_Stream(T_StrmID Strm,T_DSP_Word*bufptr,T_Count maxcount, BOOL WaitFlag,T_Count *countread,U16*errode);
该函数从Stream定义的流读取数据。如果Strm为NULL,则使用任务的输入流。数据将存储在由bufptr参数指向的缓冲器内。从流读取最多为maxcountT_DSP_Words.countread包含实际读取数据的数量。errcode参数包括以下可能的结果:
STRM_SUCCESS <dp n="d22"/> STRM_DEVID_NOT_FOUND STRM_DEVID_NOT_RESPONDING STRM_STREAM_NOT_FOUND Set_Task_Input_Stream BOOL Set_Task_Input_Stream(T_Task *TaskID,T_StrmID StrmID,U16 *errode);
该函数向指定的StreamID设定任务输入流。errcode参数包括以下可能的结果:
STRM_SUCCESS STRM_DEVID_NOT_FOUND STRM_DEVID_NOT_RESPONDING STRM_TASK_NOT_FOUND STRM_STREAM_NOT_FOUND Set_Task_Output_Stream BOOL Set_Task_Output_Stream(T_Task *TaskID,T_StrmID StrmID,U16 *errode);
该函数向指定的StreamID设定任务输出流。errcode参数包括以下可能的结果:
STRM_SUCCESS
STRM_DEVID_NOT_FOUND
STRM_DEVID_NOT_RESPONDING
STRM_TASK_NOT_FOUND
STRM_STREAM_NOT_FOUND
数据类型
数据类型由表3定义:
表3
符号 | 描述 |
S8 | 带符号的8位整数 |
U8 | 不带符号的8位整数 |
S16 | 带符号的16位整数 |
U16 | 不带符号的16位整数 |
S32 | 带符号的32位整数 |
U32 | 不带符号的32位整数 |
T_HostWord | 主处理器上的字 |
T_DSP_Word | DSP处理器上的字 |
BOOL | 布尔值(TRUE或FALSE) |
T_HostPtr | 主处理器上的指针 |
T_DSP_Ptr | DSP处理器上的指针 |
T_DeviceID | 处理器设备ID |
T_TaskID | 包含设备ID和处理器本地任务ID域的结构 |
T_ChanID | 包含设备ID和处理器本地信道ID域的结构 |
T_MsgID | 消息ID |
T_DSP_ID | DSP上的对象ID |
T_Count | 计数的数据类型 |
T_Size | 大小的数据类型 |
T_HostCallBack | 当任务向主处理器回送消息时所用的值 |
T_ReplyRef | 消息回应参考 |
T_LocalTaskID | 本地任务ID |
T_LocalChanID | 本地频道ID |
T_DSP_Name | DSP对象的名称(与RTOS有关) |
T_CodeHdr | DSP库入口的代码首部结构 |
T_TaskCreat | 任务创建结构 |
系统消息
下表定义了设备之间(即主处理器与DSP 16之间)传送的消息。由于相应函数调用中作为参数的设备ID被实际用来使消息到达设备,所以它们并不包含在消息中。同样,包含设备ID作为函数调用上半部分的任务IDs不包括消息中的设备ID而只包含DSP的本地任务ID部分。
表4 DSP-API消息
消息 | 发送参数 | 自应答参数 | 方向主机DSP |
GET_MIPS | 无 | U32 mips | → |
GET_MEM_AVAIL | T_Size progmemT_Size datamem | → | |
ALLOC_MEM | U16 mempageT_Siza siza | T_DSP_Word*memptrU16 errcode | → |
FREE_MEM | U16 mempageT_DSP_Word*memptr | U16 errcode | → |
PUT_BLOB | T_DSP_Ptr destaddrU16 mempageT_Size sizeT_DSP_Word BLOB[size] | U16 errcode | → |
CREATE_TASK | T_Task Create tcs | T_TaskID TaskIDU16 errcode | → |
START_TASK | T_TaskID TaskID | U16 errcode | → |
SUSPEND_TASK | T_TaskID TaskID | U16 errcode | → |
RESUME_TASK | T_TaskID TaskID | U16 errcode | → |
DELETE_TASK | T_TaskID TaskID | U16 errcode | → |
CHANGE_PRIOITY | T_TaskID TaskIDU16 newpriority | U16 oldpriorityU16 errcode | → |
GET_TASK_STATUS | T_TaskID TaskID | U16 statusU16 priorityT_ChanID InputT_ChanID OutputU16 errcode | → |
GET_ID | T_DSP_Name Mame | T_DSP_ID IDU16 errcode | → |
表5 DSP接口层/信道接口层消息
消息 | 发送参数 | 自应答参数 | 方向主机DSP |
CREATE_CHANNEL | T_Size framesizeT_Count numframes | T_ChanID ChannelIDU16 errcode | → |
DELETE_CHANNEL | T_ChanID ChanneID | U16 errcode | |
CREATE_STREAML | T_Size FIFOsize | T_StrmID StreamIDU16 errcode | → |
DELETE_STREAM | T_StrmID StreamID | U16 errcode | → |
表6调试消息
消息 | 发送参数 | 自应答参数 | 方向主机DSP |
READ_MEM | U16 mempageT_DSP_Ptr addrT_Count | T_DSP_Word mem[count]U16 errcode | → |
WRITE_MEM | U16 mempageT_DSP_Ptr addrT_Count countT_DSP_Word mem[count] | U16 errcode | → |
READ_REG | U16 RegID | DSP_WORD regvalreU16 errcode | → |
WRITE_REG | U16RegIDT_DSP_Word regvalue | U16 errcode | → |
SET_BREAK | T_DSP_Ptr addr | U16 errcode | → |
CLR_BREAK | T_DSP_Ptr addr | U16 errcode | → |
BREAK_HIT | T_DSP_Ptr addr | U16 ACK | ← |
下载本地代码
图4-6示出了以安全而高效的方式将本地代码下载到目标处理器(即主处理器12或DSP 16)中的实施例。该下载代码实施例可用来从互联网或全球网、局域或广域网、外设(例如PC卡或智能卡)下载代码。
图4示出了JAVA Bean90的实施例,Bean 90的作用相当于本地代码92的包。Bean还包括几种属性94,它们是代码类型属性94a、代码大小属性94b和所需MIPS属性94c。Bean 90具有几种动作(action)96,它们是加载代码动作96a、加载参数动作96b和执行参数动作96c。
在运行中,加载代码动作96a被用来将外部的本地代码(对目标处理器而言是本地的)加载入Bean。由于JAVA Bean具有连贯性,所以Bean 90可以存储包括本地代码92和属性94在内的内部状态。加载参数动作96b从本地代码92中检索参数(例如利用上述COFF文件格式)并将参数存储为属性94a-c。执行动作96c执行安装在DSP 16内的任务。
图5示出了利用Bean 90将代码下载到目标处理器的情形。在该实例中,假设目标处理器为DSP 16(或者多个DSPs 16中的一个),尽管它也可以将本地代码下载到主处理器12上。进一步的假设是所需的Bean 90驻留在网络服务器(例如LAN服务器或互联网服务器)内,尽管Bean也可以驻留在任何与平台10通信的设备内,例如智能卡。对于无线数据平台10,与网络服务器100的连接常常采用无线方式。
在图5中,平台10与网络服务器100耦合。图2详细示出的主处理器12可以通过JAVA虚拟机44执行一个或多个JAVA小应用程序40。为了下载新的本地代码,主处理器12可以从服务器100加载包含Bean 90的小应用程序,或者可以从服务器100下载不含小应用程序的Bean。一旦还原出封装的Bean 90,就可以查询其本地代码的大小、代码类型(何种目标处理器的代码)以及所需的MIPS。如果目标处理器具有足够的资源运行代码92,则安装代码92以在目标处理器上执行,在图5所示结构中目标处理器不是主处理器12就是DSP 16。本地代码92一般是未链接的编译代码。因此DSP-API 50的交叉链接器82将代码链接至可用的存储器位置。Bean将二进制的本地代码92传送至安装和执行代码的动态交叉链接器器82。
一般在用户运行DSP函数所需的小应用程序时才下载本地代码。首先,小应用程序将检查DSP内是否安装任务60所需的代码或者DSP库58内是否有可用的代码。如果是这样的情况,无需下载即可执行任务。
如果DSP 16或DSP库58内没有存储任务,则可以创建对象(称为“DSP加载器”对象)以加载Bean 90。如果DSPLoader类在主处理器12上,则JAVA将检查Bean在本地是否使用。在第一种情况下,本地存储的Bean可能包含代码。如果是这样,则将Bean的代码安装到DSP上(或者安装到代码类型定义的处理器上)。如果本地存储的Bean中没有代码,则Bean可以从合适的服务器上检索到代码。
另一方面,如果DSPLoader对象不是本地的,则JAVA从写入小应用程序的服务器加载Bean 90。Bean的代码将以如上所述方式安装。
虽然本地代码下载与JAVA Bean联系在一起予以描述,但是通过将代码封装在另一种语言(例如ActiveX小应用程序)内也可以下载本地代码。
利用JAVA Bean(或者其它小应用程序)作为本地代码包具有明显的优点。首先,这是一种将代码加载到多个处理器其中一个上的简单而标准的做法。Bean得到了创建,代码被加载入Bean并链接到合适的处理器。如果代码没有封装入Bean,该过程可能需要涉及上百个步骤。其次,这使得多个本地代码片断由一个小应用程序组合在一起,从而提供由多个分立子程序生成的复杂应用程序,该应用程序可以利用一个小应用程序根据需要组合子程序而成。第三,它发挥了该语言安全性能方面的优势,从而不仅保护了Bean 90内的JAVA代码,而且也保护了本地代码92。诸如ActiveX之类的其它语言也具有安全性能。
安全性
安全特征中两个最重要的方面是数字签名和加密。JAVA Bean或ActiveX小应用程序可以用代码源签名;当下载Bean或小应用程序时,包含被授权方清单的接收应用程序验证签名。如果Bean或小应用程序由被授权方签名,则可以利用标准技术解密。因此本地代码在发送期间与Bean或小应用程序的代码一起加密,从而防止对代码作未授权的修改。由于本地代码的安全可靠并且来自授权方,所以也可以对属性作精确的授权。
图6示出了利用JAVA Bean的处理器下载本地代码过程的流程图,不难理解的是,利用类似的技术可以将本地代码封装在不同语言的小应用程序内。在步骤110中,加密和数字签名的Bean 90下载到运行JAVA虚拟机的设备上。在步骤112中,对签名进行验证。如果签名源没有列入授权方清单,则在步骤114中启动例外处理。对于Bean来自授权方的情形,如果用户认可签名源,则例外处理函数给予用户一次接受Bean的机会。如果签名是非法的,则例外处理可删除Bean90并向用户发送合适的错误消息。
如果签名合法并且来自授权方,则在步骤116中对Bean进行解密。该步骤同时对Bean中的JAVA代码和本地代码解密。在步骤118中,从Bean 90中提取属性,并且在步骤120中,小应用程序确定合适的处理器是否具有足够的资源来运行代码。如果资源不足,则例外处理步骤114取消安装本地代码,或者采取释放资源的步骤。如果有足够的资源,则在步骤122中利用交叉链接器链接代码并在所需的处理器上安装代码。在步骤124中,执行本地代码。
以下提供的是Bean 90的JAVA脚本实例:
package ti.dsp.loader; import java.awt.*; import java.io.*; import java.net.*; public class NativeBean extends Canvas implements Serializable { public NativeBean(){ setBackground(Color.white); funcData=new ByteArrayOutputStream(); try{ funcCodeBase=new URL(″http://localhost″); } catch(MalformedURLException e){ <dp n="d29"/> } } public Dimension getMinimumSize(){ return new Dimension(50,50); } public void loadCode(){ URL baseURL=null; try { baseURL=new URL(funcCodeBase.toString()+″/″+myFurction); } catch(MalformedURLException e){ } DataInputStream source=null; int read; byte[]buffer; buffer=new byte[1024]; try{ source=new DataInputStream(baseURL.openStream()); } catch(IOException e){ System.out.println(″IOException creating streams:″+e); } codeSize=0; funcData.reset(); try{ while(true){ read=source.read(buffer); if(read=-1) break; funcData.write(buffer,0,read); } } catch(IOException e){ System.out.println(″IOException:″+e); } <dp n="d30"/> codeSize=funcData.size(); System.out.println(″Code size=″+codeSize); try { source.close(); } catch(IOException e){ System.out.println(″IOExceptior closing:″+e); } } public synchronized String getFunctionName(){ return myFunction; } public void setFunctionName(String function){ myFunction=function; } public synchronized String getCodeBase(){ return funcCodeBase.toString(); } public void setCodeBase(String newBase){ try{ funcCodeBase=new URL(newBase); } catch(MalformedURLException e){ } } public void installCode(){ FileOutputStream destination=null; File libFile=new File(myFunction); try { destmation=new FileOutputStream(libFile); } catch(IOException e){ System.out.println(″IOException creating streams:″+e); } if(destination!=null){ <dp n="d31"/> try { funcData.writeTo(destination); } catch(IOException e){ System.out.println(″IO Exception installing native code:″+e); } } } linkCode(funcData) public void loadParameters(){ } public void execute(){ } public synchronized int getCodeSize(){ return codeSize; } public synchronized int getCodeType(){ return codeType; } public void setCodeType(int newType){ codeType=newType; } private int codeSize=0; private int codeType=1; private String myFunction=″″; private URL funcCodeBase=null; private ByteArrayOutputStream funcData=null; }
在上述脚本中,NativeBean()子程序创建保存本地代码的Bean 90。loadVode()子程序从服务器获取本地代码。getFunctionName()子程序和getVodeBase()子程序提取属性。installCode()子程序调用交叉链接器将本地代码链接至DSP并加载链接代码。loadParameters()子程序指令Bean检查本地代码确定其属性。getCodeSize()和getCodetype()子程序向发出请求的小应用程序传送属性。
虽然以上借助实施例对本发明作了描述,但是本发明的精神和范围由后面所附权利要求限定。
Claims (19)
1.一种移动电子设备,其特征在于包含:
执行本地代码的协处理器;
主处理器系统,用来执行与主处理器系统对应的本地代码和与处理器无关的代码,所述主处理器系统动态改变由数字信号协处理器承担的任务;以及
在所述主处理器系统与所述协处理器之间进行通信的电路。
2.如权利要求1所述的移动电子设备,其特征在于所述协处理器为数字信号处理器。
3.如权利要求1或2所述的移动电子设备,其特征在于所述与处理器无关的代码包含JAVA。
4.如权利要求1-3中任意一项所述的移动电子设备,其特征在于所述主处理器系统可产生所述协处理器的本地代码。
5.如权利要求1-4中任意一项所述的移动电子设备,其特征在于所述主处理器系统可通过编译与处理器无关的源代码生成本地代码。
6.如权利要求1-5中任意一项所述的移动电子设备,其特征在于所述主处理器系统对源代码的识别块进行编译。
7.如权利要求1-6中任意一项所述的移动电子设备,其特征在于所述主处理器系统对协处理器上执行的源代码块进行识别并编译所述的代码块。
8.如权利要求1-7中任意一项所述的移动电子设备,其特征在于进一步包含存储有可下载到所述协处理器以供执行的子程序库的存储器。
9.如权利要求1-8中任意一项所述的移动电子设备,其特征在于进一步包括硬件语言加速器。
10.如权利要求1-9中任意一项所述的移动电子设备,其特征在于所述硬件加速器包括JAVA加速器。
11.如权利要求1-10中任意一项所述的移动电子设备,其特征在于进一步包括从网络接收数据的网络接口电路。
12.一种移动电子设备控制方法,其特征在于包含以下步骤:
在协处理器中执行本地代码;
在主处理器系统中执行本地代码和与处理器无关的代码;
由所述主处理器系统动态改变由数字信号协处理器承担的任务;以及
在所述主处理器系统与所述协处理器之间进行通信。
13.如权利要求12所述的方法,其特征在于在所述协处理器中执行本地代码的步骤包括在数字信号处理器中执行本地代码的步骤。
14.如权利要求12或13所述的方法,其特征在于进一步包括在所述通用处理器系统中生成所述协处理器本地代码的步骤。
15.如权利要求14所述的方法,其特征在于所述产生本地代码的步骤进一步包括通过编译与处理器无关的源代码生成所述协处理器本地代码的步骤。
16.如权利要求15中所述的方法,其特征在于进一步包括识别所述源代码块以编译可在所述协处理器上执行的代码的步骤。
17.如权利要求12-16中任意一项所述的方法,其特征在于进一步包含存储可从所述主处理器系统下载到所述协处理器以供执行的子程序库的步骤。
18.一种移动电子设备,其特征在于包含:
多个协处理器;
主处理器系统,用于:
执行源代码;
识别可在一个或多个所述协处理器上执行的一个或多个源代码部分;以及
对于每个识别的源代码部分,确定对应的协处理器;以及
对于每个识别的源代码部分,将所述识别的代码部分编译成与所述对应协处理器相关的本地代码并在所述对应协处理器上安装所述本地代码;以及
在所述主处理器系统与所述协处理器之间进行通信的电路。
19.一种控制移动电子设备的方法,其特征在于包含以下步骤:
在主处理器系统上执行源代码;
识别可在一个或多个所述协处理器上执行的一个或多个源代码部分;以及
对于每个识别的源代码部分,确定对应的协处理器;以及
对于每个识别的源代码部分,将所述识别的代码部分编译成与所述对应协处理器相关的本地代码并在所述对应协处理器上安装所述本地代码;以及
在所述主处理器系统与所述协处理器之间进行通信。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/995,606 | 1997-12-22 | ||
US08/995,606 US8489860B1 (en) | 1997-12-22 | 1997-12-22 | Mobile electronic device having a host processor system capable of dynamically canging tasks performed by a coprocessor in the device |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1249643A true CN1249643A (zh) | 2000-04-05 |
Family
ID=25541998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN98126321.6A Pending CN1249643A (zh) | 1997-12-22 | 1998-12-22 | 移动信息服务平台 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8489860B1 (zh) |
EP (1) | EP0930793B1 (zh) |
JP (1) | JPH11312152A (zh) |
CN (1) | CN1249643A (zh) |
DE (1) | DE69839798D1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100401812C (zh) * | 2000-12-08 | 2008-07-09 | 日本电气株式会社 | 便携式电话机应用程序的备份方法 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6418310B1 (en) * | 1999-08-05 | 2002-07-09 | Ericsson Inc. | Wireless subscriber terminal using java control code |
GB2353918B (en) * | 1999-09-03 | 2003-12-31 | Ericsson Telefon Ab L M | Access rights in a mobile communications system |
CN1187965C (zh) | 1999-11-17 | 2005-02-02 | 索尼公司 | 数字信号处理设备和方法 |
JP4581316B2 (ja) * | 1999-11-17 | 2010-11-17 | ソニー株式会社 | ディジタルテレビジョン受信機およびディジタルテレビジョン受信機における拡張機能提供方法 |
EP2306260B1 (en) * | 2000-09-21 | 2014-02-26 | BlackBerry Limited | Software code signing system and method |
US6976217B1 (en) | 2000-10-13 | 2005-12-13 | Palmsource, Inc. | Method and apparatus for integrating phone and PDA user interface on a single processor |
JP2002169696A (ja) | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
US6986023B2 (en) * | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
US8340289B2 (en) | 2005-09-29 | 2012-12-25 | Research In Motion Limited | System and method for providing an indication of randomness quality of random number data generated by a random data service |
US7797545B2 (en) | 2005-09-29 | 2010-09-14 | Research In Motion Limited | System and method for registering entities for code signing services |
KR100803290B1 (ko) | 2006-03-23 | 2008-02-13 | 한국과학기술원 | 무선 센서 네트워크 환경에서 프로그램을 변경하기 위한확장 가능한 가상 머신 및 이를 이용한 리프로그래밍 방법 |
US9503428B2 (en) | 2014-10-10 | 2016-11-22 | Zanguli Llc | Secure device and proxy for secure operation of a host data processing system |
US10983842B2 (en) * | 2019-07-08 | 2021-04-20 | Microsoft Technology Licensing, Llc | Digital signal processing plug-in implementation |
WO2021051418A1 (en) * | 2019-09-21 | 2021-03-25 | Huawei Technologies Co., Ltd. | Methods and network nodes for reliability measurement |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4727545A (en) * | 1986-09-02 | 1988-02-23 | Digital Equipment Corporation | Method and apparatus for isolating faults in a digital logic circuit |
US5329471A (en) * | 1987-06-02 | 1994-07-12 | Texas Instruments Incorporated | Emulation devices, systems and methods utilizing state machines |
US4862407A (en) * | 1987-10-05 | 1989-08-29 | Motorola, Inc. | Digital signal processing apparatus |
US5287515A (en) * | 1988-10-24 | 1994-02-15 | Kabushiki Kaisha Toshiba | Cross-software development/maintenance system |
US4878002A (en) * | 1988-10-27 | 1989-10-31 | Advanced Engineering Systems, Operations & Products, Inc. | Multi-axis DSP-based parallel processing servo controller for machine tools and robots |
JP2834837B2 (ja) * | 1990-03-30 | 1998-12-14 | 松下電工株式会社 | プログラマブルコントローラ |
US5613098A (en) * | 1991-03-07 | 1997-03-18 | Digital Equipment Corporation | Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution |
US5339422A (en) * | 1991-03-07 | 1994-08-16 | Digital Equipment Corporation | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment |
JPH07504054A (ja) * | 1992-02-18 | 1995-04-27 | アプル・コンピュータ・インコーポレーテッド | コンピュータシステムにおけるコプロセッサのプログラミングモデル |
US5930295A (en) * | 1996-02-23 | 1999-07-27 | Isley, Jr.; William C. | Mobile terminal apparatus including net radio service in a mobile satellite service communication system |
TW243568B (en) * | 1993-11-16 | 1995-03-21 | At & T Corp | Digital signal processor with an embedded viterbi co-processor |
US5471612A (en) * | 1994-03-03 | 1995-11-28 | Borland International, Inc. | Electronic spreadsheet system and methods for compiling a formula stored in a spreadsheet into native machine code for execution by a floating-point unit upon spreadsheet recalculation |
US5559548A (en) * | 1994-05-20 | 1996-09-24 | Davis; Bruce | System and method for generating an information display schedule for an electronic program guide |
US6009507A (en) * | 1995-06-14 | 1999-12-28 | Avid Technology, Inc. | System and method for distributing processing among one or more processors |
US5826039A (en) * | 1995-12-29 | 1998-10-20 | Lucent Technologies Inc. | Universal connection point for resources and communication unrelated to a physical endpoint |
US5732074A (en) * | 1996-01-16 | 1998-03-24 | Cellport Labs, Inc. | Mobile portable wireless communication system |
US6075863A (en) * | 1996-02-28 | 2000-06-13 | Encanto Networks | Intelligent communication device |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US5953741A (en) * | 1996-11-27 | 1999-09-14 | Vlsi Technology, Inc. | Stack cache for stack-based processor and method thereof |
US5771275A (en) * | 1996-12-17 | 1998-06-23 | Telefonaktiebolaget Lm Ericsson | Use of ISDN to provide wireless office environment connection to the public land mobile network |
FR2760918B1 (fr) * | 1997-03-12 | 1999-05-07 | Sagem | Terminal de radiocommunication pour le traitement de donnees, de serveurs internet et de messagerie electronique notamment |
DE19713965A1 (de) * | 1997-04-04 | 1998-10-08 | Deutsche Telekom Ag | Netzsteuerbares GSM-Mobilfunkgerät |
US6003065A (en) * | 1997-04-24 | 1999-12-14 | Sun Microsystems, Inc. | Method and system for distributed processing of applications on host and peripheral devices |
US6330659B1 (en) * | 1997-11-06 | 2001-12-11 | Iready Corporation | Hardware accelerator for an object-oriented programming language |
US5961586A (en) * | 1997-05-14 | 1999-10-05 | Citrix Systems, Inc. | System and method for remotely executing an interpretive language application |
US5892966A (en) * | 1997-06-27 | 1999-04-06 | Sun Microsystems, Inc. | Processor complex for executing multimedia functions |
US6173438B1 (en) * | 1997-08-18 | 2001-01-09 | National Instruments Corporation | Embedded graphical programming system |
US6078736A (en) * | 1997-08-28 | 2000-06-20 | Xilinx, Inc. | Method of designing FPGAs for dynamically reconfigurable computing |
US5923892A (en) * | 1997-10-27 | 1999-07-13 | Levy; Paul S. | Host processor and coprocessor arrangement for processing platform-independent code |
US6029000A (en) * | 1997-12-22 | 2000-02-22 | Texas Instruments Incorporated | Mobile communication system with cross compiler and cross linker |
-
1997
- 1997-12-22 US US08/995,606 patent/US8489860B1/en not_active Expired - Fee Related
-
1998
- 1998-12-16 DE DE69839798T patent/DE69839798D1/de not_active Expired - Lifetime
- 1998-12-16 EP EP98310312A patent/EP0930793B1/en not_active Expired - Lifetime
- 1998-12-22 JP JP10365666A patent/JPH11312152A/ja active Pending
- 1998-12-22 CN CN98126321.6A patent/CN1249643A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100401812C (zh) * | 2000-12-08 | 2008-07-09 | 日本电气株式会社 | 便携式电话机应用程序的备份方法 |
Also Published As
Publication number | Publication date |
---|---|
DE69839798D1 (de) | 2008-09-11 |
EP0930793B1 (en) | 2008-07-30 |
JPH11312152A (ja) | 1999-11-09 |
US8489860B1 (en) | 2013-07-16 |
EP0930793A1 (en) | 1999-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1249643A (zh) | 移动信息服务平台 | |
EP0924612B1 (en) | Mobile communication system | |
EP0924611B1 (en) | Method and apparatus for a coprocessor | |
US7203941B2 (en) | Associating a native resource with an application | |
EP0930567B1 (en) | Method and apparatus for extending security model to native code | |
CN101040259A (zh) | 运行期动态链接 | |
CN1647042A (zh) | 定制软件抽象的方法 | |
CN1570870A (zh) | 终极管道和最优重排技术 | |
JP2000347871A (ja) | スタブ/アダプタ自動生成器 | |
CN1949186A (zh) | 一种程序调测系统及用于程序调测系统的映射方法 | |
CN1658174A (zh) | 用于智能存储器通过通信的方法和设备 | |
CN1799024A (zh) | 处理消息摘要指令 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
WO2006009287A1 (ja) | 自動変換用プログラムおよびプログラム変換サーバ | |
US20060168567A1 (en) | Preserving platform independence with native accelerators for performance critical program objects | |
CN101030241A (zh) | 基于Keil C51的软件保护开发的方法和系统 | |
CN112905472A (zh) | 内核调试系统及方法 | |
JP2003196106A (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
US9378002B2 (en) | System, method, apparatus and computer program product for providing memory footprint reduction | |
JP2009506467A (ja) | 仮想マシンにおける並行タスクのためのイベント処理 | |
US7350193B2 (en) | Procedure invocation in an integrated computing environment having both compiled and interpreted code segments | |
KR101254756B1 (ko) | 복수의 운영체제와 호환 가능한 가상머신 생성 방법 및 가상머신 프로그램을 저장한 기록매체 | |
KR20070035211A (ko) | 서로 다른 프로그래밍 언어로 각각 작성된 어플리케이션을실행하기 위한 가상 머신 및 이를 이용해 이동통신단말기에서 어플리케이션을 실행하는 방법 | |
CN1310446C (zh) | 镜像测试方法 | |
CN1265488A (zh) | 程序执行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |