zoukankan      html  css  js  c++  java
  • 20135326、20135303linux实验三实验报告

    北京电子科技学院(BESTI)

                 

    课程:信息安全系统设计基础实验 班级:1353 姓名:魏昊卿 王亦可  学号:20135303 20135326

    成绩:             指导教师:娄嘉鹏          实验日期:2015.11.24

    实验密级:         预习程度:        实验时间:15:30-18:00

    仪器组次:               必修/选修:必修            实验序号:三

    实验名称:                画正弦余弦曲线                   

    实验目的与要求:                                            

    1.通过ARM画出正弦余弦曲线。                              

    2.读懂理解代码含义,能够修改代码,画出多条曲线。            

                                                                

     

     

    实验仪器:

    名称

    型号

    数量

    计算机

     

    1

    实验内容、步骤与体会(附纸):

    一、实验内容

    在 PC 机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。

    二、实验步骤

    1 基本开发环境

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

      1.1  安装ADS(安装文件在00-ads1.2目录下,破解方法00-ads1.2\Crack目录下)

      1.2  安装GIVEIO驱动(安装文件在01-GIVEIO目录下)

           把整个GIVEIO目录拷贝到C:\WINDOWS下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下。

           在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:\WINDOWS\GIVEIO\giveio.inf文件,点击确定,安装好驱动

      1.3  安装JTAG驱动(安装文件在02-UArmJtag2.0目录下)

      1.4  配置超级终端:波特率为 115200,数据位 8,无奇偶校验,停止位 1,无数据流控制。

    2 测试安装

    (1)       首先运行ADS1.2集成开发环境。

    (2)       选择工程文件我们以光盘中的/ucos v6.0/Exp11 绘图的API函数为例选择Exp11.mcp后点击打开。

    (3)       点击make进行编译链接。编译后出现编译结果,次图片表示没有错误,4个警告和15条其他信息。

    (4)       在调试程序运行之前务必先开启Uarmjtag点击初始化配置选择ARM9点击确定。最小化到托盘即可,并且保证我们的平台停止在VIVI状态下。

    (5)       点击Debug按钮进行仿真调试

    (6)       在AXD下,点击Options->Configure Target->Configure。修改如下:Name:选择ARM Ethernet driver;Configuration:配置为:127.0.0.1。选择ADP点击确定。

    (7)       点击run(运行)按钮。

    注:之后正常状态下他会停止在main函数,这是系统自动的。

    (8)       之后我们继续点击RUN按钮即可运行绘图实验。这是液晶屏上会出现我们绘制好的正弦图形。在结束前请先暂停再退出程序。

    3 修改代码显示两条曲线

    修改代码如下:

    #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);//将本句代码注释除去即可在ARM机上显示两条曲线。

           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);//删除绘图设备上下文

    }

    void test_Task(void *Id)             //添加一条曲线

    {

           int oldx,oldy;//保存原来坐标系位置

           PDC pdc;//定义绘图设备上下文结构

           int x,y;//坐标

           double offset=0;//x坐标偏移量

           ClearScreen();//清屏

           pdc=CreateDC();//创建绘图设备上下文

           SetDrawOrg(pdc, LCDWIDTH/4,LCDHEIGHT/4, &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/4, &oldx,&oldy);//设置绘图原点为屏幕左边中部

           for(;;)

           {

                  MoveTo(pdc, 0, 0);

                  for(x=0;x<LCDWIDTH;x++)

                  {//画正弦波

                         y=(int)(50*cos(((double)x)/20.0+offset));

                         LineTo(pdc, x, y);

                  }

                  offset+=1;

                  if(offset>=2*3.14)

                         offset=0;

                  OSTimeDly(1000);

                  ClearScreen();

           }

          

    DestoryDC(pdc);//删除绘图设备上下文

    }

    Ps:代码中标红处为修改后代码。

    三、实验体会

    本次实验是在ARM机上显示正弦余弦曲线,由于不需要配置虚拟机,整体过程比较简洁,因此按照指导书的介绍,安装程序,配置以及运行都实现得比较顺利。然而在编译代码的时候,代码总是编译出错,在删除原来的编译结果后重新编译,重复几次后错误消失,原因可能是先前的编译结果没有被覆盖。最终在ARM机上出现了正弦曲线。

        通过本次实验,了解了ADS1.2集成开发环境,学习了使用ARM机编译的新知识。并阅读理解了c++代码,对编程知识的学习有一定帮助。

  • 相关阅读:
    C#中datatabel导出excel(三种方法)
    JDBC 使用说明
    c# lock (obj) 与 lock (this) 区别
    步步深入MySQL:架构>查询执行流程>SQL解析顺序
    SqlParameter的作用与用法
    c# winform窗口自适应各种分辨率类
    SQL中一个很好用的日期格式化函数
    C#生成缩略图
    设置VMware随系统开机自动启动并引导虚拟机操作系统
    在编写PL/SQL代码中使用SELECT语句时如何避免例外发生
  • 原文地址:https://www.cnblogs.com/baka/p/5004712.html
Copyright © 2011-2022 走看看