arm:jlink调试和直接烧写运行的不同 [mdk s3c2440]

发布时间:
来源: 电子工程世界

1、对全局变量的初始化。


2、还没发现的事例。


/*************************************************/


先上连接文件sct


LR_ROM1 0x30000000 0x00010000  {    ; load region size_region

  ER_ROM1 0x30000000 0x00010000  {  ; load address = execution address

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

  RW_RAM1 0x30010000 0x02000000  {  ; RW data

   .ANY (+RW +ZI)

  }

  RW_IRAM1 0x40000000 0x00001000  {

   .ANY (+RW +ZI)

  }

}


1、对全局变量的初始化 。


本身MDK对已初始化的全局变量的初始化就不对。


没法用。


代码:


int gr_a = 1 ;

int gr_b ;

int const gr_c = 11;

static int gr_s = 22;

void variable_test()

{

    Uart_Printf( "int gr_a = 1 ; gr_a = %dn", gr_a);

    Uart_Printf( "int gr_b ; gr_b = %dn", gr_a);

    Uart_Printf( "int const gr_c; gr_c = %dn", gr_c);

    Uart_Printf( "static int gr_s; gr_s = %dn", gr_s);

    

    Uart_Printf( "&gr_a = %08xn", &gr_a);

    Uart_Printf( "&gr_b = %08xn", &gr_b);

    Uart_Printf( "&gr_c = %08xn", &gr_c);

    Uart_Printf( "&gr_s = %08xn", &gr_s);

}


jlink运行时现象:没有将代码中已初始化的变量正确地赋值。


int gr_a = 1 ; gr_a = 0

int gr_b ; gr_b = 0

int const gr_c; gr_c = 11

static int gr_s; gr_s = 0

&gr_a = 30010038

&gr_b = 30010064

&gr_c = 30009244 //.ro

&gr_s = 3001003c


烧写运行时现象:代码中未初始化、已初始化的全局和静态变量都被设为 ~0 .


int gr_a = 1 ; gr_a = -1  

int gr_b ; gr_b = -1        ;init.s的代码中有对bss段清零的操作,在汇编代码中用led调试发现,我的clear bss的代码是已经运行了的。 猜测全局变量完全被编译器玩坏了。

int const gr_c; gr_c = 11

static int gr_s; gr_s = -1 

&gr_a = 30010038

&gr_b = 30010064

&gr_c = 30009244

&gr_s = 3001003c


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。