DSP学习笔记心得
更新时间:2023-12-03 16:27:01 阅读量: 教育文库 文档下载
- dsp怎么学推荐度:
- 相关推荐
DSP学习心得笔记
---------------- 白建成.baijc.icekoor
引言:学习DSP的时间有两个多月了,收获很多新知识,我们要每天都有进步才行,以下内容没有特别的顺序,跟具自己的学习情况写的,如果有不对的地方希望指出来,如果有不懂得也可以问我,大家相互交流很重要,我的一个邮箱:baijc@163.com欢迎联系!
建立新工程过程中: 问题1:
\ 1 fatal error detected in the compilation of \ 解决方法:
因为project ?build options?compiler?preprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。
问题2:
undefined first referenced symbol in file --------- ----------------
_c_int00 D:\\DSP study\\test3\\Debug\\DSP280x_CodeStartBranch.obj FS$$MPY D:\\DSP study\\test3\\Debug\\DSP280x_CpuTimers.obj FS$$TOL D:\\DSP study\\test3\\Debug\\DSP280x_CpuTimers.obj >> error: symbol referencing errors - './Debug/test3.out' not built 或者下面的问题:
undefined first referenced symbol in file --------- ---------------- _c_int00 D:\\DSP
study\\GPIO_Study\\Debug\\DSP280x_CodeStartBranch.obj
>> error: symbol referencing errors - './Debug/GPIO_Study.out' not built 解决办法都是下面:
这个问题是因为没有加在库文件,请在project ?build options?linker?libraries中加入rts2800.lib。
问题3:
>> warning: creating .stack section with default size of 400 (hex) words. Use
-stack option to change the default size.
>> error: can't allocate .stack, size 00000400 (page 1) in RAMM1 (avail: 00000380)
>> error: errors in input - ./Debug/GPIO_Study.out not built 解决办法:
这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。这时,需要进行如下修改就可通过:project? build options?Linker?basic,在Stack Size(-stack):填入800或者其他小于1024的数值。
调试程序:
Load Program,在工程文件夹下面的Debug文件夹下,选中**.out文件,点击打开,便开始下载程序了。将**.out文件下载到目标板上2812的RAM中。?在编译完成之后,要来下载程序并进行功能调试。File
注意,这里是调试,所以将程序下载到RAM。等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。
(Run和Animate的区别,Run是如果遇到断点的话它就停下来了。而Animate就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)——知识储备。 添加断点:
加上断点的方法很简单,只要在该行代码前双击就行。双击之后,这行代码前面会出现一个红色圆块。另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。 使用watch window:
Watch window的作用是来观察程序运行过程中的各个变量的值。调用watch window的方法是点击菜单栏的\,这时watch window就会显示在CCS下方的信息区域; 选中所要观察的变量,然后右键,在右键菜单中选择add to watch window。 调试代码观察:
Mixed Source/Asm;?Go main。 既能看到源文件中代码的执行情况,又能看到汇编指令的执行情况View?我们在调试程序的时候经常想让程序从Main函数开使运行,点Debug
关于F2812中用C语言来实现中断的说明 1.首先在.cmd中定位系统中断表: MEMORY { PAGE 0 :
...................................... PAGE 1 :
......................................
PIE_VECT : origin = 0x000D00, length = 0x000100 ...................................... }
SECTIONS
{
...................................
PieVectTable : > PIE_VECT, PAGE = 1 ..................................... }
2.在C中制定该中断的结构体:
#pragma DATA_SECTION(PieVectTable,\
struct PIE_VECT_TABLE PieVectTable;(在DSP28_GlobalVariableDefs.C中初始化) 3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表: typedef interrupt void(*PINT)(void);这里有些一问,一下应该为函数名??
// Define Vector Table: struct PIE_VECT_TABLE {
// Reset is never fetched from this table.
// It will always be fetched from 0x3FFFC0 in either // boot ROM or XINTF Zone 7 depending on the state of // the XMP/MC input signal. On the F2810 it is always // fetched from boot ROM.
PINT PIE1_RESERVED; PINT PIE2_RESERVED; PINT PIE3_RESERVED; PINT PIE4_RESERVED; PINT PIE5_RESERVED; PINT PIE6_RESERVED; PINT PIE7_RESERVED; PINT PIE8_RESERVED; PINT PIE9_RESERVED; PINT PIE10_RESERVED; PINT PIE11_RESERVED; PINT PIE12_RESERVED; PINT PIE13_RESERVED;
// Non-Peripheral Interrupts: PINT XINT13; // XINT13 PINT TINT2; // CPU-Timer2
PINT DATALOG; // Datalogging interrupt PINT RTOSINT; // RTOS interrupt PINT EMUINT; // Emulation interrupt PINT XNMI; // Non-maskable interrupt PINT ILLEGAL; // Illegal operation TRAP PINT USER0; // User Defined trap 0 PINT USER1; // User Defined trap 1
PINT USER2; // User Defined trap 2 PINT USER3; // User Defined trap 3 PINT USER4; // User Defined trap 4 PINT USER5; // User Defined trap 5 PINT USER6; // User Defined trap 6 PINT USER7; // User Defined trap 7 PINT USER8; // User Defined trap 8 PINT USER9; // User Defined trap 9 PINT USER10; // User Defined trap 10 PINT USER11; // User Defined trap 11
// Group 1 PIE Peripheral Vectors: PINT PDPINTA; // EV-A PINT PDPINTB; // EV-B PINT rsvd1_3; PINT XINT1; PINT XINT2;
PINT ADCINT; // ADC PINT TINT0; // Timer 0 PINT WAKEINT; // WD ............. .............
// Group 12 PIE Peripheral Vectors: PINT rsvd12_1; PINT rsvd12_2; PINT rsvd12_3; PINT rsvd12_4; PINT rsvd12_5; PINT rsvd12_6; PINT rsvd12_7; PINT rsvd12_8; };
然后在使我们在.cmd文件中定义的表有以上属性: extern struct PIE_VECT_TABLE PieVectTable;(在.h文件中) 4.初始化该表(在.c文件中)使之能够为主程序所使用: const struct PIE_VECT_TABLE PieVectTableInit = {
PIE_RESERVED, // Reserved space PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED,
PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED, PIE_RESERVED,
// Non-Peripheral Interrupts
INT13_ISR, // XINT13 or CPU-Timer 1 INT14_ISR, // CPU-Timer2
DATALOG_ISR, // Datalogging interrupt RTOSINT_ISR, // RTOS interrupt EMUINT_ISR, // Emulation interrupt NMI_ISR, // Non-maskable interrupt ILLEGAL_ISR, // Illegal operation TRAP USER0_ISR, // User Defined trap 0 USER1_ISR, // User Defined trap 1 USER2_ISR, // User Defined trap 2 USER3_ISR, // User Defined trap 3 USER4_ISR, // User Defined trap 4 USER5_ISR, // User Defined trap 5 USER6_ISR, // User Defined trap 6 USER7_ISR, // User Defined trap 7 USER8_ISR, // User Defined trap 8 USER9_ISR, // User Defined trap 9 USER10_ISR, // User Defined trap 10 USER11_ISR, // User Defined trap 11
// Group 1 PIE Vectors PDPINTA_ISR, // EV-A PDPINTB_ISR, // EV-B rsvd_ISR, XINT1_ISR, XINT2_ISR,
ADCINT_ISR, // ADC TINT0_ISR, // Timer 0 WAKEINT_ISR, // WD ............. .............
// Group 12 E Vectors rsvd_ISR, rsvd_ISR,
rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, rsvd_ISR, };
//--------------------------------------------------------------------------- // InitPieVectTable:
//--------------------------------------------------------------------------- // This function initializes the PIE vector table to a known state. // This function must be executed after boot time. //
void InitPieVectTable(void) { int16 i;
Uint32 *Source = (void *) &PieVectTableInit; Uint32 *Dest = (void *) &PieVectTable;
EALLOW;
for(i=0; i < 128; i++) *Dest++ = *Source++; EDIS;
// Enable the PIE Vector Table PieCtrl.PIECRTL.bit.ENPIE = 1; }
5.中断服务程序:
让以上的数值指向你所要的服务程序,例如: PieVectTable.TINT2 = &ISRTimer2; 那么,ISRTimer2也就成了中断服务程序, ×××切记:一定要在主程序的开始先声明该程序: interrupt void ISRTimer2(void); ............. .............
然后按照您的需要编制该程序: interrupt void ISRTimer2(void) {
CpuTimer2.InterruptCount++; }
编程中遇到的问题:
1、 line 257: warning: last line of file ends without a newline;
解决方法:
点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈!
28016的定时器笔记
学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。但是从功能上将差不多。
关于28016定时器的时钟的讨论;
定时器的时钟是由SYSCLKOUT经过TBCTL中的CLKDIV和HSPCLKDIV进行配置; 和
主要说明,我们应该记得SYSCLKOUT和HSPCLK之间还可以分频,但是在这里这个寄存器不影响。
关于28016定时器的时钟同步的讨论;
如果我们想使每个PWM模块具有同步时钟,我们可以通过软件强制各个模块之间同步,设定步骤如下:
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0 // Pass through EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm2Regs.TBCTL.bit.SWFSYNC = 1; EPwm3Regs.TBCTL.bit.SWFSYNC = 1;
以上程序是设定PWM1/2/3同步,我们由于我们只采用向上计数,所以不需要设定计数方向位。 接下来如果我们想PWM1与PWM2输出相位不一样,保持某个相位差,我们可以通过寄存器设定;
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm1Regs.TBPHS.half.TBPHS = 0; EPwm2Regs.TBPHS.half.TBPHS = 250; EPwm3Regs.TBPHS.half.TBPHS = 500; 首先使能,然后赋予值; 关于一些其他的配置如下:
EPwm3Regs.TBPRD = PWM3_TIMER_TBPRD;
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE; // Enable INT EPwm3Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 3rd event
关于28016PWM配置的讨论
PWM1的A/B的独立配置;
除了counter-compare比较寄存器,CMPA,CMPB,主要还是配置控制寄存器CMPCTL,对于影子寄存器的配置,还有影子寄存器的装载模式。
这里主要讲关于PWM中action qualifier的配置; 模式1:
// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // Set Compare values
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value EPwm1Regs.CMPB = 500; // Set Compare B value // Set actions
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up coun EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count // Interrupt where we will change the Compare Values
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event
其中红色的为PWM的输出方式配置,当PWM1.A在counter==0时,输出为0,在counter==CMPA时,且在向上计数,输出为1;而PWM1.B相反。 模式二: // Set actions
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR; // Clear PWM2A on Period EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A, up count EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM2B on Period EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM2B on event B, up count
其中红色的为PWM的输出方式配置,当PWM1.A在counter==period时,输出为0,在counter==CMPA时,且在向上计数,输出为1;而PWM1.B相同; 模式三:
// Set Actions
EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM3A on event B, up count EPwm3Regs.AQCTLA.bit.CBU = AQ_CLEAR; // Clear PWM3A on event B, up count
其中红色的为PWM的输出方式配置,当PWM1.A在counter==CMPA时,输出为1,在counter==CMPB时,且在向上计数,输出为0,也就是计数在CMPA与CMPB之间时输出为1; 模式四:
EPwm3Regs.AQCTLB.bit.ZRO = AQ_TOGGLE; // Toggle EPWM3B on Zero 此模式强制整个周期输出高或者输出地,与CMPA与CMPB无关,
关于28016PWM死区时间配置的讨论
主要与死区有关的是三个寄存器:
Dead-Band Generator Control Register (DBCTL);
Dead-Band Generator Rising Edge Delay Register (DBRED);
Dead-Band Generator Rising Edge Delay Register (DBRED) Field Descriptions; 首先清楚延时时间的计算 为:DBRED*TBCLK; 然后弄懂DBCTL就可以了。
注意理解下图:
弄懂3个控制位什么意思;
OUT_MODE,POLSEL,IN_MODE
注意第二位,这位通常用在输入为同一个通道时,也就是IN_MODE=0X00/0X03时。 简单看一些deadband的配置:
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; 输出之前,输入上升沿下降沿都被延时;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI; 没有取反过程;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; 输入全部为A,此为习惯性的配置; EPwm1Regs.DBRED = 1000; EPwm1Regs.DBFED = 500;
一周解决的为题:
我的sin()函数能够正常执行,cos()函数也能正常执行,但是当sin()计算完再计算cos(),仿真环境就会进入逻辑错误中断,请问怎么解决,是不是该重装CCS。
原因:之前一直把程序烧到RAM里,总是只能执行一个sin()和cos()函数,然后RAM的空间就不够了,由于也不会改RAM空间的大小,所以就把程序直接下到flash里面,结果就好了。
遇到CCS和仿真器连不上的问题;
Error connecting to the target: Error 0x80000240/134
Fatal Error during: Initialization, OCS Unknown Error Sequence ID: 0 Error Code: 134 Error Class: 0x80000240 I/O Port = 240 解决办法:
我也试着解决这个问题,重装了一次,结果没有用。想着觉得是USB驱动的问题,然后就在设备管理器中,把USB的驱动删除了,有重新装了一遍,结果没问题了。原因应该是以前用的USB口安装的驱动,又被用于安装其他的驱动,结果以前的USB驱动不能用了
我在用dsp中的cos()与sin()函数时,对他们的结果做验证,发现他们有的计算出来的结果,和我用计算器计算出来的结果不一样,还差不少。 解决办法:
首先坚信CCS的函数计算不会轻易的出错,然后我就去查程序的问题,查不好长时间觉得没问题,就继续看程序运行的结果,结果发现有些计算正确,有些不正确,就在想执行过程中难道有随机性,结果突然想到中断的问题,我是在中断中作了个旋转矢量,通过中断来使它旋转,而直接把中断中的值,拿来在每个sin,cos中用,所以才出问题的。
结果改动了一点就行了,将中断中的值,在用的地方,重新付给另一个变量,这样就能解决了。因为sin,cos执行需要时间较长,而普通的赋值却不是。 Flash API Error #65535:
The device is in limp mode, operation failed。以前一直没有问题,不知道怎么突然就这样了。 解决办法:
烧写的插件(网上这么叫)没有装好的原因,我觉得就是仿真器第一次没连接好,拔掉再连接几次就行了。
2011.1.20
fatal error: file \ Tag_Memory_Model attribute value of \ previously seen (\ 解决办法:
问题的出现可能是你lib下的库有所改变引起的,project->built
options->linker->libraries->rts2800_ml.lib,因为之前一直用它,后来改成rts2800.lib就出现这个问题了,改回去就可以了。
data verification failed at address 0x8000
Please verify target memory and memory map 解决方法:
可能是gel的问题,重新载入几次,如果不行的话,就把仿真器重新接几次,问题就应该没有了,多数是硬件的问题。
针对CCS的图像显示,一个方式为对程序中的某些变量画图,另一种方式是对DSP采集的数据画图,两者在方法上有所不同。
首先声明画图很简单,只要把重要的记住就可以了,其他的尝试怎么用就OK了,不用刻意去学,浪费时间;
至于这张图中各个栏代表什么,你随便找个资料就给你 说得很清楚,但是没有一份资料教你怎么用的,这就是 网上资料的弊端。
你只要把右图画绿线的看懂就总够了,其他的试着改变参 数,看看结果你就明白了。
接下来给你看看我的配置:
Dual time 和single time的区别在于显示几个波形 Svpwm_Time1和 Svpwm_Time0 是我程序内部的 两个变量,也就是SVPWM的t1,t0,记得前面加 &,不然结果不对,Acquisition Buffer Size设为1, 因为我想通过终端来调试,每次终端,然后刷新 一次数据,这样很方便,找点资料看,这里不详 细说明了,还有采样时间,根据你的要求来定。 波形如下:
是不是很matlab中一样哈!
另一种方式,不能采用中断了,因为中断时间太长,影响采样速度。
建议:在程序中建一个大的数组,然后运行一段时间,再将数组显示在CCS中,Acquisition Buffer Size 此时不能为1了,要和你的数组一样长,Display Data Size等于Acquisition Buffer Size就可以,显示出来就可以了。
如下图:这是我AD采样的波形,采集一个正弦波形,采用两个通道。
2011.01.24
error: symbol \
study\\\\DSP_Perfect\\\\Dsp_Perfect_110121W\\\\Perfect\\\\Debug\\\\Perfect.obj\ redefined in \
study\\\\DSP_Perfect\\\\Dsp_Perfect_110121W\\\\Perfect\\\\Debug\\\\SCI_485.obj\ 解决办法:
这个问题是系统编译以后,在perfect.c和SCI_485.c中分别有main();结果编译会报错。
2011.01.22
\ run placement fails for object \ ranges:
RAMM1 size: 0x380 unused: 0x380 max hole: 0x380 error: errors encountered during linking; \ 解决办法:
双击错误提示,进入错误的地方,原因是我们申明的变量数,超过了RAMM1的声明的大小,所以找过RAMM1,然后把size扩大就可以了, RAMM1 : origin = 0x000480, length = 0x000400 /* on-chip RAM block M1 */,注意但是不能超过1024,也就是说最大是0x000400。同时也把
project? build options?Linker?basic,在Stack Size(-stack):填入800或者其他小于1024的数值。以免以后有出些不明的问题。
F28335有三种32位的I/O口,依次
PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。这样涉及到了IO的寄存器,IO口共有三类寄存器:控制寄存器、数据寄存器和中断控制寄存器。
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):'0’为数字I/O,'1’为外设I/O口;
2、 GPIO可以配置为内部电阻上拉功能,GPxPUD:'0’为上拉,'1’为禁止上拉;
3、 GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样还是6周期采样或者不用采样;
4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,'0’是输入,'1’是输出;
当GPIO配置为数字I/O时注意:
28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电
平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输
出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入。28335引脚作为输入时,采集外部相应引脚的高低电平,只要读取GPADAT或GPBDAT的相应位即可。在有些场合高频干扰会使I/O引脚的读入产生误码。为了避
免这种现象,28335引入了采样时间的概念,采样时间可以通过GPxCTRL与GPxQSEL1/2设置为systemclock的倍数(100MHz的频率,最小采样时间为10ns,最
大采样时间为5.1us)。
正在阅读:
DSP学习笔记心得12-03
国家励志奖学金的申请理由500word版本(3页)11-07
AIX维护手册大纲final10-25
第一次独自睡觉小学生作文06-05
借代03-17
解放思想、转变观念,全面调整农业产业结构05-04
南大网院刑法学第(1)次作业07-08
考研历史资料04-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 心得
- 笔记
- 学习
- DSP
- 2016年04月自学考试婚姻家庭法试题及答案
- 皇甫谧文化园:密须故地上盛开的一朵人文奇葩
- 高三数学第二轮专题复习必备精品系列教案习题(4)-- - 三角函数 注:高三数学第二轮专题复习必备精品系列
- aaf - 0406 - 供应链环境下的业务流程重组战略
- 测试方法分章思考题(答案版)
- 电工电子经典习题
- (船厂、码头)污染事故应急预案
- 停电应急预案演练记录及评价
- 托耐特曲木家具赏析 - 图文
- 管理会计期末练习
- 课题总结
- 中日韩海洋信仰异同
- 粉体工程复习题2011
- 连续与点动混合正转控制线路(教案)
- 公司管理系统发展战略规划
- 时代光华《危机管理价值观的建立》课后测试答案
- 新城水系绿化景观提升项目可行性研究报告 - 图文
- 现代汉语全套题库 - 附答案 -
- cv备份及容灾方案建议书改 - 图文
- 《乡土中国》整本书阅读 教案