VxWorks下网卡驱动程序的开发

VxWorks下网卡驱动程序的开发
VxWorks下网卡驱动程序的开发

VxWorks下网卡驱动程序的开发

摘要:本文首先从整体上分析VxWorks 网卡驱动程序的原理和结构,然后深入地分析Rtl8139C网卡驱动程序的结构以及实现,本文对于VxWorks下的同类开发也有一定参考作用。

关键词:网卡驱动程序;VxWorks;嵌入式系统;Tornado

1引言

VxWorks是当前应用十分广泛的嵌入式实时操作系统,而网卡在基于VxWorks的开发中有着极其重要的作用。Tornado 是VxWorks的开发工具,它本身支持的网卡不多。本文涉及到的网卡是Realtek 公司的8139C PCI网卡,相关的硬件资料有:RTL8139C(L) data sheet 和Rtl8139 Programming Guide 。需要实现的是RTL8139C END driver 。

2 VxWorks简介

VxWorks是由WRS(Wind River System Inc.)公司开发的一套具有微内核、高性能、可伸缩的实时操作系统,支持广泛的网络通信协议,并能够根据用户的需求进行组合。其开放式的结构和对工业标准的支持使开发者只需做最少的工作即可设计出有效的适合于不同用户要求的系统。

VxWorks是一种功能强大而且比较复杂的操作系统,VxWorks只占用了很小的存储空间,并可高度裁减,保证了系统能以较高的效率运行。所以仅仅依靠人工编程调试,很难发挥它的功能并设计出可靠、高效的嵌入式系统,必须要有与之相适应的开发工具。TornadoII是为开发VxWorks应用系统提供的集成开发环境。

VxWorks的优秀特性为编写应用程序和设备驱动程序提供了极大的便利。在VxWorks下,设备驱动程序既可以嵌入到内核中随系统一起启动,也可以作为可加载模块在系统启动之后运行。网卡驱动程序一般采用前一种方式。

3 VxWorks的网络模型

网卡在VxWorks开发中是极其重要的。在开发机-目标机模式中,通过网线进行下载调试是Tornado调试器最常用最方便的方式。VxWorks的优秀的实时性能使其在网络通信当中具有极广泛的应用,如网络交换机、路由器的软件系统等。

网卡驱动程序在整个VxWorks网络接口中的角色可以从下图中看出。

整个网络接口呈层次结构,用户网络应用程序通过socket接口调用TCP/IP协议层系列软件,网卡驱动程序则为协议软件提供对网卡的访问。VxWorks也为网卡驱动程序进行了分层,其中老式的BSD4.3驱动程序的功能,现在可以由协议层驱动、MUX层和END驱动实现。而且,工作于BSD的以太网网卡不支持系统级调试,而工作于END的网卡同时支持任务级调试和系统级调试。很显然,网卡驱动程序的层次结构使网卡驱动程序的实现和移植更加方便。而且,VxWorks 为编写网卡增强型驱动程序(Enhanced Network Drivers)提供了很好的接口和规范。

4 Rtl8139C END驱动程序

4.1 PCI局部总线

本文涉及到的网卡是Realtek 公司的8139C PCI网卡,作为一个PCI设备,在设备的初始化阶段,它和一般的PCI设备没有什么不同。

每一个PCI局部总线目标设备都由一个配置寄存器空间,它使目标设备的配置十分简便。配置空间是一个容量为256字节并具有特定记录结构或模型的地址空间。该空间有分为头标区和设备有关区两部分。设备在每个区中只实现必要的和与之相配的寄存器。一个设备的配置空间不仅在系统自举时可以访问,而且在其他时间内也是可以访问的。

4.2数据包结构

VxWorks MUX层的数据包采用的是mBlk-clBlk-cluster 结构,如图。发送时,网卡发送模块处理的是这样的结构;接收数据时,网卡还得将数据通过这样的结构传递给上层协议。不过,这一切Vxworks 都有相应的规范和函数。另外,mBlk和clBlk可以由netpool 结构管理,VxWorks 提供一系列接口函数。

图2 网络数据包结构

4.3驱动程序的结构以及流程

1、网卡的探测以及入口

VxWorks BSP在syslib.c中探测并初始化系统中的PCI设备,检测设备的I/O映射地址,内存映射地址以及中断向量和级别,这些硬件参数对于主芯片的读写和连接中断起到至关重要的作用。因此,在这里加入8139C 网卡的探测模块。然后将探测到的参数传递给驱动程序入口函数。

网卡的探测模块为sysRtl8139PciInit模块,利用的是RTL8139C的厂商标识和设备标识,在所有的PCI设

备中判断有几块这样的网卡,得到它们的功能号,总线号和设备号,然后配置它的PCI配置空间,将网卡寄存器映射。最后得到网卡I/O映射基地址和Mem基地址以及中断向量和级别。

2、入口函数

END driver与系统的接口是MUX层,BSP对于网卡设备的驱动是通过MuxDevLoad()对

endDevTbl[](configNet.h中)的处理来实现的。因此,可以将一个自定义的入口函数加到endDevTbl[],这样就可以使驱动程序在合适的时间对设备进行初始化。

驱动程序的入口分为两个步骤,他们分别是sysRtl8139EndLoad模块和Rtl8139EndLoad模块。

sysRtl8139EndLoad获得sysRtl8139PciInit 探测到网卡硬件参数,并且两次调用Rtl8139EndLoad模块。

Rtl8139EndLoad模块第一次被调用时只是为了返回设备名称。

在Rtl8139EndLoad入口函数中,解析参数,为网卡的DMA工作方式分配一定大小的空间,写寄存器,准备工作。这之后,网卡的开始工作和停止,以及其他设置完全由MUX 层管理,驱程只需要将一系列模块的指针传递给它。这些模块按照MUX 层的要求是一个NET_FUNCS 结构,如下所示。

LOCAL NET_FUNCS rtlFuncTable =

