使用cmBackTrace组件,但是组件中的 _sstack、_estack、_stext、_etext不知道在哪里,编译的时候报错,告诉这四个未定义,怎么破?
在链接脚本中
哪里面?是哪个值?
; *
; Scatter-Loading Description File generated by uVision
; *
LR_IROM2 0x00000000 0x00080000 { ; load region size_region
ER_IROM2 0x00000000 0x00080000 { ; load address = execution address
.o (RESET, +First)
(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM2 0x20000000 0x00028000 { ; RW data
.ANY (+RW +ZI)
}
}
LR_IROM1 0x40108000 0x00004000 {
ER_IROM1 0x40108000 0x00004000 { ; load address = execution address
.ANY (+RO)
}
}
你发的是uVision的链接脚本啊? gcc的话要找.lds或者.ld结尾的文件。其实你这几个变量很简单,不在链接脚本中定义也是可以的。 _sstack、_estack、是rtthread用户栈的起始和结束地址,你找找rtthread的代码初始化栈的地方就可以找到地址。_stext、_etext是文本段的起始和结束。你找到ld文件中的.text段,在开头和结尾处分别加上一个_stext=.; _etext=.;就可以了
/ The program code and other data goes into FLASH /
.text :
{
. = ALIGN(8);
_stext = .;
(.text) / .text sections (code) /
(.text) / .text sections (code) /
(.glue_7) / glue arm to thumb code /
(.glue_7t) / glue thumb to arm code /
*(.eh_frame)
/* section for module structures */
. = ALIGN(8);
*(.gnu.linkonce.t*)
KEEP (*(.init))
KEEP (*(.fini))
/* section information for rt-thread finsh shell */
. = ALIGN(4);
__fsymtab_start = .;
KEEP(*(FSymTab))
__fsymtab_end = .;
. = ALIGN(4);
__vsymtab_start = .;
KEEP(*(VSymTab))
__vsymtab_end = .;
/* section information for rt-thread initialize */
. = ALIGN(4);
__rt_init_start = .;
KEEP(*(SORT(.rti_fn*)))
__rt_init_end = .;
. = ALIGN(8);
_etext = .; /* define a global symbols at end of code */
} >FLASH