[IAR]我如何打印结束地址的部分开始?

[IAR]how can i printf a section start of end address?

1.I 在 .icf 中为 myTest 创建自定义部分

define symbol __ICFEDIT_region_TEST_start__ = (0x10080000);
define symbol __ICFEDIT_region_TEST_end__ = (0x100DFFFF);
define region TEST_region  = mem:[from __ICFEDIT_region_TEST_start__ to __ICFEDIT_region_TEST_end__];
place at start of TEST_region {section .test_cases_entries};

2.I 在 test.c

中编码一些测试
#pragma section = ".test_cases_entries"
void pfm_test_cases_init(void)
{
  struct pwb_altest_desc *start,*stop;
  start = __section_begin(".test_cases_entries");
  stop = __section_end(".test_cases_entries");
  printf("test section start = %x \n\r",start);
  printf("test section end = %x \n\r",stop);
}
  1. 结果响应
test section start = 0
test section end = 0
  1. 预期结果:0x10080000 节开始? 0x100DFFFF 部分结束?

__section_begin(".section")__section_end(".section") 将是 0 如果 .section 部分的任何部分都没有包含在最终的二进制文件中。在您的情况下,您首先必须确保 .test_case_entries 部分不为空,即您项目中的某个模块将数据放在该部分中。然后你需要让链接器在最终的二进制文件中包含这些数据。这可以通过引用某些模块中的数据(__section_begin__section_end 不算数),将数据声明为 __root,或通过使用 --keep链接器命令行。

下面包含一个在我的机器上运行的测试程序。请注意,.icf 文件并不完整,因为它的大部分内容取决于您的目标系统。

test.c:

#include <stdio.h>

// Make the compiler recognize .section as a section for __section_begin and
// __section_end.
#pragma section = ".section"

void main(void)
{
  // Find the start and end address of .section
  int *start = __section_begin(".section");
  int *stop = __section_end(".section");
  printf("section start = %x \n", start);
  printf("section end = %x \n", stop);
}

// Put data in .section and make the data root to ensure is is included.
// This can be in a different file.
#pragma location=".section"
__root int data[100];

test.icf的一部分

define symbol TEST_start = (0x10080000);
define symbol TEST_end   = (0x100DFFFF);
define region TEST_region  = mem:[from TEST_start to TEST_end];
place at start of TEST_region {section .section};