[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);
}
- 结果响应
test section start = 0
test section end = 0
- 预期结果: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};
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);
}
- 结果响应
test section start = 0
test section end = 0
- 预期结果: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};