用IAR和jlink调试s3c6410裸机程序

时间:2021-12-06 12:23:20


正如标题说的那样,中间过程就不细说了,参考了很多网上的资料。

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

1、确定jlink是否识别ARM11核,我们链接好jlink和开发板,打开jlink commander如下所示:


用IAR和jlink调试s3c6410裸机程序

用IAR和jlink调试s3c6410裸机程序

如果出现上面的画面,意味着你的jlink能识别ARM11核,如果识别不了,可以换个jlink驱动试试。

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

2、

先用IAR建立一个工程,裸机的初始化文件,就用安装目录中的

IAR Systems\Embedded Workbench 6.0\arm\src\lib\arm\cstartup.s稍作修改即可,其实修改的很简单,如下所示:

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

原文件修改的部分:

        ;; Turn on core features assumed to be enabled.
          FUNCALL __iar_program_start, __iar_init_core
        BL      __iar_init_core


        ;; Initialize VFP (if needed).
          FUNCALL __iar_program_start, __iar_init_vfp
        BL      __iar_init_vfp


;;;
;;; Add more initialization here
;;;


;;; Continue to __cmain for C-level initialization.


          FUNCALL __iar_program_start, __cmain
        B       __cmain


        END

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

修改后的部分:

        ;; Turn on core features assumed to be enabled.
         ; FUNCALL __iar_program_start, __iar_init_core
     ;   BL      __iar_init_core


        ;; Initialize VFP (if needed).
         ; FUNCALL __iar_program_start, __iar_init_vfp
       ; BL      __iar_init_vfp


;;;
;;; Add more initialization here
;;;


;;; Continue to __cmain for C-level initialization.


       ;   FUNCALL __iar_program_start, __cmain
        B       main


        END

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

然后就可以把我们自己的c语言写的主函数文件加进去了,下面这个是网上找的流水灯,可以根据自己的开发板修改:

#include <stdlib.h>


#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7F008824))
#define rGPMPUD (*(volatile unsigned *)(0x7F008828))


void msDelay(int time)
{
volatile unsigned int i,j;
for(i = 0; i < 2000000; i++)
for(j=0; j<time; j++);
}


void GPIO_Init(void)
{
rGPMCON = 0x11111;
rGPMPUD = 0x00;
rGPMDAT = 0X1F;
}
void LedTest(void)
{
volatile unsigned int i;
while (1)
{
for(i=0; i<4; i++)
{
rGPMDAT = ~(1<<i);
msDelay(10);
}
}
}
void main(void)
{
  GPIO_Init();
  LedTest();
}

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

3、

还涉及到一个文件,是链接是要用到的,可以用下面这个文件稍作修改,修改后,放到自己的工程目录下,下面要用到。

IAR Systems\Embedded Workbench 6.0\arm\config\generic.icf

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

其实主要修改下面这一部分,把它改为自己的内存配置即可:

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x0;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x80;
define symbol __ICFEDIT_region_ROM_end__     = 0x7FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x100000;
define symbol __ICFEDIT_region_RAM_end__     = 0x1FFFFF;

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

4、下面就是编译器配置了

用IAR和jlink调试s3c6410裸机程序

右键点击上图,标记处,出现下图,逐个配置即可:

用IAR和jlink调试s3c6410裸机程序


用IAR和jlink调试s3c6410裸机程序

上面这个图,就是用3中那个文件修改来的。

用IAR和jlink调试s3c6410裸机程序

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

就这样,编译后,就可以下载到开发板中进行调试了。

注:下载之前要把,开发板停在uboot下才可以,应该是对开发板做些初始化用,如时钟等等。

用IAR和jlink调试s3c6410裸机程序

出现下图就可以,调试了:

用IAR和jlink调试s3c6410裸机程序

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