{

(FUNCPTR)rtl8139Start, /* start func. */

(FUNCPTR)rtl8139Stop, /* stop func. */

(FUNCPTR)rtl8139Unload, /* unload func. */

(FUNCPTR)rtl8139Ioctl, /* ioctl func. */

(FUNCPTR)rtl8139Send, /* send func. */

(FUNCPTR)rtl8139MCastAddrAdd,/* multicast add func. */

(FUNCPTR)rtl8139MCastAddrDel,/* multicast delete func. */

(FUNCPTR)rtl8139MCastAddrGet,/* multicast get fun. */

(FUNCPTR)rtl8139PollSend, /* polling send func. */

(FUNCPTR)rtl8139PollReceive, /* polling receive func. */

endEtherAddressForm, /* put address info into a NET_BUFFER */

endEtherPacketDataGet, /* get pointer to data in NET_BUFFER */

endEtherPacketAddrGet,/*Get packet addresses. */

};

Rtl8139EndLoad 模块是rtl8139.c中唯一的外部函数,当程序流程到达这里的时候,已经可以对网卡寄存器读写,程序完全是对寄存器进行设置。在这个模块中,首先判断函数参数,因为它被调用两次。当确定是第二次调用时,首先为驱动程序分配一个结构RTL8139END_DEVICE,用以存储共享参数。然后解析函数参数,依据这些参数配置RTL8139END_DEVICE。接着,调用rtl8139InitMem模块,为网卡分配所需要的内存,将这些参数写进RTL8139END_DEVICE。这样,网卡所需的资源齐全了。用上层协议提供的函数END_OBJ_INIT和END_MIB_INIT,将RTL8139END_DEVICE 和驱动程序模块传递给上层协议。

需要为网卡分配的内存包括:接收区,发送区,cluster区,mBlk,clBlk和管理它们的netpool。这些都是在Rtl8139InitMem模块中完成。

3、网卡的启动和关闭

网卡要开始工作,还得依赖MUX层调用rtl8139Start模块,该模块将中断向量和处理函数连接在一起。然后调用硬件初始化rtl8139HwStart模块,在这个模块中,设置接收地址寄存器,使其能管理接受区,写设置寄存器,设置网卡的工作方式,写中断屏蔽寄存器,确定处理哪些中断。最后,写命令寄存器,使接受和发送位有效。程序到此,就能产生中断,并进行处理。

当系统要退出或者其他原因时,就得关闭网卡。系统是调用通过MUX层中的rtl8139Stop模块完成。

4、中断处理程序

RTL8139C 有一个中断状态寄存器和一个中断屏蔽寄存器,它们对应位意义相同。中断状态寄存器反映了网卡能产生的几种中断。一旦有中断发生,中断处理函数首先屏蔽中断,再分析中断状态寄存器,调用相应的处理函数

只要中断发生,系统调用中断处理函数。中断处理函数的主要功能是分析中断状态寄存器,进行相应的处理。依据RTL8139 Programming Guide 中的说明,若是发送中断,无论成功与否,调用发送处理函数,若是接收中断,开辟新的接受任务,这么做是因为中断处理函数运行在系统级,而接收处理较复杂耗时,所以采用系统函数netJobAdd开辟新的任务。而简单的处理就直接在中断处理函数中完成,包括发送完后产生的中断。

由于,处理函数在执行的过程中,新的中断可能出现,而此时中断已屏蔽,但各自的状态位依然变化。因此,在中断处理函数中采用循环结构,直到中断状态寄存器表明在处理过程中没有新的中断发生。

5、数据接收和发送

接收数据时,从相应的寄存器取出当前数据包的地址,首先分析数据包头部,包括数据包的接收状态和大小。如果是错误的状态,就使命令寄存器中的接收能位失效,再使其有效,这可看作接收重启,再重新设置与接收相关的寄存器。如果接收的数据包正常,接收处理函数就得按照数据包的大小将数据包拷贝到cluster 区(Rtl8139InitMem 模块中分配),用mBlk-clBlk-cluster结构传递给上层协议,并刷新寄存器使其指向下一个数据包。然后,读命令寄存器,判断是否接收完毕,否则循环。

发送数据时,由于Rtl8139采用四个描述符寄存器和四个状态寄存器。所以在使用它们前首先判断是否有空闲的寄存器,如果没有,就得等待一段时间。在这段时间里,如果有寄存器空闲出来,就开始发送数据,否则退出。发送时,只要将上层协议传递过来的mBlk-clBlk-cluster中的cluster数据拷贝到发送区,写描述符寄存器就可。而记录每个描述符寄存器使用情况,就使用RTL8139END_DEVICE 结构中的一个数组。如果发送完毕,无论成功与否,都得让描述符空闲出来。

5结束语

本文具体的分析了Rtl8139C网卡驱动程序在VxWorks操作系统下的实现。在分析过程中,更多侧重PCI 网卡END驱动程序在VxWorks下实现的共性,包括必需的配置和步骤,比如PCI设备的相关工作以及VxWorks下MUX层的数据包结构。由于网卡主控制器的内部差异,其他网卡在初始化、接收数据以及发送数据方面会有不同,但是在其他方面,PCI网卡END驱动程序都可以参考Rtl8139C网卡驱动程序的实现。

参考文献:

[1]Tornado BSP Training Workshop. Version 1.0.2 . Wind River Systems, Inc. April 1998

[2]Tornado Device Driver Workshop.

[3]李贵山,陈金鹏. PCI局部总线及其应用[M]. 西安:西安电子科技大学出版社,2003.

新产品开发部门工作流程图

新产品开发部门工作流程图 新产品开发策略 主要方式 呈 报 新产品样品开发 产 品开发过程

附件一:内部管理制度 新产品开发工作,是指运用国内外在基础研究与应用研究中所发现的科学知识及其成果,转变为新产品、新材料、新生产过程等一切非常规性质的技术工作。新产品开发是企业在激励的技术竞争中赖以生存和发展的命脉,是实现“生产一代,试制一代,研究一代和构思一代”的产品升级换代宗旨的重要阶段,它对企业产品发展方向,产品优势,开拓新市场,提高经济效益等方面起着决定性的作用。因此,新产品开发必须严格遵循产品开发的科学管理程序,即选题(构思。调研和方案论证)样(模)试批试正式投产前的准备这些重要步骤。 一、调查研究与分析决策 新产品的可行性分析是新产品开发中不可缺少的前期工作,必须在进行充分的技术和市场调查后,对产品的社会需求、市场占有率、技术现状和发展趋势以及资源效益等五个方面进行科学预测及技术经济的分析论证。 (一)调查研究: 1、调查国内市场和重要用户以及国际重点市场同类 产品的技术现状和改进要求; 2、以国内同类产品市场占有率的前三名以及国际名 牌产品为对象,调查同类产品的质量、价格、市场及

