




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式课程设计 基于S3C2440的串口传输及其界面设计 目 录第1章 绪论2第2章 MiniGUI 在PC机上的安装3 2.1 移植源代码准备3 2.2 移植基本内容3 2.3 测试5第3章 MiniGUI 在ARM上的移植6 3.1 移植基本内容6 3.2 测试8第4章 MiniGUI串口传输界面设计9 4.1 MiniGUI设计知识介绍 9 4.2 串口传输知识介绍11 4.3 设计方法及整体框架12 4.4 重要程序解析13第5章 程序调试 14 5.1 发送部分调试及结果14 5.2 接受部分调试及结果15第6章 设计总结及改进16 6.1 设计总结16 6.2 设计改进17第7章 心得体会18第8章 参考文献19第9章 附录20第1章 绪 论随着计算机技术的普及,嵌入式技术的发展,嵌入式的产品在我们生活中越来越多。许许多多的公司也开始从事着这方面的工作设计嵌入式软件和硬件。MiniGUI 是嵌入式系统的高级图形系统。为嵌入式软件的开发提供了完整的图形系统支持,是全球针对嵌入式 Linux仅有的两个商用嵌入式GUI系统之一。MiniGUI还为嵌入式Linux 系统提供了完整的多进程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三种运行模式运行。这里我们采用它来设计通信软件。串口通信软件是最普通的一款数据通信软件,通过这个软件可以完成不同机器上数据的传输。工程上,它也常常用来作为通信测试软件。比如我们常见的串口软件助手,就是一个很好的通信测试软件。通过这个课程实践,我们进一步巩固嵌入的基础知识,而且可以掌握嵌入式系统的基本结构,开发环境的建立和使用。进一步学习嵌入式基本驱动程序,应用程序设计编译和调试方法。第2章 MiniGUI 在PC机上的安装 2.1 移植源代码准备 1硬件环境 主机: PC机;开发板:TQS3C2440;通讯连接:串口、网线; 2.软件环境 主机操作系统:VMware虚拟机下的fedora10; 开发板操作系统:内核为2.6.30 交叉编译器:EABI-4.3.3 通讯方式:虚拟机与主机通过共享文件夹通讯,主机与开发板通过secure CRT通讯3.准备Minigui源码文件:(1.libminigui-1.6.10.tar.gz:MiniGUI函数库源代码,其中包括libminigui、libmgext和libvcongui。(2.mingui-res-1.6.10.tar.gz:MiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。(3. mg-samples-1.6.10.tar.gz:MiniGUI的单个控件的演示程序。(4. qvfb-1.1.tar.gz:Qt虚拟缓冲帧.2.2 移植基本内容 2.2.1 安装MiniGUI资源文件我们首先要安装MiniGUI的资源文件。按照如下步骤:1)使用tar命令解开Minigui-res-1.6.10.tar.gz,可以使用如下命令:2)该命令将建立minigui-res-1.6.10/目录。用cd命令改变到新建目录中,然后以超级用户身份运行make install命令:2.2.2 配置和编译MiniGUIMiniGUI使用了自由软件常使用的“automake”和“autoconf”接口,因而,MiniGUI的配置和编译非常容易:2.2.3安装和配置libminigui使用tar解开libminigui-1.6.10.tar.gz到新的目录:1) 该命令将建立libminigui-1.6.10/目录。改变到这一新目录,然后运行./configure:2) 运行下面的命令编译并安装libminigui:2.2.4 安装qvfb1) 使用tar命令解压qvfb-1.1.tar.gz 到新的目录:2) 使用该命令建立qvfb-1.1/目录。改变到这一新目录,然后执行3)运行下面的命令编译并安装qvfb: 2.2.5 编译并运行MiniGUI的控件演示程序在安装好MiniGUI函数库之后,应该解开并编译mg-sample演示程序包:1)使用tar命令将mg-samples-1.6.10.tar.gz软件包解开到目录:2)进入mg-samples-1.6.10/目录,依次运行./configure和make编译演示程序:$./configure 2.3 测试测试安装后的minigui是否可以用可以使用如下命令:$qvfb &可以看到Qt界面有个helloworld的应用程序出现:第3章 MiniGUI 在ARM上的移植 3.1 移植基本内容3.1.1 新建目录minigui_armrootlocalhost /#mkdir /opt/minigui_armrootlocalhost /#cd /opt/minigui_arm新建nfsroot目录,用于安装编译以后的库文件rootlocalhost minigui_arm#mkdir nfsroot 3.1.2 安装libminigui1).将下载的源码放到minigui_arm目录下,解压libminigui-1.6.10.tarrootlocalhost minigui_arm#tar zxvf libminigui-1.6.10.tarrootlocalhost minigui_arm#vi configure2).修改configure,在头文件开头指明交叉编译器CC= arm-linux-gccCPP= arm-linuxcppLD= arm-linux-ldAR= arm-linux-arRANLIB= arm-linux-ranlibSTRIP= arm-linux-strip3).将libcross.sh考到minigui的lib库的解压文件夹中这是一个脚本文件,在其中可以修改编译出来的目录路径,这里修改为/opt/minigui_arm/nfsroot然后开始执行命令rootlocalhost minigui_arm# ./libcross.sh执行的时候会把编译以后的资源安装到/opt/minigui_arm/nfsroot中,在这之下会有etc include lib 几个目录产生。然后进入/opt/minigui_arm/nfsroot/lib,执行rootlocalhost lib# ldconfiglibminigui的交叉编译工作就算完成了。 3.1.3 安装minigui-res1)解压minigui-res-1.6.10.tarrootlocalhost minigui_arm#tar zxvf minigui-res-1.6.10.tar进入/home/root/minigui_arm/minigui-res-1.6.10目录修改config.linux文件的第11行TOPDIR=/opt/minigui_arm/nfsroot保存退出,然后将rescross.sh 考到minigui的res资源解压文件夹中rootlocalhost minigui-res-1.6.10# ./rescross.sh安装到/opt/minigui_arm/nfsroot/usr/local/lib/minigui/res,下面有这几个东西bmp cursor font icon imetab 3.1.4 修改/opt/minigui_arm/nfsroot/etc/MiniGUI.cfg文件system#GAL engine and default optionsgal_engine=fbcondefaultmode=800x480-16bpp# IAL engine ial_engine=console mdev=/dev/mouse0 mtype=nonefbcondefaultmode=800x480-16bpp qvfb defaultmode=800x480-16bpp display=0gal_engine:指定使用的图形引擎defaultmode:指定图形引擎的显示模式,格式为:宽 x高-显示位数(bpp) ial_engine:指定使用的输入引擎mdev:指定鼠标设备文件mtype:指定鼠标协议类型 3.1.5 下载minigui的运行库 1、建立超级终端1)pc机与开发板串口相连2)开始-附件-通信-超级终端(波特率115200,数据位8,奇偶校验:无,停止位1,数据控制流:无)3.NFS服务配置1)、#setup,选择system services 将nfs选中点ok退出选择Firewall configuration 进入防火墙设置将enable前的*号去掉2)、将pc机与开发板的网线相连执行#ifconfig 查看pc机 ip地址,或是修改pc机的ip地址#ifconfig eth1 0 在超级终端同样执行:#ifconfig查看开发板的IP地址为 ,然后执行#ping 0 若能ping得同,说明网线正常连接#vim /etc/profile,修改/etc/profile中内容如下:#service nfs restart 启动nfs服务,启动成功会有如下图所示:3)在超级终端运行:#mount -t nfs 0:/mnt/ /mnt/share完成pc机根目录下的内容挂载至开发板/mnt目录下。#cd /mnt #ls若能看到pc机的根目录内容,说明挂载成功。4、移植1)将/opt/minigui/temp/etc下的Mingui.cfg文件拷到开发板/etc目录下。2)将/opt/minigui/temp /lib下的所有文件拷贝到开发板/usr/lib目录下3)将pc机/opt/minigui/temp/usr/local/lib中所有内容拷贝到开发板的/usr/local/lib下现在准备工作已经已经完成,下面开始移植一些演示程序。 3.1.6 编译mg-samples-1.6.10 1)首先解压mg-samples-1.6.10.tarrootlocalhost minigui_arm#tar zxvf mg-samples-1.6.10.tar2)进入/opt/minigui_arm/mg-samples-1.6.10目录,修改configure文件,在文件的最前面加上交叉编译的工具CC= arm-linux-gccCPP= arm-linux-cppLD= arm-linux-ldAR= arm-linux-arRANLIB= arm-linux-ranlibSTRIP= arm-linux-strip3) 将simplecorss.sh 考到sample例子解压文件夹中然后执行rootlocalhost minigui-res-1.6.10# ./simplecorss.sh 3.2 测试把/home/root/minigui_arm/mg-samples-1.6.10/src下的所有文件和目录下载到开发板的/usr/minigui下面,没有这个目录自己建一个。现在就可以在开发板上运行minigui的演示程序了。root minigui_arm#./buttonLCD上显示出minigui应用程序,移植成功。第4章 MiniGUI串口传输界面设计 4.1 MiniGUI设计知识介绍 4.1.1 基本的编程概念MiniGUI是一个图形用户界面支持的系统,通常的GUI编程概念均适用于MiniGUI编程,如窗口和事件驱动编程等。 4.1.2 头文件 他们是所有的MiniGUI应用程序都必须包括的头文件。Common.h 包含MiniGUI常用的宏以及数据类型定义。Minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义。Gdi.h 包含MiniGUI绘图函数的接口定义。Window.h 包含了窗口有关的宏,数据类型,数据结构定义以及函数接口声明。Control.h 包含预定义控件。4.1.3 程序入口点一个C程序的入口点为main函数,而一个MiniGUI程序的入口点为MiniGUIMain,该函数原型如下:int MiniGUIMain (int argc, const char* argv)main函数已经在MiniGUI的函数库中定义了,该函数在进行一些MiniGUI的出始化工作之后调用MiniGUIMain函数。参数argc和argv与C程序main函数的参数argc和argv的含义是一样的,分别为命令行参数个数和参数字符串数组指针。4.1.4 对话框的编程在MiniGUI中,对话框是一类特殊的主窗口,这种主窗口只关注与用户的互向用户提供输出信息,但更多的是用于用户输入。对话框可以理解为子类化的主窗类。对话框模板如下: Typedef struct Char* class_name; DWORD dwStyle; Int x,y,w,h; Int id; Const char* caption; DWORD dwAddData; DWORD dwExStyle;CTRDATA;Typedef CTRLDATA* PCTRLDATA;Typedef struct DWORD dwStyle; DWORD dwExStyle; int x,y,w,h; const char* caption; HICON hicon; HMENU hMenu; int controlnr; PCTRLDATA controls; DWORD dwAddData;DLGTEMPLATE;typedef DLGTEMPLATE * PDLGTEMPLATE; 结构CTRLDATA用来定义控件,DLGTEMPLATE用来定义对话框本身。在程序中,应该首先利用CTRLDATA定义对话框中所有的控件,并利用数组表示;控件在该数组中的顺序,也就是对话框中用户按TAB键时控件的切换顺序。然后定义对话框,指定对话框中的控件数目,并指定DLGTEMPLATE结构中的controls指针指向定义控件的数组。 在定义了对话框模板数据后,需要定义对方框的回调函数,并利用DialogBoxIndirectParam(&DlgYourTaste, HWND_DESKTOP, DialogBoxProc2, 0L)函数建立对话框。DialogBoxProc2 (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)的MSG_INITDIALOG进行消息的循环。 4.1.5程序退出用户单击窗口右上角的关闭按钮时窗口过程函数将收到一个MSG_CLOSE消息。程序退出。 4.2 串口传输知识介绍串口传输数据是指把数据按照一帧一帧的方式,进行发送。常用的发送接口有RS232,USB。这里我们采用的是RS232的接口。在进行数据传输之前,首先要设置好串口传输的端口波特率,数据校验位,停止位等信息。如下图所示就是超级终端设置的串口传输设置:设置好后,就可以进行串口的传输。 4.3 设计方法及整体框架 4.3.1 设计界面的样式: 213456789sendreceive输入字符输出字符 4.3.2 设计调试框架 RS232 4.4 重要程序解析 4.4.1 发送部分:发送部分采用的是按键发送的消息,然后发送写指令把数据写到串口获取发送信息:存储到BUFF中。 GetWindowText (hwnd, buff, 10);获取发送ID号:发送文本信息:case IDC_SEND:nwrite=write(fd,buff,strlen(buff);if(nwrite0) printf(Receive letters=%sn,buff); printf(nwrite=%dn,nwrite); nwrite=0; break; 4.4.2 接收部分:接收部分采用的是创建一个新线程的办法,在新线程中接收数据,然后通过内存复制,把数据传回进程中。创建线程: if(pthread_create(&thread_id,NULL,(void*)ReadThread,NULL)!=0) printf(readthread create is failedn);线程程序: void ReadThread(void* arg) int nread; char str100; while(1) sleep(1); str99=0; nread=read(fd,str,100); if(nread0) printf(send letters nread=%dn,nread); printf(str=%sn,str); memcpy(&bufferstrlen(buffer),&str,strlen(str); 显示到文本框中:case IDC_RECEIVE:SetWindowText(GetDlgItem(GetParent(hwnd),IDC_CHARS),buffer);for (i=0;i100;i+) bufferi=0; break;第5章 程序调试 5.1 发送部分调试及结果 程序发送时,首先按下界面上的数字键,这是可以在文本框控件上显示发送的数字,按下清除键,可以重新输入。比如我们要发送的数字为125978如下图所示按下发送键,这时可以在超级终端上看到如下的结果表明发送成功。发送部分常见问题:1.超级终端上没有显示数字检查串口线是否插好,可以再程序中加入printf();测试语句。检查Write();函数是否写正确了。2.发送后,write()函数没有输出?查看write()的返回值,是否是-1如果是说明写不正确,重新写过一遍。5.2 接收部分调试及结果 接收部分的调试方法是:首先在超级终端中输入你想要发送的数据内容,然后按下回车键。这时可以看看是否返回了。发送的数据字节如下所示:比如nihao nihao nihao 点击超级终端的接收按键,观察接收控件是否显示了发送的图案。如下所示: 数据控件上显示了 字符接收成功。 接收部分常见问题:1.不能发送数据,没有返回发送的字符大小。检查线路:是否通畅。查看线程函数read函数是否写正确了,可以使用printf();测试是否读成功。2.有返回值,但是没有在界面接收控件中显示数据在超级终端上输入完后,要记得按下回车键。这样,read();才能读到结束标记。第6章 设计总结及改进 6.1 设计总结1 路径问题:很多时候都是路径出错,在这次试验中深有体会。在以后的设计开发中腰尽量做到有序,不要杂乱无章,不然自己都不知道需要的东西在哪里。2 在主机上进行实例演示时,出现qvfb not found; 解决方案:重新安装QVFB;3 出现IAL:qvfb engine not matched ;解决方案:未对对MiniGUI.cfg文件修改,分辨率应和开发板的相同4、出现not found libminigui.1.6.so.10: 系统的动态链接库未建立链接,需重新建立5.NFS配置:NFS配置时,首先要修改开发板的IP地址,使之与LINUX处于同一网关。看到如上显示,说明挂载成功。6.在设计接收程序时,一直接收不到数据。采用线程的机制,可以很容易的完成接收工作。具体操作就是在对话框初始化后创建一个线程,然后在线程中读端口的数据。7.程序的编译方法:如何编译自己写的minigui程序,比如helloworld.c: gcc -o helloworld helloworld.c -lpthread -lminigui -ljpeg -lpng -lz编译arm中运行的程序。 把自己的程序拷贝到mg-sample/src目录底下。修改好编译路径,编译。 6.2 设计改进6.2.1 界面设计的改进 界面设计还不够完美,提供给用户不够多的功能使用。可以在其中增加几个控件使用。比如端口设置,波特率设置,数据位,停止位,校正位设置等等。也可以在其中增加输入法的功能,这样在其中还可进行更多字符(中文)的传输。 6.2.2 程序的优化 线程程序运行存在延时比较长,影响通信速度。在设计线程时,应当应减少延时时间。 这里采用的软件接收方式是主动接收的,可以采用被动接收的方法。更符合人们的使用习惯。 程序中可以减少一部分的全局变量设置,减少内存空间的使用。 第7章 设计心得体会这两个周的课程设计,让我对linux有了更深一步的了解。这次设计也让我对嵌入式产生了较浓的兴趣。在这其中遇到了很多问题,刚开始不知道如何解决,老是依赖与老师和同学。再后来的设计中,慢慢的积累了些经验,尝试着自己独立思考问题,发现问题,解决问题。在这次设计中,也暴露出我们上学期实验课做的不到位的问题。在进行minigui移植时,碰到很多都是上学期实验的问题,由于自己在上学期学的并不是很好,这次走了不少弯路,不过这次实验也让我重新巩固了上学期的内容。在最后的综合调试中,编写触摸屏的输入引擎,没有成功,主要原因还是对于嵌入式系统的驱动了解不够深入,对于输入引擎这个概念也还不是非常理解。总之,虽然这次课程设计,使我进步不少,但同时也看到了自己还有非常大的差距,所以更需加倍努力。 第8章 参考文献1. MINIGUI编程指南2.0-4e;北京:北京飞漫软件技术有限公司2. MINIGUI-USER-MANUAL-V1.3-1-C;北京:北京飞漫技术有限公司3. MINIGUI-PROG-GUIDE-V1.3-C;北京:北京飞漫技术有限公司4. MINIGUI技术白皮书;北京:北京飞漫技术有限公司5. MINIGUI用户手册2.0-4e;北京:北京飞漫技术有限公司6. TQ2440 用户手册;广州:天嵌技术有限公司第9章 附录程序:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define False -1int speed_arr = B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, ;int name_arr = 115200,38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;int fd=0;int nwrite=0;pthread_t thread_id;char *dev =/dev/tty;unsigned char buff 200=0;unsigned char buffer100;static DLGTEMPLATE DlgBoxInputChar = WS_BORDER | WS_CAPTION, WS_EX_NONE, 15, 15, 500, 400,#ifdef _LANG_ZHCN ,#else Serial Debugging Software,#endif 0, 0,17, NULL,0;#define IDC_CHAR 100#define IDC_CHARS 110#define IDC_NUM1 121#define IDC_NUM2 122#define IDC_NUM3 123#define IDC_NUM4 124#define IDC_NUM5 125#define IDC_NUM6 126#define IDC_NUM7 127#define IDC_NUM8 128#define IDC_NUM9 129#define IDC_NUM0 130#define IDC_CLEAR 131#define IDC_SEND 132#define IDC_RECEIVE 133static CTRLDATA CtrlInputChar = CTRL_STATIC, WS_VISIBLE , 10, 10, 380, 18, IDC_STATIC, #ifdef _LANG_ZHCN :, #else Please input a letter:, #endif 0 , CTRL_SLEDIT, WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_CENTER, 10, 40, 80, 25, IDC_CHAR, NULL, 0 , CTRL_STATIC, WS_VISIBLE , 10, 100, 380, 18, IDC_STATIC, #ifdef _LANG_ZHCN :, #else Receive letters:, #endif 0 , CTRL_MLEDIT, WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_BASELINE | ES_AUTOWRAP, 15, 150, 470, 140, IDC_CHARS, NULL, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 170, 30, 25, 25, IDC_NUM1, 1, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 205, 30, 25, 25, IDC_NUM2, 2, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 240, 30, 25, 25, IDC_NUM3, 3, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 170, 65, 25, 25, IDC_NUM4, 4, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 205, 65, 25, 25, IDC_NUM5, 5, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 240, 65, 25, 25, IDC_NUM6, 6, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 170, 100, 25, 25, IDC_NUM7, 7, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 205, 100, 25, 25, IDC_NUM8, 8, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 240, 100, 25, 25, IDC_NUM9, 9, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 275, 100, 25, 25, IDC_NUM0, 0, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 275,30, 25, 60, IDC_CLEAR, C, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 110, 320, 80, 25, IDC_SEND, SEND, 0 , CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 220, 320, 80, 25, IDC_RECEIVE, RECEIVE, 0 ,;int OpenDev(char *Dev) fd = open(Dev, O_RDWR | O_NOCTTY | O_NDELAY); if (-1 = fd) perror(Cant Open Serial Port); printf(dakai failn); return False; else return fd; int set_speed(int fd, int speed) int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i 0) printf(send letters nread=%dn,nread); printf(str=%sn,str); memcpy(&bufferstrlen(buffer),&str,strlen(str); static void my_notif_proc (HWND hwnd, int id, int nc, DWORD add_data) int i; unsigned char data10=1,2,3,4,5,6,7,8,9,0; if (id = IDC_CHAR & nc = EN_CHANGE) GetWindowText (hwnd, buff, 10); switch(id)case IDC_NUM1:SendMessage (GetDlgItem (GetParent(hwnd),IDC_CHAR),MSG_CHAR,data0,0L);break;case IDC_NUM2:SendMessage (GetDlgItem (GetParent(hwnd),IDC_CHAR),MSG_CHAR,data1,0L);break;case IDC_NUM3:SendMessage (GetDlgItem (GetParent(hwnd),IDC_CHAR),MSG_CHAR,data2,0L);break;case IDC_NUM4:SendMessage (GetDlgItem (GetParen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025草坪修剪项目政府采购与生态修复合同
- 2025叉车租赁合同协议-仓储物流设施升级改造
- 2025版商场档口租赁合同(含品牌形象维护责任)
- 2025年泰州二手房买卖合同+智能家居设备安装服务合同
- 2025版智能通风排烟系统安装与能源审计合同样本
- 2025年度智能安防系统采购意向协议书
- 2025年大学兼职教师合作开发与成果转化协议
- 2025版核能设备监造与核安全防护合同
- 2025版农业合作社股权变更与乡村振兴战略实施协议
- 2025版房地产开发企业委托反担保合同范本
- 2025办公室租赁合同简易范本下载
- 定向增发业务培训
- 2025年初级美容师理论知识复习资料试题及答案
- 餐饮店长转正汇报
- 2025年贵州省中考语文试卷(含答案与解析)
- 2025年广东省中考语文试卷(含答案解析)
- 2025年昆山校医考试题库
- 8-教育系统-安全生产治本攻坚三年行动工作方案及台账模板(2024-2026年)
- 2025年云南高考历史试卷解读及备考策略指导课件
- 2025至2030中国纤维素纳米纤维(CNF)行业项目调研及市场前景预测评估报告
- (高清版)T∕CES 243-2023 《构网型储能系统并网技术规范》
评论
0/150
提交评论