北航ARM9嵌入式实验报告3.doc_第1页
北航ARM9嵌入式实验报告3.doc_第2页
北航ARM9嵌入式实验报告3.doc_第3页
北航ARM9嵌入式实验报告3.doc_第4页
北航ARM9嵌入式实验报告3.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

实验三 基于实时操作系统mC/OS-II实验一、 实验目的1. 掌握在内核移植了uCOS-II 的处理器上创建任务的方法。2. 了解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)6. 当键盘有输入时在超级终端上显示相应的字符。三、 预备知识1.了解uCOS-II的系统结构。 2.了解ARM920T处理器的结构。四、 实验设备硬件:模拟电压信号源、2410s教学实验箱、PC机Pentium100以上、ARM920T的JTAG仿真器、串口连接线。软件:PC机操作系统WinXP 、ARM ADS1.2集成开发环境、超级终端通讯程序、仿真器驱动程序。五、 实验步骤1 以实验十为模板,将实验六 inc目录下的LCD320.H 和src目录下的LCD640.C拷到 模板下的相应目录。包含以下头文件 #include “inc/lcd320.h”。改LCD640.C 文件中包含头文件的路径 。 #include lcd320.h ” #include reg2410.h”4 声明引用的变量 extern U32 LCDBufferII2480640;5 程序代码如下:/*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 ./inc/lcd320.h#include #include /#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting OS_EVENT *MboxSem;extern U32 LCDBufferII2480640; /*任务定义*/*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 12 /任务优先级OS_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 17OS_STK task4_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task4(void *Id); /test_Test_Task#define Task4_Prio 10int i,j,k;U32 jcolor;BOOLEAN ac_key;void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);#define U8 unsigned char#define TRUE 1#define FALSE 0/#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting #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)/*已经定义的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 / ac_key=0;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); BSPprintf(0,Starting uCOS-II.n);/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)for(;) jcolor=0x000000f8; /R 红色BSPprintf(0,run task1n); if(ac_key=0) ac_key=1; for (k=0;k480;k+) for (j=0;j640;j+) LCDBufferII2kj=jcolor; LCD_Refresh(); ac_key=0; OSTimeDly(9000);void Task2(void *Id)for(;) jcolor=0x0000fc00; /G 绿色BSPprintf(0,run task2n); if(ac_key=0) ac_key=1; for (k=0;k480;k+) for (j=0;j640;j+) LCDBufferII2kj=jcolor; LCD_Refresh(); ac_key=0; OSTimeDly(7000);void Task3(void *Id) for(;) jcolor=0x00f80000; /B 蓝色BSPprintf(0,run task2n); if(ac_key=0) ac_key=1; for (k=0;k480;k+) for (j=0;j640;j+) LCDBufferII2kj=jcolor; LCD_Refresh(); ac_key=0; OSTimeDly(5000); void Task4(void *Id) for(;) char a1; char err; err=Uart_Getchn(a,0,0);/从串口采集数据 if (err=TRUE) Uart_SendByten(0,a0);/显示采集的数据OSTimeDly(10); 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)if(rUTRSTAT0 & 0x1)/Receive data read *Revdata=RdURXH0(); return TRUE; else re

温馨提示

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

评论

0/150

提交评论