使用情况; 3、广泛收集国内部外有关情报和专刊,然后进行可行 性分析研究。 (二)可行性分析: 1、论证该类产品的技术发展方向和动向。 2、论证市场动态及发展该产品具备的技术优势。 3、论证发展该产品的资源条件的可行性。(含物资、 设备、能源及外购外协件配套等)。 (三)决策: 1、制定产品发展规划: (1)企业根据国家和地方经济发展的需要、从企业 产吕发展方向、发展规模,发展水平和技术改 造方向、赶超目标以及企业现有条件进行综合 调查研究和可行性分析,制定企业产品发展规 划。 (2)由研究所提出草拟规划,经厂总师办初步审 查,由总工程师组织有关部门人员进行慎密的 研究定稿后,报厂长批准,由计划科下达执行。 2、瞄准世界先进水平和赶超目标,为提高产品质量进 行新技术、新材料、新工艺、新装备方面的应用研究: (1)开展产品寿命周期的研究,促进产品的升级换 代,预测企业的盈亏和生存,为企业提供产品

VxWorks下几种定时延时方法的小结

编程过程中,出于需要,大家或多或少要用到定时/延时。VxWorks下提供了几种定时/延时机制,根据收集的一些资料和VxWorks相关文档,在学习和上机实验的基础上,对它们的使用以及我所遇到的问题做一个总结,希望对大家能有所帮助。不正确之处,恳请斧正。 1 taskDelay taskdelay()提供了一个简单的任务睡眠机制,也常用于需要定时/延时机制的应用中。它的格式是STATUS taskDelay(int ticks /* number of ticks to delay task */),可以看出使用该函数实现延时的单位为tick(一般系统中一个tick都是ms级的)。在VxWorks下可以这样使用taskDelay()函数:taskDelay(sysClkRateGet()*1)。函数sysClkRateGet()返回系统的时钟速率,单位是tick数/每秒(利用函数sysClkRateSet()可以改变系统的时钟速率)。在POSIX中有一个与taskdelay()相对应的函数――nanosleep()(下文中有介绍)。这两个函数仅仅是延时单位不同,效果是相同的。 利用taskdelay(),可以将调用的任务移动到具有相同优先级的就绪队列尾部。特别的,可以通过调用taskdelay(0),将cpu交给系统中其他相同优先级的任务。延时为0的调用只能用于taskdelay()中,nanosleep()认为这种调用是错误的。 taskdelay()会导致调用的任务在指定的延时期间(以ticks计数)放弃cpu,使任务处于DELAY状态(因此,其不能用于中断服务程序中)。通常其受到任务调度的影响,但在等待一些与中断无关联的外部条件时,其是有用的。如果调用的任务受到一个信号,指出其没有被阻塞或被忽略,taskDelay()将返回ERROR,并在信号处理程序运行后设置errno为EINTR。 2 WatchDog VxWorks提供了一个看门狗定时器(watchdog timer)机制,利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。在VxWorks中,看门狗定时器作为系统时钟中断服务程序的一部分来维护。因此,与看门狗定时器相联系的函数运行在系统

开发一部工作流程

开发一部工作流程Last revision on 21 December 2020

开发一部 系统开发工作流程 任务 开发工作流程 标准文档 涉及部门 接受需求分析书 产品质量控制部 制定开发计划 业务需求部 进行系统总体分析 系统总体分析书 总体组 进行系统详细分析 系统详细分析书 技术支持部 提出推广设备配置需求 数据转换说明书 运行 管理部 建立开发环境 制定开发时间进度表 阶段报告 编写程序 程序规格书 产品质量控制部 准备调试案例 运行管理部 阶段报告 分平台调试 跨平台联调 系统安装手册

准备测试环境 系统维护手 册 运行管理部 阶段报告 业务测试 产品质量控制部 产品验收、入库 总结报告 业务需求部 运行管理部 产品出库 产品质量控制部 由技术支持部推广 配合技术支持部培训 运行管理部 将维护人员调到技术 支持部 保留开发测试环境 开发一部 产品功能完善工作流程 任务 开发工作流程 标准文档 涉及部门 接受业务或本部门需求 产品质量控制部 制定开发、修改计划 业务需求部

系统分析 功能完善说 明书 技术支持部 程序设计 运行管理部 确认开发、测试环境 制定开发时间进度表 程序修改报告 产品出库 阶段报告 编写程序 产品质量控制部 准备调试案例 运行管理部 阶段报告 分平台调试 跨平台联调 系统安装手册补充说明 产品质量控制部 准备测试环境 系统维护手册补充 说明 运行管理部 阶段报告 业务测试 产品质量控制部 升级产品(新版本) 版本升级说明书 业务需求部

VxWorks网络驱动配置及分析

VxWorks网络驱动配置及分析 VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的 BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一种是END 网络驱动,是VxWorks独有的,根据VxWorks MUX接口编程,不过END驱动在底层也要转换成BSD的形式. VxWorks网络驱动可参见VxWorks网络驱动 1.BSD4.4网络驱动设置. 网络设备驱动的调用主要在/target/src/config/usrNetwork.c文件中,下面说明BSD4.4驱动在VxWorks系统调用. 主要调用过程如下: VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot()=======>>target\src\config\usrNetwork.c文件中的usrNetInit ( )通过数组表netIf[]初始化相应的BSD网卡驱动. 在usrNetwork.c中的调用过程如下: usrNetInit()函数中调用usrNetIfAttach(): #ifdef INCLUDE_BSD if (!attached) { if ( (usrNetIfAttach (pNetDev, params.unitNum, pBootString) !=OK))

