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:\WINDOWS\GIVEIO\giveio.inf文件,点击确定,安装好驱动。
-
安装JTAG驱动。安装完后,链接UP-NETARM3000->简易仿真器(Jtag)->并口线->PC机,然后添加硬件:在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:\Program Files\UArmJtag\driver\LPTJtag文件,点击确定,安装好驱动。
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...\n");
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...\n");
LCD_printf("Entering graph mode...\n");
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驱动等软件,并且调试实现了老师提供的实例,在实验中很好的学习了几个软件的使用方法和功能,对于以后的学习打下了良好的理论基础。
经过本次实验,小组成员对于实验平台以及超级终端的搭建已经较为熟练,可是在实验过程中由于忽略了一些细节,导致实验中出现了一些检错,改错的过程,告诫我们下次实验必须要严谨,一旦由于疏忽,很有可能出现一些不可预料和改正的错误,到时实验失败,只能重新启动机器从心开始配置环境。