ADS1.2的简单使用

ChinaUnix.net

  平台: 论坛 博客 Club168 精华 文库 自测 访谈录频道: 操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
 
最近访问板块
  •  
  •   发新帖
  • 查看: 141  |  回复: 0
    打印  上一主题  下一主题

    ADS 1.2 简单使用(转载) [复制链接]
    0 0

    帖子
    29
    主题
    25
    精华
    0
    可用积分
    2
    专家积分
    0
    在线时间
    17 小时
    注册时间
    2010-12-21
    最后登录
    2012-03-06
    论坛徽章:
    0
    跳转到指定楼层
    1[收藏(0)][报告]
      发表于 2011-12-21 08:41:28  | 只看该作者  | 倒序浏览
    ADS 1.2 简单使用(转载)


    一.ADS 1.2 简介
    -------------------------------------------------------
     
        ARM ADS 全称为 ARM Developer Suite 。是 ARM 公司推出集成开发工具。现在新版本已经改名为RealView Developer Suite.简称RVDS .RVDS 2.2 就是MDK. 现在RVDS 4.0 采用Eclipse使用集成开发环境。
     
      但是ADS 1.2 仍然是很多开发人员喜欢用的裸机开发工具,因为安装后体积小,操作简单,因此还是很多人在用。
     
    ADS的定位是是针对ARM的专用开发工具.与gcc以及使用gcc的IDE工具的定位有所不同.ADS只能使用自带的标准C库/C++库来进行开发.不能象GCC支持操作系统库.

     

    ADS合适开发和调试如下项目–           无操作系统的C程序.这个相当把ARM作为一个32单片机来使用.–           底层程序.如bootloader–           能直接调试简单的操作系统,如uC-OS-II,ucLinux,Nuclues–           驱动程序和硬件的验证–           比如LCD屏的调试,往往先从ADS程序开始测试,一个新的ARM硬件被调试好往往也先用ADS去测试 
     
         因此ADS与gcc的应用领域是有所差别的,ADS主要集中比较底层的程序.由于ADS能直接用C来控制硬件,也广泛用驱动的验证,硬件功能演示等作用. 
          在实际应用开发中,市面上最流行的手机方案是MTK,展讯的方案.他们的操作系统是一个嵌入式操作系统Nuclues,CPU的内核采用ARM.
          因此,MTK方案的驱动和内核开发环境就是ADS+Nuclues的库为主.同时也用于应用程序开发,但是他们手机界面程序(MMI)也能通VC++加模拟器的方法来调试.
       完整的ADS环境由命令行开发工具, ARM 实时库, GUI 开发环境 (Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。
     
     
     
    二.ADS开发流程
    --------------------------------------------------------------------------
     
      ADS最后链接出来的是可执行文件是AXF,它实际上是一个ELF的格式。因此ADS链接出来的程序跟LINUX的应用程序结构差不多,只在一些细微的段上有差别.
     
      AXF文件可以直接用ADS的调试器AXD进行在线调试,(在线的意思即不断电情况下,直接从PC下载,调式,运行)。
     
      如果想烧录到开发板上,需要转换成原始的bin文件。才能直接运行。相对于ELF它有两个变化。第一BIN只有基本的text/bss/data段,没有调试信息。第二。因为bin要下载到设备的。里面各段的地址是按相应地址对齐烧录的。因为两段之间很可能补一些空间的0空间。
     
     
      ADS命令行工具有
           armcc.exe ARM C编译器
           armasm.exe ARM 汇编编译器
           armcpp.exe ARM C++编译器
           armlink.exe ARM 链接接器把上述编译目标文件链接成成AXF
           armar.exe  ARM 静态库制作工具,类似于
           fromElf.exe 把AXF 转换成bin格式。
     
       ADS的IDE实际上也是调用这一些工具来编译程序。如果你愿意,可以写脚本直接调用命令行工具来编译。象MTK就是这样做的,它们写了一个Makefile脚本来直接调用编译器来编译器---因为这个项目文件太多了。。
     
    AXF分区命名
     
        一般的C程序对于程序分区,一般采用TEXT/BSS/DATA这样的分区. Gcc 的编译程序文件成功后,最后都会生一个.out或ELF格式的可执行文件,这个文件通常都包含三个段.text,.data和.bss段,运行时,会在进程空间会生成.text,.data.bss和stack,heap五个区.  
      AXF对于不同程序的分区采用另外命名. 跟GCC程序对应,ADS编写的程序也有两种状态,一个保存状态.对于ELF可执行文件,一种是运行态,对应进程空间分区.
     
       RO段:ReadOnly段的意思,可执行文件段,相当于GCC的text和rodata段
       RW段:ReadWrite段,数据段,相当于GCC中的Data段
       ZI段,ZeroInit段,未初始化数据段,相当于GCC中的BSS段,而且ZI是RW的一部分。
     
       对于裸机程序,一般在链接时要指定 --ro-base,即RO段的起始地址,一般它就是程序最开始段。
        因为RO段包含数据和代码,所以RO BASE不一定等于可执行程序的入口.有时ADS里通常还要手工指定 Image Entry Point,它即可以等于或大于RO BASE的地址
     

     

    在ADS程序运行中,可以用几个特殊的变量把RO,RW和ZI段的地址打印出来.

    以下均是 unsigned char * 类型,在用打印时需要强制转入成16进制的地址显示(即用%x)

     

    l         Image$$RO$$Base 表示RO段起始地址

    l         Image$$RO$$Limit 表示RO段结束地址

    l         Image$$RW$$Base表示RW段起始地址

    l         Image$$RW$$Limit 表示RW段结束地址

    l         Image$$ZI$$Base表示ZI段起始地址

    l         Image$$ZI$$Limit 表示ZI段结束地址

    Uart_Printf("\r\n<***********************************************>\r\n");
        Uart_Printf(" S3C6410 Test Program VER1.0\r\n");
        Uart_Printf(" Build time is: %s %s\r\n", __DATE__ , __TIME__ );
        Uart_SendString(" Mini6410 Andrew Huang \r\n");
        
        Uart_Printf( " Image$$RO$$Base = 0x%x\r\n", Image$$RO$$Base );
        Uart_Printf( " Image$$RO$$Limit = 0x%x\r\n", Image$$RO$$Limit );
        Uart_Printf( " Image$$RW$$Base = 0x%x\r\n", Image$$RW$$Base );
        Uart_Printf( " Image$$RW$$Limit = 0x%x\r\n", Image$$RW$$Limit );
        Uart_Printf( " Image$$ZI$$Base = 0x%x\r\n", Image$$ZI$$Base );
        Uart_Printf( " Image$$ZI$$Limit = 0x%x\r\n", Image$$ZI$$Limit );
        Uart_Printf("<***********************************************>\r\n");

     

    复杂的分区

        简单的AXF的分区,认为程序只有一个RO段,一个RW段。但是在嵌入式程序,很多程序需要更为复杂的分区,可能有好几个RO分不在同地址。在GCC中,非常规的分段需要ld调用lds脚本来设定,在ADS中,需要调用scatter描述文件来设置.

      以下就是6410 test的scatter描述文件内容

       可以看到除了传统的RO,RW外,它还增加了IRAM和ITCM段.

    DRAM 0x50200000
    {
      CODE 0x50200000
      {
        startup.o (Init,+FIRST)
        scatter_load.o (+RO)
     
        * (+RO)
        * (+RW, +ZI)
      }
      IRAM 0x0c000400 0xc00   ;0x0c000000~0x0c0003ff : Exception vector area(Nand Booting)
      {
        ;dmc.o (+RO)
        ;dmc.o (+RW, +ZI)     ; all remaining data
      }
      ITCM 0x80000000 0x4000
      {
      ; dmc.o (+RO)
       dmc_library.o (+RO)
      }
      DTCM 0x80004000 0x4000
      {
      ; dmc.o (+RW, +ZI)
       dmc_library.o (+RW, +ZI)
      }  
    }

     

    三.ADS快速使用手册

    ------------------------------------------------------------

    一个IDE集成开发环境最重要的操作无非如下向个几操作
     
      1.新建一个项目
      2.向项目增加源码
      3.切换输出结果
      4.配置项目属性
      5.构造程序
      6.清除编译结果(make clean)
      7.运行.
      8.调试.
     
      下面我们来看下如何做如下操作,请初学者熟记几个操作.
     
        1.新建一个项目
           主菜单 File->New,里面选择ARM Executealbe Image,表示要创建一个axf项目
     

    我们在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本为“myled”,点击“Location:”文本 Set”按钮,浏览选择想要保存该工程的路径(本例为“D:\work”),将这些设置好之后,点击“ ,即可创建一个新的名为 myled的工程。

     注意ADS对中文支持非常不好,强烈建议不在放在中文路径下面

     

     
     

    ADS的项目文件是 mcp.创建成功后会出现空项目窗口

     

     
       2.向项目增加源码
         把源码拷入项目目当,在项目窗按右键,选择增加文件
       
     
    3.切换构造输出选项
         ADS与一般开发环境不一样的,ADS的项目除了有Debug和Release输出两个选项之外,还多出了一DebugRel选项,它与Debug的区别在,DebugRel只有一个基本的调试信息,体积小一点,一般我们在线调试选择DebugRel的构造结果来调试
     
       切换的方法在项目窗口,右边的下拉列表选择相应输出选项.
       
     
    – DebugRel:使用该目标选项,在生成目标的时候,会为每一个源文件生成调试信息。 
    – Debug:使用该目标选项,在生成目标的时候,会为每一个源代码生成最完整的调试信息。 
    – Release:使用该目标选项,在生成目标的时候,不会生成任何调试信息。
     
    4.配置项目属性
          

    一般缺省项目是不能直接来编译的,往往需要对生成的目标进行配置,点击主菜单Edit 菜单,选择“DebugRelSetting…”(注意:这个选项会因为用户选择的不同目标而有所不同), 或者选择项目窗口的配置按钮,出现如图所示的设置窗口。

     

    基中关键几个配置有

     1.ARM Assembler 的编译选项    这里要选择汇编编译的指令集。不同CPU要选对类型,如S3C2440要选ARM920T.ADS 1.2不支持S3C6410的ARM1172JZF-S的内核,可以昨时用ARM920T或ARM112020E来代替

        还有字节序选择小端字节序.

      

       

    同理道理,如果你的项目包含C或C++的源码,必须要配置ARM C Compiler选项/ARM C++ Compiler选项.

     

    2.ARM 链接选项

         这里LinkType项目,如果Simple类型(即标准只有一个RO,一个RW类型),则需要配置RO_BASE即默认的代码段地址。RW段地址不填表示紧密排在RO段后面。

     

    另外程序的入口地址可以单独配置,不写表示与RO Base地址一致,

      

     

    如果可以自己初始化启动的程序,一般最好指定是哪一个S中的哪一个段是作为入口。在layout页标签里

    如果选择scatter 输出类型,必须要还选择相应的scatter文件路径。

     

    3.输出 bin文件格式

           这要做两步设置.首先设置Target Settings中的Post-linker为ARM FromElf

       

     
      然后在 ARM fromElf再设相应的文件名
         
     
    5.构造程序
         选择项目窗口的Make,或工具条上Make按键
        

     

    6.清除编译结果(make clean)

       选择主菜单的project-->Remove Object Code.或用快捷键 Ctrl->-.

       强出对话框,选择All Targets

     
     
    7.8运行和调试高度依赖于具体的调试器
     
      具体请看我的博文:
         ADS 下使用简易JTAG + H-Jtag调试程序   http://blog.chinaunix.net/u3/105675/showart_2388518.html
     
    Windows下 基于ADS+J-Link 的ARM开发环境搭建
     
    用U-boot进行裸机开发


    附件测试程序:  mini2240led.zip   
     
    您需要登录后才可以回帖  登录 |  注册 

     

    北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
    广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们: 
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP
      
    ©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页