return (ERROR); attached = TRUE; } #endif /*INCLUDE_BSD*/ usrNetIfAttach ()函数中调用数组表usrNetIfTbl for (pNif = usrNetIfTbl; pNif->ifName != 0; pNif++) { if (strcmp (buf, pNif->ifName) == 0) break; } 网络BSD驱动数组表usrNetIfTbl在文件 /target/src/config/usrNetwork.c中的定义初始化: ... LOCAL NETIF netIf [] = /* 网络接口,定义网卡驱动 */ { /* 下面是定义包含的各种网络驱动 */ #ifdef INCLUDE_DC /* 从DEC 芯片启动,即系统有NVRAM存在,现在已过时*/ { "dc", dcattach, (char*)IO_ADRS_DC, INT_VEC_DC, INT_LVL_DC, DC_POOL_ADRS, DC_POOL_SIZE, DC_DATA_WIDTH, DC_RAM_PCI_ADRS, DC_MODE }, #endif /* INCLUDE_DC */ #ifdef INCLUDE_FEI /* 如果定义了INCLUDE_FEI,初始化Intel 网卡 */ { "fei", feiattach, (char*)FEI_POOL_ADRS, 0, 0, 0, 0}, #endif /* INCLUDE_FEI */ #ifdef INCLUDE_EX /* Excelan 网卡 */ { "ex", exattach, (char*)IO_ADRS_EX, INT_VEC_EX, INT_LVL_EX, IO_AM_EX_MASTER, IO_AM_EX }, #endif /* INCLUDE_EX */ #ifdef INCLUDE_ENP /* CMC 网卡 */ { "enp", enpattach, (char*)IO_ADRS_ENP, INT_VEC_ENP, INT_LVL_ENP, IO_AM_ENP }, #endif /* INCLUDE_ENP */

新产品开发部门工作流程图

立项 1、国内外销售全归为营 销中心。 2、技术中心在项目可行 性评估时,如果NG则通 知相关方进行改善。 3、评审NG后反馈至相 关方改善,OK则再次评 审,NG直接结案(如果 有可行性,则再次改善) 。 《项目建议表》 《产品开发试制跟踪表》 《首样检验报告》 《试产申请单》 过程绩效指标:无 相关/参考资料/内外 部资料/SOP/SIP/WI 流程产出表 单/报告书 《设计开发任务书》 《工业设计评审表》 《新产品结构及工艺评审表》 管理要点 1、项目工程师接到主管 下达的《设计开发任务 书》后,会同相关资料 进行工业设计。 2、如需外采产品,则通 知采购寻找供应商,收 集样品反馈给技术中心 进行召集相关单位进行 评审,通过后,技术中 心则将技术资料及相关 标准要求。 3、自行开发产品由技术 中心进行下步运作。 1、试作材料应注明“试 制”样式章,并标识清 楚及单独放置;点检的 判定结果应填注于材料 管理卡上并签章。 2、《产品开发试制跟踪 表》由技术部,技术员 进行填写,生产相关单 位签名确认。 3、技术员在整个试制过 程需要做分析,有发现 检测中心生产中心采购中心外协单位 副总经理技术部 新产品开发部门工作流程图流程图编号:yzj-401过程拥有者:技术部 组织/功能 步骤/过 产 品 设 计 新 品 制 样 营销中心品保部 开始 公司领导班子研发人员创新营销提出需求 项目建议表 项目建议表 可行性评估 NG 根据相关信息进 工业设计评审 NG 1、产品零件图 2、产品技术要求 3、产品安装使用说明 4、产品装配图 5、零部件检验标准 1.结构设计 NG 审批 OK 反馈相关 改善 NG 设计开发任务书 OK呈核 OK 制定: 1、生产加工工艺图 2、组装作业指导书 4、配件3D电子图档 5、配件2D图档 6、加工相关资料 项目建议表 参与结构、工艺评审 设计开发评审(工 艺、结构) 接收相关资料,安 OK 产品开发试制跟踪表 资料发放相关单位 反馈相关 改善 接收相关资料, 安排采购 资料发放相关单位 寻找供应商 需外采产品,通知采购 外采后送样至工业评审 外采 技术资料输出至采购

Vxworks中断服务程序解析

Vxworks中断服务程序解析 中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断服务程序应该尽量的小,只把最必要的任务放在中断服务程序里面执行。一般在系统启动,硬件设备成功初始化之后将ISR与中断向量挂上:也可以在系统启动后的任何时刻挂中断向量。调试中经常采用后一种方式。在VxWorks中有两个不同的函数可提供挂中断:intConnect和pciIntConnect。两者的区别是intConnect使用的中断向量是独占的,pcilntConnect则可在各个不同的ISR之间共享中断向量。实际上pcilntConnect 内部调用了 intConnect函数,在内部使用一个链表来管理多个不同的ISR。pcilntConnect 要求每次进入ISR都要检查硬件的寄存器,证实中断的确是由ISR服务的硬件产生。如果硬件的寄存器表明该硬件并未产生中断,则ISR立即退出,以让挂在同一个中断向量上的其它ISR有机会检查是否有中断产生。pcilntLib.c中的代码清楚的说明了这个问题:void pciInt (int irq ){ PCLlNT RTN *pRtn; for (pRm = (PCI_INT_RTN*)DLL_FIRST(&pcilntList[irq]); pRtn!=NULL; pRtn =(PCI_INT_RTN*)DLL_NEXT(&pRtn->node)) (*pRtn->routine) (pRtn->parameter); } 当PCI总线上有中断发生时,系统调用void pcilnt(int irq)函数,再由pciInt使用内部的链表来依次调用挂在该中断上的ISR。如果某个ISR不能正常退出,就会影响到其它ISR的运行。在调试时为了检查中断向量是否已经和ISR可靠的连接上,可以在命令行上或程序中直接调用pciInt来查看ISR是否被触发。在硬件确定的情况下,可以小心设计保证各个硬件使用不同的中断,这样对PCI上的设备也可直接使用intConnect来挂中断。 需要说明的是ISR挂上中断向量的过程不是简单的在向量表中设置中断向量值。VxWorks 除了设置中断向量值以外,还在与中断向量相连的ISR加上了一层薄薄的包装,包括IsR执行前保存寄存器值.设置堆栈以及IsR执行后恢复寄存器和堆栈。在中断频繁的场合,系统中中断堆栈有可能被耗尽而溢出。为了避免上述情况发生,必须修改系统的中断堆栈大小,即在config.h中加入以下代码: #define INCLUDE_KERNEL #define ISR_STACK_SIZE 0xl000 //表示系统中中断堆栈的大小为4k 由于中断处理程序的特殊性,中断处理程序中不能使用可能导致阻塞的函数,如printf,semTake等,具体不可使用的函数列表可以在<>中查到。有时候为了调试方便,希望在ISR中打印一些信息,系统提供了一个与prinf等价的函数sysLog,该函数可接受 7个参数。它是非阻塞的。比较而言,prinf函数要在打印任务完成后才返回,sysLog只把打印任务放到系统的打印队列中就返回。在ISR中虽然不可以使用semTake,但可以使用semGive(互斥类型的除外)。一般使用semTake和semGive在ISR和普通程序间通信:当一个中断产生,ISR 完成必要的任务后,调用semGive通知另外一个使用semTake等待ISR信号的任务,该任务收到semGive释放的信号后,继续完成ISR中不便处理的任务。

