实验三、基于实时操作系统mCOS-II实验.doc_第1页
实验三、基于实时操作系统mCOS-II实验.doc_第2页
实验三、基于实时操作系统mCOS-II实验.doc_第3页
实验三、基于实时操作系统mCOS-II实验.doc_第4页
实验三、基于实时操作系统mCOS-II实验.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三、基于实时操作系统mC/OS-II实验一、实验目的在内核移植了uCOS-II 的处理器上创建任务。二、实验内容1运行C盘的实验十,在超级终端上观察两个任务的切换。2创建第三个任务,在超级终端上打印第三个任务。 3任务13,每个控制“红”、“绿”、“蓝”一种颜色的显示,适当增加OSTimeDly()的时间,且优先级高的任务延时时间加长,以便看清三种颜色。 4引入一个全局变量 BOOLEAN ac_key,解决完整刷屏问题。5创建任务4,#define rUTRSTAT0 (*(volatile unsigned *)0x50000010) #define RdURXH0()(*(volatile unsigned char *)0x50000024)当键盘有输入时在超级终端上显示相应的字符。三、实验方法1以实验十为模板,将实验六 inc目录下的LCD320.H 和src目录下的LCD640.C拷到 模板下的相应目录。2包含以下头文件 #include “inc/lcd320.h”。3改LCD640.C 文件中包含头文件的路径 。 #include lcd320.h ” #include reg2410.h”4声明引用的变量 extern U32 LCDBufferII2480640; 四、实验设备2410s教学实验箱,ARM920T的JTAG仿真器,ARM ADS 1.2集成开发环境,串口连接线五、实验原理及说明1 移植的简介:所谓移植,就是使一个实时操作系统能够在某个微处理器或微控制器平台上运行;为了方便移植,mCOS-II的大部分代码是用标准的C语言编写的,无须改动。但仍需要用C和汇编语言写一些与处理器相关的代码,这是因为mC/OS-在读写处理器的寄存器时只能通过汇编语言来实现。2 移植mCOS-II时须满足的条件处理器的C编译器能产生可重入代码; 在程序中可以打开或者关闭中断; 处理器支持中断,并且能产生定时中断(通常在101000Hz之间);处理器支持能容纳一定量数据的硬件堆栈。处理器有将栈指针和其他CPU寄存器内容保存到栈(或者内存)的指令,以及相应的出栈指令。 3 任务定义:OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Task堆栈void Task1(void *Id); /Main_Test_Task #define Task1_Prio 124任务创建OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_Prio);六、主程序/*Copyright (c) 2004-2007 , All rights reserved.by threewter2004.5.12*/* #说明: C main 函数,ucos-ii初始化等定义- Bug - TODO list -修正-2004-5-12创建*/#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/gui/gui.h#include #include #include inc/lcd320.h#define U8 unsigned char#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting extern U32 LCDBufferII2480640;#define rUTRSTAT0(*(volatile unsigned *)0x50000010)#define rUTRSTAT1(*(volatile unsigned *)0x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char *)0x50000024)#define RdURXH1()(*(volatile unsigned char *)0x50004024)/void Uart_SendByten(int Uartnum, U8 data);void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);void ARMTargetInit(void);void hudelay(int time);/*任务定义*/*OS_STK SYS_Task_StackSTACKSIZE= 0, ; /system task刷新任务堆栈#define SYS_Task_Prio1 void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Task堆栈void Task1(void *Id); /Main_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task2(void *Id); /test_Test_Task#define Task2_Prio 15OS_STK task3_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task3(void *Id); /test_Test_Task#define Task3_Prio 18OS_STK task4_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task4(void *Id); /test_Test_Task#define Task4_Prio 20BOOLEAN ac_key/*已经定义的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*/*事件定义*/ Main function. /int main(void)ARMTargetInit(); / do target (uHAL based ARM system) initialisation /OSInit(); / needed by uC/OS-II /LCD_Init();/LCD初始化/OSInitUart();/initOSFile();/#if USE_MINIGUI=0/initOSMessage();/initOSDC();/LoadFont();/#endif/loadsystemParam();/ create the tasks in uC/OS and assign increasing / priorities to them so that Task3 at the end of / the pipeline has the highest priority. /LCD_printf(Create task on uCOS-II.n);/OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio);OSTaskCreate(Task3, (void *)0, (OS_STK *)&task3_StackSTACKSIZE-1, Task3_Prio);OSTaskCreate(Task4, (void *)0, (OS_STK *)&task4_StackSTACKSIZE-1, Task4_Prio);OSAddTask_Init(0); /LCD_printf(Starting uCOS-II.n);/LCD_printf(Entering graph mode.n);/LCD_ChangeMode(DspGraMode);OSStart(); / start the OS / never reached /return 0;/main/void Task1(void *Id)int i,j;for(;)printf(run task1n);if(ac_key) ac_key=FALSE; for (i=0;i480;i+) for (j=0;j640;j+) LCDBufferII2ij=0x000000f8; /R 红色 LCD_Refresh() ; ac_key=TRUE; OSTimeDly(8000);void Task2(void *Id)int i,j;for(;)printf(run task2n); if(ac_key) ac_key=FALSE; for (i=0;i480;i+) for (j=0;j640;j+) LCDBufferII2ij=0x0000fc00; /R 红色 LCD_Refresh() ; ac_key=TRUE;OSTimeDly(4000);void Task3(void *Id)int i,j;for(;)printf(run task3n); if(ac_key) ac_key=FALSE; for (i=0;i480;i+) for (j=0;j640;j+) LCDBufferII2ij=0x00f80000; /R 红色 LCD_Refresh() ; ac_key=TRUE;OSTimeDly(2000);void Task4(void *Id) char c11; char err;for(;)printf(run task4n);while(1) Uart_SendByten(0,0xa);/换行Uart_SendByten(0,0xd);/回车 err=Uart_Getchn(c1,0,0);/从串口采集数据 Uart_SendByten(0,c10);/显示采集的数据OSTimeDly(2000);/* void SYS_Task(void *Id)OSRunning=TRUE;/begin OSuHALr_InstallSystemTimer();/Uart_Printf(0,start system task.n);printf(start system task.n);for (;)OSTimeDly(1000);*/void Uart_SendByten(int Uartnum, U8 data)/ok eric rong /int i;if(Uartnum=0) while(!(rUTRSTAT0 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH0(data); else while(!(rUTRSTAT1 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH1(data); char Uart_Getchn(char* Revdata, int Uartnum, int timeout)if(Uartnum=0)while(!(rUTRSTAT0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论