这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求大家的帮助

共9条 1/1 1 跳转至

求大家的帮助

菜鸟
2011-02-17 20:25:58     打赏
今天开始学arm 了,用的是周公的2103,加上jlink ,遗憾的是弄了一天连一个例程都没弄出来。大家看下出错大哪?

用的是iar 6.10 ,在option中设置如下:
link->config->$TOOLKIT_DIR$\CONFIG\LPC2103_RAM.icf
(目录没有放错,本来是找的lpc2103_ram.xcl,试过结果一样)
debugger ->setup->driver中选的是jlink;



关键词: 大家     帮助    

专家
2011-02-17 21:59:57     打赏
2楼

也可能是你的程序的问题的,也把你的程序贴出来?


菜鸟
2011-02-17 23:10:50     打赏
3楼

#include "nxp\iolpc2103.h"
#define LED2CON 1<<18
void main(void)
{
  PINSEL0=0x00000000;
  PINSEL1=0x00000000;
 
  IODIR=LED2CON;
  while(1)
  {
   IOSET=LED2CON;
   IOCLR=LED2CON;
  }
 
}

这个是网上找的,简单的。

以下是lpc2103_ram.xcl
//*************************************************************************
// XLINK command file template for EWARM/ICCARM
//
// Usage:  xlink  -f lnkarm  <your_object_file(s)>
//                -s <program start label>  <C/C++ runtime library>
//
// $Revision: 1.2 $
//*************************************************************************

//*************************************************************************
//
// -------------
// Code segments - may be placed anywhere in memory.
// -------------
//
//   INTVEC     -- Exception vector table.
//   SWITAB     -- Software interrupt vector table.
//   ICODE      -- Startup (cstartup) and exception code.
//   DIFUNCT    -- Dynamic initialization vectors used by C++.
//   CODE       -- Compiler generated code.
//   CODE_I     -- Compiler generated code declared __ramfunc (executes in RAM)
//   CODE_ID    -- Initializer for CODE_I (ROM).
//
// -------------
// Data segments - may be placed anywhere in memory.
// -------------
//
//   CSTACK     -- The stack used by C/C++ programs (system and user mode).
//   IRQ_STACK  -- The stack used by IRQ service routines.
//   SVC_STACK  -- The stack used in supervisor mode
//                 (Define other exception stacks as needed for
//                 FIQ, ABT, UND).
//   HEAP       -- The heap used by malloc and free in C and new and
//                 delete in C++.
//   INITTAB    -- Table containing addresses and sizes of segments that
//                 need to be initialized at startup (by cstartup).
//   CHECKSUM   -- The linker places checksum byte(s) in this segment,
//                 when the -J linker command line option is used.
//   DATA_y     -- Data objects.
//
// Where _y can be one of:
//
//   _AN        -- Holds uninitialized located objects, i.e. objects with
//                 an absolute location given by the @ operator or the
//                 #pragma location directive. Since these segments
//                 contain objects which already have a fixed address,
//                 they should not be mentioned in this linker command
//                 file.
//   _C         -- Constants (ROM).
//   _I         -- Initialized data (RAM).
//   _ID        -- The original content of _I (copied to _I by cstartup) (ROM).
//   _N         -- Uninitialized data (RAM).
//   _Z         -- Zero initialized data (RAM).
//
// Note:  Be sure to use end values for the defined address ranges.
//        Otherwise, the linker may allocate space outside the
//        intended memory range.
//*************************************************************************


//************************************************
// Inform the linker about the CPU family used.
//************************************************

-carm

//*************************************************************************
// Segment placement - General information
//
// All numbers in the segment placement command lines below are interpreted
// as hexadecimal unless they are immediately preceded by a '.', which
// denotes decimal notation.
//
// When specifying the segment placement using the -P instead of the -Z
// option, the linker is free to split each segment into its segment parts
// and randomly place these parts within the given ranges in order to
// achieve a more efficient memory usage. One disadvantage, however, is
// that it is not possible to find the start or end address (using
// the assembler operators .sfb./.sfe.) of a segment which has been split
// and reformed.
//
// When generating an output file which is to be used for programming
// external ROM/Flash devices, the -M linker option is very useful
// (see xlink.pdf for details).
//*************************************************************************