vxWorks下设备驱动模板

基于vxBus的设备驱动模板 vxWorks6.x 设备驱动采用了新型的vxBus构架,该构架和原来的设备驱动有很大不同,初上手会有很多不方便。下面提供的模板有助于快速形成一个vxBus 设备驱动 设备驱动在3个地方体现: 头文件,代码文件,hwconfig.c,根据下面模板,把所有DEVICE换成自己的设备,并做相应操作即可,免去很多重复代码的苦恼,开发者仅需要关注功能即可。 这个模板处理了中断,但没有提供处理基本IO的方法,模板不是用来学习的,怎样完整地写一个vxbus的驱动,还是需要学习的。 头文件 #ifndef DEVICE_h #define DEVICE_h #define DEVICE_CARD_NAME "设备名" #define DEVICE_CARD_DESC "设备描述" #define DEVICE_CARD_VXBNAME "设备vxBus名" #define DEVICE_CARD_INT_PIN [中断管脚] 页脚内容1

#define DEVICE_CARD_INT_CORE_PIN [核中断管脚] #define DEVICE_CARD_INT_CORE_NUM [中断处理核] #define DEVICE_INT_DESC {DEVICE_INT_PIN,DEVICE_CARD_VXBNAME,0,0} #define DEVICE_XBAR_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_PIN} #define DEVICE_ROUTE_DESC {DEVICE_INT_PIN,DEVICE_INT_CORE_NUM} #define DEVICE_UNIT0_DEVICE_ID 0 /*假如有多个同型号设备begin*/ #define DEVICE_UNIT1_DEVICE_ID 1 ..... /*假如有多个同型号设备end*/ /*其他设备宏*/ #endif/*DEVICE_h*/ 页脚内容2

技术部工作流程图

.. '. 部门职能技术部 部门名称:技术部主管岗位:技术总监 上级部门:生产部上级主管:总经理 部门结构:技术总监-技术工程师-技术员-技术部内勤 部门本职: 负责公司技术建设及管理,为公司经营管理提供有效的技术支持 部门目标: 以客户的需求为工作目标,即设计的产品要求款式多样、品质优良、低成本、容易生产、符合安全规定。 主要职能: 1.负责制定公司管理制度。负责建立和完善产品设计,新产品的试制、标准化技术规程、技术情报管理制度;组织协调督促有关部门建立和完善设备、质量等管理标准及制度 2.组织和编制公司技术发展规划,编制近期技术提高计划;编制长远技术发展和技术措施规划并组织对计划、规划的拟定、修改、补充、实施等一系列技术组织和管理工作 3.负责制定和修改技术规程,编制产品的使用、维护和技术安全等有关的技术规定 4.负责公司新技术的引进和产品开发工作的计划、实施,确保产品品种不断更新和扩大 5.合理编制技术文件,改进和规范工艺流程 6.负责制定公司产品的企业统一标准,实现产品的规范化管理 7.编制公司产品标准,按年度审核、补充、修订定额内容 8.认真做好技术工艺、技术资料的归档工作。负责制定严格的技术资料交接、保管工作制度 9.及时指导、处理、协调和解决产品出现的技术问题,确保经营工作的正常进行 10.负责编制公司技术开发计划,抓好管理人才培养,技术队伍的管理。有计划的推荐引进、专业的技术人员,搞好业务培训和本部门管理工作 11. 负责组织实施工艺分析及工艺改进工作,持续改进制造过程质量,降低成本。 12.负责制度管理制度的制定、检查、监督、指导、考核专业的管理工作 新产品开发 1.1新产品实现的立项策划 1.2新产品的外观功能设计及造价控制和开发的控制及编制各类技术文件 1.3新产品制造过程中的技术攻克及造价成本节约 1.4新产品的实验测试(技术总结报告、实验测试报告、性能测试报告、成本核算报告)1.5新产品技术归档及展示(如有技术创新专利的申请) 管理权限: 1、对企业内部设计的各项图纸有审核、审批权。 2、对经本岗位审核的各项技术资料、图纸的准确性、准确性负责 3、对本岗位设计的技术文件的正确性、准确性负全责。

vxWorks中断处理

Vxworks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求,因此,熟悉其中断的处理过程对于VxWorks操作系统的开发是至关重要的.本文通过编写和调试基于AT91RM9200处理器的VxWorks嵌入式操作系统的BSP,来讨论VxWorks操作系统的中断机制。 1 VxWorks中断处理机制及AIC AT91RM9200使用一个8优先级,可单独屏蔽中断的中断向量控制器AIC。在ARM体系结构中,有7种异常中断,对应有一个异常中断向量表。ARM体系结构要求这个异常中断向量表从0地址处开始,对于外部中断请求IRQ,系统又增加了一块由中断控制器控制的中断向量表。 2 AT91RM9200 BSP的中断驱动的实现 2.1 中断驱动中定义的函数 STATUS at91rm9200LvlVecChk (int*,int*); STATUS at91rm9200LvlVecAck(int,int); STATUS at91rm9200LvlEnable(int); STATUS at91rm9200LvlDisable(int); 2.2 高级中断控制器AIC的初始化 在usrInit()中excVecInit()函数对异常中断向量进行初始化.整个中断库,以及中断控制器的初始化都是在syslib.c中的sysHwInit2()函数中完成的.该函数在sysClkConnect()中被调用,因为系统时钟中断要在内核开放中断后就要使能,因此内核在初始化为一个多任务环境后,就产生一个usrRoot()的任务,在该任务中要建立系统时钟中断,因此调用了sysClkConnect()函数,中断库以及中断控制器的初始化也就完成了。 高级中断控制器必须进行初始化,其初始化是在板级支持包BSP的中断驱动程序中。具体的实现函数是void at91rm9200IntDevInit(void)。该函数在文件syslib.c的sysHwInit2()函数中调用。 at91rm9200IntDevInit(void)函数中主要是配置系统的钩子函数,然后对中断源向量寄存器和中断模式寄存器进行配置,同时要清除并禁止AIC中所有的中断。 2.3 中断驱动中的回调函数 在intEnt中,程序很快就进入了特权模式(SVC32),如果是中断可嵌套模式,要设置该模式下的堆栈,并且将中断深度intCnt值加1.然后跳转到intIntRtnPreempt中,在intIntRtnPreempt中为后来调用中断驱动中的函数开辟了32个字节的堆栈空间,并且将程序指针拉到at91rm9200LvlVecChk函数处执行,at91rm9200LvlVecChk函数是在中断驱动中定义的函数,是用来检测当前挂起的中断中,优先级最高的中断源。检测出最高优先级的中断后,首先要禁止该中断,因此要调用at91rm9200LvlDisable函数,该函数也在中断驱动中定义。在禁止中断的过程中,需要通过intLock和intUnLock函数来保护临界代码不被新的中断打断。

