20145312 《信息安全系统设计基础》实验三 实时系统的移植(修改版)

20145312 《信息安全系统设计基础》实验三 实时系统的移植(修改版)

实验目的与要求

  • 了解安装ADS、GIVEIO、JTAG驱动的基本步骤
  • 学会在 ADS1.2 集成开发环境下程序设计的方法

实验内容与步骤

1. 配置基本开发环境

  • 连接实验箱电源,用串口线、并口线、网线、连接实验箱和主机

  • 安装ADS并破解。安装完成后,提示出现 "ARM License Wizard" 对话框,选择 "Install License",然后在 "License File To Be Installed" 中使用 "Browse",选择 CRACK 目录下的 license.dat 文件即可。

  • 安装GIVEIO驱动。把整个GIVEIO目录拷贝到C:WINDOWS下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下。在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:WINDOWSGIVEIOgiveio.inf文件,点击确定,安装好驱动。

  • 安装JTAG驱动。安装完后,链接UP-NETARM3000->简易仿真器(Jtag)->并口线->PC机,然后添加硬件:在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:Program FilesUArmJtagdriverLPTJtag文件,点击确定,安装好驱动。

2. 仿真调试

  • 首先运行 ADS1.2 集成开发环境,单击 File->Open 选项
  • 选择工程文件我们以光盘中的/ucos v6.0/Exp11 绘图的 API 函数为例选择 Exp11.mcp 后点击打开。
  • 选择需要编译的文件,在相应文件夹前的空白位置点击即可选中,头文件库文件是不能选中的,因为已经被包含到了源代码中。
  • 点击 make 进行编译链接
  • 编译后出现编译结果,次图片表示没有错误,4 个警告和 15 条其他信息。如果不是下面的结果,可能的问题是代码路径中有中文,把代码拷贝一个英文目录中,还有可能是代码文件夹中 Exp11_Data 文件夹的问题,删除 Exp11_Data 文件夹。
    ![]http://images2015.cnblogs.com/blog/885499/201611/885499-20161120224133951-246773062.bmp)
  • 开启Uarmjtag点击“初始化配置”,在弹出的对话框中,“处理器类型”选择ARM9后,最小化到托盘并且保证我们的平台停止在 VIVI 状态下。
  • 点配置超级终端:波特率为 115200,数据位 8,无奇偶校验,停止位 1,无数据流控制。启动实验平台。打开超级终端,打开arm机电源开关。等待一分钟,arm机的信息会显示在超级终端的窗口中。按除了ENTER之外的键进入VIVI平台。
  • 点击Debug按钮进行仿真调试,弹出调试界面。之后继续点击Options->Configure Target,弹出对话框之后点击Configure,弹出对话框,将框中参数设置如下
  • 确定之后会选择ADP,再点击确定出现加载界面,加载完成后点击run(运行)按钮,之后正常状态下他会停止在main函数,这是系统自动的。继续点击RUN按钮即可运行绘图实验

  • 之后我们继续点击 RUN 按钮即可运行绘图实验。这是液晶屏上会出现我们绘制好的图形。
  • 在结束前先暂停再退出程序
  • 超级终端上显示运行成功

代码分析

源代码

#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 <string.h>
#include <stdio.h>

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 


///******************任务定义***************///

OS_STK Main_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

OS_STK test_Stack[STACKSIZE]={0, };   //test_Test_Task堆栈
void test_Task(void *Id);             //test_Test_Task
#define test_Task_Prio     15


/**************已经定义的OS任务*************
#define SYS_Task_Prio				1
#define Touch_Screen_Task_Prio		9
#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 //

	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...
");
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE-1],  Main_Task_Prio);
//	OSTaskCreate(test_Task,  (void *)0,  (OS_STK *)&test_Stack[STACKSIZE-1],  test_Task_Prio);

	OSAddTask_Init(1);
  
	LCD_printf("Starting uCOS-II...
");
	LCD_printf("Entering graph mode...
");
	LCD_ChangeMode(DspGraMode);

	OSStart();              // start the OS //

	// never reached //
	return 0;
}//main


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Main_Task(void *Id)             //Main_Test_Task
{
	int oldx,oldy;//保存原来坐标系位置
	PDC pdc;//定义绘图设备上下文结构
	int x,y;//坐标
	double offset=0;//x坐标偏移量

	ClearScreen();//清屏
	pdc=CreateDC();//创建绘图设备上下文
	SetDrawOrg(pdc, LCDWIDTH/2,LCDHEIGHT/2, &oldx, & oldy); //设置绘图原点为屏幕中心

	Circle(pdc,0, 0, 50);//画圆
	MoveTo(pdc, -50, -50);//移动
	LineTo(pdc, 50, -50);//画线
	ArcTo(pdc, 80, -20, TRUE, 30);//画弧
	LineTo(pdc, 80, 20);
	ArcTo(pdc, 50, 50, TRUE, 30);
	LineTo(pdc, -50, 50);
	ArcTo(pdc, -80, 20, TRUE, 30);
	LineTo(pdc, -80, -20);
	ArcTo(pdc, -50, -50, TRUE, 30);

	OSTimeDly(3000);//将任务挂起3秒
	ClearScreen();
	SetDrawOrg(pdc, 0, LCDHEIGHT/2, &oldx,&oldy);//设置绘图原点为屏幕左边中部
	for(;;)
	{
		MoveTo(pdc, 0, 0);
		for(x=0;x<LCDWIDTH;x++)
		{//画正弦波
			y=(int)(50*sin(((double)x)/20.0+offset));
			LineTo(pdc, x, y);
		}
		offset+=1;
		if(offset>=2*3.14)
			offset=0;
		OSTimeDly(1000);
		ClearScreen();
	}
	
DestoryDC(pdc);//删除绘图设备上下文
}

实验过程中遇到的问题

问题:

  • 打开ARM –Flash下载程序时,弹出窗口提示没有正确安装驱动。

解决:

  • 详细阅读UarmJtag2.0使用说明.pdf后发现JTAG驱动安装方法错误。后依据该说明,安装驱动后解决问题。

问题:

  • 在ADS软件中调试实例,点击debug按钮总是报错。

解决:

  • 检查后发现驱动GIVEIO没有装好,重新安装后再点击debug仿真成功

问题:

  • 按照“03-测试文档”的操作步骤执行完第四步,即已选择需要编译的文件后,点击make,编译链接失败,没有出现4个警告和15条其他信息,反而出现编译错误。

解决:

  • 04-Text文件夹中的ucos-ii未删除; 04-Text文件夹的初始路径在桌面上,而在ADS软件中编译的文件不识别中文路径。
  • 将04-Text文件夹复制到F盘根目录下,重新选择需要编译的文件并点击make进行编译链接,编译后即能出现正确的编译结果。

实验体会

本次试验重点完成了实时系统的移植以及一个实例的操作。与前几次实验不同的是,没有使用RedHat虚拟机中的操作,对于超级终端的配置也有了新的要求。在实验过程中,小组同学按照实验指导书的步骤安装ADS,GIVEIO驱动,JTEG驱动等软件,并且调试实现了老师提供的实例,在实验中很好的学习了几个软件的使用方法和功能,对于以后的学习打下了良好的理论基础。

经过本次实验,小组成员对于实验平台以及超级终端的搭建已经较为熟练,可是在实验过程中由于忽略了一些细节,导致实验中出现了一些检错,改错的过程,告诫我们下次实验必须要严谨,一旦由于疏忽,很有可能出现一些不可预料和改正的错误,到时实验失败,只能重新启动机器从心开始配置环境。

原文地址:https://www.cnblogs.com/yx20145312/p/6230697.html