//*************************************************************************
// Read-only segments mapped to ROM.
//*************************************************************************

-DROMSTART=40000040
-DROMEND=40007FFF

//************************************************
// Address range for reset and exception
// vectors (INTVEC).
// The vector area is 32 bytes,
// an additional 32 bytes is allocated for the
// constant table used by ldr PC in cstartup.s79.
//************************************************

-Z(CODE)INTVEC=40000000-4000003f

//************************************************
// Startup code and exception routines (ICODE).
//************************************************

-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND
-Z(CODE)SWITAB=ROMSTART-ROMEND

//************************************************
// Code segments may be placed anywhere.
//************************************************

-Z(CODE)CODE=ROMSTART-ROMEND

//************************************************
// Original ROM location for __ramfunc code copied
// to and executed from RAM.
//************************************************

-Z(CONST)CODE_ID=ROMSTART-ROMEND

//************************************************
// Various constants and initializers.
//************************************************

-Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND
-Z(CONST)CHECKSUM=ROMSTART-ROMEND

//*************************************************************************
// Read/write segments mapped to RAM.
//*************************************************************************

-DRAMSTART=40000040
-DRAMEND=40007FFF

//************************************************
// Data segments.
//************************************************

-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND

//************************************************
// __ramfunc code copied to and executed from RAM.
//************************************************

-Z(DATA)CODE_I=RAMSTART-RAMEND

//************************************************
// ICCARM produces code for __ramfunc functions in
// CODE_I segments. The -Q XLINK command line
// option redirects XLINK to emit the code in the
// CODE_ID segment instead, but to keep symbol and
// debug information associated with the CODE_I
// segment, where the code will execute.
//************************************************

-QCODE_I=CODE_ID

//*************************************************************************
// Stack and heap segments.
//*************************************************************************

-D_CSTACK_SIZE=200
-D_IRQ_STACK_SIZE=50
-D_FIR_STACK_SIZE=10
-D_SVC_STACK_SIZE=10
-D_ABT_STACK_SIZE=10
-D_UND_STACK_SIZE=10
-D_HEAP_SIZE=2000

-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)FIR_STACK+_FIR_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND

//*************************************************************************
// ELF/DWARF support.
//
// Uncomment the line "-Felf" below to generate ELF/DWARF output.
// Available format specifiers are:
//
//   "-yn": Suppress DWARF debug output
//   "-yp": Multiple ELF program sections
//   "-yas": Format suitable for debuggers from ARM Ltd (also sets -p flag)
//
// "-Felf" and the format specifiers can also be supplied directly as
// command line options, or selected from the Xlink Output tab in the
// IAR Embedded Workbench.
//*************************************************************************

// -Felf


红字是显示错误的地方。


菜鸟
2011-02-18 15:24:52     打赏
4楼
我现在找到一个原因了,周立公的2103是加密的,所以jtag无效。只有使用isp 擦除后才可进行调试

院士
2011-02-18 15:40:41     打赏
5楼

菜鸟
2011-02-18 19:22:33     打赏
6楼
至于上面出现连接器命令文件出错的问题我也基本上解决了。
主要是因为我用的是iar 版本是6.10,文件格试是.icf,里面的
写法也不一样了,不再支持上面的这种写法。同时iar自带的
连接器文件没有针对性,要自已进行修改。
因为我是新手,就学着改了一个里面的ram,rom的起始地址,
其它的什么堆栈什么的就没有去改动,没有想到这样子竟可以
将这个程序进行调试,再也没出现什么定时器超时,找不到
cpu,等等的问题了。

专家
2011-02-18 19:30:54     打赏
7楼
在ARM调试中设置ram,rom的地址很关键

专家
2011-02-24 17:13:22     打赏
8楼

恭喜问题解决!


工程师
2011-02-27 13:00:44     打赏
9楼
恭喜楼主!~

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]