




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 大连理工大学本科(bnk)实验报告课程名称: 嵌入式系统(xtng)实验 学院(xuyun)(系):电子信息与电气工程学部专 业: 自动化 班 级: 学 号: 学生姓名: 2014年 月 大连理工大学实验报告学院(xuyun)(系): 电信(dinxn) 专业(zhuny): 自动化 班级: 0804 姓 名: 学号: 组: _ 实验时间: 实验室: 实验台: 指导教师签字: 成绩: 实验一 ARM的串行口实验实验目的和要求见预习报告实验原理和内容见预习报告主要仪器设备硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。 软件:PC
2、 机操作系统win98、Win2000 或WinXP 、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 四、实验步骤见预习报告五、核心代码在主函数中实现将从串口0接收到的数据发送到串口0(Main.c)int main(void)char c11;char err;ARMTargetInit();/开发版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);/转换LCD显示模式为文本显示模式LCD_Cls();/文本模式(msh)下清屏命令while(1) Uart_SendByte(0,0 xa);/换行Uart_Sen
3、dByte(0,0 xd);/回车(hu ch) err=Uart_Getch(c1,0,0);/从串口采集(cij)数据 Uart_SendByte(0,c10);/显示采集的数据 LCD_printf(c1);/向液晶屏输出return 0;六、实验结果与分析1.ARM串口实验超级终端上显示:当输入一个字符,会在超级终端中显示出来,如下图所示。2.ARM串口实验Debug运行显示:七、实验(shyn)心得该实验(shyn)展示了ARM的串行口通讯过程(guchng)及控制方式,使我基本掌握了ARM 的串行口工作原理、编程实现ARM 的UART 通讯及CPU利用串口通讯的方法,对之前所学知识
4、有了明确的理解和认识,能够在正确操作下准确做出实验现象,并在实验箱上显示出实验结果,使我收获很多。实验二 uC/OS-II在ARM平台的移植实验目的和要求见预习报告实验原理和内容见预习报告主要仪器设备硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 四、实验步骤见预习报告五、核心(hxn)代码所涉及(shj)到的函数:汇编(hubin)函数OSStartHighRdy()OS
5、CtxSw()OSIntCtxSw()OSTickISR()C语言函数void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt) void OSTaskCreateHook (OS_TCB *ptcb) void OSTaskDelHook (OS_TCB *ptcb)void OSTaskSwHook (void)后5个函数为接口函数,可以不加代码cut/OS-II的启动:void main (void) OSInit(); / 初始化uC/OS-II.通过调用OSTaskCreate()或
6、OSTaskCreateExt()创建至少一个任务; . OSStart(); /开始多任务调度,永不返回 基于uC/OS的应用开发:void YourTask (void *pdata) /* 用户代码 */ OSTaskDel(OS_PRIO_SELF); main 函数,ucos-ii初始化等定义:#include./ucos-ii/includes.h /* uC/OS interface */#include ./ucos-ii/add/osaddition.h#include ./inc/drivers.h#include ./inc/sys/lib.h#include ./src
7、/gui/gui.h#include = 0, ; /system task刷新(shu xn)任务堆栈#define SYS_Task_Prio1 void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Task堆栈(duzhn)void Task1(void *Id); /Main_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task堆栈(duzhn)void Task2(void *Id); /test
8、_Test_Task#define Task2_Prio 15/*已经定义的OS任务*#define SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define Lcd_Fresh_prio 59#define Led_Flash_Prio 60*int main(void)ARMTargetInit(); / do target (uHAL based ARM system) initialisation /OSInit(); / need
9、ed by uC/OS-II /OSInitUart();/initOSFile();/#if USE_MINIGUI=0/initOSMessage();/initOSDC();/LoadFont();/#endif/loadsystemParam();TACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio);OSAddTask_Init(0); /LCD_printf(Starting uCOS-II.n);/LCD_printf(Enterin
10、g graph mode.n);/LCD_ChangeMode(DspGraMode);OSStart(); / start the OS / never reached /return 0;/mainvoid Task1(void *Id)for(;)printf(run task1n);OSTimeDly(1000);void Task2(void *Id)for(;)printf(run task2n);OSTimeDly(3000);六、实验结果(ji gu)与分析超级终端上交替(jiot)显示run task1,run task2,run task1,runtask1,run tas
11、k1,run task2,run task1,run task1,run task1。表明(biomng)由于task1 的优先级为12,而task2 的优先级为15,所以系统在task1 和task2 同时就绪时总是先执行task1 后执行task2.由于task2 挂起时间为3 秒,所以在task2 挂起期间task1 能执行两次,而当第三次时由于task1 与task2 同时处于就绪态,由优先级次序,还是先执行task1 在执行task2.然后就这样周而复始的循环下去。为验证ucos 的强实时性,可以去掉task2()的“OSTimeDly(3000);”然后令task1()中的“OST
12、imeDly(1000);”改为“OSTimeDly(10);”。观察到的实验现象是在超级终端上显示被“run task1”打断的”“ run task2”,反之把task1和task2 的优先级交换则在超级终端上只显示“run task2”。这说明ucos 的强实时性得到了验证,因为在任何时候只要高优先级的任务都可以打断正在执行的低优先级任务,反之低优先级任务却不可打断正在执行的高优先级的任务。七、实验心得该实验使我了解了uCOS-II 内核的主要结构,对所学知识有了加深刻的理解和认识,基本掌握了将uCOS-II 内核移植到ARM920T 处理器上的方法,能够正确完成基本操作得出正确结果。实
13、验(shyn)九 uC/OS-II在ARM平台(pngti)的移植实验(shyn)目的和要求1了解uCOS-II 内核的主要结构。2掌握将uCOS-II 内核移植到ARM920T 处理器上的基本方法。二、实验原理和内容实验原理:所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然uCOS-II的大部分源代码是用C 语言写成的,仍需要用C 语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II 在读写处理器、寄存器时只能通过汇编语言来实现。因为uCOS-II 在设计的时候就已经充分考虑了可移植性,所以,uCOS-II 的移植还是比较容易的。要使uCOS-II 可以正常工
14、作,处理器必须满足以下要求:1处理器的C 编译器能产生可重入代码。可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。下面的两个例子可以比较可重入型函数和非可重入型函数:程序1:可重入型函数void swap(int *x, int *y)int temp;temp=*x;*x=*y;*y=temp;程序2:非可重入型函数int temp;void swap(int *x, int *y)temp=*x;*x=*y;
15、*y=temp;程序(chngx)1 中使用(shyng)的是局部变量temp 作为变量(binling)。通常的C 编译器,把局部变量分配在栈中。所以,多次调用同一个函数,可以保证每次的temp 互不受影响。而程序2 中temp 定义的是全局变量,多次调用函数的时候,必然受到影响。代码的可重入性是保证完成多任务的基础,除了在C 程序中使用局部变量以外,还需要C 编译器的支持。笔者使用的是ARM ADS 的集成开发环境,均可以生成可重入的代码。2在程序中可以打开或者关闭中断。在uCOS-II 中,可以通过OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏来控制系统
16、关闭或者打开中断。这需要处理器的支持,在ARM920T 的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。3处理器支持中断,并且能产生定时中断(通常在10Hz1000Hz 之间)。uCOS-II 是通过处理器产生的定时器的中断来实现多任务之间的调度的。在ARM920T 的处理器上可以产生定时器中断。4处理器支持能够容纳一定量数据的硬件堆栈。5处理器有将堆栈指针和其它CPU 寄存器存储和读出到堆栈(或者内存)的指令。uCOS-II 进行任务调度的时候,会把当前任务的CPU 寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的
17、入栈和出栈是uCOS-II 多任务调度的基础。图4-1 说明了uC/OS 的结构以及它与硬件的关系。ARM920T 处理器完全(wnqun)满足上述要求。接下来将介绍如何把uCOS-II 移植(yzh)到Samsung 公司(n s)的一款ARM920T 的嵌入式处理器S3C2410X 上。实验内容:1将uC/OS-II 内核移植到ARM9 微处理器上。2创建两个任务task1、task2,分别向串口输出数据,在超级终端上显示当前正在运行那个任务。三、实验步骤1将uCOS-II 内核移植到ARM7 微处理器上。2编写两个简单任务,在超级终端上观察两个任务的切换来测试一下移植是否成功。为了使uC
18、OS-II 可以正常运行,除了上述必须的移植工作外,硬件初始化和配置文件也是必须的。STARTUP 目录下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件main.c 中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务创建方法如下:1)在程序开头(ki tu)定义任务堆栈,任务函数声明和任务优先级:OS_STK TaskName_StackSTACKSIZE=0, ; /任务(rn wu)堆栈void TaskName(void *Id); /任务(rn wu)函数#define TaskName_Prio N /任务优先级2)在main()函数中调用OSStart(
19、)函数之前用下列语句创建任务:OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_StackSTACKSIZE-1, TaskName_Prio);OSTaskCreate()函数的原型是:INT8U OSTaskCreate (void (*task)(void *pd), void *p_arg,OS_STK *ptos, INT8U prio);需要将任务函数TaskName , 任务堆栈TaskName_Stack , 任务优先级TaskName_Prio 三个参数传给OSTaskCreate()函数。根据任务函数的内容决定堆栈大小,宏S
20、TACKSIZE 定义为4KB,可以在此基数上乘倍。任务优先级越高,TaskName_Prio 值越小;uCOS-II 可以管理64 个任务,由OSInit()创建的空闲任务的优先级最低为63;uCOS-II 保留4 个最高和4 个最低优先级,用户任务可以使用其余56 个优先级值。3)编写任务函数内容:void TaskName(void *Id)/添入任务初始化语句for(;) /添入任务循环内容OSTimeDly(SusPendTime);/挂起一定时间,以使其他任务可以占用CPUuCOS-II 至少要有一个任务,这里首先创建一个系统任务SYS_Task,其中由语句OSRunning=TRUE; /使能uC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古自治区包头市青山区2026届中考五模物理试题含解析
- 农村劳务协作与教育培训协议
- 联合研发协议保密条款
- 人工智能驱动的智能制造设备采购协议
- 深度解读:2025年工业互联网平台光通信技术升级与产业协同发展报告
- 绿色供应链管理在制造业中的环保法规遵循与合规报告
- 2025赞助捐赠合同协议书范本
- 2025年农村电商服务站多元化运营模式深度解析报告
- 中国系列杠铃架行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 基于大数据的2025年金融反洗钱技术风险防控报告
- 人教版历史(2017部编版)八年级下册第14课《海峡两岸的交往》教学设计
- 装卸作业时接口连接可靠性确认制度
- 红砖围墙施工方案
- 2025年云南省保山市隆阳区小升初模拟数学测试卷含解析
- 民航通信技术基础知识单选题100道及答案
- DB50T 959-2019 营运高速公路施工管理规范
- 工程全过程造价咨询管理及控制要点
- 2025年度药品区域代理销售合同范本3篇
- DB33 758-2015 棉纱单位产品可比综合电耗限额及计算方法
- 病理科实验室生物安全
- 安宁疗护的护理常规
评论
0/150
提交评论