打印

【xnwxq】ADS至WinARM的转化

[复制链接]
1540|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xnwxq|  楼主 | 2009-8-23 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xnwxq 于 2009-8-23 17:29 编辑

花了一天时间才把工程从ADS转换到WinARM下,目前也只是编译通过,运行尚有问题.
代码可以在flash中运行,但初始化变量会出错,得到的data映射地址有问题,

因从windows开始学起得,对make及ld不是特别了解,看了两天书,了解了大部分语法,然后就在winarm带的例程中找了一个2318的工程,将make和ld文件拷贝到我的工程,由于我的芯片为mlc3890,不常见,就将makefile中对应做了更改,这里主要的改动部分是:
DIRARM, DIRARMBIN …等。改为我的winarm安装地址,
SRC,ASRC     源代码目录列表,
SUBMDL  要设为空,对应的 这里也要改动 LDFLAGS +=-TMLC3890-RAM.ld;

ld文件中需要更改的如下:
ENTRY(HandlerReset)
MEMORY
{
  ROM (rx) : ORIGIN = 0x00048000, LENGTH = 0x00038000
  RAM (rw) : ORIGIN = 0x01000000, LENGTH = 0x00100000
}
section的前边关键部分更改为:
  .boot :
  {
    ASM_Boot.o(.text)            /* Startup code */
    ASM_Scatter.o(.text)

    *(.text)                   /* remaining code */
    *(.rodata)                 /* read-only data (constants) */
    *(.rodata*)
    *(.glue_7)
    *(.glue_7t)   
  } > ROM
  . = ALIGN(4);
  _etext = . ;
  PROVIDE (etext = .);
/* 这里这样写,是因为我需要利用scatter把初始化变量,这里还有问题,初始化不正常*/
  /* 主要是利用_data, _etext, _datalen*/

  .data  0x01000000 : AT (_etext)
  {
    _data = .;
    *(.data)
  } > RAM
  _datalen = (SIZEOF(.data));
  . = ALIGN(4);
  _edata = . ;
  PROVIDE (edata = .);
/* 这里这样写,是因为我需要利用scatter把未初始化的RAM空间初始化为0,*/
  /* 主要是利用__bss_start, __bss_len
, _datalen*/
  .bss (NOLOAD) :
  {
    __bss_start = . ;
    __bss_start__ = . ;
    *(.bss)
    *(COMMON)
    . = ALIGN(4);
  } > RAM
  . = ALIGN(4);
  __bss_end__ = . ;
  PROVIDE (__bss_end = .);
  PROVIDE (__bss_len = . - __bss_start);

汇编部分更改,需要将标准的ARM汇编更改为GNU的ARM汇编,
主要对应如下:  
MACRO => .macro            ENDM => .endm   END => .end
AREA  => .text             CODE32 => .arm
EQU   => .equ
注释方法也不同,gnu arm 汇编行注释用 #, 代码尾注意用 @

用PN.exe新建一个工程,把代码及makefile,ld加入,即可通过tool/make all ,  tool/make clean 来编译了。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我们都是风雨中的孩子,手牵着手才不会跌倒

162

主题

294

帖子

1

粉丝