VxWorks5.5 RTL81X9网卡驱动

VxWorks Torando2.2 RTL81X9网卡驱动添加过程 Step 1. 下载RTL81X9驱动源代码。 Step 2. 复制一个BSP包,并且修改名称,例如,我复制了一个PC486的BSP包,改名为i486bsp,如图所示: Step 3. 修改复制的BSP里面的Makefile文件,修改文件内容的如下: TARGET_DIR = i486bsp MACH_EXTRA =rtl81x9.o ;添加rtl81x9.o到系统中 Step 4. 复制RTL81X9的驱动代码rtl81x9.h、 rtl81x9.c、sysRtl81x9End.c文件到你的bsp包中。Step 5. 修改BSP包中的Config.h文件。在文件如下部分添加黄色标记的内容 #define INCLUDE_PCI /* Network driver options */ #define INCLUDE_END /* Enhanced Network Driver Support */ #undef INCLUDE_DEC21X40_END /* (END) DEC 21x4x PCI interface */

#undef INCLUDE_EL_3C90X_END /* (END) 3Com Fast EtherLink XL PCI */ #undef INCLUDE_ELT_3C509_END /* (END) 3Com EtherLink III interface */ #undef INCLUDE_ENE_END /* (END) Eagle/Novell NE2000 interface */ #undef INCLUDE_FEI_END /* (END) Intel 8255[7/8/9] PCI interface */ #undef INCLUDE_GEI8254X_END /* (END) Intel 82543/82544 PCI interface */ #undef INCLUDE_LN_97X_END /* (END) AMD 79C97x PCI interface */ #undef INCLUDE_ULTRA_END /* (END) SMC Elite16 Ultra interface */ #define INCLUDE_RTL_81X9_END Step 6. 修改ConfigNet.h文件,在文件如下部分添加黄色标记的部分添加: /* Intel 82543/82544 PCI (gei) driver defines */ #ifdef INCLUDE_GEI8254X_END #define GEI8254X_LOAD_FUNC sysGei8254xEndLoad #define GEI8254X_BUFF_LOAN TRUE #define GEI8254X_LOAD_STR "" IMPORT END_OBJ * GEI8254X_LOAD_FUNC (char *, void *); #endif /* INCLUDE_GEI8254X_END */ #ifdef INCLUDE_RTL_81X9_END #define RTL_81X9_LOAD_FUNC sysRtl81x9EndLoad #define RTL_81X9_LOAD_LOAN TRUE #define RTL_81X9_LOAD_STRING "" IMPORT END_OBJ * RTL_81X9_LOAD_FUNC (char *, void *); #endif /* INCLUDE_RTL_81X9_END */ END_TBL_ENTRY endDevTbl [] = { #ifdef INCLUDE_EL_3C90X_END {0, EL_3C90X_LOAD_FUNC, EL_3C90X_LOAD_STR, EL_3C90X_BUFF_LOAN, NULL, FALSE}, #endif /* INCLUDE_EL_3C90X_END */ #ifdef INCLUDE_LN_97X_END {0, LN_97X_LOAD_FUNC, LN_97X_LOAD_STR, LN_97X_BUFF_LOAN, NULL, FALSE}, #endif /* INCLUDE_LN_97X_END */

小硕vxworks网络驱动开发笔记

目录 第1章操作系统基本概念 (3) 1.1实时操作系统和分时操作系统的区别 (3) 1.2嵌入式操作系统VxWorks简介 (4) 1.3 VxWorks的特点 (5) 1.3.1可靠性 (5) 1.3.2实时性 (5) 1.3.3 可裁减性 (5) 1.3.4对一个实时核的要求 (6) 1.4 VxWorks的整体构架 (7) 第2章 vxWorks驱动开发预备 (7) 2.1 VxWorks映像 (8) 2.2 BSP主要文件目录的组成及作用: (11) 2.3系统启动顺序 (13) 2.4 Vxworks驱动概要 (17) 第3章 vxWorks 网络驱动开发 (21) 3.1驱动类别 (21) 3.2 Vxworks 下网络驱动开发 (24) 3.3 VxWorks网络驱动配置及分析 (58) 第4章 VxWorks系统中常见问题 (64) 前言

在通信,电子领域,目前主流的嵌入式操作系统为linux 和vxworks。Linux 多用于消费电子产品,像大家熟悉的andriod,原始系统就是linux,也就是说andriod也是一种linux系统。还有大家熟悉的MP3,也是使用linux操作系统的。Linux因为价格便宜(开源的,不需要付licence),稳定性好占据了一定的市场份额。 Vxworks是风河系统1983开发的一款嵌入式实时操作系统,多用于通信,导航,航天等领域。因为这些领域对实时性要求非常高,比如现在LTE 系统就是使用vxworks系统,因为是采用TDD模式,而这种模式,显然对实时性要求非常高。也就注定了vxwroks 在这些领域的特有优势。 选择linux还是vxworks看自己的专业方向,还有自己的兴趣所有。每个领域只要研究透彻,都是很有前途的。 既然两者都是主流的嵌入式操作系统,其还是有很多相似性。小编也初步接触过linux,发现具备一定的linux基础对日后深入学习vxworks很有好处,很多思想都是相似的。 另外,本人系小硕,目前的研究领域是vxworks驱动开发,主攻网络驱动开发。在平常的日常学习中,结合各位网友提供的资料(自己在百度上收集的),还有workbench 提供的document(自己翻译,特别是针对网络驱动部分),希望对广大嵌入式驱动开发者有所帮助。 声明: 此文档并不适合于vxworks初学者,因为这里,小编省去了很多vxworks 下的基本知识,包括核中常用的进程,信号量等等支持。也没有提及集成开发环境tornado/vworkbench. 这里的探索重点是vxwroks底层的东西,包括启动过程,BSP开发等。 附录: Vxworks的应用领域 嵌入式Vxworks系统的主要应用领域主要有以下几方面: 1.数据网络:如:以太网交换机、路由器、远程接入服务器等 2.远程通讯:如:电信用的专用分组交换机和自动呼叫分配器,蜂窝系统等 3.医疗设备:如:放射理疗设备 4.消费电子:如:个人数字助理等 5.交通运输:如:导航系统、高速火车控制系统等 6.工业:如:机器人 7.航空航天:如:卫星跟踪系统 8.

Vx Works中的中断应用设计要点

收稿日期:2004-08-02 作者简介:耿 锐(1975— ),男,安徽淮南人,硕士研究生,研究方向为嵌入式系统应用。 VxWorks 中的中断应用设计要点 耿 锐,王 闵 (西安电子科技大学计算机学院,陕西西安710071) 摘 要:硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要。文中以VxWorks 操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题。由于软硬件的相关性,选用广泛应用的X86架构的嵌入式计算机为硬件平台,对Pentium CPU 和计算机主板对硬件中断的管理机制也做了详细介绍。所得出的研究结论在具体的开发项目中均得以验证,可供相关技术人员参考。关键词:实时操作系统;VxWorks ;中断 中图分类号:TP311 文献标识码:A 文章编号:1005-3751(2005)05-0122-03 Main Points on Interrupt Application Design in VxWorks GEN G Rui ,WAN G Min (School of Computer ,Xidian University ,Xi ’an 710071,China ) Abstract :Hardware interrupt management is a key problem in real time system and it should be deeply researched by developers to satisfy their job.This paper discusses some important points about interrupt application design in VxWorks.Due to connections between hardware and software ,adopting an embedded computer of X86architecture as hardware platform ,the management mechanism for Pentium CPU and computer main board to hardware interrupt is also introduced detailedly.Conclusion of this paper is checked in practice and can be referenced by developers in related fields.K ey w ords :RTOS ;VxWorks ;interrupt 0 前 言 硬件中断处理是实时系统设计中最重要、最关键的问题。文中综合软硬件,从工程应用的角度对此问题加以讨论。文中所述内容针对的软件平台是VxWorks 实时操作系统,硬件平台选用广泛使用的X86架构的嵌入式计算机,全文按照CPU 、主板、操作系统自下而上的顺序展开。 1 Pentium CPU 的中断类型 有两类事件可引起Pentium 挂起当前的指令流,即中断和异常。中断是由外部事件引发的,在程序执行的任何时刻都可能出现;异常也称异常中断,是由内部事件引发的。中断和异常各有两类触发源: (1)中断。 可屏蔽中断:CPU 的IN TR 引脚收到有效信号,如果 Pentium 标志寄存器IF 位为1,则允许中断,否则信号在CPU 内被屏蔽。 非屏蔽中断:CPU 的NMI 引脚收到有效信号而引发的中断,这类中断不能被阻止。 (2)异常。 执行异常:CPU 试图执行一条指令的过程中出现错误、故障等不正常条件而引发的异常中断。 执行软件中断指令:Pentium 指令系统中包括一些如 IN TO ,IN T n 这类软件中断指令,执行时产生异常中断。 详细分类的话,Pentium 可以识别256种中断和异常。每种中断给予一个编号,即0~255,称为中断向量号 (interrupt vector number )。其中NMI 、异常以及系统保留 占用中断向量号0~31,而32~255为用户中断向量号,可供IN TR 和自定义软件中断(如汇编中的IN T 指令)使用。 2 Pentium CPU 的中断响应过程 中断处理子程序的入口地址信息存于内存中的一个表内,实模式为中断向量表IV T ,保护模式为中断描述符表IDT 。中断发生时,CPU 首先通过某种方式获得中断向量号,再以中断向量号检索此表,即可获取中断服务子程序入口地址,详述如下: (1)实模式使用中断向量表。 中断向量表IV T 的基地址由IDTR (中断描述符寄存器)指定,大小为1kB 。中断响应时的查表过程与8086/ 8088一致,在此不再赘述。 第15卷 第5期2005年5月 微 机 发 展Microcomputer Development Vol.15 No.5May 2005

VxWorks网络加载

在网络初始化时加载END和subEND,并在其中初始化IP协议栈,在TMS初始化时绑定IP到SubEND,单播路由协议初始化在TMS初始化中,根据MIB配置确定初始化哪个单播路由协议,RIP初始化可以在网络初始化时,OSPF初始化在TMS 初始化中根据TMSMIB配置确定,END的IP地址在网络初始化时设置,SwEND的IP地址在网管配置时设置。 一、在configAll.H中定义了所有定置系统配置的宏 《INCLUDED SOFTWARE FACILITIES》:定义了基本组件; 《EXCLUDED FACILITIES》:定义了扩充组件,缺省不包括; 《KERNEL SOFTWARE CONFIGURATION》:内核运行的基本参数定义,包括文件个数、任务个数等等; 《"GENERIC" BOARD CONFIGURATION》:板通用属性定义;《"MISCELLANEOUS" CONSTANTS》:共享的信号量以及相关对象个数定义;《INCLUDED NETWORK FACILITIES》:包括的网络协议组件定义;《EXCLUDED NETWORK FACILITIES》:未包括的网络协议组件定义; 二、在bootConfig.C中的流程 usrInit()的流程,该例程被rom—start()中的boot代码调用。 调用intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS)设置中断向量; 调用excVecInit ()设置异常向量; 调用sysHwInit ()初始化硬件; 调用usrKernelInit ()配置VXWORK内核; 调用kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE,启动usrRoot();usrRoot()有多个,一个在bootConfig。C中,一个在usrConfig。C中。 三、bootConfig.C中的usrRoot()流程(是BOOTROM用的) 调用 memInit (pMemPoolStart, memPoolSize);/* XXX select between memPartLibInit */初始化内存; 调用 sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */ sysClkRateSet (60); /* set system clock rate */ sysClkEnable (); /* start it */ 初始化系统时钟; 调用 iosInit (NUM_DRIVERS, NUM_FILES, "/null");初始化文件系统; 根据配置的串口和控制台口个数,初始化串口; 调用 wdbConfig(); /* configure and initialize the WDB agent */初始化WDB; 调用 pipeDrv (); /* install pipe driver */ excInit (); /* init exception handling */ excHookAdd ((FUNCPTR) bootExcHandler); /* install exc handler */ logInit (consoleFd, 5); /* initialize logging */ 初始化相关功能模块; 调用 hashLibInit (); /* hashLib used by dosFS */初始化DOS文件系统;根据配置选择

vxworks+debug

图形化交叉调试器简介 1. 简介 CrossWind/WDB是tornado提供的基于源代码的调试工具,它支持任务级和系统级调试,支持混合代码和汇编代码显示,并且支持目标机同时调试。WindDebug(WDB)协议是一种用于调试的私有协议,目标机(target)通过WindDebug(WDB)协议与开发机(HOST)之间交互通信。 主机-目标机交互方式如下: HOST ┆ Target ┌──────>wtxregd ┆ v ^ ┆ Tool<────┐│┆VxWorks Tool<────┼> tgtsvr <────────------->WDB Agent Tool<────┘┆ 本地必须启动一个target server,目标机中必须有WDB agent,这样才能进行交叉调试。 target server(目标机代理) Target server提供基于主机的目标机资源管理,以便于Tornado工具访问目标机,功能如下: 与目标机上的debug引擎进行通讯 动态模块下载和卸载 常驻主机的目标机符号表 在目标机上为主机上的工具分配内存 缓存目标机代码text段 支持虚拟IO Target server增强了主机和目标机之间的灵活性,使得主机工具对目标机的影响最小,主机工具与主机和目标机之间的通信方式互相独立,所有的Tornado工具均使用WindRiver Tool Exchange协议(缩写为WTX)与target server通信。WTX协议具体内容参见Tornado API指南。 Target server通过下列方式响应工具的WTX请求:

操作缓存中的信息 发送请求到目标机上的WDB agent中 Wtxregd 在启动target server和工具之前要先启动wtxregd。Tornado工具、registry和target server可以运行在不同主机上,Tornado registry程序必须运行在指定的主机上。windows下为Tools=>Options...=>Tornado Registry页面中指定的主机,tornado 工具与目标机通过target server(tgtsvr)进行交互,target server提供: 网络、串口、NetROM或者用户自定义连接上的通信 常驻主机的目标机符号表 动态模块下载和卸载 缓存目标机RAM中程序的text段 在target上创建虚拟IO路径 Wind Registry程序wtxregd负责管理tornado工具与target server之间连接所需的各种信息。tornado工具首先与registry进行交互,获取target server的相关信息。 WDB代理 WDB调试代理运行在目标机上,与target server进行交互,执行命令并返回结果。WDB代理位于target server和Tornado工具之间,可以完成以下功能: 读取或修改内存 设置或清除断点 创建、启动、停止或删除任务 调用函数 收集系统目标信息 通常WDB代理作为一个任务运行在目标机上,因此获得最佳性能。但这种情况下只能进行任务级调试。也叫做task或internal模式。通常我们可以看到在任务中有twdbTask 这个任务(如图1所示)。 图 1 由于WDB代理不依赖于VxWorks,所以也能够执行系统级调试--例如:调试中断服务程序或内核运行起来之前的代码。将WDB代理与VxWorks分开运行才能进行系统调试。

新产品开发部门工作流程图讲义

新产品开发部门工作流程图讲义

2 2020年4月19日 文档仅供参考 新产品开发部门工作流程图 生产管理部部长-任 新产品开发人员建? 八 授 呈 报 阶段性工作总结* 新产品样品开发 新产品开发过程主要方式 新产品开发策略

附件一:内部管理制度 新产品开发工作,是指运用国内外在基础研究与应用研究中所发现的科学知识及其成果,转变为新产品、新材料、新生产过程等一切非常规性质的技术工作。新产品开发是企业在激励的技术竞争中赖以生存和发展的命脉,是实现”生产一代,试制一代,研究一代和构思一代”的产品升级换代宗旨的重要阶段,它 对企业产品发展方向,产品优势,开拓新市场,提高经济效益等方面起着决定性的作用。因此,新产品开发必须严格遵循产品开发的科学管理程序,即选题(构思。调研和方案论0)样(模丹批沪正式投产前的准备这些重要步骤。 一、调查研究与分析决策 新产品的可行性分析是新产品开发中不可缺少的前期工作 必须在进行充分的技术和市场调查后,对产品的社会需求、市 场占有率、技术现状和发展趋势以及资源效益等五个方面进行科学预测及技术经济的分析论证。 (一)调查研究: 1、调查国内市场和重要用户以及国际重点市场 同类产品的技术现状和改进要求; 2、以国内同类产品市场占有率的前三名以及国 际名牌产品为对象,调查同类产品的质量、价格、

市场及使用情况; 2020年4月19日

3、广泛收集国内部外有关情报和专刊, 然后进行 可行性分析研究。 (二)可行性分析: 1、论证该类产品的技术发展方向和动向。 2、论证市场动态及发展该产品具备的技术优 势。 3、论证发展该产品的资源条件的可行性。(含物 资、设备、能源及外购外协件配套等)。 (三)决策: 1、制定产品发展规划: (1)企业根据国家和地方经济发展的需要、从企业产吕发展方向、发展规模, 发展水平和技术改造方向、 赶超目标以及企业现有条件进行综合调查研究和可 行性分析, 制定企业产品发展规划。 (2)由研究所提出草拟规划, 经厂总师办初步审查由总工程师组织有关部门人员进行慎密的研究定稿后, 报厂长批准, 由计划科下达执行。 2、瞄准世界先进水平和赶超目标, 为提高产品质 量进行新技术、新材料、新工艺、新装备方面的应用研 究: (1)开展产品寿命周期的研究, 促进产品的升级换代,

相关文档
最新文档